$30 off During Our Annual Pro Sale. View Details »

Введение в микросервисную архитектуру

Введение в микросервисную архитектуру

Вводная лекция для студентов одной из проектных лабораторий НГУ

Vladimir Plizga

January 28, 2020
Tweet

More Decks by Vladimir Plizga

Other Decks in Programming

Transcript

  1. Введение в
    микросервисную
    архитектуру
    НГУ, январь’20

    View Slide

  2. Привет!
    Я – Владимир Плизгá
    ⬗ Java разработчик (backend)
    ⬗ TechLead серверной команды PrePaid
    ⬗ ≈8 лет в деле
    2

    View Slide

  3. 1.
    Для начала
    Цели и вопросы

    View Slide

  4. Что это
    такое?
    Оставим вопрос открытым.
    Пока нам достаточно
    интуитивного понимания.
    4

    View Slide

  5. Цель – ответить на 1 вопрос:
    5
    НАФИГА?
    ДЛЯ ЧЕГО ЭТО ВООБЩЕ НУЖНО?

    View Slide

  6. “Всё познаётся в сравнении…
    6

    View Slide

  7. 2.
    Традиционный
    подход
    Как учили нас деды

    View Slide

  8. 1 человек – 1 программа (aka 1:1)
    ⬗ Абсолютно нормальный подход
    ⬗ Используется давно
    ⬗ Подходит многим
    ⬗ Вряд ли исчезнет
    8

    View Slide

  9. Масса позитивных примеров
    ⬗ Лабораторная/курсовая работа
    ⬗ Домашний сайт
    ⬗ Десктопная/консольная утилита
    ⬗ Telegram-бот
    ⬗ Мобильное приложение
    ⬗ (впиши своё)
    9

    View Slide

  10. Причины успеха
    ⬗ Программа умещается в 1 голове
    ⬗ Легко меняется (даже вся)
    ⬗ Мало пользователей
    ⬗ Можно обновлять редко и полностью
    10
    Потому что
    маленький!

    View Slide

  11. А что
    дальше?
    С ростом возможностей
    растут и сложности
    11

    View Slide

  12. 12
    1 000 5 000 10 000 500 000
    0
    2 000
    4 000
    6 000
    8 000
    10 000
    12 000
    14 000
    Строк кода (LoC)
    Примерные размеры программ
    Курсач Хомяк Настолка Интернет-банк

    View Slide

  13. 1 000 5 000 10 000 500,000 1,000,000 5,000,000
    0
    1,000,000
    2,000,000
    3,000,000
    4,000,000
    5,000,000
    Строк кода (LoC)
    Примерные размеры программ
    Курсач Хомяк Настолка Интернет-банк Биллинг АБС

    View Slide

  14. Сложности большого приложения
    ⬗ Не помещается в 1 голове
    ⬗ Меняется всё труднее
    ⬗ Сложно разбираться
    14

    View Slide

  15. 15

    View Slide

  16. Сложности большого приложения
    ⬗ Не помещается в 1 голове
    ⬗ Меняется всё труднее
    ⬗ Сложно разбираться
    ⬗ Много неочевидных связей
    16

    View Slide

  17. 17 https://twitter.com/glorphindale/status/1199663658193891328

    View Slide

  18. Сложности большого приложения
    ⬗ Не помещается в 1 голове
    ⬗ Меняется всё труднее
    ⬗ Сложно разбираться
    ⬗ Много неочевидных связей
    ⬗ Страшно что-то менять
    18

    View Slide

  19. 19

    View Slide

  20. Следствия растущей популярности
    ⬗ Нужны обновления
    ⬗ Часто
    ⬗ Выборочно
    ⬗ Незаметно
    ⬗ Нужно масштабирование
    20

    View Slide

  21. 21
    Ситуация глазами разработчика
    ⬗ Трудно развивать приложение
    ⬗ Любая правка чревата
    ⬗ Стек технологий фиксирован
    ⬗ Проект превращается в болото ☹
    Зато болото
    большое!

    View Slide

  22. 3.
    Микросервисы
    Желанное спасение. Или нет.

    View Slide

  23. Разделяй и
    властвуй
    Человеческая мудрость и
    инженерный подход в
    одном флаконе
    23

    View Slide

  24. «Divide Et Impera» в действии
    Модули
    Классы и пакеты в
    ООП. Помогают
    бороться
    с паразитными
    связями в исходном
    коде.
    Библиотеки
    JAR, DLL, PYM, …
    Помогают (частично)
    обновлять
    приложение частями.
    SOA
    Service Oriented
    Architecture.
    Помогает (частично)
    бороться с простоями.
    24

    View Slide

  25. Microservice Architecture (MSA)
    Декомпозиция
    приложения на отдельно
    разрабатываемые,
    поставляемые и
    запускаемые модули.
    25

    View Slide

  26. Место MSA в арсенале декомпозиции
    26
    Классы/пакеты
    ≈ тысячи штук
    Библиотеки
    ≈ сотни штук
    SOA/MSA
    ≈ десятки штук

    View Slide

  27. монолит VS микросервисы
    27 https://martinfowler.com/articles/microservices.html

    View Slide

  28. 28
    Свойства микросервисов (1/3)
    ⬗ Построены вокруг бизнес-нужд
    ⬗ Одна функция ≈ один сервис
    ⬗ Команда, которую можно
    накормить одной пиццей

    View Slide

  29. 29
    Свойства микросервисов (2/3)
    ⬗ Соблюдают строгий контракт
    взаимодействия:
    ⬗ Общение только через API
    ⬗ У каждого своя БД (схема)

    View Slide

  30. 30
    Свойства микросервисов (3/3)
    ⬗ 12 факторов cloud-native приложения
    ⬗ Упрощают разработку
    ⬗ Упрощают поставку
    (особенно в облако ☁)
    ⬗ Включают лучшие практики

    View Slide

  31. 31
    Эти свойства возвращают лучшее
    ⬗ Программа умещается в 1 голове
    ⬗ Легко меняется (даже вся)
    ⬗ Можно обновлять редко и полностью
    Потому что
    маленький!

    View Slide

  32. 4.
    Прививки
    реальности
    Неочевидные особенности
    микросервисной архитектуры

    View Slide

  33. И вот у нас микросервисы.
    Но так ли всё просто?
    Photo by Kostiantyn Stupak from Pexels

    View Slide

  34. 1. Как направлять клиентский трафик?
    ⬗ В обычном приложении:
    ⬗ Клиент встроен
    ⬗ Сервер один
    ⬗ Адрес фиксирован
    34

    View Slide

  35. 35

    View Slide

  36. ⬗ А что если:
    ⬗ Клиентов много?
    ⬗ Среди них мобилки?
    ⬗ Серверов много?
    ⬗ Сервера реплицированы?
    36
    1. Как направлять клиентский трафик?

    View Slide

  37. Точка входа (API Gateway)
    37 https://docs.microsoft.com/en-us/azure/architecture/includes/images/microservices-logical.png

    View Slide

  38. Точка входа (API Gateway) тащит
    38
    ⬗ Маршрутизацию
    ⬗ Безопасность
    ⬗ Трансляцию протоколов
    ⬗ Кэширование
    ⬗ Агрегацию запросов
    ⬗ Мониторинг

    View Slide

  39. 2. Как сервисам находить друг друга?
    ⬗ В обычном приложении:
    ⬗ Сервер знает, где он
    ⬗ Адрес фиксирован
    ⬗ Сервер один
    39

    View Slide

  40. 2. Как сервисам находить друг друга?
    ⬗ А что если:
    ⬗ Сервисов много?
    ⬗ Сервисы реплицированы?
    ⬗ Адреса динамические?
    40
    Прописывать вручную
    уже не вариант

    View Slide

  41. Реестр сервисов (Service Registry)
    41 https://blog.mazarin.lk/wp-content/uploads/2016/08/microservices.png

    View Slide

  42. Реестр сервисов помогает
    42
    ⬗ В упрощении конфигурации
    ⬗ В работе в эластичной среде ☁
    ⬗ В балансировке нагрузки
    ⬗ В мониторинге

    View Slide

  43. Реестр сервисов участвует
    43 https://www.eclipse.org/community/eclipse_newsletter/2017/september/images/image006_sm.png

    View Slide

  44. Итог: +2 сервиса на ровном месте!
    ⬗ Каждый надо разработать*!
    ⬗ У каждого свой жизненный цикл
    ⬗ Каждый требует поддержки
    ⬗ И это еще не всё!
    * обычно на основе библиотеки
    44

    View Slide

  45. А для частых релизов ещё нужно…
    ⬗ Тестировать (постоянно!)
    ⬗ Учитывать окружения
    ⬗ Контролировать безопасность
    ⬗ Предоставлять мониторинг
    ⬗ Обеспечивать логирование
    45

    View Slide

  46. А для частых релизов ещё нужно…
    ⬗ Continuous Integration &
    Delivery (CI/CD)
    ⬗ Контейнеризация (Docker)
    ⬗ Оркестрация (Kubernetes)
    ⬗ Культура (DevOps)
    46

    View Slide

  47. 47
    А ещё для частых релизов пригодится…

    View Slide

  48. 48

    View Slide

  49. 5.
    Примеры
    Связь с реальным миром

    View Slide

  50. Да кому это вообще надо?!.
    50
    . . .

    View Slide

  51. 51 https://spring.io/blog/2015/07/14/microservices-with-spring

    View Slide

  52. 52
    Пример
    с такси
    https://www.nginx.com/
    blog/introduction-to-microservices/
    По мотивам
    архитектуры
    UBER’а

    View Slide

  53. 55

    View Slide

  54. 6.
    Заключение
    Выжимки и выводы

    View Slide

  55. “… you shouldn't start a new
    project with microservices,
    even if you're sure your
    application will be big enough
    to make it worthwhile.
    57
    https://martinfowler.com/bliki/MonolithFirst.html
    Martin Fowler

    View Slide

  56. Недостатки MSA
    ⬗ Накладные расходы на сеть
    ⬗ Сложность релиза
    ⬗ Трудоемкость мониторинга
    ⬗ Зоопарк технологий
    ⬗ …
    58

    View Slide

  57. Преимущества MSA
    ⬗ Компактность кода сервисов
    ⬗ Изоляция изменений
    ⬗ Гибкое масштабирование
    ⬗ Локальность обновлений
    ⬗ Соответствие командам
    ⬗ …
    59

    View Slide

  58. Выводы
    ⬗ MSA – не новшество
    ⬗ и не серебряная пуля
    ⬗ Высокий порог вхождения
    ⬗ Единственный путь развития для
    одновременно мощных и гибких
    высоконагруженных приложений*
    60

    View Slide

  59. * это и есть ответ на вопрос:
    61
    НАФИГА?
    ДЛЯ ЧЕГО ЭТО ВООБЩЕ НУЖНО?

    View Slide

  60. Резюме
    62
    Микросервисы – ужасный
    способ построения
    сложных веб-приложений.
    Но лучше пока ничего
    не придумано.

    View Slide

  61. 63
    Спасибо!
    Время для вопросов
    Владимир Плизгá
    @toparvion
    Toparvion
    https://toparvion.pro/talk/2020/shift-nsu-winter/

    View Slide

  62. Credits
    Special thanks to all the people who made and released these
    awesome resources for free:
    ⬗ Presentation template and backgrounds by SlidesCarnival
    ⬗ Photographs by Unsplash & Pexels
    64

    View Slide