Architecture
Overview
As stated in the Platform Overview,
Technically,
Microservice Architecture
Container based deployment
Microservices and containers go well together, and
SMART on FHIR
Architecture Diagrams
Core Components
The following is a quick summary of some of the key
Microservice Registry
JHipster registry is the microservice registry for the
- Eureka server that contains a list of all the services, their instances, and their locations
- Spring Cloud Config server that provides runtime configurations to all services
- Runtime monitoring dashboard to monitor and manage all services
Each
- Register itself to Eureka server
- Get configuration from the Spring Cloud Config server
Identity and Access Management Server
KeyCloak is an OAuth2 and OpenID Connect server that serves as the Identity and Access Management server for the
Microgateways
In the
The BFF+Gateway pattern is illustrated in the following diagram:
It is worth noting that a microgateway is not an enterprise grade edge gateway.
should be deployed in a PaaS system like Kubernetes or OpenShift on a private/public cloud, and relies on PaaS to provide many of the edge service features like TLS termination, DNS, etc.
Application microgateway
An application microgateway usually:
- Hosts the Web Application (e.g. Angular or React app)
- Provides server-side security for the Web Application and acts as a confidential client in the OAuth 2.0 Authorization Framework.
- Provides HIPAA auditing for the application
API microgateway
The
- Automatically proxies HTTP requests to all microservices utilizing Netflix Zuul
- Load balances HTTP requests using Netflix Ribbon
- Provide a circuit breaker using Netflix Hystrix
- Enforces rate limiting using Bucket4j
- Enforces any app access control policies
The
API microgateway is NOT designed to be an enterprise grade API gateway system that provides full API lifecycle development, integration and management features. For an enterprise edge API gateway, there are several open source solutions such as WSO2 API manager, API Umbrella, as well as other commercial solutions. If desired, a deployment could have an enterprise edge API gateway in front of the microgateways.
Sample FHIR server
- A skeleton FHIR server that wraps existing data services, based on the HAPI FHIR library
- SMART-on-FHIR support, based on the HSPC SMART on FHIR library
- FHIR capability statement enhancements
- SMART scope enforcement for data access
Deployment
- Docker server (local development)
- OpenShift (large applications)
Since
Monitoring, Tracing and Metrics
One key challenge in a microservice architecture is observability since it is a distributed system.
- Logging and Monitoring - ELK
- Tracing - Zipkin
- Metrics - Prometheus/Grafana
Developing new applications and microservices
Java Microservice development
JHipster provides a code generator for generating crosscutting code to register a Spring Boot app as a microservice on the JHipster Registry. This is a good solution for Java based microservices and applications.
Non-Java microservices (Polyglot)
Developers can choose other popular technology stacks to develop microservices. The key functionality is to register the microservice with the Eureka server in the JHipster Registry so that the microservice can be discovered and consumed.
dotnet
core - Eureka service registration using Steeltoe- Node.js - Eureka service registration using eureka-js-client
The Spring Cloud project provides an example which can be used to integrate almost any type of service into the microservice ecosystem: Spring Cloud Netflix.
For dotnet
core, the NuGet Microservice Template project. Source code for the project is on GitHub provides code generation that supports Eureka registration and Spring Cloud Config integration. The NuGet template is available as partners_igia_microservice_template
.
Application Microgateway development
JHipster provides a code generator to generate a secure Spring Boot based web application that serves as application microgateway.
Roadmap
Microservice architecture
With the advance of container orchestration tools like Kubernetes, and service mesh technologies like Istio, some of the microservice patterns can be implemented using the features in the infrastructure layer. The