1. 演进背景之解耦
随着软件架构复杂度的提升,由于传统单机应用系统组件较少,逐渐演进成为后来的分布式系统,以及现代的微服务,通信的依赖复杂度愈来愈高。对于早期简单的系统而言,用户一般会使用RPC,但随着组件业务复杂度的提高,则会引入消息队列,以达到异步通信之上的一种能力——解耦。
解耦,即解除耦合,让各类组件彼此互不依赖,可以进行独立的演进,这也是很多软件设计的基本理念。如今,出现了各类数字化系统,其承载着企业的业务,需要根据实际情况应对市场的变化,进行快速的发展。业务要发展,则承载其发展的数字化系统就要保证其各种应用系统可以实现快速迭代,研发人员也要完成高效协作。于是,消息队列解耦的能力逐渐被视为重中之重,用户也越来越多。
2. 演进过程
在多年的演进过程中,其内在的本质变化微乎其微,仍旧是解耦。但是,应用很多维护的量级都在发生变化,因此近年来仍旧出现了各种各样的消息队列。这一点可以从流量的角度分析。
2.1 单机系统时期
在早期,大部分公司使用的系统都属于信息化系统,用户很少,一般多为企业内部的员工。随着业务的发展,虽然一些银行也推出了很多系统,但访问这些系统的仅为柜员或ATM机,均为较低并发的访问模式。这类访问模式,早期的单机系统足以满足其流量需求,如IBM、MQ,以及后期出现的ActiveMQ、RabbitMQ等。
2.2 互联网时代——分布式系统
随着世界进入互联网时代,绝大多数的应用软件会面向全世界的人使用,访问量大幅攀升,单机系统再无法承载如此庞大的访问量,分布式的消息对列出现,如Notify、RocketMQ、Kafaka等。当流量上涨时,它们可以通过加机器不断扩展其集群的容量。在需求的支配下,分布式时代的架构逐渐替代了原有的单机系统架构。
2.3 云时代
再到后来,消息队列依赖的底层计算存储网络资源发生变化。早期,计算存储网络资源多为物理机或虚拟机,在云时代,计算存储网络资源被池化,迁移至公共云。可以以汽车为类比,早期使用的是燃油车,其技术是基于燃油而演进的,如发动机、变速箱,但在新能源时代,其底层原理发生了变化,由然后变为了新能源电池,因此,发动机、变速箱等方面的技术被重新置换,为新能源车企提供了全新的发展机会,实现换道超车。云原生时代与之十分相似,各类基础软件依赖的底层资源变成了弹性资源。换言之,在保持消息本质不变的基础上,其实现方式需要随之改变变化,需要面向云的弹性计算、弹性存储、弹性网络做技术升级,使其各类技术指标能够基于云的IaaS弹性体系进一步的提升,如弹性速度、存储成本等,其产品的形态演进到Serverless化的形态,由软件变成服务,由原本的自研变为按需付费、按量付费。如人饮水,原本需要自己挖井取水,如今演变成为自来水模式,按使用量付费,这就是整个演进的过程。