您当前的位置:首页 > 电脑百科 > 程序开发 > 程序员

从架构师到 CTO, 你还有多远的路要走?

时间:2020-08-02 12:39:37  来源:  作者:

作者简介:李智慧,前阿里巴巴技术专家。本文选自:拉勾教育专栏《架构师的36项修炼》

程序员而言,日后的职业发展可以走3个方向:专攻技术深度、转团队管理、晋升架构师。

成为一名优秀的架构师,是大多数技术人的追求。

但资深架构师的出现几率仅约为0.3%,如果想在3-5年后稳坐金字塔尖,必须有扎实的代码功底和项目积累,也要意识地培养技术广度和架构思维能力。多学习牛人经验也可获益良多。

我是李智慧,我从事架构已有20多年。屏幕前的你,既然选择了架构,就要踏实学好每一块知识。今天我们来讲分布式消息队列MQ。在本篇幅中,我会主要介绍同步架构和异步架构的区别。

本文选自:拉勾教育专栏《架构师的36项修炼》见文末了解更多

从架构师到 CTO, 你还有多远的路要走?

 

01 同步调用

所谓的同步调用,就是说从请求的发起一直到最终的处理完成期间请求的调用方一直在同步阻塞等待调用的处理完成

我们看一下图片中的例子,在这个例子中客户端代码ClientCode,需要执行发送邮件sendEmail这样一个操作,它会调用EmailService进行发送。

而EmailService会调用SmtpEmailAdapter这样一个类来进行处理,而这个类会调用远程的一个服务,通过SMTP和TCP协议把请求发送给它。

而远程服务器收到消息以后会对消息进行一系列的操作,然后将邮件发送出去,再进行返回。

Adapter收到返回后,再返回给EmailService,EmailService收到返回后再把返回结果返回给Clientcode。

从架构师到 CTO, 你还有多远的路要走?

 

ClientCode在sendEmail发出请求后,就一直都阻塞在这里,等待最终调用结果的返回,是成功还是失败。因为这个过程是阻塞等待的,所以这个过程也就是同步调用。

从架构师到 CTO, 你还有多远的路要走?

 

02 异步调用

与同步调用相反的是异步调用。异步调用过程,我们同样看刚刚发送邮件的例子,用户Clientcode调用EmailService以后,EmailService会把这个调用请求发送给消息队列,然后就立即返回了。

Clientcode收到返回以后继续向下处理,不会继续阻塞等待。实际上消息发送到Queue后,还没有被处理,我们看到后面的消息消费,其实要比EmailService返回可能还要晚一点,EmailService返回以后消息才会被消费处理。

有一个QueueConsumer消息队列的消费者,从消息队列中取出这个消息,再把这个消息发送给SmtpAdapter,也就是调用SmtpAdapter。

处理逻辑跟同步调用一样,SmtpAdapter通过SMTP的通讯协议,把消息发送给远程的一个服务器,进行邮件发送,通过RemoteServer进行处理,处理完了收到返回,再把返回结果通知消息队列Queue。

我们看到,在这个过程中,客户端的调用,也就是应用程序的调用,和业务逻辑真正发送邮件的操作是不同步的。

在进行邮件发送操作的处理过程中,客户端的代码已经返回了,它可以继续进行自己的后续操作,而不需要等待邮件的发送,这就叫做异步调用

本文选自:拉勾教育专栏《架构师的36项修炼》见文末了解更多

从架构师到 CTO, 你还有多远的路要走?

 

使用异步调用架构的主要手段,就是通过消息队列构建。这是它的架构图。

消息的生产者将消息发送到消息队列以后,由消息的消费者从消息队列中获取消息,然后进行业务逻辑的处理,消息的生产者和消费者是异步处理的,彼此不会等待阻塞,所以叫做异步架构。

从架构师到 CTO, 你还有多远的路要走?

 

使用消息队列构建一个异步调用架构,你需要了解3种角色,一种是消息的生产者,一种是消息队列,还有一种是消息的消费者。

从架构师到 CTO, 你还有多远的路要走?

 

01消息的生产者

消息的生产者是客户端应用程序代码的一部分,用来初始化异步调用处理流程。

在基于消息队列的处理中,生产者的职责非常少,它要做的就是创建一个合法的消息,并把这个消息发送到消息队列中,由应用开发者决定生产者的代码在哪里执行,什么时候发送消息。

从架构师到 CTO, 你还有多远的路要走?

 

02消息队列

消息队列异步架构的另一个主要组成部分就是所谓的消息队列。

消息队列是消息发送的目的地和发给消费者的一个缓冲。消息队列实现的方法有好多种,可以用共享文件夹,也可以用关系数据库或者NoSQL系统。

当然最主要的还是使用专门的分布式消息队列服务器来实现。

从架构师到 CTO, 你还有多远的路要走?

 

03消息的消费者

业务架构的第三个重要角色就是消息的消费者。消息的消费者从消息队列中接受并处理消息,消息的消费者也是由应用开发者实现的,但是它是一个异步处理的组件。

消息的消费者不需要知道生产者存在,它只依赖消息队列中的消息。消息的消费者通常部署在独立的服务器上,和消息的生产者完全隔离,并且可以通过添加硬件的方式进行伸缩。

从架构师到 CTO, 你还有多远的路要走?

 

知道以上3种主要角色之后,使用消息队列构建异步的调用架构,你还需要知道两种模型:点对点模型和发布订阅模型。

本文选自:拉勾教育专栏《架构师的36项修炼》见文末了解更多

从架构师到 CTO, 你还有多远的路要走?

 

点对点模型

首先来看点对点模型。消费者和生产者只需要知道消息队列的名字,生产者发送消息到消息队列中,而消息队列的另一端是多个消费者竞争消费消息。

每个到达消息队列的消息只会被路由到一个消费者中去,所以消费者看到的是全部消息的一个子集。

我们看这张图,消息的生产者有多个,消息的消费者也有多个,多个生产者将消息发送到消息队列中,而有多个消费者去消息队列中对消息进行竞争性的消费。

每条消息只会被一个消费者消费,每个消费者只会消费消息队列中的一部分消息。

从架构师到 CTO, 你还有多远的路要走?

 

发布订阅模型

在发布订阅模型中,消息可能被发送到不止一个消费者,生产者发送消息到一个主题,而不是队列中。

消息被发布到主题后,就会被克隆给每一个订阅它的消费者,每个消费者接收一份消息复制到自己的私有队列。

消费者可以独立于其他消费者使用自己订阅的消息,消费者之间不会竞争消息。

常用的分布式消息队列都支持发布订阅模型,也就是说消息的发布订阅模型是分布式消息队列的一个功能特性。

从架构师到 CTO, 你还有多远的路要走?

 

两种模型结合对比来看,通常使用点对点模型的,是一些耗时较长的、逻辑相对独立的业务,比如说我前面的讲到的发送邮件这样一个操作。

因为发送邮件比较耗时,而且应用程序其实也并不太关心邮件发送是否成功,发送邮件的逻辑也相对比较独立,所以它只需要把邮件消息丢到消息队列中就可以返回了。

而消费者也不需要关心是哪个生产者去发送的邮件,它只需要把邮件消息内容取出来以后进行消费,通过远程服务器将邮件发送出去就可以了。而且每个邮件只需要被发送一次。所以消息只被一个消费者消费就可以了

相对应的另一种情况,比如新用户注册,一个新用户注册成功以后,需要给用户发送一封激活邮件,发送一条欢迎短信,还需要将用户注册数据写入数据库,甚至需要将新用户信息发送给关联企业的系统,比如淘宝新用户信息发送给支付宝。

这样允许用户可以一次注册就能登录使用多个关联产品。那么对于新用户注册这样一个消息,就需要使用按主题发布的方式,也就是发布订阅模型这种方式。

一个新用户注册,会把注册消息发送给一个主题,多种消费者可以订阅这个主题。比如发送邮件的消费者、发送短信的消费者、将注册信息写入数据库的消费者,跨系统同步消息的消费者等。

今天就讲到这里啦~感谢你的坚持,下一课我会详细讲解分布式数据库相关内容,分享我的实践经验。加油,我们不见不散!

本文选自:拉勾教育专栏《架构师的36项修炼》见文末了解更多

版权声明:本文版权归属拉勾教育及该专栏作者,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者必究。



Tags:CTO   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在近期刚结束的第10届亚马逊云科技re: Invent 2021大会上,亚马逊CTO Werner Vogels发表了主题演讲以及在其个人博客上发表了2022及之后的科技预测等文章。综合Werner对未来...【详细内容】
2021-12-15  Tags: CTO  点击:(16)  评论:(0)  加入收藏
基础支持层位于MyBatis整体架构的最底层,支撑着MyBatis的核心处理层,是整个框架的基石。基础支持层中封装了多个较为通用的、独立的模块。不仅仅为MyBatis提供基础支撑,也可以...【详细内容】
2021-05-27  Tags: CTO  点击:(200)  评论:(0)  加入收藏
public class SReactorSThread { private Selector selector; private ServerSocketChannel serverSocketChannel; private int PORT = 6666; public SReactorS...【详细内容】
2021-05-25  Tags: CTO  点击:(779)  评论:(0)  加入收藏
1. 前言作为一名前端工程师,必须搞懂JS中的prototype、__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系...【详细内容】
2021-04-20  Tags: CTO  点击:(304)  评论:(0)  加入收藏
常常会被问到这样的问题:CTO、技术总监、架构师很少写具体代码,为什么还很牛逼的样子,拿这么高工资?其实,这个问题本身就错了。就好比问:导演、制片人为什么不懂演戏,还能指导演员,...【详细内容】
2021-02-08  Tags: CTO  点击:(179)  评论:(0)  加入收藏
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式一、Reactor模式 Reactor 释义“反应堆”,是一...【详细内容】
2020-12-24  Tags: CTO  点击:(205)  评论:(0)  加入收藏
Netty 怎么切换三种 I/O 模式什么是经典的三种 I/O 模式?生活场景:当我们去饭店吃饭时:• 食堂排队打饭模式:排队在窗口,打好才走;• 点单、等待被叫模式:等待被叫,好了自己...【详细内容】
2020-10-13  Tags: CTO  点击:(101)  评论:(0)  加入收藏
密码安全管理通常我们在企业内部对平台帐号进行管理时,安全团队都会对我们的帐号体系有一定要求。通常情况下有以下几点:l 密码设定的要求,比如密码的长度,复杂度。l 密码管理的...【详细内容】
2020-09-28  Tags: CTO  点击:(175)  评论:(0)  加入收藏
我们先以一个最简单的实例来了解模拟登录后页面的抓取过程,其原理在于模拟登录后 Cookies 的维护。1. 本节目标私信小编01即可获取大量的Python学习资料本节将讲解以 GitHub...【详细内容】
2020-09-27  Tags: CTO  点击:(84)  评论:(0)  加入收藏
我相信应该没多少人听说过ReactOS这个名字,后者甚至在开发者社区中也不算活跃,这与其想要实现的宏大目标似乎极不相称。ReactOS(reactos.org)是一款(也是唯一一款)基于Windows NT...【详细内容】
2020-09-21  Tags: CTO  点击:(143)  评论:(0)  加入收藏
▌简易百科推荐
JAVA开发工程师(北京)本科 3-5年经验 面议 (招1人)岗位职责:1.负责我行应用系统的设计,完成软件编码工作,负责管理代码设计规范等工作;2.根据应用需求分析说明书,评估需求研发的可行...【详细内容】
2021-12-27  just do丶IT公众号    Tags:国企   点击:(1)  评论:(0)  加入收藏
今天聊聊编程的本质。程序就是数据结构+控制+逻辑,程序员编程工作的本质是翻译,翻译机要来了,程序员怎么办?黑客帝国中的程序黑客帝国4就要上映了,不知道前三部你看懂了么?值得多...【详细内容】
2021-12-17  博士聊IT    Tags:程序员   点击:(8)  评论:(0)  加入收藏
梦醒之后,每个人对于这份职业的未来、互联网行业的未来,以及更重要的,自己的未来都有了更现实的判断 文 | 祝颖丽编辑 | 黄俊杰一个生于 1986 年的人,他所走过的前半生:从出生起,...【详细内容】
2021-12-03    财经杂志  Tags:程序员   点击:(15)  评论:(0)  加入收藏
前些天在头条看到一个八二年的哥们,述说自己找工作屡次被拒的问题,在网上引起了广泛的讨论,这件事给我留下了很深的印象,因为这哥们和我同是程序员,都人到中年,上有老下有小。唯一...【详细内容】
2021-12-01  云南贤哥在深圳    Tags:程序员   点击:(20)  评论:(0)  加入收藏
很多读者都问过一个问题:程序员如何实现高速成长?之前也写过相关的文章,强调的主要是夯实计算机体系基础知识。 再说另一个诀窍:多看经典开源项目,这些项目大多是众多顶尖程序员...【详细内容】
2021-11-30  findyi    Tags:程序员   点击:(14)  评论:(0)  加入收藏
近日,一位45岁的网民在中国政府网留言求职,引发关注。该网民自称是一名软件开发人员,今年45岁,精通各种技术体系,“而我辞职回家半年后再回来寻找工作机会的时候,却发现连个面试...【详细内容】
2021-11-17  郭主任    Tags:程序员   点击:(42)  评论:(0)  加入收藏
即使在安全技术取得进步之后,网络犯罪仍在不断增加。据统计,网络犯罪每分钟给企业造成约 290 万美元的损失。主要是因为新技术不断涌现,难以维护安全。随着网络威胁的增加,网络...【详细内容】
2021-11-04  章大千    Tags:编程语言   点击:(40)  评论:(0)  加入收藏
北漂小伙李强(化名),在北京互联网大厂工作7年,月薪3万,离职回老家开摄影店,亏了200万。李强出生于山西一座名不经传的小城市,互联网专业大学毕业的他,没有听父母的劝言回到家乡考公...【详细内容】
2021-10-29  霸王课  今日头条  Tags:程序员   点击:(51)  评论:(0)  加入收藏
程序员是青春饭,这在国内似乎是公认的。所以很多公司不愿招大龄程序员,很多程序员也“知趣”地及早转型。有的做管理,有的做架构,我还见过改行卖保险的。总之,年龄大了不想敲代码...【详细内容】
2021-10-27  编程的艺术    Tags:   点击:(29)  评论:(0)  加入收藏
软件工程专业有Web开发、移动终端开发、大数据开发、计算机系统工程师、视频开发工程师、计算机软件应用工程师等就业方向。第一,Web开发。Web开发包括前端开发和后端开发。...【详细内容】
2021-10-19  辰新   企鹅号  Tags:软件工程   点击:(79)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条