Слёзы, невыносимо!
выпускник блогера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
Некоторая необходимая информация заголовка в протоколе передачи упрощается, что повышает эффективность передачи. -
开发成本低
:НапримерDubbo
Framework, который инкапсулирует логику вызова между сервисами (например:反射
,建连
и超时控制
д.), нужно только разработать соответствующие接口
и数据模型
Вот и все. -
服务治理
: В распределенном сценарии у нас есть более одного поставщика услуг, поэтому服务健康
,负载均衡
и服务流控
и другие ситуации, с которыми нужно иметь дело, и эта часть способности находится в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 补习课
, Мастер информация из первых рук! Если в этом блоге есть какие-либо ошибки, пожалуйста, критикуйте и советуйте, это очень ценится!