В данный момент микросервисы уже не просто вошли в мейнстрим, а являются частью "моды" и явно перегружены хайпом. Однако далеко не всегда эти сервисы действительно являются "микро" по-размеру и количеству потребляемых ресурсов. Во многих случаях это вызвано использованием в разработке таких "прожорливых" в плане ресурсов инструментов, как например Spring Boot. Микрофреймворки призваны решить эту проблему благодаря использованию ряда концепций, которые позволяют кардинально снизить потребление ресурсов и время запуска сервиса. В рамках доклада мы внимание на одного из самых сильных игроков в растущем сегменте Java микрофреймворков - Quarkus. Рассмотрим концепции, которые лежат в основе его дизайна и позволяют, по словам разработчиков, быть "супербыстрым", программную модель, возможности интеграции с остальными частями микросервисной экосистемы и некоторые другие аспекты его работы.
31. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
RDBMS
MongoDB
DynamoDB
S3
Hibernate Panache
Business
services
32. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Business
services
33. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Business
services
Metrics Health
34. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Business
services
Open API
35. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Business
services
Eureka
36. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Business
services
Fault Tolerance
37. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microprofile fault-tolerance features
• Timeout: Defines a timeout for the execution of a service call
38. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microprofile fault-tolerance features
• Timeout: Defines a timeout for the execution of a service call
• Fallback: Provides a contingency solution when a failure occurs
39. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microprofile fault-tolerance features
• Timeout: Defines a timeout for the execution of a service call
• Fallback: Provides a contingency solution when a failure occurs
• Retry: Allows you to retry execution based on criteria
40. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microprofile fault-tolerance features
• Timeout: Defines a timeout for the execution of a service call
• Fallback: Provides a contingency solution when a failure occurs
• Retry: Allows you to retry execution based on criteria
• Bulkhead: Isolates partial service failures while the rest of the system can still
work
41. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microprofile fault-tolerance features
• Timeout: Defines a timeout for the execution of a service call
• Fallback: Provides a contingency solution when a failure occurs
• Retry: Allows you to retry execution based on criteria
• Bulkhead: Isolates partial service failures while the rest of the system can still
work
• Circuit Breaker: Defines criteria for automatic fast-fails to prevent system
degradation caused by overloading
42. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Config
Management
Business
services
Config
43. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
JWT Authentication
Oauth 2.0
OpenID Connect
Deployment
Config
Management
Business
services
44. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Config
Management
Business
services
45. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Metrics
Pull-based mechanism
Hierarchical & dimensional support
Deployment
Config
Management
Business
services
46. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Microservice concerns
Deployment
Config
Management
Business
services
OpenTracing
49. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Issues
• Quarkus and GraalVM compatibility
• Limited support of CDI spec (and others?)
50. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Issues
• Quarkus and GraalVM compatibility
• Limited support of CDI spec (and others?)
• Bias towards RedHat native tools and libs
51. NEW PROFESSIONAL JAVA EVENT KYIV, 2020
Issues
• Quarkus and GraalVM compatibility
• Limited support of CDI spec (and others?)
• Bias towards RedHat native tools and libs
• Lack of official NetflixOSS extensions