Einige der Projekte, an denen ich beteiligt war, haben zuvor eine Architektur namens Microservices übernommen. Es scheint, dass das Wort "Mikrodienst" schon lange sehr beliebt ist, aber damals wusste ich nichts davon, und ich erinnere mich, dass mir das Missverständnis, dass es sich um einen Microsoft-Dienst handelte, peinlich war. Doch selbst zu dieser Zeit beendete ich die Entwicklung aufgrund der Geschäftigkeit des Projekts mit einem vagen Verständnis, so dass ich ein Gefühl der Krise verspürte, wenn ich alles so wie es war völlig vergaß und mich entschied, hart zu lernen. Ich habe zuvor einen Dienst mit Java und Spring Boot erstellt, aber dieses Mal möchte ich einen Mikrodienst in einer ähnlichen Umgebung wie eine Überprüfung erstellen. Es ist ein sehr einfach zu erstellender REST-Service.
Die Erklärung, die ich erhielt, war, dass ich im Gegensatz zu herkömmlichen Anwendungen (es scheint monolithische Anwendungen zu sein), bei denen eine Anwendung alle Funktionen hat, mehrere kleine (Mikro-) Dienste einzeln entwickelt habe. Es war, als würde man zusammenarbeiten, um ein großes System zu schaffen. Mit anderen Worten, Microservices sind im weitesten Sinne eine Methode zur Softwareerstellung. Der auf dieser Idee basierende Dienst wurde auch als Mikrodienst bezeichnet.
Zu dieser Zeit war ich davon überzeugt, dass es verständlich ist, aber je mehr ich nachschaute, desto mehr unterschieden sich die Erklärungen von Person zu Person geringfügig, und es fiel mir schwer, die Definition von Mikrodiensten zu verstehen. Das sollte es sein, Microservice ist ein sogenanntes Schlagwort, und es scheint, dass es keine strenge Definition gibt. Unter diesen sind die Merkmale, die häufig erwähnt werden, wie folgt.
-Jeder Dienst kann unabhängig bereitgestellt werden -Jeder Dienst arbeitet in einem Prozess und kommuniziert mit einer Lightweight-API (HTTP usw.) ・ Dienstleistungen sind aus geschäftlicher Sicht unterteilt ・ Jeder Dienst wird automatisch bereitgestellt ・ Beseitigen Sie die zentrale Verwaltung so weit wie möglich. Kontrollieren Sie nicht Sprache, DB, Entwicklungsteam (kurz gesagt, jeder Dienst kann in einer anderen Programmiersprache usw. geschrieben werden)
Ich werde hier nicht viel darauf eingehen, aber wenn Sie sich die Vorteile der Entwicklung von Microservices ansehen, werden Sie viel sehen. Als ich mich tatsächlich entschied, einen Dienst zu erstellen, wurden die meisten anderen Dienste in der Sprache go entwickelt. Natürlich wurde mir auch gesagt, ich solle mich in derselben Sprache entwickeln, es sei denn, es gab einen besonderen Grund, aber zu diesem Zeitpunkt hatte ich es nie angerührt: "Ich kann es während des Studiums nicht implementieren, obwohl der Liefertermin nahe ist. Als Ergebnis des Knetens von "Desu" mit aller Kraft wurde mir mit einem bitteren Lächeln, der Erlaubnis, mit Java zu entwickeln, dass ich es gewohnt war zu schreiben, und dem Erstellen einer Umgebung gesagt. Diese Art von Selbstsucht ging vorbei
Beseitigen Sie die zentrale Verwaltung so weit wie möglich. Kontrollieren Sie nicht Sprache, DB, Entwicklungsteam
Ich denke, dies ist einer der Vorteile von Microservices. Da es sich bei jedem um einen lose gekoppelten Dienst handelt, würde ich gerne etwas Neues ausprobieren, aber ich habe ein wenig Angst. Selbst in solchen Fällen können Sie einen Dienst mit geringem Risiko auswählen und ausprobieren.
Natürlich gibt es verschiedene Nachteile. Durch die Aufteilung des Dienstes ist jeder Dienst einfach, aber insgesamt wird er sehr kompliziert. Ebenfalls, ・ Sie können für jeden Dienst in verschiedenen Sprachen schreiben. ・ Einfache neue Technologie ausprobieren In Bezug auf die als Verdienste genannten Punkte ist es gut, wenn ein neuer entwickelt wird, aber wenn es um die Wartung geht, scheint dies ein Nachteil zu sein, da es notwendig ist, Ingenieure zu sammeln, die mit jedem einzelnen umgehen können.
Es ist ein Framework zum einfachen Erstellen von Webanwendungen mit dem Spring Framework, einem Java-Framework. Da die Ausführungsdatei einen Webcontainer (Tomcat oder Jetty) enthält, kann sie als eine Anwendung gestartet werden, ohne einen separaten Webserver vorzubereiten.
Installieren Sie Java und Maven, um sie in Java zu erstellen. (Ich habe den Vorgang mit JDK1.8 bestätigt.) Der PC, den ich benutzte, war ein Mac, also war ↓ hilfreich. https://qiita.com/amemolee/items/6f33b8e321cc9395b0cf
Installieren Sie die Spring Tool Suite (STS). STS ist eine integrierte Entwicklungsumgebung, die auf die Entwicklung des Spring Framework spezialisiert ist. Die Basis ist Eclipse. Die grundlegende Operationsmethode ist fast Eclipse. Herunterladen und installieren von ↓. https://spring.io/tools
Ich möchte die erstellte Anwendung mit Docker ausführen, also werde ich Docker einfügen. https://docs.docker.com/docker-for-mac/install/
Meine Umgebung ist übrigens wie folgt. ・ JDK 1.8 ・ Maven 3.6.0 ・ Spring Tool Suite 4.0.1
Dann werde ich es sofort schaffen.
Bearbeiten Sie die generierte Java-Quelldatei.
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("Prüfung");
}
}
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;
}
}
Es ist ein Prozess, der einen einfachen JSON zurückgibt. Der Inhalt des Quellcodes wird diesmal weggelassen. Wenn Sie die Quelle bearbeiten, können Sie sie überprüfen, indem Sie [Ausführen] → [Ausführen als] → [Spring Boot App] im Feld STS ausführen. Fahren Sie jedoch vorerst mit der Erläuterung zum Erstellen einer ausführbaren Datei fort.
Erstellen Sie eine JAR-Datei mit der Installationsfunktion von Maven. Wechseln Sie im Terminal in das Projektverzeichnis "testservice" und führen Sie den folgenden Befehl aus.
mvn install
Bei Erfolg sollten Sie eine ausführbare Datei mit dem Namen "testservice-0.0.1-SNAPSHOT.jar" im Zielverzeichnis haben. Lass uns das machen. Führen Sie den folgenden Befehl direkt unter dem Projektverzeichnis "testservice" aus.
java -jar target/testservice-0.0.1-SNAPSHOT.jar
Greifen Sie mit einem Browser auf "http : // localhost: 8080" zu, und es ist in Ordnung, wenn Folgendes angezeigt wird.
Beenden Sie nach der Bestätigung den Dienst, indem Sie am Terminal "Strg + C" drücken.
Stellen Sie die ausführbare Datei schließlich als Docker-Image bereit. Docker ist ein Virtualisierungsdienst vom Containertyp. Ein Container ist eine etwas unabhängige Prozessausführungsumgebung, die von anderen Prozessen isoliert ist. Das diesmal erstellte Programm kann auch auf dem Docker-Container ausgeführt werden. Ähnlich wie bei JVM absorbiert Docker Unterschiede im Betriebssystem. Wenn das Programm auf dem Container ausgeführt werden kann, kann es daher problemlos in andere Umgebungen wie die Produktionsumgebung verschoben werden. (Es wird davon ausgegangen, dass Docker auch in dieser Umgebung enthalten ist.)
Jetzt erstellen wir ein Docker-Image. Dies ist das Dateisystem, das zum Erstellen eines Docker-Containers erforderlich ist. Bereiten Sie die diesmal erstellte Ausführungsdatei "testservice-0.0.1-SNAPSHOT.jar" vor und erstellen Sie eine Textdatei mit dem Namen "Dockerfile" im selben Verzeichnis. Eine Docker-Datei ist eine Datei, die Anweisungen zum Erstellen eines Images enthält. Beschreiben Sie in der Datei Folgendes.
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"]
Sobald Sie eine Docker-Datei haben, können Sie das Image mit dem folgenden Befehl erstellen.
docker build -t microtest ./
Starten Sie den Container basierend auf dem erstellten Image mit dem folgenden Befehl.
docker run -p 8080:8080 -d -t microtest
Es ist schwer zu verstehen, da es im Hintergrund ausgeführt wird. Sie können jedoch mit dem folgenden Befehl überprüfen, ob es ausgeführt wird.
docker ps
Es ist in Ordnung, wenn es wie ↓ angezeigt wird.
Wenn Sie erneut versuchen, mit einem Browser auf "http : // localhost: 8080" zuzugreifen, wird {"info": "test"} wie zuvor im JSON-Format angezeigt.
Ich habe vorerst versucht, es zu erstellen, aber es gibt noch einige Teile, die die oben genannten Funktionen nicht erfüllen, z. B. die Automatisierung der Bereitstellung. SpringBoot verfügt über eine Funktion, die beim Erstellen automatisch ausgeführt wird, wenn Sie Testcode in JUnit usw. schreiben und an der angegebenen Position platzieren. Es kann auch in Docker bereitgestellt werden. Mit anderen Worten, es ist möglich, den Test beim Erstellen auszuführen, eine ausführbare Datei zu erstellen, wenn sie erfolgreich ist, und sie für Docker bereitzustellen, aber ~~ Ich habe vergessen, wie es geht ~~ Es wird lange dauern, also werde ich eine andere Gelegenheit nutzen. ..
https://blog.guildworks.jp/2015/01/27/docker-with-spring-boot/
Recommended Posts