聊聊微信微服务技术

作者:熊普江,腾讯公司资深架构师

来自:51CTO技术栈

一,行业背景

互联网技术一直在快速演进当中,同时移动互联网与云时代来临,微服务架构由此应映而生。

如下图,是微服务在我国的百度搜索指数:

从图中可以看出,自 2013 前后微服务开始逐渐被大家关注,随时间推移搜索的人也越来越多,直至 2016 年爆发。

微服务架构的快速发展并广泛流行,和以下因素息息相关:

  • 互联网技术架构飞速演进,特别是底层硬件及芯片技术快速发展,后端服务器的能力越来越强大。多数情况下,单个业务已很难消耗完一整台服务器的资源或处理能力。
  • 移动互联网深度融合与应用,瘦客户端兴起,使得云端能力与承载变得更加重要。
  • 容器技术得到广泛认可与应用,轻量级协议、代码管理、新集成方法与工具等技术也越来越成熟。

近两年,微服务这个术语渐成热门词汇,但它不是一个全新架构,更不是一个包治百病的架构。那么,微服务架构与单体式架构相比优势体现在哪?这些优势又给开发模式、运维带来哪些痛点?

二,微服务架构的优势及痛点

微服务和单点服务的区别是什么呢?比喻来讲,单点服务是把所有的东西放在一个大盒子里,这个大盒子里什么都有。

微服务更像是车箱,每个箱子里包含特定的功能模块和物品,所有模块可以很灵活地拆分出来。

换言之,在单点服务中,所有的部件都在一个巨大的软件包中。在微服务架构下,有很多独立存在的小服务,通过 API 接口连接成庞大的系统。

相比过往的单体式应用架构,微服务架构优势明显,如:

  • 单个微服务更易理解、方便开发与维护。
  • 应用解耦,对整体应用交付而言,开发迭代更敏捷。
  • 技术选择更加自由,微服务不再需要限定统一的技术实现。
  • 微服务独立部署,应用更稳定,同时扩展更加容易与快速。
  • ……

同时,微服务架构的特点与优势在开发模式、运维等方面也带来很多痛点,如:

  • 微服务众多,容器编排与部署管理等会变得异常复杂。
  • 业务的容量管理变得更加困难,资源利用效率难以提升。
  • 监控的颗粒度增多,关联关系更加复杂。
  • 微服务故障恢复、调度需要更精细化。
  • ……

三,微信中两大典型微服务案例

熊普江老师表示,微信一直提倡敏捷开发与“大系统小做”,这其实就是微服务的理念与架构实现。

由于微信诞生于 2011 年,当时微服务架构的概念还没有普及,也就是说,微信的微服务架构在业界实施并落地相对较早。

微信中微服务案例有很多,这里主要分享服务布局、过载保护两大典型案例。

四,微信服务布局

微信的服务布局采用的是多地自治、园区互备架构。如下,是微信的服务布局示意图:

  • 城市之间的数据是相对独立的。除了少数账号全球同步,大部分业务都希望做成电子邮件式的服务,各自有自身的环境在跑,之间使用类似于电子邮件的通信。
  • 城市间的后备则使用公网的 udp 通道。在城市内,使用三园区架构,每个园区是一套独立的系统,从接入、逻辑、存储每一层完全独立,可互相为对方提供备份。
  • 多园区形成整体服务能力。在园区内,由多机组成 set,互为容错,包含网络与电力也是独立的。这样的服务布局,不仅是微服务架构,而且考虑了容灾能力。

五,微信过载保护

过载保护的微服务架构,目的是确保核心服务可用。确保核心服务的可用性有如下三点:

  • 考虑问题应该是服务要有轻重分离,即一个服务里不能既有重的操作,又有轻的操作。
  • 队列控制,要了解一个请求在队列中等待的平均时间,从而决定是否要启动拒绝。
  • 组合命令式,由于微服务的调用链及层次可能会增多,后端服务也可能是多个。

假定后端有两个服务(A 服务与 B 服务),而前端调用需要依赖于 A、B 服务的组合结果,那么单个 A 或者单个 B 的轻微过载,就可能导致前端服务不可用,这是很严重的问题。这种情况下,就需要一个反馈机制。

如下,是过载保护的微服务架构示意图:

如上图所示,整个系统基于反馈,把整个拒绝的信息全程传递。最右边是几个典型的服务,从一个 CGI 调用一个后台服务,再调用另一个后台服务,系统会在 CGI 层面就把它的重要程度往下传。

回到刚才前端调用 A、B 服务的例子,使用这样的一种重要程度传递,就可以直接拒绝那些相同用户的 20% 的请求,有效地解决单个服务轻微过载的问题。

原文发布于微信公众号 - 架构师小秘圈(seexmq)

原文发表时间:2018-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

中小企业IT建设经验谈:如何正确地使用云存储

我是一家小型企业的IT经理,从创立之初我就加盟了这家公司。从最初的单打独斗到如今带领一个不大的团队,我一直在负责公司IT系统的建设与运维。如今,公司的业务已经步...

3564
来自专栏漫漫全栈路

以应用为中心的多云(Multi-Cloud)数据管理平台

最近,我有幸和Peter Smails,Datos IO的业务开发和营销副总裁交谈了一番。 Datos通过为NoSQL提供数据保护来构建业务,而随着Recove...

2627
来自专栏悦思悦读

浅析软件架构和云计算

到底什么使软件架构?如果你问工程师,一般会被甩给一份文档,其中最显眼的就是类似下面例子中的一副结构图。看起来好复杂,好有深度啊。于是你就退缩了。 ? 其实,功能...

45612
来自专栏中国白客联盟

【免费】渗透测试室内一对一培训-工具篇更新

https://pan.baidu.com/s/1i5tEFQk910b_UNXk_N-ADw 密码:fu5s

2703
来自专栏「3306 Pai」社区

3306π武汉站嘉宾专访-斗鱼网络资深DBA赵飞祥

网名 yumushui ,拥有多年一线传统行业和互联网数据库架构设计与运维经验。Oracle 11g OCM,对MySQL、Oracle、PostgreSQL、...

2493
来自专栏云计算D1net

如何避免最常见的云迁移错误

当企业开始实施云端迁移项目时,有一些错误值得注意。一位名为“Joe the IT Guy”早期的云计算采用者提出了一些建议,并指出了人们在开展云迁移时要注意的五...

883
来自专栏web前端教室

[2018/08/27期]学生们今天结课了,今天这篇文章是写给你们的

前端这个行业日渐火爆,以后还将继续火爆,许多新人、零基础、转行的人不断进入。他们都有一个共同的问题,那就是“如何提问?”

1043
来自专栏全栈数据化营销

营销案例分享:京东食间到新媒体传播策划方案

这个案例的借鉴意义其实也挺大的,主要还是在于确定策略后,如何将策略执行到位的问题,这里京东以活动为主,利用kol做大规模的宣传,当然kol的筛选其实还是挺有方法...

883
来自专栏CSDN技术头条

张升:农业银行的分布式架构应用实践与展望

近年来,以阿里为代表的互联网企业提出的“去IOE”,在业界引起了广泛的讨论。“去IOE”直接含义是不使用传统IT巨头的产品,这些厂商产品虽然好,但基本处于市场垄...

2257
来自专栏美团技术团队

2000万日订单背后:美团外卖客户端高可用建设体系

2742

扫码关注云+社区

领取腾讯云代金券