微服务架构,多“微”才合适?

栏目: 后端 · 发布时间: 5年前

内容简介:以前的文章讨论过《“服务化”是一个很好的解决上述痛点的方案。那么问题来了,微服务架构多“微”才合适?

以前的文章讨论过《 互联网架构,究竟为啥要做服务化? 》,随着数据量、并发量、业务复杂度的增长,互联网架构会出现以下问题:

  • 代码到处拷贝
  • 底层复杂性扩散
  • 基础库(so/jar/dll)耦合
  • SQL质量得不到保障,业务相互影响
  • 数据库耦合

“服务化”是一个很好的解决上述痛点的方案。

那么问题来了,微服务架构多“微”才合适?

微服务架构,多“微”才合适?

行业内有这样四类常见实践。

实践一:统一服务层

微服务架构,多“微”才合适?

这是最粗犷的玩法,所有基础数据,都通过一个统一的服务来进行访问。

在业务不是特别复杂的时候,这不失为一个快速分层的方案,一旦业务变得复杂,服务层会变得非常重,成为耦合焦点。

以微信场景为例,假设通过一个通用的服务层来访问基础数据。

微服务架构,多“微”才合适?

则只有一个统一的服务层,用户信息,好友信息,群组信息,消息信息都通过这个服务层来访问。

实践二:一个子业务一个服务

如果所有的数据访问都通过一个服务层来访问,那么一行代码出故障,就将影响整个服务,所以更合理的做法是在服务层进行拆分。

服务层架构如何细分?

垂直拆分是个好的方案,将子业务分拆,那么微信的服务化架构或许会变成下面的样子:

微服务架构,多“微”才合适?

  • 用户相关的子业务,访问user服务
  • 好友相关的子业务,访问friend服务
  • 群组相关的子业务,访问group服务
  • 消息相关的子业务,访问msg服务

这样的话,一个服务出问题也不会影响其他服务,与此同时,数据层也按照业务垂直拆分开了。

服务粒度变细之后,出现一个新的问题,业务与服务的连接关系变复杂了,有什么好的优化方案么?

微服务架构,多“微”才合适?

常见的,加入一个高可用服务分发层(Service Mesh不就是这么干的么),并在协议设计时加入服务号,可以减少蜘蛛网状的依赖关系:

  • 调用方依赖分发层,传入服务号
  • 分发层依赖服务层,通过服务号参数分发

实践三:一个数据库对应一个服务

数据访问服务最初是从DAO/ORM的数据访问需求过来的,所以有些公司也有一个数据库一个服务的玩法。

一个子业务对应一个服务的玩法如下图:

微服务架构,多“微”才合适?

  • 服务层,整个群业务是一个服务
  • 存储层,实际可能对应了群信息、群成员、群消息等多个数据表

拆分成一个数据库一个服务,则架构会变成下面的样子:

微服务架构,多“微”才合适?

群信息库,群成员库,群消息库之间也解耦开,不会相互影响。

实践四,一个接口对应一个服务

微服务架构中,更极端的,甚至一个接口对应一个微服务。

这样的话,架构就从:

微服务架构,多“微”才合适?

进化为:

微服务架构,多“微”才合适?

  • 修改群信息服务
  • 增加群信息服务
  • 获取群信息服务

多个服务操纵同一个数据库,任何接口服务出问题,都不会影响其他接口服务。使用这种方案的,一般与开发语言特性结合比较紧密,例如golang。

上文中谈到的服务化与微服务,不同粒度的服务化各有什么优劣呢?

总的来说,细粒度拆分的优点有:

  • 服务都能够独立部署
  • 扩容和缩容方便,有利于提高资源利用率
  • 拆得越细,耦合相对会减小
  • 拆得越细,容错相对会更好,一个服务出问题不影响其他服务
  • 扩展性更好

细粒度拆分的不足也很明显:

  • 拆得越细,系统越复杂
  • 系统之间的依赖关系也更复杂
  • 运维复杂度提升
  • 监控更加复杂
  • 出问题时定位问题更难

互联公司,以“子业务”作为微服务粒度是最常用,订单服务,用户服务,支付服务等等。

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

微服务架构,多“微”才合适?

戳这里,看该作者更多好文


以上所述就是小编给大家介绍的《微服务架构,多“微”才合适?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

探索需求

探索需求

章柏幸、王媛媛、谢攀、杰拉尔德・温伯格、唐纳德・高斯 / 章柏幸、王媛媛、谢攀 / 清华大学出版社 / 2004-7-1 / 39.00元

本书将与您一起寻找"什么是客户真正想要的"这一问题的答案。 本书着眼于系统设计之前的需求过程,它是整个开发过程(如何设计人们想要的产品和系统)中最有挑战性的那部分。通过对一些需求分析中的常见误区和问题的分析和讨论,从和客户沟通开始,深入研究一些可能的需求,澄清用户和开发者期望值,最终给出了能够大幅度提高项目成功几率的一些建议方法。 本书由该领域内公认的两位作者合著,搜集了他们在大大小小......一起来看看 《探索需求》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具