Как нарисовать схему архитектуры системы seckill? Научу вас на практике!

интервью задняя часть
Как нарисовать схему архитектуры системы seckill? Научу вас на практике!

Слёзы, невыносимо!

выпускник блогера4年Вот недавно начался осенний набор.Каждый раз вспоминая свой осенний набор,чувствую,что меня тогда особенно жалко было(菜是原罪), в моем резюме на тот момент был только один пункт农资电商平台, спайковая система в то время была не так популярна (резюме на душу населения秒杀系统).

Первое интервью WeChat

В то время мой Baguwen был в порядке, но мой проект был просто автономной системой.分布式?微服务? Какого черта? , Помни когда微众面试,Да二面, В гостиничном номере интервьюер посмотрел на меня с улыбкой и сказал, позвольте мне сначала нарисовать свой проект.农资电商平台, мой мозг гудит, что? Как рисовать, только один安卓系统,Один前端页面, и后台系统?

Наверное, вот так

image.png

Я вытираю, это слишком简单Ну что, мне рисовать посложнее? Другими словами, я могу назвать это架构? Просто так, между заминками, никакой шерсти не рисовалось... Помню, что-то подобное рисовал в свое время. . Не удивительно, икота

这玩意有点四不像,不说了,丢脸~

image.png

Второе интервью в WeChat

второй раз微众面试С момента выпуска прошел почти год. С менталитетом попробовать, я нашел师姐Внутренний толчок, чем я тогда занимался, гадами занимался. Компания находится относительно недалеко от Weizhong, всего в金蝶Там прокрадитесь после работы и поболтайте с интервьюером некоторое время.八股文, молодец, через некоторое время вынул бумажку:

Давайте нарисуем архитектурную схему вашей текущей краулерной системы!

система в то время部署架构Пусть это выглядит так, это немного проще, чем выглядит выше.

image.png

Но я просто не умею рисовать! ! ! Я думал, что это слишком просто! ! это дело можно назвать架构?

Вскрытие, я не умею рисовать!

Теперь, когда я думаю об этом, это действительно憋屈Ах, молодой! Итак, если вы сейчас оглянетесь назад, как вы можете это нарисовать?

Схема архитектуры развертывания одной системы

image.png

Схема многоуровневой архитектуры гусеничной системы

image.png

Бизнес-архитектура краулерной системы

image.png

Диаграмма архитектуры

С точки зрения описания архитектуры во всех направлениях выше, на самом деле, даже если单体系统Вы также можете рисовать необычные архитектурные схемы! (Почему я тогда этого не сделал!)

Недавно я просматривал контент, связанный с архитектурой (华仔的课), в представлении 4+1 наша система описана со многих сторон, вы можете обратиться к следующему описанию,

image.png

Какова архитектура вашей системы seckill?

Монолитная система

Какими бы замечательными ни были ваши резюме, я думаю, большинство ваших услуг выглядят именно так.猜对的话点个关注, Только浏览器распространяется.

image.png

Итак, как мне описать мою монолитную систему?

Три принципа архитектурного дизайна:

  • 简单原则
  • 合适原则
  • 演进原则

Каждый принцип соответствует системе seckill нашего университета! !

简单原则: Одна система может выполнять все действия нашего сервиса seckill без слишком большого количества зависимостей промежуточного программного обеспечения.

合适原则: В нашем практическом проекте монолитная система является наиболее подходящей. (Главная причина в том, что нет денег! Разделение сервисов, внедрение промежуточного программного обеспечения и развертывание кластеров — все это имеет деньги!)

演进原则: Это легко понять. Архитектура системы не задается при рождении, а развивается с течением времени и потребностями бизнеса.

Суммировать:

Преимущества нашей архитектуры:成本低,系统复杂度低,维护成本低,快速定位问题

Недостаток:稳定性差,并发量低,扩展性弱Ждать

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

разделение обслуживания

Хороший парень, участвовал в научно-техническом конкурсе,资金На месте можно купить更多机器Что ж, тогда вы должны оптимизировать сервис и разделить его на микросервисную систему!

image.png

Какие действия мы предприняли в этой разделенной архитектуре службы?

  • Статическая изоляция ресурсов (CDN加速)
  • прокси-сервер (Nginx)
  • Разделение служб, развертывание независимо от приложений
  • служба связи RPC (rpc框架 & 注册中心)

1. Разделение переднего и заднего концов

В монолитной системе наши статические ресурсы (Html,JS,CSS 和 IMG) могут быть все возвращены через наш сервер, и проблемы:

  • внешний интерфейс代码维护Стоимость относительно высока (стоимость разработки полного стека также высока)
  • Выпуск внешнего кода требует выпуска всей системы
  • сервер带宽,请求资源Занимай и др.

Тогда преимущества разделения передней и задней части очевидны:

  • Независимая поддержка кода (低耦合), низкая стоимость публикации (高效率)
  • Front-end и back-end взаимодействуют через интерфейсы动态数据
  • CDN资源Получите доступ к ускорению и уменьшите нагрузку на серверную часть (高性能)

2. Обратный прокси

反向代理Роль более очевидна, так как наша служба разделена на несколько, то мы и前端При взаимодействии необходимо предоставить общий入口. И этот вход наш反向代理服务器(Nginx). Например: Имя домена службы:https://www.jiuling.com, согласно спокойной спецификации, мы можем пройтиhttps://www.jiuling.com/user/1.0/loginперенаправить запрос на用户服务в интерфейсе входа.

3. Межпроцессное взаимодействие

При разделении услуг в реализации некоторых функций будет задействован服务间相互调用ситуации, например:

image.png

В общих реализациях мы будем использовать注册中心иRPC框架, чтобы реализовать эту возможность. И наша более часто используемая схема реализации:zookeeper & dubbo.

image.png

Зачем использовать инфраструктуру RPC?

когда мы упоминаем об использованииRPC框架Когда, вы когда-нибудь думали об этом,为什么要使用 RPC框架?Каждая услуга предоставляетRESTfulРазве интерфейс не может также завершить связь между службами?

Вот сравнениеRPCиRESTfulРазница в следующем:

  • 数据报文小&传输效率快:RPCНекоторая необходимая информация заголовка в протоколе передачи упрощается, что повышает эффективность передачи.
  • 开发成本低:НапримерDubboFramework, который инкапсулирует логику вызова между сервисами (например:反射,建连и超时控制д.), нужно только разработать соответствующие接口и数据模型Вот и все.
  • 服务治理: В распределенном сценарии у нас есть более одного поставщика услуг, поэтому服务健康,负载均衡и服务流控и другие ситуации, с которыми нужно иметь дело, и эта часть способности находится вrpc & 注册中心В рамках, он был удовлетворен.

Поговорив о преимуществах, давайте еще раз проанализируем его.RPC的缺点:

  • 耦合性强: По сравнению сRESTfulС точки зрения,RPCФреймворки сложно реализовать в межъязыковых сценариях. и版本依赖относительно сильный. Сервис не актуален内网环境После этого услуга не может предоставляться в обычном режиме, а стоимость миграции высока.
  • 内网调用:RPCОн больше подходит для передачи внутри сети, в общедоступной сети он не так безопасен.

Распределенные микросервисы

в предыдущей версии服务拆分, мы основаны на разных业务边界,功能职责, разделенный на несколько子系统, а для разных систем чем он страдает负载压力не совпадают, например:订单服务каждого обработанного запроса耗时较长(Другие услуги не находятся под давлением), чтобы увеличить объем наших заказов, мы можем только расширить возможности订单服务Вот и все, это то, что мы делаем в разделении службы收益, использование производительности улучшилось!

image.png

Из приведенного выше графика видно, что у некоторых сервисов разное ореол, каждый方块, можно понимать как机器, В этой архитектуре, чтобы обеспечить процент успешных заказов и объем заказов, мы в основном ориентируемся на сервер订单服务.

Перед этим давайте посмотрим на нашу中间件Развертывание кластера:

  • mysql 主从架构: Разделение чтения и записи, снижение нагрузки на основную библиотеку, обеспечение нормальной записи данных и размещение данных заказа в библиотеке.
  • zookeeper 主从架构: Гарантируйте доступность реестра, чтобы избежать лавины полных ссылок.
  • redis 哨兵集群: избегатьredisВремя простоя приводит к тому, что большой объем трафика напрямую попадает в базу данных.

резюме

До сих пор система, которую мы разработали сами, в основном завершила всю систему.秒杀系统развилась. Может быть, у всех всегда был вопрос, почему мы пропускаем самые знакомые?MQШерстяная ткань?

На протяжении всей цепочки вызовов у меня есть同步调用способ описать архитектуру этой системы seckill, потому что она уже удовлетворила наши текущие потребности в трафике, в架构设计的原则внутри упоминается,合适原则演进原则. В текущей ситуации удовлетворения спроса на трафик нам нужно сначала подумать о внедрении промежуточного программного обеспечения для обмена сообщениями. Какая проблема решена? Взвесив все за и против, пришло время решить, стоит ли использовать это решение.

высокая производительность

В процессе описанной выше эволюции архитектуры мы проходим服务拆分,垂直扩容,分布式部署и другие способы улучшить производительность нашей архитектуры性能и稳定性, для нашего этапа самоисследования架构演进Этого достаточно для удовлетворения наших потребностей в трафике, но если мы хотим продолжать оптимизировать нашу систему и повышать производительность услуг, мы можем оптимизировать следующие аспекты:

  • Разогрев ресурсов
  • прогрев кеша
  • Асинхронный вызов

1. Разогрев ресурсов

выше服务拆分этап, мы упоминали资源动静分离, статические ресурсы здесь включают:html,js,css,imgЖдать. На этапе нашей деятельности мы можем использовать систему фонового управления для преобразования статических ресурсов действий в товарный сервис.预热в CDN,加速资源Доступ.

资源预热: 通过预先将资源加载到CDN
回源: CDN找不到资源后,会触发源站(商品服务)调用,进行查询对应资源,如果源站存在该资源,则会返回到CDN中进行缓存。
OSS: 实际存储静态资源的服务(可参考阿里云OSS)

image.png

Выше неоднократно упоминалось, что при внедрении технологии необходимо учитывать利和弊,ТакCDN的风险Что тогда?

  • 成本: Это более прямо, просто потратьте больше денег!
  • 带宽: При доступе к большому трафику, может ли CDN поддерживать такую ​​​​большую пропускную способность, трафик, который может поддерживать каждый сервер, ограничен, необходимо учитывать, может ли CDN поддерживать бизнес-трафик.
  • CDN命中率: В случае низкого процента попаданий в CDN, например活动图片, будет меняться каждый час, то при каждой замене картинки срабатывает回源操作, В настоящее время эффективность доступа к ресурсам снизилась.

2. Прогрев кеша

с вышеуказанным静态资源加速по сравнению с,动态数据вам нужно пройти缓存Выполните оптимизацию производительности, клише, почемуredisтак быстро?

  • Один поток (узкого места производительности Redis здесь нет, так что это не преимущество)
  • 多路I/O复用模型
  • 数据结构简单
  • 基于内存操作

image.png

вводитьredisОсновные риски:

  • reidsВремя простоя: в случае развертывания на одном компьютере большое количество вызовов службы истечет по времени, что в конечном итоге приведет к лавине обслуживания. доступныйSentinel集群оптимизация.
  • 缓存击穿: При сильном потоке,缓存MISSи缓存过期В других случаях запросы будут проникать в базу данных, и если база данных не выдержит нагрузки, это вызовет лавину обслуживания. в состоянии пройти布隆过滤器оптимизировать.
  • 数据一致性:缓存数据与DBПроблема согласованности данных должна быть гарантирована стратегией обновления.

3. Асинхронный вызов

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

MQПочему асинхронные вызовы могут повысить производительность наших сервисов?吞吐量Шерстяная ткань?

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

image.png

MQЧасто задаваемые вопросы:

  • 数据一致性
  • 重复消费: повторные push-сообщения из-за повторной доставки сообщений производителем или медленного потребления. Необходимо блокировать и потреблять идемпотент, чтобы обеспечить нормальное потребление.
  • 消息堆积: Когда производственная мощность намного превышает мощность потребления, сообщения будут накапливаться.
  • MQ可用性: В случае простоя MQ необходимо поддерживать синхронное переключение вызовов.

Я не буду вдаваться в подробности здесь, я напишу статью позжеMQ相关的文章.

Высокая доступность

Это не просто увидеть здесь, спасибо за вашу поддержку. Про юзабилити здесь я уже писал статью# "High Availability Actual Combat" - Подскочила станция Б, при чем тут станция А?Заинтересованные могут глянуть.

Высокая доступность в основном может быть получена за счет:

Двойная жизнь в городе

Компьютерные классы, расположенные в разных районах одного города, объединены в выделенную сеть. Расстояние между двумя комнатами обычно几十千米, скорость передачи по сети почти такая же, как в той же компьютерной комнате,降低了系统复杂度、成本.

image.png

Этот режим не может использоваться в экстремальных ситуациях стихийных бедствий, таких как городские地震、水灾, этот метод используется для решения некоторых常规故障например, компьютерный зал火灾、停电、空调故障.

Жить в разных местах

В приведенном выше режиме нет возможности решить аварийное восстановление службы на уровне города, например水灾,地震ждать. Эту проблему можно решить за счет схемы развертывания мультиактива в разных местах.

Но у каждой схемы есть преимущества и недостатки, поэтому недостатки проживания в разных местах в основном отражаются на网络传输и数据一致性по делу!

跨城异地主要问题就是网络传输延迟,例如北京到广州,正常情况下的RTT(Round-Trip Time 往返时延)是50毫秒,
当遇到网络波动等情况,会升到500毫秒甚至1秒,而且会有丢包问题。

物理距离必然导致数据不一致,这就得从“数据”特性来解决,
如果是强一致性要求的数据(如存款余额),就无法做异地多活。

Обратите внимание, не потеряйтесь

Адрес карты:Исходное изображение draw.io

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

я九灵, Детская обувь, которой нужно общаться, может обратить внимание на общественный номер:Java 补习课, Мастер информация из первых рук! Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!

Категории