Внутренние сети часто используют соединения 1 Гбит / с или быстрее. Оптоволоконные соединения или соединения позволяют значительно увеличить пропускную способность между серверами. Теперь представьте себе средний размер ответа JSON от API. Сколько таких ответов можно передать по соединению 1 Гбит / с за одну секунду?
Давайте на самом деле делать математику. 1 Гбит / с - 131 072 КБ в секунду. Если средний ответ JSON составляет 5 КБ (что довольно много!), Вы можете отправлять 26 214 ответов в секунду по сети только одной парой машин . Не так уж и плохо, не так ли?
Вот почему подключение к сети обычно не является узким местом.
Другим аспектом микросервисов является то, что вы можете легко масштабировать. Представьте себе два сервера, один из которых содержит API, а другой использует его. Если когда-либо соединение становится узким местом, просто добавьте два других сервера, и вы сможете удвоить производительность.
Это когда наши предыдущие 26 214 ответов в секунду становятся слишком маленькими для масштаба приложения. Вы добавляете другие девять пар, и теперь вы можете обслуживать 262 140 ответов.
Но вернемся к нашей паре серверов и сделаем несколько сравнений.
Если средний не кэшированный запрос к базе данных занимает 10 мс, вы ограничены 100 запросами в секунду. 100 запросов. 26 214 ответов. Достижение скорости 26 214 ответов в секунду требует большого объема кэширования и оптимизации (если ответу действительно нужно сделать что-то полезное, например, запрос к базе данных; ответы в стиле «Hello World» не подходят).
На моем компьютере прямо сейчас DOMContentLoaded для домашней страницы Google произошло 394 мс. после того, как запрос был отправлен. Это менее 3 запросов в секунду. Для домашней страницы Programmers.SE это произошло 603 мс. после того, как запрос был отправлен. Это даже не 2 запроса в секунду. Кстати, у меня есть интернет-соединение со скоростью 100 Мбит / с и быстрый компьютер: многие пользователи будут ждать дольше.
Если узким местом является скорость сети между серверами, эти два сайта могут буквально выполнять тысячи вызовов различным API при обслуживании страницы.
Эти два случая показывают, что сеть, вероятно, не будет вашим узким местом в теории (на практике вы должны выполнить фактические тесты и профилирование, чтобы определить точное местоположение узкого места вашей конкретной системы, размещенной на определенном оборудовании). Гораздо важнее время, потраченное на выполнение реальной работы (будь то SQL-запросы, сжатие и т. Д.) И отправку результата конечному пользователю.
Подумайте о базах данных
Обычно базы данных размещаются отдельно от веб-приложения, использующего их. Это может вызвать беспокойство: как насчет скорости соединения между сервером, на котором размещено приложение, и сервером, на котором размещена база данных?
Похоже, что бывают случаи, когда скорость соединения становится проблематичной, то есть когда вы храните огромные объемы данных, которые не должны обрабатываться самой базой данных и должны быть доступны прямо сейчас (то есть большие двоичные файлы). Но такие ситуации редки: в большинстве случаев скорость передачи не так велика по сравнению со скоростью обработки самого запроса.
Когда скорость передачи действительно имеет значение, это когда компания размещает большие наборы данных на NAS, и к NAS одновременно обращаются несколько клиентов. Вот где SAN может быть решением. Это, как говорится, это не единственное решение. Кабели Cat 6 могут поддерживать скорость до 10 Гбит / с; Соединение может также использоваться для увеличения скорости без замены кабелей или сетевых адаптеров. Существуют и другие решения, включающие репликацию данных на нескольких NAS.
Забудьте о скорости; думать о масштабируемости
Важным моментом веб-приложения является возможность масштабирования. Хотя реальные характеристики имеют значение (потому что никто не хочет платить за более мощные серверы), масштабируемость гораздо важнее, потому что она позволяет вам использовать дополнительное оборудование при необходимости.
Если у вас не очень быстрое приложение, вы потеряете деньги, потому что вам понадобятся более мощные серверы.
Если у вас есть быстрое приложение, которое не может масштабироваться, вы потеряете клиентов, потому что не сможете реагировать на растущий спрос.
Точно так же виртуальные машины десять лет назад воспринимались как огромная проблема с производительностью. Действительно, размещение приложения на сервере по сравнению с размещением его на виртуальной машине оказало существенное влияние на производительность. Хотя сегодня этот разрыв намного меньше, он все еще существует.
Несмотря на эту потерю производительности, виртуальные среды стали очень популярными благодаря гибкости, которую они дают.
Как и в случае скорости сети, вы можете обнаружить, что виртуальная машина является фактическим узким местом, и с учетом вашего фактического масштаба вы сэкономите миллиарды долларов, размещая свое приложение напрямую, без виртуальных машин. Но это не то, что происходит с 99,9% приложений: их узкое место находится где-то еще, а недостаток потери нескольких микросекунд из-за ВМ легко компенсируется преимуществами аппаратной абстракции и масштабируемости.