Торговля 1Cloud Ru
438

Сколько серверов нужно интернет-магазину?

В этой статье мы рассмотрели возможные варианты архитектуры информационной системы на примере интернет-магазина.

В закладки

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

Вопрос в том, как разместить это программное обеспечение? Сколько серверов задействовать?

Очевидно, можно взять одну мощную машину и установить все требующиеся программы на неё. А можно каждой службе выделить по серверу и, при необходимости, связать их между собой по сети.

Сказать заранее, какой из подходов является более правильным, невозможно. У каждого из них есть свои преимущества и недостатки. Выбирать нужно с учётом реальных потребностей и экономической целесообразности.

Рассмотрим возможные варианты архитектуры информационной системы на примере интернет-магазина. Практически в каждом из них есть веб-сервер и база данных.

Всё в одном

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

Информационная система, развернутая на одном сервере

При этом имеет существенное значение, какой это будет сервер: аппаратный или виртуальный.

В случае выбора виртуального сервера — его характеристики вы сможете легко менять. Если нагрузка на интернет-магазин возросла, вычислительную мощность виртуального сервера можно быстро увеличить, а если снизилась — уменьшить.

При этом нужно понимать, что такие изменения имеют пределы. У виртуальной машины они намного шире, чем у «железной», но они всё-таки имеются.

Потенциальные недостатки такого варианта архитектуры: ограничения в производительности, масштабируемости, гибкости, безопасности.

Витрина отдельно, данные отдельно

Следующим шагом в развитии интернет-магазина и любого другого интернет-сервиса может стать размещение его публичной части («витрины») и базы данных на разных серверах.

Это позволит точнее и рациональнее использовать оплаченные вычислительные ресурсы. Дело в том, что ситуации в разных информационных системах бывают разные. В одних — большая часть нагрузки приходится на обработку данных, то есть на веб-сервер; в других — на хранение.

Кроме того, такая конфигурация позволяет дополнительно защитить данные за счёт большей сетевой изоляции от интернета. Например, доступ к серверу с базой данных можно разрешить только со стороны веб-сервера. Этот вариант архитектуры показан на следующем рисунке.

Интернет-магазин, работающий на двух серверах

Из недостатков такого варианта архитектуры можно указать следующие: 1) придётся администрировать несколько серверов; 2) потребуется больше сетевых настроек; 3) сохранятся потенциальные ограничения в масштабировании, хоть и менее жёсткие, чем в случае одного сервера.

Группа серверов

Реальную нагрузку на интернет-магазин предсказать очень сложно. День недели, время суток, сезон, удачная рекламная кампания — всё это может изменить число активных пользователей в разы, если не на порядок.

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

В зависимости от особенностей организации таких групп, их называют пулами или кластерами.

Информационная система интернет-магазина с пулом веб-серверов

Серверы, образующие пул, удобнее унифицировать. При одинаковой конфигурации ими будет легче управлять, и повысится их взаимозаменяемость.

Группировать можно не только серверы приложений, но и серверы баз данных. Это целесообразно, когда бо́льшая часть нагрузки приходится не на представление данных, а на их запись или выборку.

Для обеспечения слаженной работы группы серверов потребуется балансировщик нагрузки.

Однако при размещении базы данных на нескольких серверах необходимы дополнительные механизмы поддержания её целостности, например, репликация, шардинг и т. п. Здесь углубляться в эти вопросы мы не станем.

Горячий резерв

Как известно, ничто не может иметь 100-процентной надёжности. Какой-то из серверов системы может выйти из строя. В такой ситуации важно как можно скорее восстановить её работоспособность, и для этого проще и быстрее всего заменить неисправный элемент.

В системах, построенных на физическом оборудовании, на этот случай приходится держать запасные серверы. Они должны быть настроены и готовые к тому, чтобы быстро заменить вышедшие из строя.

Шаблон сервера

Виртуальная облачная среда при необходимости позволяет создавать новые экземпляры серверов за считанные минуты. В качестве их прототипа можно использовать либо заранее подготовленный шаблон, либо один из работающих серверов. Для копирования его даже не придётся останавливать.

Таким образом, при использовании облачной инфраструктуры вам не нужно держать избыточное число запасных серверов. В любой момент вы сможете получить их столько, сколько потребуется.

Быстрое добавление серверов из шаблона

Репликация данных

Если для сервера приложений можно заранее подготовить шаблон, то к серверу базы данных такой подход неприменим, потому что его содержимое меняется слишком быстро.

В этом случае нужна не просто копия рабочего сервера, а постоянно обновляемая копия. Соответствующая процедура называется репликацией. Любое изменение на рабочем сервере переносится на запасной с минимальной задержкой.

Таким образом, если основной сервер по каким-то причинам выйдет из строя, на запасном сервере будут содержаться все актуальные данные, и он сможет заменить неисправный. Это переключение можно автоматизировать.

Постоянно обновляемая копия базы данных 1cloud

Заключение

Если вы запускаете небольшой проект, начните с одного сервера — управляться с ним будет удобнее и проще.

Если ваш проект стабилизировался и обрёл будущее, распределите свою информационную систему по разным серверам. Например, разделите базу данных и веб-сервер.

Если нагрузка на какой-то из ваших серверов резко возросла, просто увеличьте его вычислительную мощность, а затем разбирайтесь с полезностью этой нагрузки.

Если ваш сервис стал популярным (ура!), и потребность в производительности и надёжности увеличилась, примените пулы и кластеры серверов.

В этом контексте интересно посмотреть на статистику сервиса аренды инфраструктуры в облаке 1cloud.

Диаграмма хорошо иллюстрирует тот факт, что число небольших проектов всегда больше числа крупных. Это нормальный эволюционный процесс.

Вполне естественно, что все стремятся побыстрее протестировать свою бизнес-идею. В случае успеха можно развивать информационную систему, улучшая её архитектуру и наращивая вычислительную мощность.

Например, один из клиентов 1cloud использует в своей информационной системе более 200 виртуальных машин.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "1Cloud Ru", "author_type": "self", "tags": [], "comments": 4, "likes": 13, "favorites": 20, "is_advertisement": false, "subsite_label": "trade", "id": 50344, "is_wide": false, "is_ugc": true, "date": "Wed, 07 Nov 2018 12:14:52 +0300" }
{ "id": 50344, "author_id": 187452, "diff_limit": 1000, "urls": {"diff":"\/comments\/50344\/get","add":"\/comments\/50344\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/50344"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199122 }

4 комментария 4 комм.

Популярные

По порядку

2

Достойный обзор. Для каких, интересно, целей клиент использует 200 виртуальных машин... Тоже для интрнет-магазина? Не перебор?

Ответить
1

К сожалению, не можем ответить на ваш вопрос, поскольку никто, кроме самого клиента, не имеет доступ к его информации в нашем сервисе. В этом и заключается безопасность хранения и обработки данных в облаке.

Ответить
1

Доступно объяснили, только все равно не понятно, когда нужно переходить на более сложную архитектуру? Зачем вообще брать один сервер, если изначально лучше брать отдельные серверы для базы данных и “витрины”, как вы выражаетесь?

Ответить
1

Спасибо!

Кристина, любой проект разумно сначала протестировать, чтобы понять, насколько жизнеспособна идея. Для этого периода достаточно использовать один сервер. Это позволит не переплачивать за ресурсы, которые пока не востребованы в проекте. Как говорится, больше не значит лучше.

Ответить
0
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Команда калифорнийского проекта
оказалась нейронной сетью
Подписаться на push-уведомления
{ "page_type": "default" }