Чтобы открыть интернет-магазин, нужно решить много технических вопросов.

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

Как можно построить инфраструктуру для интернет-магазина

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

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

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

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

Сам сайт, приложения, сервисы и данные этого магазина нужно где-то разместить, то есть требуется построить инфраструктуру.

Здесь может быть три основных варианта:

  1. Собственное оборудование

    Купить или арендовать «железные» серверы и развернуть все на них. Это дорого, долго и сложно: серверы придется закупать, настраивать и обслуживать. Кроме того, нужно будет самостоятельно разворачивать и обслуживать инфраструктуру для работы вашего решения, например платформу виртуализации и/или контейнеризации приложений.

  2. Виртуальный хостинг

    Вы размещаете сайт на наборе веб-серверов хостинг-провайдера, заранее сконфигурированном под определенный стек инструментов. Он выделяет вам часть ресурсов: место на диске, мощность процессора, объем оперативной памяти. Этот способ быстрый, но не самый удобный: у виртуального хостинга негибкая система оплаты и мало настроек. Кроме того, расширить функциональность сайта в будущем получится только в рамках стандартного стека технологий. Такие хостинги обычно ограничены наиболее популярными технологическими стеками, например позволяют использовать только Apache/MySQL/PhP, а если нужен более редкий инструмент, то установить его не выйдет.

  3. Облачный хостинг

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

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

Уровень сложности 1: разворачиваем интернет-магазин на облачном хостинге с уже установленной CMS

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

Как запустить и настроить решение. Готовый облачный хостинг с уже установленной CMS предлагают многие облачные провайдеры. Например, на платформе Mail.ru Cloud Solutions есть маркетплейс, где можно в пару кликов запустить облачный сервер в нужной конфигурации с предустановленным WordPress, настроить эту CMS и буквально за полчаса получить работающий сайт.

WordPress у Mail.ru Cloud Solutions находится в магазине приложений — его можно установить без долгой настройки виртуальных машин

Для настройки сервера надо будет выбрать подходящую конфигурацию виртуальной машины, размер диска и его тип — от стандартных HDD до быстрых High-IOPS SSD-дисков. Выбор типа диска зависит от требуемой производительности: чем больше посетителей будет у вашего магазина и чем больше вы будете хранить данных, тем производительнее должна быть дисковая подсистема.

Облачный сервер с уже установленной CMS: запустили, настроили, можно работать

Для работы такого хостинга также надо будет настроить DNS, добавить SSL-сертификат, указать внешний IP-адрес — то есть выполнить стандартные настройки, необходимые для доступа к вашему сайту через интернет.

Особенности. Скорость запуска и минимум настроек — большие плюсы готового решения с предустановленным WordPress, однако есть и минусы. Это шаблонное решение, которое подойдет только для несложных проектов или тестовой среды.

Такая виртуальная машина не будет оптимизирована под ваш сайт на 100%, правда, к ней можно прикрутить сложные и самописные решения. Но здесь уже требуется самостоятельное развертывание, сопровождение и настройка, то есть логичнее взять обычный облачный хостинг, если нужны такие возможности. Также в данном решении построить масштабируемую инфраструктуру с механизмами высокой надежности можно только вручную, запустив несколько машин с WordPress и донастроив необходимые механизмы своими силами или с помощью экспертов провайдера. При этом от аппаратных сбоев такая ВМ защищена на уровне платформы.

Уровень сложности 2: разворачиваем интернет-магазин на облачной инфраструктуре

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

Как запустить и настроить решение. Вы арендуете в облаке мощности и создаете ваш персональный виртуальный сервер, на котором автоматически устанавливается выбранная вами операционная система. После этого конфигурируете необходимые серверы (веб-сервер, СУБД и другие), заливаете свой контент и код.

Здесь также можно подобрать оптимальную конфигурацию виртуальных машин, тип и размер диска, добавить особые настройки по заказу: высокопроизводительные процессоры и диски NVMe со скоростью отклика 0.5 мс и SLA 99,95%. Кроме того, можно выбрать операционную систему или загрузить свой образ, то есть вы получаете более гибкие настройки.

Основные настройки виртуального сервера облачного провайдера

Точно так же, как в первом случае, надо будет настроить доступ к вашему сайту через интернет, в том числе настроить DNS, добавить SSL-сертификат, указать внешний IP-адрес, сконфигурировать фаервол для обеспечения безопасности.

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

Для облачных серверов обязательно нужно настроить резервное копирование

Кроме базовых настроек сервера, в этом случае нужна дополнительная работа администраторов компании. Вам надо будет установить на виртуальную машину платформу для работы вашей CMS или приложения, например стек LAMP с MySQL. Потом устанавливаем WordPress, любую другую CMS или любое ваше самописное приложение. У нас есть инструкция о том, как установить WordPress и как установить Joomla!.

Если вы используете стек LAMP, то приложение интернет-магазина и база данных пользуются одними и теми же ресурсами сервера (CPU, память), что может замедлить его работу и усложнить поиск неисправностей. Поэтому часто СУБД выносят отдельно. Для хранения информации о клиентах и транзакциях в интернет-магазинах обычно используют реляционные базы данных вроде MySQL и PostgreSQL. Их можно получить как сервис у провайдера — уже настроенные и полностью готовые к работе.

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

Уровень сложности 3: разворачиваем интернет-магазин с помощью платформенных сервисов работы с контейнерами

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

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

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

Для управления такими контейнерами используют специальные инструменты, один из них — Kubernetes, который сейчас стал стандартом де-факто в этой сфере. Он позволяет быстро запускать контейнеры, распределять между ними нагрузку, мониторить их состояние и при необходимости перезагружать. Такой подход делает систему более отказоустойчивой: Kubernetes автоматически следит за запущенными приложениями и перезапускает их, если где-то возник сбой, в том случае, если параметры сервисов корректно настроены пользователем. Также снижается риск при обновлении ПО: новый код можно выкатить только на часть контейнеров, проверить и только потом распространить обновление на всю систему без прерывания работы сервиса.

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

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

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

Для данных, которые быстро меняются, например каталогов товаров, корзины, списка пользователей или данных о заказах, стоит использовать СУБД, а для их работы нужны диски, то есть стандартные блочные хранилища, в частности HIgh-IOPS SSD или NVMe с высокой скоростью отклика. Они обладают достаточной производительностью, чтобы обеспечить нужную скорость обработки обращений и данных пользователей, значит, ваши покупатели смогут быстро оформлять заказы и просматривать товары.

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

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

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

  1. К одному файлу могут одновременно общаться миллионы пользователей, и скорость загрузки от этого не падает.
  2. Для больших объемов данных хранилище гораздо дешевле традиционных дисков. К примеру, хранение 1 ТБ данных на дисках обойдется примерно в 11 600 ₽/мес., а в S3-хранилище — примерно в 1750 ₽/мес.
  3. Хранилище автоматически расширяется практически неограниченно, вместе с ростом объема файлов. То есть ситуации, что вам не хватит места для новых данных, никогда не возникнет.
  4. У S3-хранилища высокая отказоустойчивость, данные распределены по разным зонам доступности. За счет этого достигается высокий SLA на хранение данных 99,9999%.
  5. Файлы будут лежать не на вашем сайте, а в отдельном месте. Обрабатывать обращения к ним будет сам сервис объектного хранилища. Благодаря этому нагрузка на ваш сервер будет ниже и даже тяжелые видео не замедлят его загрузку.

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

Чтобы лучше понять, как это работает, вспомните любой онлайн-кинотеатр — большинство из них, например Netflix, хранят данные в объектном хранилище. И там вы заходите на сайт, кликаете по видео и сразу же начинаете просмотр — при этом вы попадаете в S3-хранилище, но доступа к изменению ролика или просмотру других файлов в нем у вас нет.

S3-хранилище отличается высокой производительностью, но есть предельный уровень нагрузки, который различается на конкретных проектах. То есть в зависимости от того, как организована работа с данными в приложении и количества обращений, в какой-то момент можно упереться в потолок производительности сервиса. В этом случае надо пересматривать структуру данных и переписывать приложение, либо подключить к хранилищу сеть доставки контента (CDN), что будет дешевле и проще. С помощью технологии CDN медиафайлы вашего интернет-магазина будут быстро загружаться даже у пользователей, которые находятся далеко от серверов — где-нибудь во Владивостоке или в США. Для этого контент дублируется на промежуточных узлах — серверах, которые расположены в разных городах и странах, они работают на быстрых дисках и находятся близко к магистральным каналам связи. Например, для жителя Владивостока сайт будет загружаться с сервера в Приморском крае.

На платформе Mail.ru Cloud Solutions есть облачное хранилище S3. Мы предоставляем его как готовый сервис — все уже настроено и защищено, вам останется только интегрировать хранилище со своим интернет-магазином. Также можно в один клик подключить к нему сеть доставки контента.

Настраиваем безопасность для защиты от ботов и DDoS-атак

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

Можно использовать AntiDDoS-защиту, ее может предоставлять провайдер; если нет, то нужно подключить отдельное решение. Также можно использовать сложные системы по фильтрации трафика приложения, например WAF, Web Application Firewall — защитный экран, предназначенный для веб-приложений и сайтов. Вот что он умеет:

  1. Защита от DDoS-атак

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

  2. Технический анализ трафика

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

  3. Защита от парсинга

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

  4. Защита от подбора логинов и паролей

    Мешает злоумышленникам получить доступ к аккаунтам ваших клиентов. Например, чтобы украсть бонусные баллы или их персональные данные.

  5. Поиск уязвимостей

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

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

Подключаем мониторинг, чтобы следить за работой инфраструктуры и интернет-магазина

Мониторить нужно и инфраструктуру, на которой работает интернет-магазин, и работу самих его сервисов. Мониторинг позволяет собирать метрики работы и вовремя реагировать на инциденты: предупреждать или быстро устранять их.

Примечание

Если вы разворачиваете интернет-магазин на облачном Kubernetes, то в нем уже есть встроенный мониторинг — отдельно его настраивать не требуется.

Если вы разворачиваете магазин на облачных серверах, то для мониторинга можно использовать разные инструменты, например стек ELK. Это три Open Source-инструмента: Elasticsearch, Logstash и Kibana, они используются для анализа, сбора и хранения метрик. Если настроить сбор данных и само приложение так, чтобы оно отправляло данные в ELK, то вы сможете понимать, какие сбои на каких серверах приводят к сбоям в работе интернет-магазина, так как ELK визуально отображает взаимосвязь событий в разных подсистемах.

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

Настраиваем аналитику, чтобы понимать поведение покупателей

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

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

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

Такую систему можно построить самостоятельно: поднять отдельную базу, настроить интеграцию с основной базой, разработать инструменты аналитики. А можно взять готовую аналитическую СУБД или комплексное решение для аналитики больших данных в облаке. Например, в Mail.ru Cloud Solutions доступны аналитические базы данных, такие как Arenadata DB (Greenplum), ClickHouse. Также можно развернуть Hadoop-кластер в несколько кликов.

Что может понадобиться для запуска интернет-магазина в облаке

  1. Серверы для хранения данных и работы интернет-магазина. Взять их в облаке дешевле и быстрее, чем строить свою инфраструктуру. На них можно развернуть сайт из готовых решений, самостоятельно разработанное решение для интернет-магазина или даже запустить сложный проект на контейнерах в Kubernetes как сервис от провайдера.
  2. Объектные хранилища, чтобы дешевле хранить статичные файлы. В облаке можно арендовать уже настроенное хранилище S3 с быстрым доступом и простым управлением.
  3. Средства безопасности, чтобы защитить магазин от DDoS-атак, хакеров и злоумышленников. У облачного провайдера они обычно есть по умолчанию.
  4. Средства аналитики для глубокого анализа поведения клиентов и результатов маркетинговых кампаний. Их также можно развернуть в виде готовых сервисов от провайдера.

Оригинал статьи на VC.ru.