Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Microservice Patterns - Implemented by Eclipse MicroProfile

ivargrimstad
February 06, 2019

Microservice Patterns - Implemented by Eclipse MicroProfile

Architectures based on microservices introduce new challenges for architects and developers. New patterns emerge and existing are updated to be aligned to this relatively new architectural style.

This session presents a group of patterns commonly used in microservice based architectures. Each pattern will be in explained and demoed live in a down-to-earth and easily understandable way.

ivargrimstad

February 06, 2019
Tweet

More Decks by ivargrimstad

Other Decks in Programming

Transcript

  1. @ivar_grimstad #microservices 1. Microservice Architecture 2. Service per Container 3.

    Externalised Configuration 4. Health Check API 5. Application Metrics 6. Circuit Breaker 7. Access Token 8. Distributed Tracing
  2. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE Hardware Operating System JVM UberJAR

    Hardware Operating System JVM MicroProfile Container MicroProfile Application Hardware Operating System JVM Java EE Container Java EE Application java -jar dukes.jar java -jar dukes.jar dukes.war deployDukes.sh
  3. @ivar_grimstad #microservices Hardware Operating System JVM UberJAR Hardware Operating System

    JVM MicroProfile Container MicroProfile Application Hardware Operating System JVM Java EE Container Java EE Application docker run dukes docker run dukes docker run dukes
  4. @ivar_grimstad #microservices How to enable a service to run in

    multiple environments without modification?
  5. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE MicroProfile 2.1 JAX-RS 2.1 JSON-P

    1.1 CDI 2.0 Config 1.3 Fault Tolerance 1.1 JWT Propagation 1.1 Health Check 1.0 Metrics 1.1 Open Tracing 1.2 Open API 1.0 = Updated = No change from last release (MicroProfile 2.0) = New Rest Client 1.1 JSON-B 1.0
  6. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE MicroProfile 2.1 JAX-RS 2.1 JSON-P

    1.1 CDI 2.0 Config 1.3 Fault Tolerance 1.1 JWT Propagation 1.1 Health Check 1.0 Metrics 1.1 Open Tracing 1.2 Open API 1.0 = Updated = No change from last release (MicroProfile 2.0) = New Rest Client 1.1 JSON-B 1.0
  7. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE MicroProfile 2.1 JAX-RS 2.1 JSON-P

    1.1 CDI 2.0 Config 1.3 Fault Tolerance 1.1 JWT Propagation 1.1 Health Check 1.0 Metrics 1.1 Open Tracing 1.2 Open API 1.0 = Updated = No change from last release (MicroProfile 2.0) = New Rest Client 1.1 JSON-B 1.0
  8. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE MicroProfile 2.1 JAX-RS 2.1 JSON-P

    1.1 CDI 2.0 Config 1.3 Fault Tolerance 1.1 JWT Propagation 1.1 Health Check 1.0 Metrics 1.1 Open Tracing 1.2 Open API 1.0 = Updated = No change from last release (MicroProfile 2.0) = New Rest Client 1.1 JSON-B 1.0
  9. @ivar_grimstad #microservices POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Basic c25vb3850nBhc3M=

    User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  10. @ivar_grimstad #microservices POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer 2YotnF2FEjrlzCsidMWpAA

    User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”} POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Basic c25vb3850nBhc3M= User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”} POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer 2YotnF2FEjrlzCsidMWpAA User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  11. @ivar_grimstad #microservices POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiQ

    mVhcmVyIiwiYXVkIjoic2ltcGxlYXBwIiwic3ViIjoiYm9iIiwidXBuIjo iYm9iIiwiY3VzdG9tQ2xhaW0iOiJjdXN0b21WYWx1ZSIsImdyb3VwcyI6W yJhZG1pbiIsInVzZXIiXSwiaXNzIjoiaHR0cDovL29wZW5saWJlcnR5Lml vIiwiZXhwIjoxNTI1MzM5MjU5LCJpYXQiOjE1MjUyNTI4NTl9.nDDpCR2w MWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz9vc ptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowgJHwdvv7hMZvrK1loNrPfb yv727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1 _y351lp2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5r m0MMGIuAXdgUiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0 i31YRhLpYHfbzh_NlRrRPjGPNgzOIN1RInwPC8jdg_g User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  12. @ivar_grimstad #microservices POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiQ

    mVhcmVyIiwiYXVkIjoic2ltcGxlYXBwIiwic3ViIjoiYm9iIiwidXBuIjo iYm9iIiwiY3VzdG9tQ2xhaW0iOiJjdXN0b21WYWx1ZSIsImdyb3VwcyI6W yJhZG1pbiIsInVzZXIiXSwiaXNzIjoiaHR0cDovL29wZW5saWJlcnR5Lml vIiwiZXhwIjoxNTI1MzM5MjU5LCJpYXQiOjE1MjUyNTI4NTl9.nDDpCR2w MWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz9vc ptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowgJHwdvv7hMZvrK1loNrPfb yv727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1 _y351lp2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5r m0MMGIuAXdgUiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0 i31YRhLpYHfbzh_NlRrRPjGPNgzOIN1RInwPC8jdg_g User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  13. @ivar_grimstad #microservices { “alg”: “RS256”, “typ”: “JWT} { “token-type: “access-token”,

    “username”: “duke”, “scopes”: [ “java”: “everywhere” ], “exp”: 1474280963, “iat”: 1474279163 “jti”: “66881b068b249ad9” } nDDpCR2wMWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz 9vcptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowg-JHwdvv7hMZvrK1loNrPfby v727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1_y351l p2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5rm0MMGIuAXdg UiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0i31YRhLpYHfbzh_N lRrRPjGPNgzOIN1RInwPC8jdg_g
  14. @ivar_grimstad #microservices ✦Header ✦ JSON, Base64 URL Encoded ✦ Algorithm,

    Type
 ✦Payload ✦ JSON, Base64 URL Encoded ✦ Standard + Custom entries
 ✦Signature ✦ Binary, Base64 URL Encoded ✦ The actual signature
  15. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE MicroProfile 2.1 JAX-RS 2.1 JSON-P

    1.1 CDI 2.0 Config 1.3 Fault Tolerance 1.1 JWT Propagation 1.1 Health Check 1.0 Metrics 1.1 Open Tracing 1.2 Open API 1.0 = Updated = No change from last release (MicroProfile 2.0) = New Rest Client 1.1 JSON-B 1.0 Open Liberty
  16. @ivar_grimstad #MicroProfile #JavaEE #EE4J #JakartaEE MicroProfile 2.1 JAX-RS 2.1 JSON-P

    1.1 CDI 2.0 Config 1.3 Fault Tolerance 1.1 JWT Propagation 1.1 Health Check 1.0 Metrics 1.1 Open Tracing 1.2 Open API 1.0 = Updated = No change from last release (MicroProfile 2.0) = New Rest Client 1.1 JSON-B 1.0 Open Liberty
  17. @ivar_grimstad #microservices 1. Microservice Architecture 2. Service per Container 3.

    Externalised Configuration 4. Health Check API 5. Application Metrics 6. Circuit Breaker 7. Access Token 8. Distributed Tracing
  18. @ivar_grimstad #microservices Service A Service B Service C Web Application

    Web API Gateway Mobile Application Mobile API Gateway