Дизайн сцены с шипами

Java
Дизайн сцены с шипами

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

С точки зрения масштаба спайки можно разделить на большие секунды и малые секунды. Большие секунды относятся к особым фестивалям, таким как Double 11, с крупномасштабными товарами, сверхнизкими ценами и большим трафиком.Малые секунды обычно относятся к некоторым видам деятельности, настроенным самими продавцами, которые назначаются самими продавцами. запустить. По форме его также можно разделить на однопериодные и многопериодные. Но в этом сценарии мы обычно имеем в виду однопериодный крупномасштабный всплеск.

При проектировании шипов приходится сталкиваться с рядом трудностей и сложностей:

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

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

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

структура системы

Предполагая, что в этом году двойные 11 предполагаемых пиковых QPS будут составлять 500 000 (я просто говорю об этом), и согласно нашему обычному опыту, одномашинная машина 8C8G может достичь QPS около 1000, поэтому теоретически нам нужно только Машин 500. Если вы сможете устоять, у вас будут деньги и своевольная воля? Если он спроектирован так, вы можете повернуть направо только тогда, когда вы выходите.

Фильтрация трафика

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

  1. Перед началом события кнопка на странице интерфейса отображается серым цветом, чтобы недействительные клики не генерировали трафик до начала события.
  2. Добавление кода подтверждения или ответ на интерфейс, предотвращающий мгновенный трафик, может сыграть хороший эффект, теперь код подтверждения - это много трюков, и банк вопросов должен быть небольшим элементом, и банк вопросов часто обновляется, хотите насилие Ломать трудно. Я, конечно, знаю, что есть способ искусственного кодирования, но и этот берется, в отличие от машинного безлимитного интерфейса.
  3. Проверка активности, поскольку это деятельность, то участвующие в ней пользователи, условия участия, белый список пользователей и т.п. должны сначала выполнить уровень проверки и перехвата, а также другие, такие как пользовательский терминал, IP-адрес, количество действий участия, проверка пользователей из черного списка. Например, действие в основном направлено на проверку пользователя на стороне приложения, затем пользователи на других терминалах будут заблокированы в соответствии с параметрами, а количество пользователей, участвующих в действиях, может быть проверено по IP, mac-адресу, идентификатору устройства и пользователю. ID, и черный список перехватывается в соответствии с обычными действиями.Удалите некоторых ненормальных пользователей, таких как партия шерсти.
  4. Незаконный перехват запроса, если вышеуказанный перехват выполнен, если все еще есть пользователи, которые могут обойти ограничение, нужно сказать, что это слишком круто. Например в 0:00 на Дабл 11 лимит на ответы на вопросы, так почему же нормальному человеку на ответ на вопрос нужна 1 секунда?Даже если я 30 лет холостяк я не думаю скорость рук может превышать 0,5 секунды, запрос может быть полностью перехвачен.
  5. Текущий лимит, если предположить, что 10 000 элементов убиваются за секунды, у нас 10 серверов, а QPS одной машины 1000, то теоретически его можно захватить за 1 секунду, и можно сделать текущую настройку лимита для микросервисов, чтобы избежать последующих недействительный трафик попадает в базу данных. Ненужный стресс. Существует еще один метод ограничения тока.Это метод ограничения тока, основанный исключительно на удаче, который заключается в случайном смещении периода времени в пределах времени, когда запрос начинается по согласованию с системой, и смещение для каждого запроса отличается ., если он находится в пределах времени смещения, он будет перехвачен, иначе будет пропущен.

оптимизация производительности

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

  1. Страница является статической, и продукты, участвующие в активности seckill, общеизвестны, а страница активности может быть статически обработана и кэширована в CDN. Предположим, у нас размер страницы 300К, какой трафик у 10 миллионов пользователей? Эти запросы требуют внутренних серверов и баз данных, и нагрузку можно себе представить.Запросы пользователей, кэшированные в CDN, не проходят через сервер, что значительно снижает нагрузку на сервер.
  2. Предварительный нагрев активности, инвентаризация активности для активности может быть независимой и не разделяет услугу с обычным инвентарем товаров. зависит от ситуации.
  3. Независимое развертывание. Если ресурсов достаточно, вы можете рассмотреть возможность развертывания отдельной среды для пиковой активности. В этой среде может быть удалена часть потенциально бесполезной логики. Например, вам не нужно рассматривать использование купонов, красных конвертов, и бонусные баллы после размещения заказа.Некоторые сценарии, или Эти сценарии могут быть выпущены асинхронно и равномерно после окончания события. Это всего лишь пример.На самом деле, если вы нацелены только на действие seckill, у вас должно быть много бесполезного бизнес-кода, который можно удалить, что может значительно повысить производительность.

После этих двух шагов наш трафик в конечном итоге должен принять форму воронки.

перепродан

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

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

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

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

план

  1. Сначала спросите, достаточно ли инвентаризации кэша Redis.
  2. Вычитание запасов перед размещением данных заказа может предотвратить возникновение проблем с перепроданностью заказов без запасов.
  3. При вычете инвентаризации сначала вычитается инвентаризация базы данных, а затем вычитается инвентаризация redis, чтобы гарантировать, что в одной и той же транзакции, независимо от того, какой из двух является ненормальным, он будет отменен. Существует проблема, связанная с тем, что повторный вывод может быть успешным.Из-за проблем с сетью возврат не удается, и транзакция откатывается, что приводит к несогласованности базы данных и кеша.Таким образом, фактические продажи меньше, и его можно поместить в следующий раунд шипов.

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

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

Гарантия качества

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

  1. Ухудшение предела тока предохранителя - старая поговорка.Чтобы ограничить ток в зависимости от ситуации измерения давления, вы можете использовать часовой или hystrix. Кроме того, на переднем и заднем концах должен быть переключатель понижения.
  2. Мониторинг, все вышеперечисленное, мониторинг QPS, мониторинг контейнеров, ЦП, кэш, мониторинг ввода-вывода и т. д.
  3. Репетиция, предварительная репетиция масштабных спайков обязательна, и нельзя браться за нее опрометчиво.
  4. Проверяйте, планируйте и проверяйте сумму и количество заказов инвентаря после мероприятия. Есть ли перепроданность? Нормально ли количество? необходимы. Планы могут быть понижены в чрезвычайной ситуации.

Статистика

Как считать данные после завершения мероприятия?

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

Суммировать

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

Полное мероприятие — это полное звено от начала до конца, а в середине есть предварительная репетиционная работа и анализ данных после события, которые являются важными звеньями.