新闻中心
微服务架构多“微”才合适?

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

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

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

  用户相关的子业务,访问user服务好友相关的子业务,访问friend服务群组相关的子业务,访问group服务消息相关的子业务,访问msg服务这样的话,一个服务出问题也不会影响其他服务,与此同时,数据层也按照业务垂直拆分开了。

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

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

  调用方依赖分发层,传入服务号分发层依赖服务层,通过服务号参数分发实践三:一个数据库对应一个服务

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

  服务层,整个群业务是一个服务存储层,实际可能对应了群信息、群成员、群消息等多个数据表拆分成一个数据库一个服务,则架构会变成下面的样子:

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

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

  拆得越细,系统越复杂系统之间的依赖关系也更复杂运维复杂度提升监控更加复杂出问题时定位问题更难互联公司,以“子业务”作为微服务粒度是最常用,订单服务,用户服务,支付服务等等。

无法在这个位置找到: plus/ckplayer.htm

上一篇:微服务架构 下一篇:甘肃天水携电商打造“陇东南智能物流枢纽”“疏渠开路” 助销农