«Ситилинк» — один из крупнейших электронных дискаунтеров с широким ассортиментом и большой сетью магазинов и складов. На 2020 год оборот онлайн-продаж у компании составил 132,7 млрд рублей, что делает ее третьей по величине в России.
В 2010 году все данные «Ситилинк» о товарных позициях, включая их наличие на складе и цену, хранили в реляционной базе данных. Для доступа к ней использовали монолитный сервис на PHP-фреймворке Symfony. Год от года нагрузка росла, и реляционная база данных перестала справляться с нагрузкой.
Долгое время в «Ситилинке» использовали систему кэширования. Она снижала нагрузку на базу данных при чтении и записи. Однако система постоянно усложнялась, нужно было инвалидировать кэш и гарантировать целостность данных на случай перегрузки. В определенный момент размер кэша достиг 100 ГБ, и стало выгоднее не кэшировать данные, а хранить их в in-memory базе данных.
Объяснить такой рост данных и всю сложность в планировании архитектуры могут четыре основных фактора:
Высокая доступность даже при потере одного из ЦОДов
Нагрузка до 2 млн записей в минуту и до 40 тыс. чтений в минуту
Низкие накладные расходы на запуск экземпляра: один разработчик может за одну минуту развернуть новый экземпляр
Простое масштабирование и контейнеризация
Разработчики протестировали многие СУБД. Часть не соответствовала ACID, у других была сложная и запутанная архитектура. В 2018 году в рамках пробной эксплуатации применили Tarantool в режиме master-master-репликации. После этого команда попыталась внедрить Tarantool как монолитную замену уже применявшейся СУБД. Но тестирование показало, что использовать Tarantool как монолитное решение в высоконагруженной системе неэффективно. Поэтому разработчики пошли следующим путем.
Первое: высокая доступность системы в случае отказа сервера или целого ЦОДа. «Ситилинк» хранит свои данные в двух ЦОДах. В каждом из них есть несколько серверов для запуска баз данных. На каждом сервере может быть несколько экземпляров Tarantool — это зависит от объема данных в каждом. На случай отказа у каждого экземпляра базы данных в первом ЦОДе всегда есть реплика во втором ЦОДе.
Второе ключевое преимущество master-master репликации Tarantool
состоит в том, что она позволяет быстро и легко собрать
систему с сине-зеленым развертыванием (blue-green deployment).
При таком развертывании трафик незаметно для пользователей постепенно
переносится со старой версии приложения или сервиса
на новую.
В итоге решение позволяет легко выдерживать нагрузку
до 2 млн записей в минуту и поддерживать каталог
товаров в актуальном состоянии в любой момент времени.
Время полного обновления каталога 3 секунды вместо 10-30 минут.
Менее 30 мс. задержка предоставления данных
70 экземпляров баз данных. Под самые высоконагруженные сервисы
Без кэширования, проще код, актуальнее данные
Одна минута вместо двух недель. Time-to-market с переходом на DBaaS
Рост доступности
Специалисты Tarantool свяжутся с вами по оставленным контактам