当前位置: 首页 > 科技观察

5分钟带你快速了解ServiceMesh的前世今生

时间:2023-03-13 06:57:28 科技观察

本文转载自微信公众号《笑嘻嘻的建筑师》,作者雷佳。转载本文请联系LoveSmile公众号的架构师。1969年11月,美国国防高级研究计划署为了促进大学之间的资源共享,建立了名为ARPAnet的网络,最初只有四个节点。Arpanet诞生一年后,Arpanet节点数量增加到15个,之后平均每20天就有一台大型计算机连接到它。随着网络在世界范围内不断扩大,不同国家、不同地区形成了网络,说着不同的方言,彼此不通,形成了割据的格局。IsolatedArpanet此时,机器之间的通信是以彼此约定的方式进行的。计算机依靠方言进行通信,机器需要自行处理网络通信过程中遇到的丢包、乱序、重试等问题。青铜器时代,为了解决各个国家和地区的网络无法相互通信的问题,1973年,两个年轻人开始努力工作,他们致力于研究一种能够解决计算机之间通信的通信方法不同的机器型号。简单的说,就是用普通话代替方言,这就是大家熟知的“TCP/IP”协议。BobKahn(左)和WintonCerf(右)随着TCP/IP协议逐渐普及,形成了一个庞大的Internet网络。这时候互联网上机器之间的通信问题就解决了。TCP/IP可以保证信息的可靠传输,我们只需要使用关系业务逻辑即可。依靠TCP/IP协议实现机器对机器传输的黄金时代TCP/IP协议刚出现的时候,在计算机上的应用还很差,机器之间的通信一般用于简单的数据传输。随着WEB互联网技术的兴起,出现了很多基于TCP/IP协议的应用层协议,国内涌现出腾讯、新浪、搜狐、淘宝等一批优秀的互联网公司。当时访问量不大,单体架构基本够用。单体应用之间调用的服务数量少,每个服务都有唯一的IP地址,服务之间的交互通过IP寻址。白金时代的互联网用户规模越来越大,单实例无法应对不断增长的访问量。通常在一台机器上部署多个实例,形成一个集群。服务1对服务2的访问不再是点对点,现在是点对多点,中间会加一个负载均衡器来解决流量均衡问题。单体应用集群间调用钻石时代随着互联网业务访问的井喷,横向扩展服务实例的方式也开始遇到瓶颈。单个服务越来越大,代码模块耦合严重。修改一行代码可能会影响整个系统。.问题来了,解决方案也随之而来,“微服务”就诞生了。将一个业务服务按照功能模块划分为多个微服务,例如将Service1划分为微服务1、微服务2、微服务3。在单个服务中,微服务1调用微服务2可能是一个模块调用另一个模块,可以通过调用公共函数来完成。拆分成微服务后,就变成了两个微服务的直接调用。这个调用是通过网络通信来实现的。微服务之间的调用在星耀时代,随着业务的扩展,对系统高可用的要求越来越高。一些关键的微服务,如订单、账单等,可能会部署成百上千个实例,运维人员的负担逐渐加重。增加,如果机器挂了,需要手动删除。如果遇到双十一这样的大事件,可能需要扩容上千个实例,需要运维人员手动添加。人工干预越多,出错的概率就越大。第一代微服务技术应运而生。每个微服务都嵌入了一个代理来处理服务注册和发现的逻辑。在国内,以阿里的Dubbo和微博的Motan为代表。这类框架的缺点很明显:微服务与代理耦合,不支持多语言。针对第一代微服务框架的不足,大家纷纷探索下一代微服务框架。在每台主机上分别部署一个代理进程,多个微服务共享一个代理进程,实现服务发现和负载均衡。这种代理进程模式通常称为“sideCar”,即“边车模式”。什么是“边车”?早期有一种摩托,驾驶位旁边挂着拖车,相比之下微服务旁边挂着一个agent进程,所以被形象地称为“边车模式”。在新一代的ServiceMesh架构中,服务消费者和服务提供者都会部署SideCar。SideCar模式服务通过sideCar连接,用于处理与业务无关的注册、发现、熔断、限流等治理能力。省略业务服务等不相关的东西,将所有的sidecar连接起来可以得到如下图:ServiceMesh是不是看起来像一个网格,所以ServiceMesh(服务网格)由此得名。维基百科对服务网格的定义如下:服务网格是处理服务之间通信的基础设施层。云原生应用程序具有复杂的服务拓扑,而服务网格可确保请求可靠地通过这些拓扑。在实际应用中,ServiceMesh通常由一系列轻量级的网络代理组成,它们与应用部署在一起,但对应用透明。总结一下ServiceMesh(服务网格)的特点:场景:用于微服务之间的服务通信和服务治理。解决方案:Sidecar模式定位:Infrastructure层ServiceMesh是一种比较新的架构风格。大家选择技术这个时候不要盲目追求新技术,最好的技术就是适合当前业务发展的技术。你学会了吗?