作者:熊普江,腾讯公司资深架构师
来自:51CTO技术栈
一,行业背景
互联网技术一直在快速演进当中,同时移动互联网与云时代来临,微服务架构由此应映而生。
如下图,是微服务在我国的百度搜索指数:
从图中可以看出,自 2013 前后微服务开始逐渐被大家关注,随时间推移搜索的人也越来越多,直至 2016 年爆发。
微服务架构的快速发展并广泛流行,和以下因素息息相关:
近两年,微服务这个术语渐成热门词汇,但它不是一个全新架构,更不是一个包治百病的架构。那么,微服务架构与单体式架构相比优势体现在哪?这些优势又给开发模式、运维带来哪些痛点?
二,微服务架构的优势及痛点
微服务和单点服务的区别是什么呢?比喻来讲,单点服务是把所有的东西放在一个大盒子里,这个大盒子里什么都有。
微服务更像是车箱,每个箱子里包含特定的功能模块和物品,所有模块可以很灵活地拆分出来。
换言之,在单点服务中,所有的部件都在一个巨大的软件包中。在微服务架构下,有很多独立存在的小服务,通过 API 接口连接成庞大的系统。
相比过往的单体式应用架构,微服务架构优势明显,如:
同时,微服务架构的特点与优势在开发模式、运维等方面也带来很多痛点,如:
三,微信中两大典型微服务案例
熊普江老师表示,微信一直提倡敏捷开发与“大系统小做”,这其实就是微服务的理念与架构实现。
由于微信诞生于 2011 年,当时微服务架构的概念还没有普及,也就是说,微信的微服务架构在业界实施并落地相对较早。
微信中微服务案例有很多,这里主要分享服务布局、过载保护两大典型案例。
四,微信服务布局
微信的服务布局采用的是多地自治、园区互备架构。如下,是微信的服务布局示意图:
五,微信过载保护
过载保护的微服务架构,目的是确保核心服务可用。确保核心服务的可用性有如下三点:
假定后端有两个服务(A 服务与 B 服务),而前端调用需要依赖于 A、B 服务的组合结果,那么单个 A 或者单个 B 的轻微过载,就可能导致前端服务不可用,这是很严重的问题。这种情况下,就需要一个反馈机制。
如下,是过载保护的微服务架构示意图:
如上图所示,整个系统基于反馈,把整个拒绝的信息全程传递。最右边是几个典型的服务,从一个 CGI 调用一个后台服务,再调用另一个后台服务,系统会在 CGI 层面就把它的重要程度往下传。
回到刚才前端调用 A、B 服务的例子,使用这样的一种重要程度传递,就可以直接拒绝那些相同用户的 20% 的请求,有效地解决单个服务轻微过载的问题。