Каждый микросервис выполняет свою небольшую бизнес-задачу. Если пользователи увеличили нагрузку на систему, то, скорее всего, они нагрузили не все сотни микросервисов, а только 5–6 штук, которые участвовали в обработке этой задачи. Микросервисная архитектура позволяет выделить эти 5–6 микросервисов, дать только им больше ресурсов, чтобы смаштабировать их горизонтально.
Здесь необходимо объяснить разницу между вертикальным и горизонтальным масштабированием. Вертикально масштабируется один мощный сервер, на котором развёрнута система. При таком подходе по мере наращивания железа падает КПД от этого наращивания. Например, если на сервере увеличить мощность в 2 раза, то это может дать прирост на 60–80%, а не в 2 раза. Кроме этого, у серверов и ПО есть предел по вертикальному масштабированию, в который вы можете упереться, не достигнув нужной производительности.
Если у вас есть микросервисы, то вместо увеличения мощности одного сервера, вы можете создать десятки копий вашего приложения и разместить их на небольших серверах, или даже в виртуальных контейнерах, что даст прирост производительности на количество запущенных копий. Я сейчас не буду вдаваться в подробности того, как должны быть спроектированы приложения, которые способны горизонтально масштабироваться, потому что это довольно узкая тема и IT-архитекторы с ней хорошо знакомы. Нам сейчас важно, что микросервисная архитектура позволяет делать горизонтальное масштабирование, которое позволяет почти линейно и бесконечно увеличивать производительность системы.
В пример этого подхода хочу привести проект Мисс Россия. В блоге Microsoft вышла моя статья «Как мы „Мисс Россию“ на руках переносили»[79]. Там описан довольно примечательный для нас кейс. Дело в том, что конкурс «Мисс Россия» проходит две недели в году, в это время система испытывает перегрузки от посетителей и тех, кто голосует за участниц (рис. 45). В остальное время нагрузок нет, а большинство сервисов, которые отвечают за голосование и отсев накрутки голосов, просто выключены.
Рис. 45. IT-архитектура сайта «Мисс Россия»
В этом проекте использование микросервисов дало большую экономию на ресурсах по сравнению с монолитным приложением, которое использовалось до этого:
1. Наращивание мощности происходит в облаке в те моменты, когда приходит много пользователей. Для заказчика это значит, что он платит за «железо» только тогда, когда оно необходимо для бизнеса.
2. Микросервисы работают независимо друг от друга, поэтому их можно включать и выключать при необходимости. Соответственно, те микросервисы, которые нужны для голосования, выключены и не забирают ресурсы весь год, кроме двух недель.
На этом примере хорошо видно, что бизнес может очень гибко организовывать свои расходы и отвечать на потребности пользователей благодаря микросервисам. С монолитом так изящно сделать бы не получилось.