Как разделить функциональность на отдельные сервисы? - PullRequest
1 голос
/ 16 января 2012

Каков наилучший способ разбить массивное веб-приложение, построенное на стандартной веб-среде, такой как Ruby on Rails или Django, на маленькие кусочки и распределить их по большому количеству серверов? Если мы рассмотрим разбиение в сервисах RESTful и сервис-ориентированный дизайн или архитектуру, то можно было бы использовать один из методов, названных Полом Диксом в его книге «Сервис-ориентированный дизайн с Ruby on Rails»:

  • Разделение на логическую функцию
  • Разделение на частоты чтения / записи
  • Разделение на минимизацию соединений
  • Разбиение на скорость итерации

Является ли предпочтительным разделение по логическим функциям и бизнес-логике, разделение по частоте чтения / записи или разделение по минимизации объединений и обращений к базе данных? Другой возможный выбор - разные типы контента: идентификаторы, (социальные) графики, карты, файлы, изображения и т. Д. Обычно, например, хранят изображения на Amazon S3 или получают карты с помощью Google Maps. Каковы лучшие практики?

1 Ответ

2 голосов
/ 18 января 2012

Может быть, стоит взглянуть на интернет-гигантов.Amazon и eBay известны сервис-ориентированным подходом.Это интернет-гиганты, которые делят все на услуги.

ebay : Рэнди Шоуп объясняет ряд лучших практик на eBay по созданию крупномасштабных веб-сайтов, например, в этой презентации о Архитектурных принципах eBay и соответствующих статья об уроках от eBay .Ebay разделы все.Каждая проблема разбита на управляемые куски в нескольких измерениях по данным, нагрузке и / или схеме использования.Два основных шаблона разбиения: (1) функциональная сегментация и (2) горизонтальное разделение, уровень базы данных и приложения сначала сегментируется по функциональности, а второй - горизонтально.Рэнди говорит, что функциональная сегментация и функциональная декомпозиция являются наиболее важным методом, связанные части функциональности связаны друг с другом, а несвязанные части функциональности - отдельно.Пол Дикс говорит то же самое в своей книге: «Как правило, вы хотите разделить службы на основе их логической функции». Архитектура Ebay имеет около 200 групп функциональности, называемых «приложениями».Уровень приложений, который работает на 16 000 серверов приложений, в архитектуре ebay разделен на 220 отдельных пулов приложений (продажа, поиск, просмотр товаров, торги, проверка и т. Д.).Уровень базы данных ebay содержит более тысячи различных логических баз данных на 400 хостах, где базы данных сегментированы по функциональным областям.ebay написал свой собственный слой ORM, называемый Data Access Layer (DAL), который занимается разделением базы данных.

Amazon : В Amazon все разделено на службы.Сервис-ориентированная архитектура (SOA) - это фундаментальная абстракция для технологий Amazon. Архитектура Amazon.com не только подразделяется на сервисы, но даже разработчики в Amazon организованы в группы вокруг сервисов.Amazon - это действительно экосистема многих внутренних стартапов, которые имеют свои собственные данные и собственный API.Сервис - это то, что управляется и принадлежит небольшой команде разработчиков. Платформа Amazon.com состоит из сотен сервисов, от примитивных низкоуровневых базовых сервисов (Storage, Compute, Queuing и т. Д.) До агрегированных высокоуровневых сервисов, таких как Identity Management, Content Generation &Discovery Продукт и предложения управления, обработки заказов, платежей или выполнения и обслуживания клиентов.Чтобы создать страницу сведений о продукте для клиента, посещающего Amazon.com, программное обеспечение вызывает от 200 до 300 сервисов, чтобы предоставить персонализированный опыт для этого клиента.

Twitter использует сервисы, которые соответствуютдля различных типов контента, идентификаторов, графиков, URL-адресов и т. д. Он использует Snowflake для генерации идентификаторов. Snowflake - это сетевой сервис для генерации уникальных идентификационных номеров в высоком масштабе.Twitter использует FlockDB в качестве хранилища социальных графов. FlockDB - это распределенная графовая база данных для хранения списков смежности, используемая Twitter.Он использует SpiderDuck в качестве сборщика URL. SpiderDuck извлекает все URL-адреса, которыми обмениваются твиты, в режиме реального времени, анализирует загруженный контент для извлечения интересующих метаданных и делает их доступными для других служб Twitter в течение секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...