微服务架构,多“微”才合适?
以前的文章讨论过《互联网架构,究竟为啥要做服务化?》,随着数据量、并发量、业务复杂度的增长,互联网架构会出现以下问题:
代码到处拷贝
底层复杂性扩散
基础库(so/jar/dll)耦合
SQL质量得不到保障,业务相互影响
数据库耦合
“服务化”是一个很好的解决上述痛点的方案。
那么问题来了,微服务架构多“微”才合适?
行业内有这样四类常见实践。
实践一:统一服务层
这是最粗犷的玩法,所有基础数据,都通过一个统一的服务来进行访问。
在业务不是特别复杂的时候,这不失为一个快速分层的方案,一旦业务变得复杂,服务层会变得非常重,成为耦合焦点。
以微信场景为例,假设通过一个通用的服务层来访问基础数据。
则只有一个统一的服务层,用户信息,好友信息,群组信息,消息信息都通过这个服务层来访问。
实践二:一个子业务一个服务
如果所有的数据访问都通过一个服务层来访问,那么一行代码出故障,就将影响整个服务,所以更合理的做法是在服务层进行拆分。
服务层架构如何细分?
垂直拆分是个好的方案,将子业务分拆,那么微信的服务化架构或许会变成下面的样子:
用户相关的子业务,访问user服务
好友相关的子业务,访问friend服务
群组相关的子业务,访问group服务
消息相关的子业务,访问msg服务
这样的话,一个服务出问题也不会影响其他服务,与此同时,数据层也按照业务垂直拆分开了。
服务粒度变细之后,出现一个新的问题,业务与服务的连接关系变复杂了,有什么好的优化方案么?
常见的,加入一个高可用服务分发层(Service Mesh不就是这么干的么),并在协议设计时加入服务号,可以减少蜘蛛网状的依赖关系:
调用方依赖分发层,传入服务号
分发层依赖服务层,通过服务号参数分发
实践三:一个数据库对应一个服务
数据访问服务最初是从DAO/ORM的数据访问需求过来的,所以有些公司也有一个数据库一个服务的玩法。
一个子业务对应一个服务的玩法如下图:
服务层,整个群业务是一个服务
存储层,实际可能对应了群信息、群成员、群消息等多个数据表
拆分成一个数据库一个服务,则架构会变成下面的样子:
群信息库,群成员库,群消息库之间也解耦开,不会相互影响。
实践四,一个接口对应一个服务
微服务架构中,更极端的,甚至一个接口对应一个微服务。
这样的话,架构就从:
进化为:
修改群信息服务
增加群信息服务
获取群信息服务
多个服务操纵同一个数据库,任何接口服务出问题,都不会影响其他接口服务。使用这种方案的,一般与开发语言特性结合比较紧密,例如golang。
上文中谈到的服务化与微服务,不同粒度的服务化各有什么优劣呢?
总的来说,细粒度拆分的优点有:
服务都能够独立部署
扩容和缩容方便,有利于提高资源利用率
拆得越细,耦合相对会减小
拆得越细,容错相对会更好,一个服务出问题不影响其他服务
扩展性更好
细粒度拆分的不足也很明显:
拆得越细,系统越复杂
系统之间的依赖关系也更复杂
运维复杂度提升
监控更加复杂
出问题时定位问题更难
互联公司,以“子业务”作为微服务粒度是最常用,订单服务,用户服务,支付服务等等。
微服务架构,多“微”才合适?相关推荐
- 微服务架构多“微”才合适
微服务架构多"微"才合适 转自:http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959530&id ...
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么...
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
- 【微服务架构】微服务与SOA架构(3)
前文: [微服务架构]微服务与SOA架构(1) [微服务架构]微服务与SOA架构(2) 比较架构特性 组件(component)是软件中的一个单位,具有定义良好的接口.定义良好的角色/责任集合.组件是 ...
- python 微服务架构_Python微服务架构chili_chicken
### chili_chicken是什么 现在微服务架构大火,企业项目纷纷向微服务转变.Python目前处于稳步发展的状态,用于多领域,比如人工智能.爬虫.运维.web等,我们此贴只讨论web方向.现 ...
- Re:从 0 开始的微服务架构--(三)微服务架构 API 的开发与治理--转
原文来自:聊聊架构公众号 前面的文章中有说到微服务的通信方式,Martin Folwer 先生在他对微服务的定义中也提到"每个服务运行在其独立的进程中,服务与服务间采用 轻量级的通信机制 互 ...
- 【微服务架构】微服务设计模式
这是微服务架构系列文章的第 3 篇 高可用性.可扩展性.故障恢复能力和性能是微服务的特征.您可以使用微服务架构模式来构建微服务应用程序,从而降低微服务失败的风险. 模式分为三层: 应用模式 应用程序模 ...
- 同事操作两个数据源保持事务一致_「微服务架构」微服务架构中的数据一致性...
在微服务中,一个逻辑上原子操作可以经常跨越多个微服务.即使是单片系统也可能使用多个数据库或消息传递解决方案.使用多个独立的数据存储解决方案,如果其中一个分布式流程参与者出现故障,我们就会面临数据不一致 ...
- 微服务架构(一):什么是微服务
解析微服务架构系列文章将分几篇描述微服务的定义.特点.应用场景.企业集成架构的演进以及微服务转型思路和技术决策考虑等内容,并以IBM技术为例介绍如何实现微服务架构转型. 为什么需要微服务架构 &quo ...
- 漫谈单体架构与微服务架构(上):单体架构
最近微服务架构特别火爆,就跟人工智能.区块链一样,软件架构设计如果不提微服务,感觉就像是与世界先进的架构风格和开发技术脱了节似的,各方各面都无法彰显高大上的气质. 本来再打算使用一套系列文章来讨论微服 ...
最新文章
- LINKs: Xamarin.Forms + Prism
- java平台设计zhe_基于java平台的网上评教系统的设计与实现
- DVD碟片输出与刻录简单流程
- 计算机管理无法连接虚拟磁盘服务,虚拟磁盘服务错误怎么操作【图文教程】
- 谷歌android红米手机,小米多款谷歌Android One手机曝光:全是红米系列
- 符号实体(转义字符)
- Delphi2CS破解 Delphi 转换C#
- 移动端业务数据管理平台+健康管理平台+banner管理+图标管理+订单管理+门店内容管理+用户信息管理+版本更新管理Axure通用web端高保真交互app业务数据管理平台
- ImageMagick命令执行漏洞(CVE-2016–3714)利用及测试
- 5.企业安全建设入门(基于开源软件打造企业网络安全) --- 业务安全
- 不是吧!你还不懂DHT协议?
- linux中-f的含义,linux 下shell中if的“-e,-d,-f”的含义
- OneStep 移植
- 排序算法——希尔排序的图解、代码实现以及时间复杂度分析
- 麻雀要革命2 第44节:怦然心动的星月童话
- React学习(入门了解)
- 国际标准SHARE78七级灾难备份方案
- Android中的适配
- PAT-2019年冬季考试-甲级 7-1 Good in C (20分)
- 数据库Access denied失败解决方法