Проектирование с поддержкой горизонтального масштабирования
Если вертикальное масштабирование решения не обеспечивает требуемой масштабирумости
из-за достижения предельных показателей для процессора, подсистемы ввода/вывода или
памяти, необходимо выполнять горизонтальное масштабирование и вводить дополнительные
серверы. Для обеспечения эффективного горизонтального масштабирования приложения при
проектировании пользуйтесь следующими практиками:
Узкие места идентификации и горизонтального масштабирования. Часто узким
местом являются совместно используемые плохо масштабируемые в вертикальном
направлении ресурсы. Например, имеется единственный экземпляр SQL Server, с
которым работают множество серверов приложений. В этом случае разделение
данных таким образом, чтобы они могли обслуживаться несколькими
экземплярами SQL Server, обеспечит возможность горизонтального
масштабирования решения. Если существует вероятность того, что узким местом
станет сервер базы данных, предусмотрите секционирование данных при
проектировании, это избавит от многих проблем в будущем.
Слабо связанный и многослойный дизайн. Слабо связанный многослойный дизайн
с четкими интерфейсами, которые могут использоваться удаленно, проще
масштабировать горизонтально, чем дизайн, использующий тесно связанные слои с
детализированными интерфейсами. Многослойный дизайн будет иметь
естественные точки разделения, что делает его идеальным для горизонтального
масштабирования в границах уровней. Главное, правильно определить границы.
Например, бизнес-логику проще перенести в ферму серверов приложений
среднего уровня с балансировкой нагрузки.
Компромиссы и последствия их принятия
Следует учесть аспекты масштабируемости, которые могут быть разными для разных слоев,
уровней или типов данных. Выявление необходимых компромиссов позволит увидеть, в каких
аспектах имеется гибкость, а в каких нет. В некоторых случаях вертикальное масштабирование
с последующим горизонтальным масштабированием с применением Веб-серверов или
серверов приложений не является наилучшим подходом. Например, можно установить 8-
процессорный сервер, но из соображений экономии, скорее всего, вместо одного большого
сервера будут использоваться несколько меньших серверов.
С другой стороны, в определенных ситуациях, в зависимости от роли данных и их
использования, вертикальное масштабирование с последующим горизонтальным
масштабированием может быть оптимальным подходом для серверов баз данных. Однако
возможности балансировки нагрузки и обработки отказов не бесконечны, и количество
серверов, которые могут быть охвачены этими процессами, ограничено. Также влияние
оказывают и другие аспекты, такие как секционирование базы данных. Кроме технических
вопросов и вопросов производительности, нельзя забывать об эксплуатации и управлении и
об общей стоимости всей системы.
Как правило, выполняется оптимизация цены и производительности в рамках, налагаемых
всеми остальными ограничениями. Например, использование четырех 2-процессорных Веб-