云世 公众号
推荐在云世搜索以下关键词,获取更多相关内容:
ServiceMesh优势、ServiceMesh基础组件、服务网格概念、sidecar数据面、sidecar控制面
今天和你分享的内容是微服务架构的基础知识。正如在开篇词提到的,学习 Service Mesh,首先要理解微服务架构。理解微服务架构产生的背景和原因,才能进一步抓住微服务架构的痛点,更清晰地认识到 Service Mesh 解决的问题。
单体服务架构有哪些问题
单体服务,相信大家都有所了解,在我们最初接触 Web 开发,写一些网站或者 App 的时候,大多使用的是单体服务这种后端技术架构。比如在 Web 2.0 时期,最常见的博客系统 WordPress,就是一个著名的单体服务。因为它所有的功能模块都在一个代码仓库,并且部署在同一个进程内,是一个典型的单体架构。
事实上,在不需要快速迭代的业务上,单体服务也可以运行得很好,比如一个小的团队维护一个变更速度没那么快的项目,就像WordPress 和早期的门户网站。但面对如今移动互联网业务的快速迭代,单体服务就显得力不从心了,一个很大的问题就是,大量复杂的业务冗杂在一个单体应用中,造成了人员沟通成本和发布迭代成本的急剧上升。
【了解更多DDD系列课程,搜索 云世 公众号获取】
为了让你更好地理解从单体服务转向微服务的原因,下面来具体说说单体服务的问题。
1. 人员协作问题
所有人员都在一个代码仓库开发,当数量超过 10 人时,协作问题就开始凸显了。比如一个新成员,需要在一个庞大的代码仓库中,找到自己负责的模块部分,假如他在改动自己负责的部分的时候,代码组织并不是很好,就很容易涉及其他人写的代码,这个时候就产生了不必要的沟通成本。即便沟通顺利,也容易引起单体应用中其他部分的故障。
2. 部署问题
除了协作中的问题,还会产生上线部署效率的问题。当不同人员开发的不同模块,同时需要上线时,如果分别将分支代码合并到主干代码,再按照流程上线,就会产生先后顺序的等待时间;如果合并到一起上线,线上功能一旦出问题,就需要花费大量时间排查是哪个模块出现的问题。
3. 架构演进问题
当我们应用中的某个模块,遇到了性能瓶颈,我们希望以另外一种语言重新编写此模块,这个时候单体应用完全无法演进。如果我们要替换语言,就得重写整个应用,花费的成本可想而知。
4. 程序稳定性问题
在单体应用中,某个模块出现 Bug 时,比如因为疏忽造成了 OOM (程序内存不足),导致程序 panic,这会导致整个网站或者 App 不可用。一个模块的问题,导致了整个应用挂掉,这在生产环境中是无法接受的。
随着互联网业务的发展,整体业务越来越复杂,以上问题越来越明显,单体服务已经无法应对如此复杂的业务场景了。互联网行业也从架构上逐步开始了服务拆分,进入了 SOA (Service-Oriented Architecture 面向服务的架构)时代。
在 SOA 时代,比如淘宝网,采用了一种 ESB 总线的技术,就是所有服务的通信需要通过一个集中式的总线服务(可以理解为集中式网关),这大大降低了服务的通信效率并且增加了单点风险。但是随着业务进一步扩大, ESB 总线的弊端逐步凸显,比如每次服务变更节点都需要人工操作,这大大降低了互联网业务的迭代效率。
微服务和 SOA 一脉相承,而微服务则不再强调传统 SOA 架构里面比较重的 ESB 企业服务总线。
微服务有哪些优势
微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成,这些服务由各个小型独立团队负责。微服务架构使应用程序更易于扩展、更快开发,从而加速创新并缩短新功能的上市时间。与单体应用相比,微服务能够更好地满足互联网时代业务快速变化的需要。
接下来我们看一看微服务相对于单体服务都有哪些优势。
1. 敏捷开发
一个小的团队,甚至一个人,负责一个或者多个服务,当有新的需求出现,可以快速对这个小型服务做出修改并上线。但是当维护一个庞大的代码仓库构成的单体服务时ÿ