Middleware - это такая прослойка в технологическом стеке большого проекта Александр Котов
Цели доклада <ul><li>Что такое Middleware?! </li></ul><ul><li>В каких web-проектах можно использовать Middleware?! </li></...
Содержание <ul><li>Эволюция успешного Web-проекта </li></ul><ul><li>Middleware в web-проектах. Примеры: </li></ul><ul><ul>...
Поехали!
Веб-проект. Идея.
Запускаем v1.0. Apache, CGI, MVC. index.cgi Apache MySQL Logic.pm Template
Появляется нагрузка. Проект растёт! $$$ index.cgi Apache MySQL Logic.pm Template
Адекватная реакция: усложняем  архитектурный стек На 146%
Базу данных – на отдельные сервера $$$ index.cgi Apache MySQL Logic.pm Template
Memcached для Model mod_perl для View $$$ index_mp.cgi Apache MySQL Logic.pm Template Memcached mod_perl
Ну можно еще к CDNу подцепиться для статики-)) $$$ index_mp.cgi Apache MySQL Logic.pm Template Memcached mod_perl CDN
А. Еще вроде есть NoSQL. Это сейчас модно :) $$$ index_mp.cgi Apache MongoDB Logic.pm Template Memcached mod_perl CDN MySQL
Вставляем еще серверов! $$$ index_mp.cgi Apache Logic.pm Template mod_perl CDN index_mp.cgi Apache Logic.pm Template mod_p...
Ключевой момент – понятие Application Server $$$ index_mp.cgi Apache Logic.pm Template mod_perl CDN index_mp.cgi Apache Te...
Стоп. Самое время для определения Middleware )) <ul><li>http://en.wikipedia.org/wiki/Middleware   </li></ul><ul><li>Подпро...
RPC. Архитектура. Logic.pm index_mp.cgi Client RPC Server RPC Zend Client RPC
RPC. Техника. <ul><li>RPC over HTTP </li></ul><ul><li>XML-RPC </li></ul><ul><li>JSON-RPC </li></ul><ul><li>Apache Thrift <...
RPC – так RPC! Гуляем -)) $$$ index_mp.cgi Apache Logic.pm Template mod_perl CDN index_mp.cgi Apache Template mod_perl Mon...
Теперь нам не страшны высокие нагрузки. Временно. <ul><li>Такая архитектура масштабируема по серверам </li></ul><ul><li>С ...
Заглянем внутрь AppServer ... Data Model <ul><li>Billing.pm </li></ul><ul><li>AddAccount() </li></ul><ul><li>AddMoney() </...
Асинхронное выполнение заданий <ul><li>Примеры: </li></ul><ul><ul><li>User::AddUser() -> Billing::AddAccount() </li></ul><...
AMQP-брокеры. Определение. <ul><li>AMQP (Advanced Message Queuing Protocol) — открытый протокол для передачи сообщений меж...
AMQP-брокеры. Техника. <ul><li>Протокол: AMQP 1.0 final (Октябрь 2011) </li></ul><ul><ul><li>http://www.amqp.org   </li></...
Окей. Вот такой у нас архитектурный стек Server RPC Business Logic (Perl) Data model Client RPC Frontend application Inter...
Растёт не только нагрузка, но и код, и число кодеров. <ul><li>Проблема производительности приложения более-менее решена </...
Декомпозиция процесса разработки MVC 1.0 MVC 1.1 Server RPC Business Logic (Perl) Data model Client RPC Frontend applicati...
Переход к MVC 2.0 MVC 1.0 MVC 1.1 MVC 2.0 Server RPC Business Logic (Perl) Data model Client RPC Frontend application Inte...
Следствия <ul><li>Изоляция различных подсистем друг от друга </li></ul><ul><ul><li>Возможность изоляции вплоть до уровня р...
Параллельно, развиваем внешние API...
Есть внешние API.  И есть RPC. Две сущности.. <ul><li>Внешний API: </li></ul><ul><ul><li>Трансляция подмножества результат...
А мы начнём создавать Internal API вместо RPC!!! Basic Service Internal API Data App External API (just filter)
ЙААААЗЬ!!! <ul><li>Здесь должна была бы быть картинка с архитектурой по результатам эволюции веб-проекта, но она оказалась...
Нагрузка + Middleware = Успешный веб-проект <ul><li>Нагрузка, => проект востребован, => успешен </li></ul><ul><ul><li>Проб...
Спасибо! Вопросы?!
Upcoming SlideShare
Loading in …5
×

Middleware

2,026 views

Published on

Evolution of web-project requires scalable architecture and scalable development process. In my presentation (in Russian): different techniques, how to achieve this if talking about Perl-based web project.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,026
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Middleware

  1. 1. Middleware - это такая прослойка в технологическом стеке большого проекта Александр Котов
  2. 2. Цели доклада <ul><li>Что такое Middleware?! </li></ul><ul><li>В каких web-проектах можно использовать Middleware?! </li></ul><ul><li>Каким образом Middleware встраивается в архитектуру web-приложений?! </li></ul><ul><li>Как (ещё можно) справиться с высокими нагрузками для web-проектов?! </li></ul><ul><li>И причём здесь Perl?! </li></ul>
  3. 3. Содержание <ul><li>Эволюция успешного Web-проекта </li></ul><ul><li>Middleware в web-проектах. Примеры: </li></ul><ul><ul><li>RPC </li></ul></ul><ul><ul><li>AMQP brokers </li></ul></ul><ul><ul><li>MVC V2 (MVC + SOA) </li></ul></ul><ul><ul><li>Internal APIs </li></ul></ul>
  4. 4. Поехали!
  5. 5. Веб-проект. Идея.
  6. 6. Запускаем v1.0. Apache, CGI, MVC. index.cgi Apache MySQL Logic.pm Template
  7. 7. Появляется нагрузка. Проект растёт! $$$ index.cgi Apache MySQL Logic.pm Template
  8. 8. Адекватная реакция: усложняем архитектурный стек На 146%
  9. 9. Базу данных – на отдельные сервера $$$ index.cgi Apache MySQL Logic.pm Template
  10. 10. Memcached для Model mod_perl для View $$$ index_mp.cgi Apache MySQL Logic.pm Template Memcached mod_perl
  11. 11. Ну можно еще к CDNу подцепиться для статики-)) $$$ index_mp.cgi Apache MySQL Logic.pm Template Memcached mod_perl CDN
  12. 12. А. Еще вроде есть NoSQL. Это сейчас модно :) $$$ index_mp.cgi Apache MongoDB Logic.pm Template Memcached mod_perl CDN MySQL
  13. 13. Вставляем еще серверов! $$$ index_mp.cgi Apache Logic.pm Template mod_perl CDN index_mp.cgi Apache Logic.pm Template mod_perl MongoDB Memcached MySQL nginx
  14. 14. Ключевой момент – понятие Application Server $$$ index_mp.cgi Apache Logic.pm Template mod_perl CDN index_mp.cgi Apache Template mod_perl MongoDB Memcached MySQL nginx
  15. 15. Стоп. Самое время для определения Middleware )) <ul><li>http://en.wikipedia.org/wiki/Middleware </li></ul><ul><li>Подпрогра́ммное обеспе́чение (англ. middleware; также переводится как промежу́точное ПО, связу́ющее ПО, межплатфо́рменное ПО) — в информатике, широко используемый термин, означающий слой или комплект технологического программного обеспечения для обеспечения взаимодействия между различными приложениями, системами, компонентами. </li></ul><ul><li>(ИМХО) Инфраструктура для архитектурного стека </li></ul>
  16. 16. RPC. Архитектура. Logic.pm index_mp.cgi Client RPC Server RPC Zend Client RPC
  17. 17. RPC. Техника. <ul><li>RPC over HTTP </li></ul><ul><li>XML-RPC </li></ul><ul><li>JSON-RPC </li></ul><ul><li>Apache Thrift </li></ul><ul><li>Google Protocol Buffers </li></ul><ul><li>CORBA </li></ul><ul><li>... </li></ul><ul><li>http://en.wikipedia.org/wiki/Remote_procedure_call </li></ul>
  18. 18. RPC – так RPC! Гуляем -)) $$$ index_mp.cgi Apache Logic.pm Template mod_perl CDN index_mp.cgi Apache Template mod_perl MongoDB Memcached MySQL nginx - www nginx - rpc Client RPC Client RPC Server RPC Logic.pm Server RPC
  19. 19. Теперь нам не страшны высокие нагрузки. Временно. <ul><li>Такая архитектура масштабируема по серверам </li></ul><ul><li>С увеличением нагрузки достаточно просто добавлять новые сервера в уязвимый слой </li></ul><ul><li>До поры до времени... </li></ul><ul><li>...но что же делать дальше?! </li></ul>
  20. 20. Заглянем внутрь AppServer ... Data Model <ul><li>Billing.pm </li></ul><ul><li>AddAccount() </li></ul><ul><li>AddMoney() </li></ul><ul><li>Withdraw() </li></ul><ul><li>MonthReport() </li></ul><ul><li>DropAccount() </li></ul><ul><li>... </li></ul><ul><li>User.pm </li></ul><ul><li>AddUser() </li></ul><ul><li>GetUser() </li></ul><ul><li>UpdateUser() </li></ul><ul><li>GetStat() </li></ul><ul><li>DeleteUser() </li></ul><ul><li>... </li></ul>Server RPC
  21. 21. Асинхронное выполнение заданий <ul><li>Примеры: </li></ul><ul><ul><li>User::AddUser() -> Billing::AddAccount() </li></ul></ul><ul><ul><li>CRON -> Status::UpdateStatuses() </li></ul></ul><ul><li>Очередь асинхронных заданий: </li></ul><ul><ul><li>В базе данных / файловой системе </li></ul></ul><ul><ul><li>В специальном менеджере очереди (AMQP) </li></ul></ul><ul><li>Обработка очереди: </li></ul><ul><ul><li>CRON или демоны </li></ul></ul><ul><ul><li>Специальные AMQP-обработчики </li></ul></ul>
  22. 22. AMQP-брокеры. Определение. <ul><li>AMQP (Advanced Message Queuing Protocol) — открытый протокол для передачи сообщений между компонентами системы. </li></ul><ul><li>Возможна маршрутизация двух типов: </li></ul><ul><ul><li>Point-to-point </li></ul></ul><ul><ul><li>Publish-subscribe </li></ul></ul><ul><li>Функции AMQP-брокеров: </li></ul><ul><ul><li>Постановка сообщений в очередь </li></ul></ul><ul><ul><li>Маршрутизация </li></ul></ul><ul><ul><li>Надёжная и безопасная доставка до адресата </li></ul></ul>
  23. 23. AMQP-брокеры. Техника. <ul><li>Протокол: AMQP 1.0 final (Октябрь 2011) </li></ul><ul><ul><li>http://www.amqp.org </li></ul></ul><ul><li>Основные реализации: OpenAMQ, RabbitMQ, ... </li></ul><ul><ul><li>Net::AMQP, AnyEvent::RabbitMQ, ... </li></ul></ul><ul><li>Архитектура: </li></ul>
  24. 24. Окей. Вот такой у нас архитектурный стек Server RPC Business Logic (Perl) Data model Client RPC Frontend application Interservice communication
  25. 25. Растёт не только нагрузка, но и код, и число кодеров. <ul><li>Проблема производительности приложения более-менее решена </li></ul><ul><li>Проблема грамотной организации разработки проекта с большим числом разработчиков внутри одного слоя архитектурного стека становится всё более и более актуальной </li></ul><ul><li>На повестку дня встаёт вопрос об изоляции различных подсистем внутри одного слоя друг от друга </li></ul>
  26. 26. Декомпозиция процесса разработки MVC 1.0 MVC 1.1 Server RPC Business Logic (Perl) Data model Client RPC Frontend application Interservice communication App 1 App 2 CS1 Interservice communication BS4 DM4 CS2 CS5 CS3 CS4 BS5 DM5
  27. 27. Переход к MVC 2.0 MVC 1.0 MVC 1.1 MVC 2.0 Server RPC Business Logic (Perl) Data model Client RPC Frontend application Interservice communication App 1 App 2 CS1 Interservice communication BS4 DM4 CS2 CS5 CS3 CS4 BS5 DM5 App 1 App 2 CS1 Interservice communication BS4 DM4 CS2 CS5 CS3 CS4 BS5 DM5 BS1 BS2 DM2 BS3
  28. 28. Следствия <ul><li>Изоляция различных подсистем друг от друга </li></ul><ul><ul><li>Возможность изоляции вплоть до уровня разных центров разработки и дата-центров </li></ul></ul><ul><li>Возможность разбить большой проект на команды по 5-6 человек </li></ul><ul><li>Прозрачность и управляемость разработки </li></ul><ul><li>Резкое увеличение значимости поддержки API различных подсистем </li></ul>
  29. 29. Параллельно, развиваем внешние API...
  30. 30. Есть внешние API. И есть RPC. Две сущности.. <ul><li>Внешний API: </li></ul><ul><ul><li>Трансляция подмножества результатов RPC-вызовов (то, что не жалко давать) наружу </li></ul></ul><ul><ul><li>Data -> RPC -> Frontend APIApp -> External consumer </li></ul></ul><ul><li>RPC: </li></ul><ul><ul><li>Полный интерфейс к данным, не подмножество </li></ul></ul><ul><ul><li>RPC Клиент и Сервер должны быть в одном VPN </li></ul></ul><ul><ul><li>Data -> RPC -> Internal consumer </li></ul></ul>
  31. 31. А мы начнём создавать Internal API вместо RPC!!! Basic Service Internal API Data App External API (just filter)
  32. 32. ЙААААЗЬ!!! <ul><li>Здесь должна была бы быть картинка с архитектурой по результатам эволюции веб-проекта, но она оказалась слишком насыщенной... </li></ul><ul><li>Поэтому здесь другая картинка: </li></ul>
  33. 33. Нагрузка + Middleware = Успешный веб-проект <ul><li>Нагрузка, => проект востребован, => успешен </li></ul><ul><ul><li>Проблемы решаются организацией масштабируемой архитектуры </li></ul></ul><ul><li>Middleware, => грамотная разработка, => проект развивается управляемо и прозрачно, => успешно </li></ul><ul><ul><li>RPC, Internal API, External API </li></ul></ul><ul><ul><li>Inter-service communications, AMQP brokers </li></ul></ul><ul><ul><li>Декомпозиция разработки, MVC 2.0 </li></ul></ul><ul><li>А причём здесь Perl?! :-) </li></ul>
  34. 34. Спасибо! Вопросы?!

×