Node.js
Microservices
Andrii Tytar
О себе
Андрей Титарь – andrii.tytar@sigma.software, @abfaust
- Senior Software Developer @ Sigma Software - Node.js, Ruby, DevOps
- Previously:
- Practice Microservices @ Avid Cloud, GlobalLogic – Node.js, SM
- ~8 years experience in development
- CI/CD evangelist
- XP practitioner
- Audiophile, DJ
Fantastic Microservices
And Where to Find Them
A Microservice definition
“Loosely coupled service oriented
architecture with bounded context”
-- Adrian Cockcroft
Bounded Context
Ограниченный контекст – пределы
применимости той или иной модели, для
четкого понимания где нужно поддерживать
единообразие и согласованность, и как
соотносить это с другими контекстами.
-- Eric Evans, Domain-Driven Design
Основные принципы
- легковесный и дешевый
- сфокусирован на одной задаче и делает это
хорошо
- понятен и может поддерживаться одним
человеком, небольшой командой
- легковесный протокол
- быстро деплоится и масштабироваться
- устойчивый к сбоям
Макилрой: Четверть века UNIX
Ken Thompson and Dennis Ritchie, key proponents of
the Unix philosophy
Философия UNIX гласит:
- Пишите программы, которые делают что-то одно и
делают это хорошо.
- Пишите программы, которые бы работали вместе.
- Пишите программы, которые бы поддерживали
текстовые потоки, поскольку это универсальный
интерфейс.
Достоинства
Независимая масштабируемость
При размещении модулей на
отдельных серверных узлах мы можем
масштабировать их независимо от
других модулей.
Независимый технический стек
Благодаря распределению модулей
по разным серверным узлам и
независимому языку взаимодействия
мы можем использовать совершенно
разные языки программирования, и
инструменты
Сохранение модульности
И единая, и микросервисная архитектуры
позволяют сохранять модульность и
инкапсуляцию. Однако это может быть
довольно трудной задачей, на решение
которой уйдут десятилетия, несмотря на
правила SOLID. Зато микросервисы
позволяют обеспечивать логическое
разделение приложения на модули за счёт
явного физического разделения по
серверам. Физическая изолированность
защищает от нарушения пределов
ограниченных контекстов.
Независимая эволюция
подсистем
Микросервис может
развиваться и ломать
обратную совместимость, не
обременяя себя поддержкой
старых версий, так как всегда
можно оставить старую
версию микросервиса
работающей необходимое
время.
Недостатки
Распределенность
Распределенные системы сложнее
программировать, так как удаленные
вызовы работают медленно и невозможно
исключить риск сбоя.
Согласованность в конечном счете
Для распределенной системы сложно
поддерживать строгую согласованность.
Поэтому каждый обеспечивает ее
самостоятельно.
Сложность эксплуатации
Для управления микросервисами, которые регулярно
переразвертываются, требуется зрелая группа
эксплуатации/поддержки.
Типичный Микросервис
На практике
Или как со всем этим работать
Культура
- Продукт, а не проект
- Гетерогенность (использование разных языков
программирования)
- Самоорганизованные и самодостаточные команды
- Умные эндпойнты и глупые каналы
- Децентрализованное управление
- Автоматизация инфраструктуры
- Страховка от сбоев
- Архитектура с эволюционным развитием
- Ты создал, тебе и запускать
- Обильное тестирование
Continues Integration
“Continuous Integration doesn’t get rid of bugs, but it does make
them dramatically easier to find and remove.”
— Martin Fowler, Chief Scientist, ThoughtWorks
Continues Deployment
Где и когда применять
- Монолит в первую очередь
- Разделение монолита при необходимости
- Создание прототипов или временных сервисов
- Совместное использование с монолитом
Node.js
Почему он?
Почему Node.js
- Легковесность и быстродействие
- Широкий выбор встроенных и внешних библиотек
- Конечно же JavaScript
Просто как пять копеек
$ mkdir simple-microservice
$ cd simple-microservice
$ npm init
$ npm install express –save
$ cat app.js
Docker
Docker Compose
Finally
- Add tests
- Hook you git repo
- Create Jenkins job for running tests
- Deploy via Docker
THANKS!
Questions?

NodeJS микросервисная архитектура, Андрей Титарь

  • 1.
  • 2.
    О себе Андрей Титарь– andrii.tytar@sigma.software, @abfaust - Senior Software Developer @ Sigma Software - Node.js, Ruby, DevOps - Previously: - Practice Microservices @ Avid Cloud, GlobalLogic – Node.js, SM - ~8 years experience in development - CI/CD evangelist - XP practitioner - Audiophile, DJ
  • 3.
  • 6.
    A Microservice definition “Looselycoupled service oriented architecture with bounded context” -- Adrian Cockcroft
  • 7.
    Bounded Context Ограниченный контекст– пределы применимости той или иной модели, для четкого понимания где нужно поддерживать единообразие и согласованность, и как соотносить это с другими контекстами. -- Eric Evans, Domain-Driven Design
  • 8.
    Основные принципы - легковесныйи дешевый - сфокусирован на одной задаче и делает это хорошо - понятен и может поддерживаться одним человеком, небольшой командой - легковесный протокол - быстро деплоится и масштабироваться - устойчивый к сбоям
  • 9.
    Макилрой: Четверть векаUNIX Ken Thompson and Dennis Ritchie, key proponents of the Unix philosophy Философия UNIX гласит: - Пишите программы, которые делают что-то одно и делают это хорошо. - Пишите программы, которые бы работали вместе. - Пишите программы, которые бы поддерживали текстовые потоки, поскольку это универсальный интерфейс.
  • 10.
    Достоинства Независимая масштабируемость При размещениимодулей на отдельных серверных узлах мы можем масштабировать их независимо от других модулей. Независимый технический стек Благодаря распределению модулей по разным серверным узлам и независимому языку взаимодействия мы можем использовать совершенно разные языки программирования, и инструменты Сохранение модульности И единая, и микросервисная архитектуры позволяют сохранять модульность и инкапсуляцию. Однако это может быть довольно трудной задачей, на решение которой уйдут десятилетия, несмотря на правила SOLID. Зато микросервисы позволяют обеспечивать логическое разделение приложения на модули за счёт явного физического разделения по серверам. Физическая изолированность защищает от нарушения пределов ограниченных контекстов. Независимая эволюция подсистем Микросервис может развиваться и ломать обратную совместимость, не обременяя себя поддержкой старых версий, так как всегда можно оставить старую версию микросервиса работающей необходимое время.
  • 11.
    Недостатки Распределенность Распределенные системы сложнее программировать,так как удаленные вызовы работают медленно и невозможно исключить риск сбоя. Согласованность в конечном счете Для распределенной системы сложно поддерживать строгую согласованность. Поэтому каждый обеспечивает ее самостоятельно. Сложность эксплуатации Для управления микросервисами, которые регулярно переразвертываются, требуется зрелая группа эксплуатации/поддержки.
  • 12.
  • 14.
    На практике Или каксо всем этим работать
  • 15.
    Культура - Продукт, ане проект - Гетерогенность (использование разных языков программирования) - Самоорганизованные и самодостаточные команды - Умные эндпойнты и глупые каналы - Децентрализованное управление - Автоматизация инфраструктуры - Страховка от сбоев - Архитектура с эволюционным развитием - Ты создал, тебе и запускать - Обильное тестирование
  • 16.
    Continues Integration “Continuous Integrationdoesn’t get rid of bugs, but it does make them dramatically easier to find and remove.” — Martin Fowler, Chief Scientist, ThoughtWorks
  • 17.
  • 18.
    Где и когдаприменять - Монолит в первую очередь - Разделение монолита при необходимости - Создание прототипов или временных сервисов - Совместное использование с монолитом
  • 20.
  • 21.
    Почему Node.js - Легковесностьи быстродействие - Широкий выбор встроенных и внешних библиотек - Конечно же JavaScript
  • 22.
    Просто как пятькопеек $ mkdir simple-microservice $ cd simple-microservice $ npm init $ npm install express –save $ cat app.js
  • 23.
  • 24.
  • 25.
    Finally - Add tests -Hook you git repo - Create Jenkins job for running tests - Deploy via Docker
  • 26.