SlideShare a Scribd company logo
1 of 45
Download to read offline
Монолит или microservices
Живко Ангелов
OpenFest 2018,
3-ти Ноември 2018
Какво е монолит ?
Какво е монолит ?
Кой съм аз ?
Живко Ангелов
● DevOps @ SiteGround
● ExAdmin @ SiteGround
● Харесва Go
Какво е монолит ?
Монолитна архитектура
● Архитектура, при която всички компоненти се намират на
една физическа среда (сървър)
● Апликацията е самостоятелна и независима
● Апликацията отговаря не само за дадена задача, а за цялата
функционалност на приложението
● Липсва модулност
● LAMP & LEMP stack
Какво е microservice ?
Архитектура с microservices
● Апликацията е разделена на отделни компоненти
● Компонентите са независими
● Компонентите изпълняват една задача
● Модулна структура
● Комуникират посредством мрежа, в общия случай
Графично изображение
medium.com
Терминология
Терминология
● monolith
● microservices
● serverless
● FaaS
● orchestration
● distributed storage
● service discovery
● load balancer
serverless
Цел на лекцията
Цел на лекцията
Цел на лекцията
● Правилно и неправилно
● Подходящо и неподходящо
● Просто и сложно
● Скъпо и евтино
● Модерно и демоде
История
Исторически преход
● Physical server -> VM -> container-based solutions/microservices -> serverless and
function as service model.
Физ. сървър VMs Containers Функции
Three billy goats Gruff
● Michael Hausenblas, RedHat
monolith container function
Еволюция на софтуера
Същинския сблъсък
Някои твърдения
● Microservice работи изолирано и индивидуално
● Microservice върши една единствена задача
● Microservice комуникира с други microservices
● Комуникацията е проблем
● Сложни думи свързани с microservices - discovery,
coordination, security, replication, data consistency, failover,
deployment.
● Фактор мрежа
● Дистрибутирани системи:
○ мястото, където се случва информацията да се загуби, разбърка, та дори
и фалшифицира.
○ мястото, където трудно някой може да каже къде точно е проблема.
Някои твърдения
● Монолита е прост
● В монолитна среда по-лесно се установява проблема
● Комуникацията по мрежата е нулева
● Добра производителност в монолита
● Монолита ни предлага сигурност
● Монолита е лесен за разбиране
● Монолита е old fashioned, vintage
“Too old to be considered modern, but not old enough to be considered antique”
Плюсове и минуси
Монолит +++
● Опростена архитектура
● Евтина комуникация м/у компонентите
● Лесен тест на цялата функционалност
● Лесна за deploy
● Лесно скалира хоризонтално
Монолит ---
● Приложението е трудно за разбиране
● Приложението е голямо, бави стартирането
● Подновяване на цялото приложение при малка промяна
● Споделени ресурси
● Малък бъг може да съсипе цялото приложение.
(мултиплициране)
● Използва един език за програмиране
Microservices +++
● Изолация на компонентите
● Независим deploy на отделните компоненти
● Всеки екип си работи на собствен microservice
● Свобода в избора на технологии
● Continuous deployment
● Всеки компонент може да скалира самостоятелно
Microservices ---
● Добавя допълнителна сложност на проекта
● Трудно тестване на цялото приложение
● Допълнителна конфигурация и авторизация за всеки
microservice
● Сложен deploy
● Фактор мрежа
service discovery
service discovery
● Работи по мрежата
● Допълнително усложняване на архитектурата
● Single point of failure - service provider
● Проблеми с дерегистрирането
● Допълнителна конфигурация и оторизация
● Монолит load balancer
Distributed storage
Distributed storage
● Работи по мрежата
● Сигурността е в опасност
● Загуба/подмяна на данни
● Нужда от дебела жица, голям трафик
● Производителността спада
● Добри технически познания за имплементиране и
поддръжка
Monolithic application
Monolithic application
● Очаква монолитна архитектура
● Липса на модулност
● Един език за програмиране
Практически съвети
Практически съвети
● Не използвайте microservices когато сте наясно, че мащаба на проекта не е
голям. Монолита върши работа.
● Започнете проекта си върху монолитна инфраструктура като обърнете
специално внимание на модулността на софтуера и как отделните модули ще
комуникират помежду си и какъв код ще споделят.
● Хибридна архитектура с монолит и microservices. Модулна апликация с
възможност кода да се преизползва и лесно да бъде скалиран към microservice
или друг monolith. Добавяне на load balancer
● Трудно връщане назад към monolith
● Монолитната архитектура може да се състои от няколко сървъра
● Тясното специализиране не е нещо хубаво
“successful microservice projects almost always start out as a monolith that got too big and
was broken up.”
Martin Fowler
Ситуация #1
● Добавете допълнителен монолит чрез load balancer
load balancer
traffic
Монолит 1 Монолит 2 Монолит 3
Монолит
traffic
Сутация #2
● Преминаване към semi-monolithic architecture (хибрид)
Монолит
traffic
Microservice 1
Microservice 2
Монолит
traffic
Сутация #3
● Скалиране при microservices
traffic
Gateway
traffic
Gateway
Реален пример
● Presentation layer – HTML‑based web UI / HTTP requests
● Business logic layer – Основната функционалност. Свързва
Presentation layer с Data-access layer.
● Data‑access layer
Коя архитектура е подходяща за нас ?
● Имате ли необходимите знания за реализиране на microservices - network
latency & reliability, storage over the network, etc. Монолита е по-безопасен при
липса на тези умения.
● Имате ли подготвен екип и достатъчно хора, които да се грижат.
● При стартъпи монолита е по-подходящ, защото:
○ Имате ограничен брой технически служители
○ Искате бързо да деплойнете и стартирате апликацията си. Пазара не чака.
○ Няма време за мислене на комплексни архитектури
○ Липса на голяма натовареност, поне в началото
Извод
Извод
Благодаря!
Въпроси ?

More Related Content

Similar to Монолит или microservices

Стартиране на софтуерен бизнес - пътят от програмата до продукта
Стартиране на софтуерен бизнес - пътят от програмата до продуктаСтартиране на софтуерен бизнес - пътят от програмата до продукта
Стартиране на софтуерен бизнес - пътят от програмата до продукта
Neven Boyanov
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
Svetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
Svetlin Nakov
 
Continuous integration (d.atanasov)
Continuous integration (d.atanasov)Continuous integration (d.atanasov)
Continuous integration (d.atanasov)
Deyan Atanasov
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектури
braintechd
 

Similar to Монолит или microservices (20)

Sars ppt 17.05
Sars ppt 17.05Sars ppt 17.05
Sars ppt 17.05
 
Dependency injection Pattern Lecture
Dependency injection Pattern LectureDependency injection Pattern Lecture
Dependency injection Pattern Lecture
 
Managing Technical Debt
Managing Technical DebtManaging Technical Debt
Managing Technical Debt
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Web Applications Security
Web Applications Security Web Applications Security
Web Applications Security
 
Стартиране на софтуерен бизнес - пътят от програмата до продукта
Стартиране на софтуерен бизнес - пътят от програмата до продуктаСтартиране на софтуерен бизнес - пътят от програмата до продукта
Стартиране на софтуерен бизнес - пътят от програмата до продукта
 
DrupalCamp Sofia 2015
DrupalCamp Sofia 2015DrupalCamp Sofia 2015
DrupalCamp Sofia 2015
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Vpn
VpnVpn
Vpn
 
Cloud computing course overview
Cloud computing course overviewCloud computing course overview
Cloud computing course overview
 
Курс по програмиране за напреднали (2012) - 4. Desktop приложения. Windows Forms
Курс по програмиране за напреднали (2012) - 4. Desktop приложения. Windows FormsКурс по програмиране за напреднали (2012) - 4. Desktop приложения. Windows Forms
Курс по програмиране за напреднали (2012) - 4. Desktop приложения. Windows Forms
 
Практики в програмирането на iOS приложение - дисекция на реален мой проект)
Практики в програмирането на iOS приложение - дисекция на реален мой проект)Практики в програмирането на iOS приложение - дисекция на реален мой проект)
Практики в програмирането на iOS приложение - дисекция на реален мой проект)
 
Платформа Блоктину за визуално по C/C++ за микроконтролери
Платформа Блоктину за визуално по C/C++ за микроконтролериПлатформа Блоктину за визуално по C/C++ за микроконтролери
Платформа Блоктину за визуално по C/C++ за микроконтролери
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 
Приложение на академичната програма на MikroTik в УниБИТ ...
Приложение на академичната програма на MikroTik в УниБИТ ...Приложение на академичната програма на MikroTik в УниБИТ ...
Приложение на академичната програма на MikroTik в УниБИТ ...
 
Minimal linux live
Minimal linux liveMinimal linux live
Minimal linux live
 
Continuous integration (d.atanasov)
Continuous integration (d.atanasov)Continuous integration (d.atanasov)
Continuous integration (d.atanasov)
 
Конкурентни софтуерни архитектури
Конкурентни софтуерни архитектуриКонкурентни софтуерни архитектури
Конкурентни софтуерни архитектури
 

Монолит или microservices

  • 1. Монолит или microservices Живко Ангелов OpenFest 2018, 3-ти Ноември 2018
  • 4. Кой съм аз ? Живко Ангелов ● DevOps @ SiteGround ● ExAdmin @ SiteGround ● Харесва Go
  • 6. Монолитна архитектура ● Архитектура, при която всички компоненти се намират на една физическа среда (сървър) ● Апликацията е самостоятелна и независима ● Апликацията отговаря не само за дадена задача, а за цялата функционалност на приложението ● Липсва модулност ● LAMP & LEMP stack
  • 8. Архитектура с microservices ● Апликацията е разделена на отделни компоненти ● Компонентите са независими ● Компонентите изпълняват една задача ● Модулна структура ● Комуникират посредством мрежа, в общия случай
  • 11. Терминология ● monolith ● microservices ● serverless ● FaaS ● orchestration ● distributed storage ● service discovery ● load balancer
  • 15. Цел на лекцията ● Правилно и неправилно ● Подходящо и неподходящо ● Просто и сложно ● Скъпо и евтино ● Модерно и демоде
  • 17. Исторически преход ● Physical server -> VM -> container-based solutions/microservices -> serverless and function as service model. Физ. сървър VMs Containers Функции
  • 18. Three billy goats Gruff ● Michael Hausenblas, RedHat monolith container function
  • 21. Някои твърдения ● Microservice работи изолирано и индивидуално ● Microservice върши една единствена задача ● Microservice комуникира с други microservices ● Комуникацията е проблем ● Сложни думи свързани с microservices - discovery, coordination, security, replication, data consistency, failover, deployment. ● Фактор мрежа ● Дистрибутирани системи: ○ мястото, където се случва информацията да се загуби, разбърка, та дори и фалшифицира. ○ мястото, където трудно някой може да каже къде точно е проблема.
  • 22. Някои твърдения ● Монолита е прост ● В монолитна среда по-лесно се установява проблема ● Комуникацията по мрежата е нулева ● Добра производителност в монолита ● Монолита ни предлага сигурност ● Монолита е лесен за разбиране ● Монолита е old fashioned, vintage “Too old to be considered modern, but not old enough to be considered antique”
  • 24. Монолит +++ ● Опростена архитектура ● Евтина комуникация м/у компонентите ● Лесен тест на цялата функционалност ● Лесна за deploy ● Лесно скалира хоризонтално
  • 25. Монолит --- ● Приложението е трудно за разбиране ● Приложението е голямо, бави стартирането ● Подновяване на цялото приложение при малка промяна ● Споделени ресурси ● Малък бъг може да съсипе цялото приложение. (мултиплициране) ● Използва един език за програмиране
  • 26. Microservices +++ ● Изолация на компонентите ● Независим deploy на отделните компоненти ● Всеки екип си работи на собствен microservice ● Свобода в избора на технологии ● Continuous deployment ● Всеки компонент може да скалира самостоятелно
  • 27. Microservices --- ● Добавя допълнителна сложност на проекта ● Трудно тестване на цялото приложение ● Допълнителна конфигурация и авторизация за всеки microservice ● Сложен deploy ● Фактор мрежа
  • 29. service discovery ● Работи по мрежата ● Допълнително усложняване на архитектурата ● Single point of failure - service provider ● Проблеми с дерегистрирането ● Допълнителна конфигурация и оторизация ● Монолит load balancer
  • 31. Distributed storage ● Работи по мрежата ● Сигурността е в опасност ● Загуба/подмяна на данни ● Нужда от дебела жица, голям трафик ● Производителността спада ● Добри технически познания за имплементиране и поддръжка
  • 33. Monolithic application ● Очаква монолитна архитектура ● Липса на модулност ● Един език за програмиране
  • 35. Практически съвети ● Не използвайте microservices когато сте наясно, че мащаба на проекта не е голям. Монолита върши работа. ● Започнете проекта си върху монолитна инфраструктура като обърнете специално внимание на модулността на софтуера и как отделните модули ще комуникират помежду си и какъв код ще споделят. ● Хибридна архитектура с монолит и microservices. Модулна апликация с възможност кода да се преизползва и лесно да бъде скалиран към microservice или друг monolith. Добавяне на load balancer ● Трудно връщане назад към monolith ● Монолитната архитектура може да се състои от няколко сървъра ● Тясното специализиране не е нещо хубаво “successful microservice projects almost always start out as a monolith that got too big and was broken up.” Martin Fowler
  • 36. Ситуация #1 ● Добавете допълнителен монолит чрез load balancer load balancer traffic Монолит 1 Монолит 2 Монолит 3 Монолит traffic
  • 37. Сутация #2 ● Преминаване към semi-monolithic architecture (хибрид) Монолит traffic Microservice 1 Microservice 2 Монолит traffic
  • 38. Сутация #3 ● Скалиране при microservices traffic Gateway traffic Gateway
  • 39. Реален пример ● Presentation layer – HTML‑based web UI / HTTP requests ● Business logic layer – Основната функционалност. Свързва Presentation layer с Data-access layer. ● Data‑access layer
  • 40.
  • 41. Коя архитектура е подходяща за нас ? ● Имате ли необходимите знания за реализиране на microservices - network latency & reliability, storage over the network, etc. Монолита е по-безопасен при липса на тези умения. ● Имате ли подготвен екип и достатъчно хора, които да се грижат. ● При стартъпи монолита е по-подходящ, защото: ○ Имате ограничен брой технически служители ○ Искате бързо да деплойнете и стартирате апликацията си. Пазара не чака. ○ Няма време за мислене на комплексни архитектури ○ Липса на голяма натовареност, поне в началото