架构师之我见(二)进阶篇

word 2013 长篇文档排版案例教程 office 2013 制作长文格式模板 阅读详情

系列目录

架构师之我见(一)入门篇

架构师之我见(二)进阶篇

架构师之我见(三)未来篇

一、引子-课程介绍

1.1 目的

第一节课我们讲了架构、架构入门、架构师能力模型。那么入门之后,架构(师)如何进阶?

1.2 思考如何进阶

方向

入门后,架构进阶的方向有很多:通用能力、专业技能(业务能力、技术能力、职业软实力)。

改变

每个架构师都有自己的优缺点,对于团队来说,架构师并无优劣,只有合适与否。 架构师应该结合自身短板和团队需求,去加强相关能力,不满足就可能会被淘汰。

加强认知

未雨绸缪,布局未来,引领团队。

下面,围绕技术能力,以RocketMQ为例,从多角度剖析架构原理,期望能给大家带来一些灵感。本节课会偏向技术。

1.3 关于RocketMQ,我们都知道啥?

  • 1.一个消息队列,整体模型依然是发布-订阅模型。
  • 2.阿里开源的,经受住了阿里双11内部业务验证。
  • 3.支持事务消息。
  • 4.消费失败,会重试。
  • 5.4个模块组成:nameserver、producer、consumer、broker。

没了?这就是典型的技术能力不成体系!!!

1.4 成体系化研究RocketMQ

一般作为架构师,我们需要了解一个东西,最少4个模块:模型、功能、性能、运维。(大家有其它想法多多讨论,不一定对,一般博主会从这4点入手。)

1.4.1 基础架构

【存储原理】消息如何存储?文件、目录结构?如何实现根据key快速查询消息?

【通信原理】底层通信模型是什么,如何运转?

1.4.2 功能架构

【功能设计】RocketMQ中的负载均衡(往哪发,从哪里消费)怎么做的?

【功能设计】broker如何支持事务消息?底层源码级实现原理?

1.4.3 性能/稳定性测试

吞吐量:10+W/S

时延:消息堆积越大,时延越长。

可靠性:对消息不丢失的保障程度。例如是否支持同步/异步刷盘。

可用性:无故障运行的时间百分比,通常用几个9来衡量。

1.4.4 运维管理

监控告警:对消息中间件的使用进行全方位的监控。

部署:是否易部署,扩容、降低方案。

故障容灾:机器掉电、网络异常、磁盘损坏等单机故障处理;机房故障异地灾备。

二、架构进阶

下面我们以rocketMQ为例,讲解 架构级别的认知,应该是怎么样的

2.1 基础架构

1.生产者(Producer):负责发布消息。Producer通过负载均衡选择Broker集群队列进行消息投递。

2.消费者(Consumer):负责消费消息。支持以push推,pull拉两种模式对消息进行消费。

3.代理服务器(Broker Server):消息中转角色,负责存储消息、转发消息。主要包含2个功能:接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。存储消息相关的元数据:消费者组consumer Group、消费进度偏移offset、主题Topic、队列消息Message Queue等。

4.名字服务(Name Server):是Topic路由的注册中心,支持Broker的动态注册与发现。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。多个实例组成集群,无状态。

2.2 特性

遇事不决,看官网!!!成熟的技术组件,不要直接搜问题,最好的、最原始的、最正确的描述一定在官网。官网介绍了12种特性,其中有4个是基本能力,8个是泛可靠性。

1.基本能力

订阅与发布:消息发布是指生产者向topic发送消息;消息订阅是指消费者关注了topic-tag的消息,消费对应消息。

消息顺序:消息有序指的是一类消息消费时,能按照发送的顺序来消费。顺序消息分为全局顺序消息与分区顺序消息。

消息过滤:消费者根据Tag进行消息过滤,也支持自定义属性过滤。

定时消息:定时消息(延迟队列)是指消息发送到broker后,不会立即被消费,等待特定时间投递给真正的topic。

2.可靠性

消息可靠性:RocketMQ支持消息的高可靠(异步复制、同步双写技术)。

至少一次:支持At least Once,指每个消息必须投递一次。

回溯消费:RocketMQ支持按照时间回溯消费,时间维度精确到毫秒。

流量控制:生产者流控,因为broker处理能力达到瓶颈;消费者流控,因为消费能力达到瓶颈。

事务消息:RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。

消息重投(生产者):生产者在发送消息时失败,支持同步/异步重发。

消息重试(消费者):Consumer消费消息失败后,要提供一种重试机制,令消息再消费一次。

死信队列:当消息消费失败,达到最大重试次数后,若消费依然失败,则将其发送到Dead-Letter队列中。

2.3 核心原理

为了实现12个特性,RocketMQ做了很多核心设计,我们从以下五个方向来剖析核心原理

  1. 启动原理:了解整体架构的启动运行基本运作原理。
  2. 消息存储:首先明白消息如何快速罗盘、查询过滤。
  3. 通信机制:底层netty实现,RocketMQ的高效很大一部分依赖于Netty通信协议机制。
  4. 负载均衡:RocketMQ中的负载均衡都在Client端完成,主要可以分为Producer端发送消息时候的负载均衡和Consumer端订阅消息的负载均衡。
  5. 事务消息:RocketMQ采用了2PC的思想来实现了提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。

2.3.1 启动运行原理

 

rocketMQ启动顺序: nameserver->broker->producer->consumer。

1.nameserver启动原理

NameServer作为rocketMQ的基于Topic路由的注册中心,支持Broker的动态注册与发现,启动流程如下:

  1. 加载kv配置。
  2. 构建NettyRemotingServer初始化netty通信实例。
  3. 初始化远程通信执行器。
  4. 注册请求执行器。
  5. 定时轮训清除宕机的broker。
  6. 注册SSL证书变化监听器。
  7. 启动远程通信服务端(netty)。
  8. 启动SSL证书监听服务。

其中,1-6步是初始化过程,7-8是启动流程。

2.broker启动原理

1).初始化

  1. 载入各种配置文件(topic配置、消费偏移量、订阅群组..)
  2. 初始化DefaultMessageStore消息存储器
  3. 构造远程通信服务器
  4. registerProcessor():注册处理器
  5. 初始化定时任务、事务相关服务、监听器。
  6. 初始化RPC请求钩子RPCHook

2).启动

  1. messageStore启动消息存储服务
  2. 启动远程通信服务端(netty)
  3. 开启请求长轮训服务
  4. 启动netty客户端探活服务(生产者、消费者、过滤器)
  5. 定时任务:每30s向nameserver注册所有broker。
3.producer启动原理

producer启动流程:

  1. checkConfig()校验配置
  2. MQClientInstance创建客户端实例。
  3. registerProducer向broker注册生产者。
  4. MQClientInstance.start()启动客户端实例。
  5. 服务状态更新为RUNNING。

MQClientInstance客户端实例启动流程如下:

  1. 获取nameserver地址。
  2. 启动netty远程客户端。
  3. 开启定时任务。
  4. 开启守护线程,执行拉取消息
  5. 启动负载均衡器
  6. 启动消息生产者
  7. 客户端实例状态更新为RUNNING
4.consumer启动原理

消费者启动流程如下:

  1. 校验配置、复制订阅信息、创建客户端实例
  2. 创建消费端负载均衡
  3. 创建pull请求包装器
  4. 初始化偏移量:广播模式:client存储;集群模式:broker存储
  5. 初始化消费消息服务,并启动。(1.并发消费:延迟15m后,每过15分钟清理一次超时未处理完消息2.顺序消息:延迟1s后,每20s锁一次broker中mq队列+消费者端ProcessQueue)
  6. 向broker注册消费者。
  7. 启动客户端实例 服务状态更新为:RUNNING

2.3.2 其它

消息存储、消息查询、通信机制-通信架构图、负载均衡-Producer的负载均衡、事务消息(半消息事务)、事务消息-broker2PC设计、事务消息-Op消息等。

--限于篇幅,就不都举例了,详情见RocketMQ详解(四)核心设计原理(源码级剖析必读)

三、总结

本文主要想表达的是,作为一名架构师,要能成体系的去研究技术。兼顾广度和深度。

核心原理是架构师的技术域的核心,只有掌握了核心原理,各种问题迎刃而解。剩下的无非是一些基于原理上的应用、调优、二次开发。由于篇幅有限,讲解的不够细致,详情可见链接。

展望未来 最近发现RocketMQ官网已全面升级5.0,基础架构云原生化升级。技术无止境,云原生来了!

深入理解Cornerstone3D.js渲染Stack影像数据 这个是调用的core\src下的init.ts的init方法,作用是:初始化cornerstone-core,检测客户端是否支持WebGL,默认情况下是支持中等GPU层级.另外一个重要的是实例化WebWorkManager.WebWorkManager类似于Java的线程池,是用来对Web Worker进行管理的管理器。使用DICOMwebClient获取影像文件的元数据,然后将它们缓存到imageLoader的metaDataManager中,在上面我们可以输出元数据看一下是什么。 阅读详情

相关推荐

保姆级教程:用PCAN-View监控汽车CAN总线,从硬件连接到报文分析(附快捷键大全)

本文提供了一份详细的PCAN-View使用教程,涵盖从硬件连接到报文分析的全流程,特别适合汽车电子工程师和初学者。内容包括硬件准备、软件安装、核心功能操作、高级技巧及故障排查,并附有实用的快捷键大全,帮助用户高效监控和分析CAN总线数据。

weixin_42542669的博客 466

架构师之我见

以下内容即将发表在8月份的InfoQ中文站电子刊物《架构师》中,主要谈到了我对架构师这个角色的一些理解与认识,有兴趣的朋友也可以留言,我们共同探讨这个话题。 架构师之我见                                                                                    2009-08-06架构师是一个项

张龙(风中叶)的专栏 2万+

解锁Gemini+Google Sheets/Excel:数据分析自动化新姿势

本文介绍了如何将谷歌AI工具Gemini集成到Google Sheets和Excel中进行智能数据分析。主要内容包括:1) Gemini的功能特点,具备语言理解和生成能力;2) 在Google Sheets中的集成步骤,包括订阅Workspace、开启Gemini功能及使用方法;3) 通过第三方插件在Excel中使用Gemini的方法;4) 销售和财务数据分析的实际案例;5) 使用时的注意事项,包括数据安全、问题处理和常见错误解决。通过Gemini集成,用户可以实现高效的数据处理和智能分析,提升工作效率。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 533

架构师之我见(一)入门篇

这系列文章,是博主在给公司做架构师分享时的课件。对【架构师】感兴趣的同学可以随意查阅。(每个人有自己的见解,各位架构师大神,请不要批斗~)架构师:交流、反思、改变、价值。开发:指引、实践、突破、价值。其它:了解架构及架构师,更好的协作。芯片架构、音乐架构、组织架构、系统架构...架构无处不在。技术架构相关常见词汇:软件架构、系统架构。共性是用于指导设计,一般存在于复杂场景,把无序的变有序,把耦合的解耦。即架构不是必须的,某些简单场景,可以不用架构。

博客园搬家测试账号 955

架构师进阶篇-什么是架构师

前戏: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论:目标(我要做什么),方法(计划)(我该怎么做), 执行/行动 ​ 1、架构师定义 ...

1679

58同城智能微聊辅助工具

资源下载链接为:https://pan.quark.cn/s/d9ef5828b59758同城智能聊天辅助工具

weibo-senti-100k

文本情感分类数据集

上一篇: 架构师之我见(一)入门篇
下一篇: 广州,广州-程序员视角在当下局势的总结
FAw67J7
博客等级 码龄9年 91粉丝 · 194原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值