Тема секкиллинга уже стала широко распространенной темой, но поскольку она приближается к ежегодному Двойному 11, и я обнаружил, что некоторое время назад, будь то Ali или Tencent, некоторые крупные производители все еще часто спрашивают об этой сцене, так что все еще готов говорить.
С точки зрения масштаба спайки можно разделить на большие секунды и малые секунды. Большие секунды относятся к особым фестивалям, таким как Double 11, с крупномасштабными товарами, сверхнизкими ценами и большим трафиком.Малые секунды обычно относятся к некоторым видам деятельности, настроенным самими продавцами, которые назначаются самими продавцами. запустить. По форме его также можно разделить на однопериодные и многопериодные. Но в этом сценарии мы обычно имеем в виду однопериодный крупномасштабный всплеск.
При проектировании шипов приходится сталкиваться с рядом трудностей и сложностей:
-
Как обеспечить стабильность системы в условиях сверхвысокого трафика и параллелизма? Если пиковое значение QPS достигает сотен тысяч, как можно спроектировать систему давления, чтобы она не разрушилась перед лицом огромного потока?
-
Как обеспечить консистенцию данных в конце концов? Например, инвентаризация не может быть перепродано, перепроданностью или заключается в том, что потеря бизнеса или является платформой, пользователи в любом случае не возвращают банк, перепроданности на 325 оговорках в этом году.
Конечно, когда дело доходит до таких крупномасштабных видов деятельности, статистический анализ данных необходимо учитывать. Деятельность не может быть завершена, и эффект неизвестен.
структура системы
Предполагая, что в этом году двойные 11 предполагаемых пиковых QPS будут составлять 500 000 (я просто говорю об этом), и согласно нашему обычному опыту, одномашинная машина 8C8G может достичь QPS около 1000, поэтому теоретически нам нужно только Машин 500. Если вы сможете устоять, у вас будут деньги и своевольная воля? Если он спроектирован так, вы можете повернуть направо только тогда, когда вы выходите.
Фильтрация трафика
По сути, в seckill участвует много пользователей, но количество продуктов ограничено, и не так много пользователей, которые действительно могут его захватить, поэтому первый шаг — отфильтровать большую часть недействительного трафика.
- Перед началом события кнопка на странице интерфейса отображается серым цветом, чтобы недействительные клики не генерировали трафик до начала события.
- Добавление кода подтверждения или ответ на интерфейс, предотвращающий мгновенный трафик, может сыграть хороший эффект, теперь код подтверждения - это много трюков, и банк вопросов должен быть небольшим элементом, и банк вопросов часто обновляется, хотите насилие Ломать трудно. Я, конечно, знаю, что есть способ искусственного кодирования, но и этот берется, в отличие от машинного безлимитного интерфейса.
- Проверка активности, поскольку это деятельность, то участвующие в ней пользователи, условия участия, белый список пользователей и т.п. должны сначала выполнить уровень проверки и перехвата, а также другие, такие как пользовательский терминал, IP-адрес, количество действий участия, проверка пользователей из черного списка. Например, действие в основном направлено на проверку пользователя на стороне приложения, затем пользователи на других терминалах будут заблокированы в соответствии с параметрами, а количество пользователей, участвующих в действиях, может быть проверено по IP, mac-адресу, идентификатору устройства и пользователю. ID, и черный список перехватывается в соответствии с обычными действиями.Удалите некоторых ненормальных пользователей, таких как партия шерсти.
- Незаконный перехват запроса, если вышеуказанный перехват выполнен, если все еще есть пользователи, которые могут обойти ограничение, нужно сказать, что это слишком круто. Например в 0:00 на Дабл 11 лимит на ответы на вопросы, так почему же нормальному человеку на ответ на вопрос нужна 1 секунда?Даже если я 30 лет холостяк я не думаю скорость рук может превышать 0,5 секунды, запрос может быть полностью перехвачен.
- Текущий лимит, если предположить, что 10 000 элементов убиваются за секунды, у нас 10 серверов, а QPS одной машины 1000, то теоретически его можно захватить за 1 секунду, и можно сделать текущую настройку лимита для микросервисов, чтобы избежать последующих недействительный трафик попадает в базу данных. Ненужный стресс. Существует еще один метод ограничения тока.Это метод ограничения тока, основанный исключительно на удаче, который заключается в случайном смещении периода времени в пределах времени, когда запрос начинается по согласованию с системой, и смещение для каждого запроса отличается ., если он находится в пределах времени смещения, он будет перехвачен, иначе будет пропущен.
оптимизация производительности
После фильтрации недопустимого трафика возможно, что 90% ваших недействительных запросов были отфильтрованы, а оставшийся действительный трафик значительно снизит нагрузку на систему. После этого необходимо оптимизировать работу системы.
- Страница является статической, и продукты, участвующие в активности seckill, общеизвестны, а страница активности может быть статически обработана и кэширована в CDN. Предположим, у нас размер страницы 300К, какой трафик у 10 миллионов пользователей? Эти запросы требуют внутренних серверов и баз данных, и нагрузку можно себе представить.Запросы пользователей, кэшированные в CDN, не проходят через сервер, что значительно снижает нагрузку на сервер.
- Предварительный нагрев активности, инвентаризация активности для активности может быть независимой и не разделяет услугу с обычным инвентарем товаров. зависит от ситуации.
- Независимое развертывание. Если ресурсов достаточно, вы можете рассмотреть возможность развертывания отдельной среды для пиковой активности. В этой среде может быть удалена часть потенциально бесполезной логики. Например, вам не нужно рассматривать использование купонов, красных конвертов, и бонусные баллы после размещения заказа.Некоторые сценарии, или Эти сценарии могут быть выпущены асинхронно и равномерно после окончания события. Это всего лишь пример.На самом деле, если вы нацелены только на действие seckill, у вас должно быть много бесполезного бизнес-кода, который можно удалить, что может значительно повысить производительность.
После этих двух шагов наш трафик в конечном итоге должен принять форму воронки.
перепродан
В дополнение к стабильности сервиса в условиях высокой параллелизма и большого трафика, оставшаяся часть всплеска, вероятно, заключается в том, как гарантировать, что инвентарь не будет перепродан.Можно также сказать, что окончательная согласованность гарантирована. Вообще говоря, есть два способа разместить заказ и инвентарь:
-
Запасы вычитаются сразу после размещения заказа, что является наиболее распространенной практикой. Однако ситуация, упомянутая во втором пункте, может возникнуть в случае.
-
После оплаты инвентарь вычитается.Я сталкивался с такой схемой в гостиничном бизнесе.После того, как недорогие номера высвобождаются, спекулянты размещают заказы на изъятие инвентаря, поэтому обычные пользователи не могут размещать заказы, а затем спекулянты могут продавайте их пользователям по чуть более высокой цене. Получайте от этого прибыль, поэтому в некоторых действиях будет практика снятия инвентаря после успешной оплаты.Однако этот метод более сложен в реализации и может привести к большому количеству недействительных ордеров, что неприменимо в сцене seckill..
Для seckill рекомендуется выбрать метод размещения заказа с вычетом запасов, что является относительно простым и распространенной практикой.
план
- Сначала спросите, достаточно ли инвентаризации кэша Redis.
- Вычитание запасов перед размещением данных заказа может предотвратить возникновение проблем с перепроданностью заказов без запасов.
- При вычете инвентаризации сначала вычитается инвентаризация базы данных, а затем вычитается инвентаризация redis, чтобы гарантировать, что в одной и той же транзакции, независимо от того, какой из двух является ненормальным, он будет отменен. Существует проблема, связанная с тем, что повторный вывод может быть успешным.Из-за проблем с сетью возврат не удается, и транзакция откатывается, что приводит к несогласованности базы данных и кеша.Таким образом, фактические продажи меньше, и его можно поместить в следующий раунд шипов.
Этот подход может решить проблему в определенной степени, но могут быть и другие проблемы. Например, когда на одну и ту же запись инвентаризации приходится большое количество запросов на обновление, большое количество конкуренций блокировок, вызванных блокировками строк, приведет к резкому падению tps базы данных, и производительность не сможет соответствовать требованиям.
Другой способ — поставить в очередь на уровне обслуживания.Для того же идентификатора товара, то есть база данных является инвентарной записью, создайте очередь в памяти.Сериализация для вычета инвентаря может в определенной степени уменьшить давление параллелизма базы данных. .
Гарантия качества
Чтобы обеспечить стабильность системы и предотвратить ее уничтожение за считанные секунды, необходимо провести некоторый контроль качества.
- Ухудшение предела тока предохранителя - старая поговорка.Чтобы ограничить ток в зависимости от ситуации измерения давления, вы можете использовать часовой или hystrix. Кроме того, на переднем и заднем концах должен быть переключатель понижения.
- Мониторинг, все вышеперечисленное, мониторинг QPS, мониторинг контейнеров, ЦП, кэш, мониторинг ввода-вывода и т. д.
- Репетиция, предварительная репетиция масштабных спайков обязательна, и нельзя браться за нее опрометчиво.
- Проверяйте, планируйте и проверяйте сумму и количество заказов инвентаря после мероприятия. Есть ли перепроданность? Нормально ли количество? необходимы. Планы могут быть понижены в чрезвычайной ситуации.
Статистика
Как считать данные после завершения мероприятия?
- внешний интерфейс
- Панель данных, благодаря управлению фоновыми службами и системой мониторинга, вы можете интуитивно видеть мониторинг и данные некоторых действий через панель инструментов.
- Автономный анализ данных, данные о действиях после события могут быть синхронизированы с автономным хранилищем данных для дальнейшего анализа и статистики.
Суммировать
В целом, перед лицом огромного объема трафика наш подход - сначала отфильтровать недействительные трафики через различные условия, сделать трафик пики, а затем оптимизировать существующую производительность системы, такую как статические страницы, прогрессирование продуктов инвентаря также может Быть выделенным из других сред благодаря самостоятельному развертыванию. Наконец, проблемы консистенции и запасов кэша, не перепроданные в высоком совпадении, должны быть решены для предотвращения большого количества параллелизма от душирования вашей базы данных.
Полное мероприятие — это полное звено от начала до конца, а в середине есть предварительная репетиционная работа и анализ данных после события, которые являются важными звеньями.