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

Митя Александров — Microprofile.io не спрингом ...

Avatar for Moscow JUG Moscow JUG
October 23, 2019

Митя Александров — Microprofile.io не спрингом единым

Необходимо написать микросервис на Java? Первое, что приходит в голову, — взять Spring Boot, быстро набросать пару строк и в продакшн!

И никто не задумывается, что существует даже более легкая и, что немаловажно, стандартизованная альтернатива, причем на основе Java (Jakarta) EE. Чтобы это стало возможно, под эгидой microprofile.io собрались несколько вендоров EE-серверов и разработали поистине легковесную спецификацию, специально заточенную именно под микросервисы.

Имплементации этой спецификации от разных компаний способны работать на спектре оборудования от Raspberry Pi до огромных кластеров. Эта спецификация оказалась успешна и продолжает развиваться, предлагая новые, крайне полезные фичи прямо из коробки.

Avatar for Moscow JUG

Moscow JUG

October 23, 2019
Tweet

More Decks by Moscow JUG

Other Decks in Programming

Transcript

  1. Disclaimer в стиле Оракула: • Андрей немного льстил, что я

    мегакрутой спикер • Тут мы будем запускать кучи микросервисов, все может падать (Demo Gods) • Часто путаю русские слова 4
  2. Прориворугатель: На этом докладе мы НЕ будем рассуждать: • что

    такое микросервис • чем он лучше или хуже других • зачем та или иная технология 9
  3. Спринг буут Spring Boot это Spring-овое convention-over-configuration решение для создания

    stand-alone, production-grade Spring-овых приложений, которые можно "просто запускать". Оно уже преконфигурировано под “оптимальное” исполнение наиболее стандартных приложений. Почти не нужно конфигурировать.. 22
  4. Спринг буут Крутое, потому что: • Stand-alone • Embed Tomcat

    или Jetty (не нужно деплоить WAR) • Предоставляет 'starter' POMs, чтобы не путаться 25
  5. Спринг буут Крутое, потому что: • Stand-alone • Embed Tomcat

    или Jetty (не нужно деплоить WAR) • Предоставляет 'starter' POMs, чтобы не путаться • Автоматическая конфигурация Spring 26
  6. Спринг буут Крутое, потому что: • Stand-alone • Embed Tomcat

    или Jetty (не нужно деплоить WAR) • Предоставляет 'starter' POMs, чтобы не путаться • Автоматическая конфигурация Spring • Полезные плюшки metrics, health checks и externalized configuration 27
  7. Спринг буут Крутое, потому что: • Stand-alone • Embed Tomcat

    или Jetty (не нужно деплоить WAR) • Предоставляет 'starter' POMs, чтобы не путаться • Автоматическая конфигурация Spring • Полезные плюшки metrics, health checks и externalized configuration • Вообще нет кодогенерации и не нужна XML конфигурация 28
  8. 38

  9. 39

  10. 48

  11. 50

  12. об чем: • Eclipse MicroProfile это open-source community specification для

    Enterprise Java Мicroservices • Сообщество частных лиц, организаций и разработчиков, работающих в рамках проекта с открытым исходным кодом (Eclipse), для Enterprise Java Мicroservices 52
  13. Основные концепции: • Минималистичный Fat jar • Минимальная (или полностью

    отсутствующая) конфигурация • Портабильность! 55
  14. Eclipse MicroProfile 1.1 (Aug, 2017) MicroProfile 1.1 JAX-RS 2.0 JSON-P

    1.0 CDI 1.2 Config 1.0 = New = No change from last release 62
  15. Конфигурация • DeltaSpike Config (http://deltaspike.apache.org/documentation/configuration.html) • Extracted parts of DeltaSpike

    Config (https://github.com/struberg/javaConfig/) • Apache Tamaya (http://tamaya.incubator.apache.org/) • Sabot, merged into Tamaya (https://tomitribe.io/p/sabot) 64
  16. Eclipse MicroProfile 1.1 (Aug, 2017) <dependency> <groupId>org.eclipse.microprofile.bom</groupId> <artifactId>microprofile-bom-spec</artifactId> <scope>provided</scope> <version>1.1.0</version>

    <type>pom</type> </dependency> compile group: 'org.eclipse.microprofile.bom', name: 'microprofile-bom-spec', version: '1.1.0', ext: 'pom' 65
  17. 66

  18. Eclipse MicroProfile 1.2 (Sep, 2017) MicroProfile 1.2 = Updated =

    No change from last release JAX-RS 2.0 JSON-P 1.0 CDI 1.2 Config 1.1 Fault Tolerance 1.0 JWT Propagation 1.0 Health Check 1.0 Metrics 1.0 = New 67
  19. Конфигурация 1.1 • API/SPI Изменения a. ConfigSource SPI был расширен

    с помощью метода по умолчанию, который возвращает имена свойств для данного ConfigSource • Функциональные изменения a. Реализации теперь должны включать конвертер URL-адресов @Priority (1) b. Формат имени свойства по умолчанию для точки injection с использованием @ConfigProperty был изменен первой буквы класса. Реализации могут поддерживать это поведение. Вместо этого в MicroProfile Config 1.1 требуется использовать имя класса. c. Реализации теперь должны поддерживать примитивные типы, в дополнение к уже указанным примитивным типам враперов • Изменения спецификации a. Уточнения по значениям параметров 68
  20. Health Check 1.0 • Необходима совместимость с контейнерами (i.e. http://kubernetes.io/docs/user-guide/liveness/)

    • хорошо бы чтобы machine-to-machine communication как-то работало 70
  21. Health Check 1.0 • Необходима совместимость с контейнерами (i.e. http://kubernetes.io/docs/user-guide/liveness/)

    • хорошо бы чтобы machine-to-machine communication как-то работало • … но чтобы и человек мог понять 71
  22. Метрики Нужно хорошо и правильно мониторить сервисы, и это нужно

    делать из коробочки Metric Registry Required Base метрики Application метрики Vendor-specific метрики 72
  23. Fault Tolerance 1.0 В основном повлияли: • Hystrix • Failsafe

    Цели: • Отделить ответственность от логики (Runnables/Callables/etc) через retry policies, bulkheads, circuit breakers 75
  24. Fault Tolerance 1.0 - что делает • Timeout: Ну собственно

    все ясно • RetryPolicy: Определить критерии сколько еще пробовать 77
  25. Fault Tolerance 1.0 - что делает • Timeout: Ну собственно

    все ясно • RetryPolicy: Определить критерии сколько еще пробовать • Fallback: если чтото пойдет не так, как действовать дальше! 78
  26. Fault Tolerance 1.0 - что делает • Timeout: Ну собственно

    все ясно • RetryPolicy: Определить критерии сколько еще пробовать • Fallback: если чтото пойдет не так, как действовать дальше! • CircuitBreaker: это сложно - предлагает способы предотвращать перегрузку системы или ненужные таймауты 79
  27. Fault Tolerance 1.0 - что делает • Timeout: Ну собственно

    все ясно • RetryPolicy: Определить критерии сколько еще пробовать • Fallback: если чтото пойдет не так, как действовать дальше! • CircuitBreaker: это сложно - предлагает способы предотвращать перегрузку системы или ненужные таймауты • Bulkhead: способ изоляции частей системы, в случае сбоев которых, остальные остаются работоспособными. 80
  28. JWT Требования безопасности, связанные с архитектурой микросервиса, тесно связаны с

    безопасностью RESTful сервисов. В стиле архитектуры RESTful службы обычно не имеют состояния и любое состояние безопасности, связанное с клиентом, отправляется в целевую службу по каждому запросу, чтобы позволить службам повторно создавать контекст безопасности для вызывающего и выполнять проверку подлинности и авторизации 83
  29. JWT Повлияли в основном: • OAuth2 • OpenID Connect(OIDC), and

    • JSON Web Tokens(JWT) Цель: • Одна из основных стратегий распространения состояния безопасности от клиентов к услугам или даже от служб к услугам связана с использованием токенов безопасности. • Для микросервисов на основе RESTful маркеры безопасности предлагают очень легкий и совместимый способ распространения идентификаторов между различными службами. 84
  30. JWT Инфраструктура: Классы: • @Inject JsonWebToken jwt; • @Inject Principal

    principal; • @Inject JsonNumber jsonNumber; • • Various JWT tools 86
  31. Eclipse MicroProfile 1.2 (Sep, 2017) <dependency> <groupId>org.eclipse.microprofile</groupId> <artifactId>microprofile</artifactId> <scope>provided</scope> <version>1.2</version>

    <type>pom</type> </dependency> compile group: 'org.eclipse.microprofile', name: 'microprofile', version: '1.2', ext: 'pom' 87
  32. 89

  33. Eclipse MicroProfile 1.3 (Q1 CY2018) MicroProfile 1.3 JAX-RS 2.0 JSON-P

    1.0 CDI 1.2 Config 1.2 Fault Tolerance 1.0 JWT Propagation 1.0 Health Check 1.0 Metrics 1.1 Open Tracing 1.0 Open API 1.0 = Updated = No change from last release = New Rest Client 1.0 90
  34. Метрики 1.1 Что нового: • Улучшенное TCK. • org.eclipse.microprofile.metrics.MetricRegistry.register(String name,

    Metric, Metadata) депрекейтнуто. • Use org.eclipse.microprofile.metrics.MetricRegistry.register(Metadata, Metric) instead, where Metadata already has a field for the name. • Глобальные таги теперь доступны через MicroProfile Config (env переменная все еще валидна). • Аннотации и метаданные теперь могут иметь флаг для многократного использования. Имя метрики может быть зарегистрировано более одного раза. Значение по умолчанию равно falsе. 91
  35. Configuration 1.2 Новые фичи: • SPI ConfigBuilder был расширен с

    помощью метода, который позволяет зарегистрировать конвертер с указанным типом класса. Это изменение устраняет ограничение, при котором не возможно добавить лямбда-конвертоты. • Реализации должны теперь поддерживать преобразователь массива. Для преобразователя массива программный луукап свойства (например, config.getValue (myProp, String []. Class)) должен поддерживать возвращаемый тип массива. Для поиска injection необходимо также поддерживать массив, список или набор (например, @Inject @ConfigProperty (name = "myProp") список <String> propValue;). • Реализации также должны поддерживать преобразователи общего плана, если для данного класса нет соответствующих типов преобразователей. Реализация должна использовать конструктор класса с одним строковым параметром, а затем попробовать valueOf (String), за которым следует CharSequence. • Имплементации должны поддерживать Class конверторы 92
  36. OpenAPI Управление микросервисами в MSA может стать громоздким по мере

    увеличения количества микросервисов. Управление микросервисами осуществляется через их API. Управление, безопасность, балансировка нагрузки и дросселирование - это политики, которые могут применяться к API-интерфейсам с микросервисами. OpenAPI предоставляет Java- интерфейсы и модели программирования, которые позволяют разработчикам Java изначально создавать документы OpenAPI v3 из своих приложений JAX-RS. 93
  37. OpenAPI 1.0 • Enterprise Java Binding of the OpenAPI v3

    specification • Основан на Swagger Core • OpenAPI ◦ Определяет стандартны, программное language-agnostic описание языка для REST APIs ◦ Понимание и машин и человека 94
  38. OpenTracing • Назначает каждому внешнему запросу уникальный идентификатор внешнего запроса

    • Пропускает идентификатор внешнего запроса ко всем службам, связанным с обработкой запроса • Включает внешний идентификатор запроса во всех сообщениях журнала • Записывает информацию (например, время начала, время окончания) о запросах и операциях, выполняемых при обработке внешнего запроса в централизованной службе 95
  39. RestClient • Мы не только предлагаем сервисы, • но и

    потребляем их! • Часто пишем одно и то же! 98
  40. RestClient • Мы не только предлагаем сервисы, • но и

    потребляем их! • Часто пишем одно и то же! • ...и мапим ручками эксепшаны на http респонсы 99
  41. Eclipse MicroProfile 1.3 (Q1 CY2018) <dependency> <groupId>org.eclipse.microprofile</groupId> <artifactId>microprofile</artifactId> <version>1.3</version> <scope>provided</scope>

    <type>pom</type> </dependency> compile group: 'org.eclipse.microprofile', name: 'microprofile', version: '1.3', ext: 'pom' 100
  42. Eclipse MicroProfile 1.4 (Q2 CY2018) MicroProfile 1.4 JAX-RS 2.0 JSON-P

    1.0 CDI 1.2 Config 1.2 Fault Tolerance 1.0 JWT Propagation 1.0 Health Check 1.0 Metrics 1.1 Open Tracing 1.0 Open API 1.0 = Updated = No change from last release = New Rest Client 1.0 • Improve developer documentation of existing specifications • Incremental specification updates 102
  43. Eclipse MicroProfile 2.0 (2H 2018) MicroProfile 2.0 = Updates =

    No change from last release JAX-RS 2.1 JSON-P 1.1 CDI 2.0 Config 1.2 Fault Tolerance 1.0 JWT Propagation 1.0 Health Check 1.0 Metrics 1.1 Open Tracing 1.0 Open API 1.0 JSON-B 1.0 Rest Client 1.0 103
  44. Eclipse MicroProfile 2.1 (2H 2018) MicroProfile 2.1 = Updates =

    No change from last release JAX-RS 2.1 JSON-P 1.1 CDI 2.0 Config 1.2 Fault Tolerance 1.0 JWT Propagation 1.0 Health Check 1.0 Metrics 1.1 Open Tracing 1.0 Open API 1.0 JSON-B 1.0 Rest Client 1.0 104 • Improve developer documentation of existing specifications • Incremental specification updates
  45. Eclipse MicroProfile 2.2 MicroProfile 2.2 = Updates = No change

    from last release JAX-RS 2.1 JSON-P 1.1 CDI 2.0 Config 1.2 Fault Tolerance 2.0 JWT Propagation 1.0 Health Check 1.0 Metrics 1.1 JSON-B 1.0 106 OpenTracing 1.3 OpenAPI 1.1 RestClient 1.2.0
  46. Из не вошедшего: 109 Concurrency Long Running Actions Graph QL

    Reactive Messaging Reactive DB Access Event Data
  47. Ну так вот Почему стоит задуматься применить Microprofile • Оно

    стандартное • Оно opensource • Оно сапортится крутыми вендорами и комюнити 121
  48. Ну так вот Почему стоит задуматься применить Microprofile • Оно

    стандартное • Оно opensource • Оно сапортится крутыми вендорами и комюнити • Всего один POM 122
  49. Ну так вот Почему стоит задуматься применить Microprofile • Оно

    стандартное • Оно opensource • Оно сапортится крутыми вендорами и комюнити • Всего один POM • Автоматическая конфигурация 123
  50. Ну так вот Почему стоит задуматься применить Microprofile • Оно

    стандартное • Оно opensource • Оно сапортится крутыми вендорами и комюнити • Всего один POM • Автоматическая конфигурация • Полезные плюшки metrics, health checks и externalized configuration 124
  51. Ну так вот Почему стоит задуматься применить Microprofile • Оно

    стандартное • Оно opensource • Оно сапортится крутыми вендорами и комюнити • Всего один POM • Автоматическая конфигурация • Полезные плюшки metrics, health checks и externalized configuration • Вообще нет кодогенерации и не нужна XML конфигурация 125
  52. Спринг буут <- Вспомним это слайд Крутое, потому что: •

    Stand-alone • Embed Tomcat или Jetty (не нужно деплоить WAR) • Предоставляет 'starter' POMs, чтобы не путаться • Автоматическая конфигурация Spring • Полезные плюшки metrics, health checks и externalized configuration • Вообще нет кодогенерации и не нужна XML конфигурация 126
  53. Именно платить: Для разработчика оно может быть и бесплатное.. Но

    для конторы оно может быть очень даже платное 129
  54. Именно платить: Для разработчика оно может быть и бесплатное.. Но

    для конторы оно может быть очень даже платное • А как там с лицензиями? 130
  55. Именно платить: Для разработчика оно может быть и бесплатное.. Но

    для конторы оно может быть очень даже платное • А как там с лицензиями? • А как там с саппортом? 131
  56. Именно платить: Для разработчика оно может быть и бесплатное.. Но

    для конторы оно может быть очень даже платное • А как там с лицензиями? • А как там с саппортом? • А как там допусками и сертификацией? 132
  57. Именно платить: Для разработчика оно может быть и бесплатное.. Но

    для конторы оно может быть очень даже платное • А как там с лицензиями? • А как там с саппортом? • А как там допусками и сертификацией? • … А как там с законодательством? 133
  58. А может плюсов больше? Почему стоит задуматься применить Microprofile •

    Практически переписывается заново • Опенсорс 135
  59. А может плюсов больше? Почему стоит задуматься применить Microprofile •

    Практически переписывается заново • Опенсорс • Выбрасывается наследие ЕЕ (например все делается с CDI) 136
  60. А может плюсов больше? Почему стоит задуматься применить Microprofile •

    Практически переписывается заново • Опенсорс • Выбрасывается наследие ЕЕ (например все делается с CDI) • Oracle не отстает (точнее немного отстает): Helidon 137
  61. Helidon: MicroFramework: WebServer.create( Routing.builder() .get("/greet", (req, res) -> res.send("Hello World!"))

    .build()) .start(); 138 MicroProfile: public class GreetService { @GET @Path("/greet") public String getMsg() { return "Hello World!"; } }
  62. 142

  63. 145

  64. 146

  65. 147