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

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

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

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

  • 互联网技术架构飞速演进,特别是底层硬件及芯片技术快速发展,后端服务器的能力越来越强大。多数情况下,单个业务已很难消耗完一整台服务器的资源或处理能力。

  • 移动互联网深度融合与应用,瘦客户端兴起,使得云端能力与承载变得更加重要。

  • 容器技术得到广泛认可与应用,轻量级协议、代码管理、新集成方法与工具等技术也越来越成熟。

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

微服务架构的优势及痛点


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

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

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

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

  • 单个微服务更易理解、方便开发与维护。

  • 应用解耦,对整体应用交付而言,开发迭代更敏捷。

  • 技术选择更加自由,微服务不再需要限定统一的技术实现。

  • 微服务独立部署,应用更稳定,同时扩展更加容易与快速。

  • ……

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

  • 微服务众多,容器编排与部署管理等会变得异常复杂。

  • 业务的容量管理变得更加困难,资源利用效率难以提升。

  • 监控的颗粒度增多,关联关系更加复杂。

  • 微服务故障恢复、调度需要更精细化。

  • ……

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


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

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

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

01 服务布局

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

  • 城市之间的数据是相对独立的。除了少数账号全球同步,大部分业务都希望做成电子邮件式的服务,各自有自身的环境在跑,之间使用类似于电子邮件的通信。

  • 城市间的后备则使用公网的 udp 通道。在城市内,使用三园区架构,每个园区是一套独立的系统,从接入、逻辑、存储每一层完全独立,可互相为对方提供备份。

  • 多园区形成整体服务能力。在园区内,由多机组成 set,互为容错,包含网络与电力也是独立的。这样的服务布局,不仅是微服务架构,而且考虑了容灾能力。

02 过载保护


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

  • 考虑问题应该是服务要有轻重分离,即一个服务里不能既有重的操作,又有轻的操作。

  • 队列控制,要了解一个请求在队列中等待的平均时间,从而决定是否要启动拒绝。

  • 组合命令式,由于微服务的调用链及层次可能会增多,后端服务也可能是多个。

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

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

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

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

微信中两大典型微服务案例相关推荐

  1. 【springcloud alibaba】 一条龙服务实现微服务案例

    第一章 微服务介绍 1.1 系统架构演变 1.1.1 SpringCloud Spring Cloud是一系列框架的集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发, ...

  2. 从零开始学习微服务 -微服务基本概述、微服务案例

    1. SpringCloud概述 1.1 互联网应用架构 1.1.1 单体应用架构 在诞⽣之初,项目的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个To ...

  3. java微服务案例分析_《Java深入微服务原理改造房产销售平台》知识点梳理与问答总结...

    一图胜千言 一图胜千言 既然已经在session有了,直接session取就行了,为什么要再放threadlocal,之后再从threadlocal清掉,一直从session拿不就行了? 答: 放在T ...

  4. 两个server 两个数据库 微服务_微服务的数据库设计

    单独的数据库: 微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库.它是基于下面三个原因. 优化服务接口:微服务之间的接口越小越好,最好只有 ...

  5. 大项目微服务架构设计

    根据目前产品存在的问题,针对快速开发.海量用户.大量数据.低延迟等互联网应用的实际需要,通过对业务架构.系统架构.基础架构.技术架构进行分析,采用先进实用的微服务SOA架构重构智慧校园.数字化校园等产 ...

  6. Spring Cloud中如何保证各个微服务之间调用的安全性

    一.背景 微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务. 每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢? 不是说你想调用就可以调用,一定要有认证机制,是我们内 ...

  7. 【架构】研究谷歌和亚马逊的微服务案例,我们能学习到的经验

    产品复杂度与日俱增.想继续按以前的节奏去演进产品变得越来越困难了,是时候寻找一种更好的方法了.微服务架构承诺可以让团队快速前进... 但与此同时也带来了一系列全新的挑战. 在为Enchant搭建微服务 ...

  8. 企业微信X微盛联合发布会回顾:All in企业微信赛道两年,微盛的增长逻辑

    近日,企业微信X微盛·企微管家联合发布会在广州顺利举行. 在现场数百名嘉宾与媒体朋友,以及全国3万余名To B直播观众的见证下,腾讯企业微信产业生态合作总经理李致峰与微盛·企微管家创始人杨明共同签订了 ...

  9. java框架之SpringCloud(2)-Rest微服务案例

    在上一章节已经对微服务与 SpringCloud 做了介绍,为方便后面学习,下面以 Dept 部门模块为例做一个微服务通用 Demo -- Consumer 消费者(Client) 通过 REST 调 ...

最新文章

  1. [JS] 闭包与内存泄漏
  2. 在aptana3中使用scriptDoc__scriptDoc 2.0完全参考
  3. matlab中利用princomp实现PCA降维
  4. 从LXMERT到VLMO:多模态预训练模型的演变史
  5. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...
  6. IDEA将项目上传至码云/GitHub托管
  7. GitHub 上100个优质前端项目整理,值得收藏!
  8. 61笔记本配置_最清晰的笔记本电脑选购推荐,每月更新(2019.5)
  9. 数据挖掘--分类思维导图
  10. windows 播放器(wzplayer)
  11. java基础----变量与常量+作用域
  12. 浅谈如何提高自动化测试的稳定性和可维护性 (pytestallure)
  13. WPF版的权限管理系统
  14. JS中clientHeight、scrollHeight、offsetHeight、scrollTop、offsetTop的定义
  15. SSM+校园网上订餐系统 毕业设计-附源码211510
  16. charles安装免费版
  17. equal和==区别详解
  18. A股全自动化交易——从零到实盘20(完结)
  19. hin2vec 异质信息网络表示学习 个人笔记
  20. Markdown学习(入门级)

热门文章

  1. SAP Oracle EBS集成解决方案
  2. 解决ScrollView与ViewPage滑动冲突的问题
  3. Nginx log error:client sent invalid userid cookie
  4. μC/OS-I移植需要编写的文件
  5. Silverlight 导入数据时读取txt文件乱码
  6. Mono 2.4 and MonoDevelop 2.0 have been released
  7. matlab怎么求矩阵的范数
  8. Linux Shell实例精讲学习笔记
  9. makefile中模式规则的引入和介绍------%:%.cpp
  10. linux 安装 hadoop