jdufner / microservice

Showcase of a microserivce architecture using the Spring Boot Netflix stack.
Apache License 2.0
3 stars 4 forks source link

Microservices-Demo mit Spring Boot Netflix

2 fachliche Microservices

Im Rahmen der Demo der Microservice Architektur mit Spring Boot Netflix werden zwei fachliche Microservices benötigt. Ein einzelner Serivce reicht nicht aus weil hier der synchrone Aufruf von einem Microservice zu einem anderen dargestellt werden soll.

Die hier implementierten Microservices sind

  1. Hello-World - Ein klassischer "Hello World!"-Service.
  2. Primes - Ein Service der Primzahlen berechnet.

Neben den fachlichen Services werden Infrastrukturservices benötigt:

  1. Service-Registry - Ein Service-Registry und -Discovery.
  2. Monitoring-Application - Ein Dashboard zur Überwachung und Aggration von Hystrix-Stream.
  3. Service-Gateway - Ein Service-Gateway zur Weiterleitung und Filterung der Serviceaufrufe (Reverse-Proxy).

Alle Services verfügen über einen Health-Endpoint um über den aktuellen Zustand Auskunft zu geben.

Ausführung der Demo

Maven

Voraussetzung: Der User, der den Maven-Build ausführt, muss docker ausführen können. Dazu muss der User Mitglied der Gruppe docker sein: sudo usermod -aG docker $USER, ggf. muss sich der User danach noch aus- und einloggen.

Mit mvn package docker:build kann das Image gebaut werden. Das Image ist nun als lokales Image verfügbar. Das kann mit docker images -a überprüft werden.

Docker

Die Services können nun nicht mehr aus der IDE gestaret werden, sondern müssen in einem Docker-Container gestartet werden. Dazu sind folgende Schritte nötig:

Annahme: Es sind keine Docker-Images mit den Services gebaut.

  1. Baue alle Docker-Images mit docker-compose build
  2. Starte alle Docker-Images mit docker-compose up -d
  3. Nach der Demo wird können die Docker-Images mit docker-compose stop
  4. Alte Images können mit den folgenden Kommandos entfernt werden:
sudo docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs sudo docker rm
sudo docker images -a | grep "^<none>" | awk "{print \$3}" | xargs sudo docker rmi -f
sudo docker rmi microserviceeureka_primes microserviceeureka_hello-world microserviceeureka_monitor microserviceeureka_gateway microserviceeureka_configuration microserviceeureka_service-registry microserviceeureka_logstash microserviceeureka_elasticsearch microserviceeureka_kibana

Docker-Images können bspw. mittels docker-compose scale primes=2 skaliert werden.

Der ELK-Stack kann unter der URL localhost:5601 aufgerufen werden.

ELK-Stack

Der ELK-Stack ist ein Quasi-Standard zur Behandlung von Log-Informationen. ELK steht für E = Elasticsearch, L = Logstash und K = Kibana. Elasticsearch ist eine Volltextsuche, Logstash ist ein Filter- und Transformationspipeline und Kibana ist eine Daten-Visualisierung.

Die Konfiguration des ELK-Stack ist ein wenig knifflig und leider nur auf wenigen Seiten (siehe Referenzen) übersichtlich dargestellt. Meine Konfiguration hier basiert auf den offiziellen Docker-Images. Die Konfiguration erfolgt in angepassten Dockerfiles.

Konfiguration für Elasticsearch

Elasticsearch ist sehr ressourcenhungrig. Daher muss noch folgende Konfiguration durchgeführt werden.

https://www.elastic.co/guide/en/elasticsearch/guide/current/_file_descriptors_and_mmap.html

Elasticsearch also uses a mix of NioFS and MMapFS for the various files. Ensure that you configure the maximum map count so that there is ample virtual memory available for mmapped files. This can be set temporarily:

sysctl -w vm.max_map_count=262144

Or you can set it permanently by modifying vm.max_map_count setting in your /etc/sysctl.conf.

Referenzen

Spring Getting Started

  1. Building a RESTful Web Service
  2. Consuming a RESTful Web Service
  3. Building a RESTful Web Service with Spring Boot Actuator
  4. Service Registration and Discovery
  5. Client Side Load Balancing with Ribbon and Spring Cloud
  6. Circuit Breaker
  7. Routing and Filtering
  8. Spring Boot with Docker

Spring Dokumentationen

  1. Spring Framework Reference Documentation (single page)
  2. Spring Boot Reference Guide (single page)
  3. Spring Cloud
  4. Spring Cloud Netflix
  5. Spring Cloud Config

Docker

  1. Dockerfile reference
  2. Best practices for writing Dockerfiles
  3. Compose file reference
  4. A maven plugin for Docker

Sonstiges

  1. git-ssh-server
  2. wait-for-it

ELK-Stack

  1. Docker ELK stack
  2. Building an ELK stack with docker-compose
  3. Manage Spring Boot Logs with Elasticsearch, Logstash and Kibana