January 24, 2016

Книга "Building Microservices" Сэма Ньюмена

Недавно прочитал книгу "Building Microservices: Designing Fine-Grained Systems" Сэма Ньюмена.

После прочтения этой книги в голове крутились фразы: "парадайм шифт", "дизрапт", "зе некст биг синг". Большинство из вас находится по ту сторону браузера и мало интересуется развитием интернет-технологий. А они меняются очень сильно. Настолько сильно, что за 10 лет единственная вещь, которая осталась такой же — это протокол HTTP, а все остальное поменялось: веб-сервера, базы данных, архитектуры веб-приложений, методы тестирования, интеграции и развертывания.

Микросервисная архитектура — такая организация системы, где каждая подсистема — это автономный, независимый веб-сервис, ответственный за одну небольшую задачу. Полная противоположность — это монолитная архитектура, где есть только один веб-сервис, решающий все задачи.

В микросервисной архитектуре каждый микросервис разрабатывается, развертывается, масштабируется изолированно от других сервисов. Это значит, что выбранный стек технологий — это больше не проклятие на всю жизнь. Например, десять лет был популярен стек LAMP — Linux, Apache, MySQL, PHP. Раньше все эти технологии устанавливались в рамках одного веб-сервиса. И если нужно было разработать новую функцию, то искали специалиста, знающего эти технологии. А в микросервисной архитектуре один микросервис может быть реализован на Руби, другой на Го, третий на Яве. У одного база данных может быть MongoDB, у другого GraphDB, а у третьего blob store, например. И это нормально. Выбирайте тот язык и базу данных, которая эффективнее всего решит конкретную задачу.

Раньше, если веб-сервис не выдерживал нагрузку, то выполняли горизонтальное масштабирование: запускали еще один экземпляр сервиса LAMP и делали балансировку нагрузки. В микросервисной архитектуре можно анализировать производительность каждого отдельного микросервиса и масштабировать только тот микросервис, который не справляется с нагрузкой.

Читая книгу я вспоминал, где я как пользователь сталкивался с микросервисами. Помню, зашел как-то в Фейсбук, а там лента новостей есть, а личные сообщения просмотреть не могу. Это значит, что в Фейсбуке как минимум два микросервиса (на самом деле их сотни) — микросервис новостной ленты и микросервис личных сообщений. И в тот день микросервис сообщений вышел из строя. Преимущество в том, что остальные микросервисы сохранили свою работу, потому что работают автономно. В монолитной архитектуре такое невозможно: выход из строя одной подсистемы приводит к поломке всей системы.

Я строго рекомендую книгу "Building Microservices" всем техническим директорам и просто разработчикам.