Рапсодия дизайна системы Spike

Redis задняя часть .NET дизайн

Привет, Руди, в этот раз мы собираемся провести мероприятие Давай вместе возьмем 100 купонов на 1000 юаней. Вы видите, как это сделать? Сейчас количество бронирований составляет около 2w человек. Я тру его, убиваю за секунды, мне приходится думать о том, как использовать имеющиеся у меня ресурсы для выполнения мгновенной обработки с высокой степенью параллелизма.

Камень других гор

Особенности шипа

  • Влияние на существующий бизнес веб-сайта
  • Мгновенный высокий параллелизм, но количество шипов ограничено. Действительно действительные запросы ограничены. И вообще, горячих данных больше.
  • Увеличение нагрузки на пропускную способность сети и сервера.
  • Упрощение бизнес-логики

в общем

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

Решение

  • Справедливость:

    • Механизм антищетки - ограничение количества посещений пользователей в течение n секунд,
    • код верификации
    • Синхронизация времени обратного отсчета и обратного отсчета
    • Зомби-аккаунт против смахивания - система реального имени на стороне бизнеса
  • изолировать:

    • Изоляция бизнеса: Система второго уничтожения — это краткосрочная обработка с высокой степенью параллелизма, чтобы предотвратить воздействие на другие обычные предприятия.Его следует развертывать независимо.
    • Динамическая и статическая изоляция: Second-kill page максимально снижает свою зависимость от фона, большинство из них уходит в CDN, и лишь небольшое количество динамических данных запрашивает сервер.
  • Давление роста пропускной способности сети и сервера:

    • Блокируйте как можно больше недействительных запросов как можно ближе к пользователю.
    • Уменьшите возврат избыточных данных
  • Гарантия быстрого интерфейса убийства:

    • Интерфейс seckill достаточно упрощен
    • Асинхронная обработка сложной логики
    • Блокируйте как можно больше недействительных запросов как можно ближе к пользователю.
    • считывать кеш
  • Согласованность данных:

    • Перехватывайте большое количество недопустимых запросов перед уровнем данных и обеспечивайте согласованность данных через промежуточные уровни данных, такие как redis/db.
  • Расширяемость:

    • Многоуровневое кэширование: на каждом уровне кэшируйте как можно больше для перехвата недействительных запросов.

Вариант первый

秒杀系统设计-方案一.png
Seckill System Design-Scheme 1.png
  • Преимущества и описание:

    • Реализация относительно проста, и она может выполнять некоторые пиковые действия.
    • Статические ресурсы внешнего интерфейса переходят в CDN
    • Фронтенд перехватывает до и после seckill.Во время seckill каждый пользователь отправляет запрос на бэкэнд только один раз. Он может заблокировать 99% недействительных кликов начинающих пользователей.
    • Используйте redis (setnx, incrby/decrby и другие атомарные операции), mysql (для обновления блокировки записи) для достижения резкого контроля запасов.
  • недостаток:

    • Больше полагаться на Redis
    • Пользователи Spike Filter Условие становится узким местом
    • Деловая связь по-прежнему серьезна

Вариант 2

秒杀系统设计-方案二.png
Дизайн-план системы Seckill 2.png
  • Преимущества и описание:

    • Увеличьте локальный кеш одной машины, который может поддерживать параллельное расширение машины и сопротивляться большему количеству запросов.
    • Добавьте mq, выполните асинхронную обработку, отделите сложную бизнес-логику
  • недостаток:

    • Робот не ползает. Что делать, если я убиваю несколько продуктов?
    • Есть ли понижения?
    • Слой данных по-прежнему представляет собой одну точку

третье решение

.....

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