Certains des projets auxquels j'ai participé ont précédemment adopté une architecture appelée microservices. Il semble que le mot «micro service» soit très populaire depuis longtemps, mais à ce moment-là je ne le savais pas, et je me souviens avoir été embarrassé par le malentendu qu'il s'agissait d'un service Microsoft. Cependant, même à ce moment-là, j'ai terminé le développement avec une compréhension vague en raison de l'occupation du projet, alors j'ai ressenti un sentiment de crise si j'oubliais complètement tout comme c'était et j'ai décidé d'étudier dur. J'ai déjà créé un service avec Java et Spring Boot, mais cette fois, j'aimerais créer un micro service dans un environnement similaire en tant que révision. C'est un service REST très simple à créer.
L'explication que j'ai en fait reçue était que, contrairement aux applications conventionnelles (il semble que ce soit des applications monolithiques) où une seule application a toutes les fonctions, j'ai développé individuellement plusieurs petits (micro) services. C'était comme travailler ensemble pour créer un grand système. En d'autres termes, les microservices sont, au sens large, une méthode de création de logiciels. Le service créé sur la base de cette idée a également été appelé un micro service.
À l'époque, j'en étais convaincu, mais plus je recherchais, plus les explications différaient légèrement d'une personne à l'autre, et j'étais confuse sur la définition des microservices. Cela devrait être tout, microservice est un soi-disant mot à la mode, et il semble qu'il n'y ait pas de définition stricte. Parmi eux, les caractéristiques souvent mentionnées sont les suivantes.
-Chaque service peut être déployé indépendamment -Chaque service fonctionne dans un processus et communique avec une API légère (HTTP, etc.) ・ Les services sont divisés d'un point de vue commercial ・ Chaque service est automatiquement déployé ・ Éliminez autant que possible la gestion centralisée. Ne pas contrôler le langage, la base de données, l'équipe de développement (en bref, chaque service peut être écrit dans un langage de programme différent, etc.)
Je n'entrerai pas dans grand chose ici, mais si vous regardez les avantages du développement de microservices, vous en verrez beaucoup. Lorsque j'ai décidé de créer un service, la plupart des autres services ont été développés dans le langage go. Bien sûr, on m'a aussi dit de développer dans la même langue à moins qu'il y ait une raison particulière, mais à ce moment-là je n'y avais jamais touché, «je ne peux pas l'implémenter en étudiant désormais même si la date de livraison est proche. Après avoir malaxé "Desu" de toutes mes forces, on m'a dit avec un sourire amer, la permission de développer avec Java que j'étais habitué à écrire, et comment créer un environnement. Ce genre d'égoïsme est passé
Éliminez au maximum la gestion centralisée. Ne pas contrôler la langue, la base de données, l'équipe de développement
Je pense que c'est l'un des avantages des microservices. De plus, comme chacun est un service faiblement couplé, j'aimerais essayer quelque chose de nouveau, mais j'ai un peu peur. Même dans de tels cas, vous pouvez choisir un service à faible risque et l'essayer.
Bien entendu, il existe divers inconvénients. En divisant le service, chaque service est simple, mais globalement cela devient très compliqué. Aussi, ・ Vous pouvez écrire dans différentes langues pour chaque service. ・ Nouvelle technologie facile à essayer En ce qui concerne les points mentionnés comme mérites tels que, c'est bien lors du développement d'un nouveau, mais quand il s'agit de maintenance, cela semble être un inconvénient car il est nécessaire de rassembler des ingénieurs capables de gérer chacun.
Il s'agit d'un framework permettant de créer facilement des applications Web avec Spring Framework, qui est un framework Java. Étant donné que le fichier d'exécution contient un conteneur Web (tomcat ou jetty), il peut être lancé comme une seule application sans préparer un serveur Web distinct.
Installez Java et Maven pour créer en Java. (J'ai confirmé l'opération avec JDK1.8.) Le PC que j'ai utilisé était un Mac, donc ↓ m'a été utile. https://qiita.com/amemolee/items/6f33b8e321cc9395b0cf
Installez Spring Tool Suite (STS). STS est un environnement de développement intégré spécialisé dans le développement du Spring Framework. La base est Eclipse. La méthode de fonctionnement de base est presque Eclipse. Téléchargez et installez à partir de ↓. https://spring.io/tools
Je veux exécuter l'application créée avec le docker, je vais donc insérer le docker. https://docs.docker.com/docker-for-mac/install/
Au fait, mon environnement est le suivant. ・ JDK 1.8 ・ Maven 3.6.0 ・ Spring Tool Suite 4.0.1
Ensuite, je le ferai immédiatement.
Modifiez le fichier source Java généré.
TestserviceApplication.java
package com.microservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class TestserviceApplication {
public static void main(String[] args) {
SpringApplication.run(TestserviceApplication.class, args);
}
}
@RestController
class HomeController {
@RequestMapping("/")
public HogeTest getSentence() {
return new HogeTest("tester");
}
}
class HogeTest {
private String info;
public HogeTest (String info) {
this.setInfo(info);
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
C'est un processus qui renvoie un simple JSON. Le contenu du code source sera omis cette fois. Lorsque vous éditez la source, vous pouvez la vérifier en exécutant [Exécuter] → [Exécuter en tant que] → [Spring Boot App] dans le champ STS, mais pour le moment, passons à l'explication de la création d'un fichier exécutable.
Créez un fichier jar avec la fonction d'installation de Maven. Dans le terminal, allez dans le répertoire du projet "testservice" et exécutez la commande suivante.
mvn install
En cas de succès, vous devriez avoir un fichier exécutable nommé "testservice-0.0.1-SNAPSHOT.jar" sous le répertoire cible. Faisons cela. Exécutez la commande suivante directement sous le répertoire du projet "testservice".
java -jar target/testservice-0.0.1-SNAPSHOT.jar
Accédez à "http : // localhost: 8080" avec un navigateur, et c'est OK si ce qui suit est affiché.
Après confirmation, arrêtez le service en appuyant sur "contrôle + c" sur le terminal.
Enfin, déployez l'exécutable en tant qu'image Docker. Docker est un service de virtualisation de type conteneur. Un conteneur est un environnement d'exécution de processus quelque peu indépendant qui est isolé des autres processus. Le programme créé cette fois peut également être exécuté sur le conteneur Docker. Semblable à JVM, Docker absorbe les différences de système d'exploitation. Par conséquent, si le programme peut être exécuté sur le conteneur, il peut être facilement déplacé vers d'autres environnements tels que l'environnement de production. (On suppose que Docker est également inclus dans cet environnement.)
Maintenant, créons une image Docker, qui est le système de fichiers requis pour créer un conteneur Docker. Préparez le fichier d'exécution "testservice-0.0.1-SNAPSHOT.jar" créé cette fois, et créez un fichier texte nommé "Dockerfile" dans le même répertoire. Un Dockerfile est un fichier qui contient des instructions pour créer une image. Dans le fichier, décrivez comme suit.
Dockerfile
FROM frolvlad/alpine-oraclejdk8:slim
ADD testservice-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:dev/./urandom -jar /app.jar"]
Une fois que vous avez un Dockerfile, vous pouvez créer l'image avec la commande suivante.
docker build -t microtest ./
Démarrez le conteneur en fonction de l'image créée avec la commande suivante.
docker run -p 8080:8080 -d -t microtest
Il est difficile à comprendre car il s'exécute en arrière-plan, mais vous pouvez vérifier s'il s'exécute avec la commande suivante.
docker ps
C'est OK s'il s'affiche comme ↓.
Si vous essayez à nouveau d'accéder à "http : // localhost: 8080" avec un navigateur, vous verrez {"info": "test"} au format JSON comme auparavant.
J'ai essayé de le créer pour le moment, mais il y a encore des parties qui ne répondent pas aux fonctionnalités ci-dessus telles que l'automatisation du déploiement. SpringBoot a une fonction qui est automatiquement exécutée au moment de la construction si vous écrivez du code de test dans JUnit etc. et le placez à l'emplacement spécifié. Il peut également être déployé sur Docker. En d'autres termes, il est possible d'exécuter le test lors de la construction, de créer un fichier exécutable s'il réussit et de le déployer sur Docker, mais ~~ J'ai oublié comment le faire ~~ Ce sera long, je vais donc saisir une autre opportunité. ..
https://blog.guildworks.jp/2015/01/27/docker-with-spring-boot/
Recommended Posts