Команда Medium поделилась своим опытом.
Вначале описан подход Medium в принятии продуктовых и инженерных решений. Вся суть в вопросе «Почему именно сейчас?», отвечая на который выявляют скрытые ограничения.
Затем перечислено семь стратегий Medium перехода к микросервисной архитектуре. В частности, как не подтвергунться такой вещи, как «Microservice Syndromes from Day One»)
https://medium.engineering/microservice-architecture-at-medium-9c33805eb74f
#case
Вначале описан подход Medium в принятии продуктовых и инженерных решений. Вся суть в вопросе «Почему именно сейчас?», отвечая на который выявляют скрытые ограничения.
Затем перечислено семь стратегий Medium перехода к микросервисной архитектуре. В частности, как не подтвергунться такой вещи, как «Microservice Syndromes from Day One»)
https://medium.engineering/microservice-architecture-at-medium-9c33805eb74f
#case
Medium
Microservice Architecture at Medium
We would love to share our experiences of moving to microservice architecture effectively and avoiding “microservice syndromes”.
Краткая история о том, как Twitter на Кафку переходил.
https://blog.twitter.com/engineering/en_us/topics/insights/2018/twitters-kafka-adoption-story.html
#case
https://blog.twitter.com/engineering/en_us/topics/insights/2018/twitters-kafka-adoption-story.html
#case
Twitter
Twitter’s Kafka adoption story
See why Twitter decided to adopt Kafka as its PubSub system and the challenges we faced during adoption.
Архитектурный шаблон, базирующийся на трех факторах:
1. Realtime GraphQL («Use GraphQL for a very simple and flexible frontend developer workflow.»)
2. Reliable eventing («Remove in-memory state manipulation in your backend APIs and persist them as atomic events instead»)
3. Async serverless («Write business logic as event handlers»)
Основная идея проста и не нова: в коде не должно храниться состояние, в идеале — вообще.
https://3factor.app
#pattern
1. Realtime GraphQL («Use GraphQL for a very simple and flexible frontend developer workflow.»)
2. Reliable eventing («Remove in-memory state manipulation in your backend APIs and persist them as atomic events instead»)
3. Async serverless («Write business logic as event handlers»)
Основная идея проста и не нова: в коде не должно храниться состояние, в идеале — вообще.
https://3factor.app
#pattern
Концептуальная схема self-healing (самовосстанавливающейся) системы, то есть такой системы, в которой автоматически выявляются аномалии и предпринимаются корректирующие действия.
Например: при отказе железа под кластером перевод на другой кластер, перезапуск хостов, изменение таблиц маршрутизации, расширение канала, остановка или запуск экземпляров сервисов.
Нередко в таких системах корректирующие действия появлятся как результат Chaos Testing на производственной среде.
#pattern
Например: при отказе железа под кластером перевод на другой кластер, перезапуск хостов, изменение таблиц маршрутизации, расширение канала, остановка или запуск экземпляров сервисов.
Нередко в таких системах корректирующие действия появлятся как результат Chaos Testing на производственной среде.
#pattern
❤1
В микросервисных кругах Kubernetes - весьма популярная штука, но, не смотря на высокую надежность, широкую поддержку сообществом и изобилие статей и книг, — он сложен, он развивается и он может подвести, если его неправильно готовить.
По ссылке — множество историй фейлов, связанных с кубером (последняя история так вообще всего лишь двухнедельной давности):
https://github.com/hjacobs/kubernetes-failure-stories
#case
По ссылке — множество историй фейлов, связанных с кубером (последняя история так вообще всего лишь двухнедельной давности):
https://github.com/hjacobs/kubernetes-failure-stories
#case
GitHub
GitHub - hjacobs/kubernetes-failure-stories: Compilation of public failure/horror stories related to Kubernetes
Compilation of public failure/horror stories related to Kubernetes - hjacobs/kubernetes-failure-stories
Техника... монолитизации — объединения сервисов в монолит.
Статья про Oat++, web-фрейморк для C++, так что и речь идет о нем, но в целом техника не зависит от языка.
Когда рекомендуют применять:
• Низкая нагрузка
• Отсутствие потребности в масштабировании
Заявленные выгоды:
• Снижение уровня потребления памяти
• Снижение затрат на инфраструктуру за счет сокращения нагрузки на сеть
Идея интересная, но я вижу такие риски:
• Когда потребуется масштабирование, команда и инфраструктура могут оказаться не готовы за счет отсутствия опыта развития и управления распределенной системой
• Усложняется тестирование, — есть автономные сервисы и к ним в довесок виртуальный монолит
• По описанию выглядит так, что для выделения сервиса из виртуального монолита требуется полная пересборка с измененным Monolith Config — не самый повторяемый и надежный процесс
При этом выгоды сомнительны, разве что если сервисы очень «говорливы», а сообщения достаточно объемны.
Поделитесь идеями, где можно применить (без привязки к фреймворку). Как минимум — подход не обычный.
https://oatpp.io/docs/monolithization/
#pattern
Статья про Oat++, web-фрейморк для C++, так что и речь идет о нем, но в целом техника не зависит от языка.
Когда рекомендуют применять:
• Низкая нагрузка
• Отсутствие потребности в масштабировании
Заявленные выгоды:
• Снижение уровня потребления памяти
• Снижение затрат на инфраструктуру за счет сокращения нагрузки на сеть
Идея интересная, но я вижу такие риски:
• Когда потребуется масштабирование, команда и инфраструктура могут оказаться не готовы за счет отсутствия опыта развития и управления распределенной системой
• Усложняется тестирование, — есть автономные сервисы и к ним в довесок виртуальный монолит
• По описанию выглядит так, что для выделения сервиса из виртуального монолита требуется полная пересборка с измененным Monolith Config — не самый повторяемый и надежный процесс
При этом выгоды сомнительны, разве что если сервисы очень «говорливы», а сообщения достаточно объемны.
Поделитесь идеями, где можно применить (без привязки к фреймворку). Как минимум — подход не обычный.
https://oatpp.io/docs/monolithization/
#pattern
oatpp.io
Monolithization | Oat++
Monolithization of microservices in Oat++ Web Framework.
Список open source инструментов для микросервисов
(со ссылками на сайты, репозитории с исходниками и лицензиями)
Контейнеры: rkt, Docker, FreeBSD Jail, LXC, OpenVZ
Оркестраторы контейнеров: Kubernetes, OpenShift, Nomad, LXD
API Gateways: 3scale, API Umbrella, Apigee, Apiman, DreamFactory, Fusio, Gravitee, Kong, KrakenD, Tyk
CI/CD: Jenkins, GitLab, Buildbot, Concourse, GoCD, Hudson, Spinnaker
Балансировщики: HAProxy, Apache modules, Balance, Distributor, GitHub Load Balancer (GLB) Director, Neutrino, OpenLoBa, Pen, Seesaw, Synapse, Traefik
Service registry/discovery: Baker Street, Consul, etcd, Registrator, Serf, ZooKeeper
Мониторинг: OpenNMS, Grafana, Graphite, Icinga, InfluxDB, LibreNMS, Naemon, Nagios, ntop, ELK, Prometheus, Sensu, Zabbix, Zenoss
(со ссылками на сайты, репозитории с исходниками и лицензиями)
Контейнеры: rkt, Docker, FreeBSD Jail, LXC, OpenVZ
Оркестраторы контейнеров: Kubernetes, OpenShift, Nomad, LXD
API Gateways: 3scale, API Umbrella, Apigee, Apiman, DreamFactory, Fusio, Gravitee, Kong, KrakenD, Tyk
CI/CD: Jenkins, GitLab, Buildbot, Concourse, GoCD, Hudson, Spinnaker
Балансировщики: HAProxy, Apache modules, Balance, Distributor, GitHub Load Balancer (GLB) Director, Neutrino, OpenLoBa, Pen, Seesaw, Synapse, Traefik
Service registry/discovery: Baker Street, Consul, etcd, Registrator, Serf, ZooKeeper
Мониторинг: OpenNMS, Grafana, Graphite, Icinga, InfluxDB, LibreNMS, Naemon, Nagios, ntop, ELK, Prometheus, Sensu, Zabbix, Zenoss
Роль Enteprise Architect сегодня
Статья просто и понятно объясняет изменения роли EA. Актуально для микросервисного стиля, как для частного случая.
В начале статьи автор рассказывает небольшую историю и задает контекст
- Команды стали автономнее
- Команды могут принимать серьезные инженерные решения (делегирование решений в команды)
- Команды стали изолированнее, знания в большей степени накапливаются в командах
Основываясь на своих наблюдениях автор пришел в выводу, что в современном мире EA должен:
Продолжать разработку
- Потратить немного времени на то, чтобы разобраться, как работает та или иная технология
- Писать код, распространяющий основные архитектурные идеи и помогающий развиваться разработчикам в компании
- Работать в паре с разработчиками из различных команд, чтобы не терять связь с землей
При этом он не часть команды, поэтому вклад в скорость команды не делает, что разумно.
Обеспечивать простой доступ к архитектуре каждому заинтересованному в ней
- Управление архитектурной базой знаний таким образом, чтобы каждый мог получить нужную информацию в нужное время
- Особенно о том, что уже реализовано и реализуется, чтобы не решать задачу дважды, трижды
- Пример из статьи — подготовить постер с архитектурой и раздать каждой команде, пусть висит на стене на видном месте, его сложнее игнорировать, чем wiki-страничку
Выстраивать мосты между командами
- Команды становятся изолированными друг от друга за счет своей автономности, архитектор за счет парной работы с членами команд может найти наилучших кандидатов для выстраивания мостов между командами
- И снова, за счет плотной работы с командами, архитектор может обнаружить команды, решающие похожие задачи и выстроить мостик вокруг этих задач
- Обнаружить разработчиков, у которых горят глаза от определенных технологий, платформ и помочь им в обучении других людей
- Собирать мнения команд о степени доступности, понятности и полезности архитектурной базы знаний и улучшать её на основе этих мнений
Таким образом цели и отвественность остаются теми же, что и раньше, но подход к работе меняется. И такой подход ведет к эволюционному развитию архитектуры в направлениях, о которых и подумать было сложно.
Статья просто и понятно объясняет изменения роли EA. Актуально для микросервисного стиля, как для частного случая.
В начале статьи автор рассказывает небольшую историю и задает контекст
- Команды стали автономнее
- Команды могут принимать серьезные инженерные решения (делегирование решений в команды)
- Команды стали изолированнее, знания в большей степени накапливаются в командах
Основываясь на своих наблюдениях автор пришел в выводу, что в современном мире EA должен:
Продолжать разработку
- Потратить немного времени на то, чтобы разобраться, как работает та или иная технология
- Писать код, распространяющий основные архитектурные идеи и помогающий развиваться разработчикам в компании
- Работать в паре с разработчиками из различных команд, чтобы не терять связь с землей
При этом он не часть команды, поэтому вклад в скорость команды не делает, что разумно.
Обеспечивать простой доступ к архитектуре каждому заинтересованному в ней
- Управление архитектурной базой знаний таким образом, чтобы каждый мог получить нужную информацию в нужное время
- Особенно о том, что уже реализовано и реализуется, чтобы не решать задачу дважды, трижды
- Пример из статьи — подготовить постер с архитектурой и раздать каждой команде, пусть висит на стене на видном месте, его сложнее игнорировать, чем wiki-страничку
Выстраивать мосты между командами
- Команды становятся изолированными друг от друга за счет своей автономности, архитектор за счет парной работы с членами команд может найти наилучших кандидатов для выстраивания мостов между командами
- И снова, за счет плотной работы с командами, архитектор может обнаружить команды, решающие похожие задачи и выстроить мостик вокруг этих задач
- Обнаружить разработчиков, у которых горят глаза от определенных технологий, платформ и помочь им в обучении других людей
- Собирать мнения команд о степени доступности, понятности и полезности архитектурной базы знаний и улучшать её на основе этих мнений
Таким образом цели и отвественность остаются теми же, что и раньше, но подход к работе меняется. И такой подход ведет к эволюционному развитию архитектуры в направлениях, о которых и подумать было сложно.
Titan — Data as a Code проект с открытым исходным кодом
Официальное описание:
«Titan's git-like CLI enables developers to clone, commit, checkout, push, and pull data just like code, making it easy to rollback to a previous state, build a test data library, or share a structured dataset with collaborators.»
Мы все ближе к Everything as a Code 🙂
#tools
Официальное описание:
«Titan's git-like CLI enables developers to clone, commit, checkout, push, and pull data just like code, making it easy to rollback to a previous state, build a test data library, or share a structured dataset with collaborators.»
Мы все ближе к Everything as a Code 🙂
#tools
Ода языку Go, микросервисы для Enterprise 🙂
Go преподносится как язык следующего поколяния для Entperprise-компаний.
На Go написаны Docker, etcd, Kubernetes, Terraform и istio; его используют такие компании как google, apple, dropbox, bbc, the economist, the new york times, ibm, twitter, facebook.
Go активно поддерживается Google, а его авторы активно участвовали в жизни C, Unix и JVM и него обширное и сильное сообщество (Gophers).
Далее приводится еще несколько преимуществ:
- Отличная реализация Concurrency
- Кросс-платформенность
- Garbage Collection
- Статическая типизация
- Приведена сравнительная таблица Go vs Java
В завершении примеры кода для реализации слоя контроллеров, слоя логирования, инит тестов, моков, реализации OAuth.
Go преподносится как язык следующего поколяния для Entperprise-компаний.
На Go написаны Docker, etcd, Kubernetes, Terraform и istio; его используют такие компании как google, apple, dropbox, bbc, the economist, the new york times, ibm, twitter, facebook.
Go активно поддерживается Google, а его авторы активно участвовали в жизни C, Unix и JVM и него обширное и сильное сообщество (Gophers).
Далее приводится еще несколько преимуществ:
- Отличная реализация Concurrency
- Кросс-платформенность
- Garbage Collection
- Статическая типизация
- Приведена сравнительная таблица Go vs Java
В завершении примеры кода для реализации слоя контроллеров, слоя логирования, инит тестов, моков, реализации OAuth.
Сравнение SOA и микросервисов от pwc.
Похоже, что pwc брали не академически-теоретический идеальный SOA из учебников, а среднестатистическую реализацию. А вот для микросервисов взяли эталон. Оно и понятно, это базовые свойства микросервисов и среднестатистически близкие к эталону реализации встречаются чаще просто потому, что иначе их совершенно невозможно поддерживать и развивать.
#common
Похоже, что pwc брали не академически-теоретический идеальный SOA из учебников, а среднестатистическую реализацию. А вот для микросервисов взяли эталон. Оно и понятно, это базовые свойства микросервисов и среднестатистически близкие к эталону реализации встречаются чаще просто потому, что иначе их совершенно невозможно поддерживать и развивать.
#common