Слёзы, невыносимо!
выпускник блогера4年Вот недавно начался осенний набор.Каждый раз вспоминая свой осенний набор,чувствую,что меня тогда особенно жалко было(菜是原罪), в моем резюме на тот момент был только один пункт农资电商平台, спайковая система в то время была не так популярна (резюме на душу населения秒杀系统).
Первое интервью WeChat
В то время мой Baguwen был в порядке, но мой проект был просто автономной системой.分布式?微服务? Какого черта? , Помни когда微众面试,Да二面, В гостиничном номере интервьюер посмотрел на меня с улыбкой и сказал, позвольте мне сначала нарисовать свой проект.农资电商平台, мой мозг гудит, что? Как рисовать, только один安卓系统,Один前端页面, и后台系统?
Наверное, вот так
Я вытираю, это слишком简单Ну что, мне рисовать посложнее? Другими словами, я могу назвать это架构? Просто так, между заминками, никакой шерсти не рисовалось... Помню, что-то подобное рисовал в свое время. . Не удивительно, икота
这玩意有点四不像,不说了,丢脸~
Второе интервью в WeChat
второй раз微众面试С момента выпуска прошел почти год. С менталитетом попробовать, я нашел师姐Внутренний толчок, чем я тогда занимался, гадами занимался. Компания находится относительно недалеко от Weizhong, всего в金蝶Там прокрадитесь после работы и поболтайте с интервьюером некоторое время.八股文, молодец, через некоторое время вынул бумажку:
Давайте нарисуем архитектурную схему вашей текущей краулерной системы!
система в то время部署架构Пусть это выглядит так, это немного проще, чем выглядит выше.
Но я просто не умею рисовать! ! ! Я думал, что это слишком просто! ! это дело можно назвать架构?
Вскрытие, я не умею рисовать!
Теперь, когда я думаю об этом, это действительно憋屈Ах, молодой! Итак, если вы сейчас оглянетесь назад, как вы можете это нарисовать?
Схема архитектуры развертывания одной системы
Схема многоуровневой архитектуры гусеничной системы
Бизнес-архитектура краулерной системы
Диаграмма архитектуры
С точки зрения описания архитектуры во всех направлениях выше, на самом деле, даже если单体系统Вы также можете рисовать необычные архитектурные схемы! (Почему я тогда этого не сделал!)
Недавно я просматривал контент, связанный с архитектурой (华仔的课), в представлении 4+1 наша система описана со многих сторон, вы можете обратиться к следующему описанию,
Какова архитектура вашей системы seckill?
Монолитная система
Какими бы замечательными ни были ваши резюме, я думаю, большинство ваших услуг выглядят именно так.猜对的话点个关注, Только浏览器распространяется.
Итак, как мне описать мою монолитную систему?
Три принципа архитектурного дизайна:
简单原则合适原则演进原则
Каждый принцип соответствует системе seckill нашего университета! !
简单原则: Одна система может выполнять все действия нашего сервиса seckill без слишком большого количества зависимостей промежуточного программного обеспечения.
合适原则: В нашем практическом проекте монолитная система является наиболее подходящей. (Главная причина в том, что нет денег! Разделение сервисов, внедрение промежуточного программного обеспечения и развертывание кластеров — все это имеет деньги!)
演进原则: Это легко понять. Архитектура системы не задается при рождении, а развивается с течением времени и потребностями бизнеса.
Суммировать:
Преимущества нашей архитектуры:成本低,系统复杂度低,维护成本低,快速定位问题
Недостаток:稳定性差,并发量低,扩展性弱Ждать
При разборе архитектуры каждое решение имеет свои преимущества и недостатки, поэтому вам необходимо понимать преимущества и недостатки вашего текущего решения. Для того, чтобы лучше показать свою систему интервьюеру!
разделение обслуживания
Хороший парень, участвовал в научно-техническом конкурсе,资金На месте можно купить更多机器Что ж, тогда вы должны оптимизировать сервис и разделить его на микросервисную систему!
Какие действия мы предприняли в этой разделенной архитектуре службы?
- Статическая изоляция ресурсов (
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. Межпроцессное взаимодействие
При разделении услуг в реализации некоторых функций будет задействован服务间相互调用ситуации, например:
В общих реализациях мы будем использовать注册中心иRPC框架, чтобы реализовать эту возможность. И наша более часто используемая схема реализации:zookeeper & dubbo.
Зачем использовать инфраструктуру RPC?
когда мы упоминаем об использованииRPC框架Когда, вы когда-нибудь думали об этом,为什么要使用 RPC框架?Каждая услуга предоставляетRESTfulРазве интерфейс не может также завершить связь между службами?
Вот сравнениеRPCиRESTfulРазница в следующем:
-
数据报文小&传输效率快:RPCНекоторая необходимая информация заголовка в протоколе передачи упрощается, что повышает эффективность передачи. -
开发成本低:НапримерDubboFramework, который инкапсулирует логику вызова между сервисами (например:反射,建连и超时控制д.), нужно только разработать соответствующие接口и数据模型Вот и все. -
服务治理: В распределенном сценарии у нас есть более одного поставщика услуг, поэтому服务健康,负载均衡и服务流控и другие ситуации, с которыми нужно иметь дело, и эта часть способности находится вrpc & 注册中心В рамках, он был удовлетворен.
Поговорив о преимуществах, давайте еще раз проанализируем его.RPC的缺点:
-
耦合性强: По сравнению сRESTfulС точки зрения,RPCФреймворки сложно реализовать в межъязыковых сценариях. и版本依赖относительно сильный. Сервис не актуален内网环境После этого услуга не может предоставляться в обычном режиме, а стоимость миграции высока. -
内网调用:RPCОн больше подходит для передачи внутри сети, в общедоступной сети он не так безопасен.
Распределенные микросервисы
в предыдущей версии服务拆分, мы основаны на разных业务边界,功能职责, разделенный на несколько子系统, а для разных систем чем он страдает负载压力не совпадают, например:订单服务каждого обработанного запроса耗时较长(Другие услуги не находятся под давлением), чтобы увеличить объем наших заказов, мы можем только расширить возможности订单服务Вот и все, это то, что мы делаем в разделении службы收益, использование производительности улучшилось!
Из приведенного выше графика видно, что у некоторых сервисов разное ореол, каждый方块, можно понимать как机器, В этой архитектуре, чтобы обеспечить процент успешных заказов и объем заказов, мы в основном ориентируемся на сервер订单服务.
Перед этим давайте посмотрим на нашу中间件Развертывание кластера:
-
mysql 主从架构: Разделение чтения и записи, снижение нагрузки на основную библиотеку, обеспечение нормальной записи данных и размещение данных заказа в библиотеке. -
zookeeper 主从架构: Гарантируйте доступность реестра, чтобы избежать лавины полных ссылок. -
redis 哨兵集群: избегатьredisВремя простоя приводит к тому, что большой объем трафика напрямую попадает в базу данных.
резюме
До сих пор система, которую мы разработали сами, в основном завершила всю систему.秒杀系统развилась. Может быть, у всех всегда был вопрос, почему мы пропускаем самые знакомые?MQШерстяная ткань?
На протяжении всей цепочки вызовов у меня есть同步调用способ описать архитектуру этой системы seckill, потому что она уже удовлетворила наши текущие потребности в трафике, в架构设计的原则внутри упоминается,合适原则,и演进原则. В текущей ситуации удовлетворения спроса на трафик нам нужно сначала подумать о внедрении промежуточного программного обеспечения для обмена сообщениями. Какая проблема решена? Взвесив все за и против, пришло время решить, стоит ли использовать это решение.
высокая производительность
В процессе описанной выше эволюции архитектуры мы проходим服务拆分,垂直扩容,分布式部署и другие способы улучшить производительность нашей архитектуры性能и稳定性, для нашего этапа самоисследования架构演进Этого достаточно для удовлетворения наших потребностей в трафике, но если мы хотим продолжать оптимизировать нашу систему и повышать производительность услуг, мы можем оптимизировать следующие аспекты:
- Разогрев ресурсов
- прогрев кеша
- Асинхронный вызов
1. Разогрев ресурсов
выше服务拆分этап, мы упоминали资源动静分离, статические ресурсы здесь включают:html,js,css,imgЖдать. На этапе нашей деятельности мы можем использовать систему фонового управления для преобразования статических ресурсов действий в товарный сервис.预热в CDN,加速资源Доступ.
资源预热: 通过预先将资源加载到CDN
回源: CDN找不到资源后,会触发源站(商品服务)调用,进行查询对应资源,如果源站存在该资源,则会返回到CDN中进行缓存。
OSS: 实际存储静态资源的服务(可参考阿里云OSS)
Выше неоднократно упоминалось, что при внедрении технологии необходимо учитывать利和弊,ТакCDN的风险Что тогда?
-
成本: Это более прямо, просто потратьте больше денег! -
带宽: При доступе к большому трафику, может ли CDN поддерживать такую большую пропускную способность, трафик, который может поддерживать каждый сервер, ограничен, необходимо учитывать, может ли CDN поддерживать бизнес-трафик. -
CDN命中率: В случае низкого процента попаданий в CDN, например活动图片, будет меняться каждый час, то при каждой замене картинки срабатывает回源操作, В настоящее время эффективность доступа к ресурсам снизилась.
2. Прогрев кеша
с вышеуказанным静态资源加速по сравнению с,动态数据вам нужно пройти缓存Выполните оптимизацию производительности, клише, почемуredisтак быстро?
- Один поток (узкого места производительности Redis здесь нет, так что это не преимущество)
多路I/O复用模型数据结构简单基于内存操作
вводитьredisОсновные риски:
-
reidsВремя простоя: в случае развертывания на одном компьютере большое количество вызовов службы истечет по времени, что в конечном итоге приведет к лавине обслуживания. доступныйSentinel集群оптимизация. -
缓存击穿: При сильном потоке,缓存MISSи缓存过期В других случаях запросы будут проникать в базу данных, и если база данных не выдержит нагрузки, это вызовет лавину обслуживания. в состоянии пройти布隆过滤器оптимизировать. -
数据一致性:缓存数据与DBПроблема согласованности данных должна быть гарантирована стратегией обновления.
3. Асинхронный вызов
В асинхронном режиме пользователи, успешно сократившие свой инвентарь, будут отправлены в службу заказов с помощью сообщений для последующих операций заказа. Все продукты могут быть проданы в короткие сроки. Общий процесс показан на рисунке ниже:
MQПочему асинхронные вызовы могут повысить производительность наших сервисов?吞吐量Шерстяная ткань?
Основная причина в том, что с помощью асинхронных вызовов мы доставили сообщение и завершили обработку запроса на этот раз, поэтому узкое место производительности переносится с сервиса заказов на сервис seckill. За счет уменьшения зависимости вызовов повышается пропускная способность службы в целом.
MQЧасто задаваемые вопросы:
数据一致性-
重复消费: повторные push-сообщения из-за повторной доставки сообщений производителем или медленного потребления. Необходимо блокировать и потреблять идемпотент, чтобы обеспечить нормальное потребление. -
消息堆积: Когда производственная мощность намного превышает мощность потребления, сообщения будут накапливаться. -
MQ可用性: В случае простоя MQ необходимо поддерживать синхронное переключение вызовов.
Я не буду вдаваться в подробности здесь, я напишу статью позжеMQ相关的文章.
Высокая доступность
Это не просто увидеть здесь, спасибо за вашу поддержку. Про юзабилити здесь я уже писал статью# "High Availability Actual Combat" - Подскочила станция Б, при чем тут станция А?Заинтересованные могут глянуть.
Высокая доступность в основном может быть получена за счет:
-
动态扩容: Динамическое расширение емкости для различных сервисов в зависимости от загруженности сервисов. -
限流熔断: Вы можете обратиться к моей предыдущей статье:# "High Availability Actual Combat" - Подскочила станция Б, при чем тут станция А? -
异地多活: За счет развертывания в нескольких комнатах избегайте物理攻击!
Двойная жизнь в городе
Компьютерные классы, расположенные в разных районах одного города, объединены в выделенную сеть. Расстояние между двумя комнатами обычно几十千米, скорость передачи по сети почти такая же, как в той же компьютерной комнате,降低了系统复杂度、成本.
Этот режим не может использоваться в экстремальных ситуациях стихийных бедствий, таких как городские地震、水灾, этот метод используется для решения некоторых常规故障например, компьютерный зал火灾、停电、空调故障.
Жить в разных местах
В приведенном выше режиме нет возможности решить аварийное восстановление службы на уровне города, например水灾,地震ждать. Эту проблему можно решить за счет схемы развертывания мультиактива в разных местах.
Но у каждой схемы есть преимущества и недостатки, поэтому недостатки проживания в разных местах в основном отражаются на网络传输и数据一致性по делу!
跨城异地主要问题就是网络传输延迟,例如北京到广州,正常情况下的RTT(Round-Trip Time 往返时延)是50毫秒,
当遇到网络波动等情况,会升到500毫秒甚至1秒,而且会有丢包问题。
物理距离必然导致数据不一致,这就得从“数据”特性来解决,
如果是强一致性要求的数据(如存款余额),就无法做异地多活。
Обратите внимание, не потеряйтесь
Адрес карты:Исходное изображение draw.io
Ладно, это все, что касается этой статьи. Каждую неделю я буду обновлять несколько высококачественных интервью с крупными фабриками и статьи, связанные с общими технологическими стеками. Спасибо за возможность видеть это, если эта статья хорошо написана, пожалуйста, попросите три подряд! ! ! Спасибо за вашу поддержку и признание, увидимся в следующей статье!
я九灵, Детская обувь, которой нужно общаться, может обратить внимание на общественный номер:Java 补习课, Мастер информация из первых рук! Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!