微服务架构按照什么细粒度拆分?

我们这边开发微服务架构也是刚开始 目前的情况是基本都是已经是已经运行在线的系统,那如果我们现在准备重构,第一细粒度拆分,按照什么套路拆呢?是按照业务呢还是service呢?哪种情况横着拆哪种情况竖着拆?第二就是服务间的通信机制了。

4回答

Steven99Steven99  软件架构设计师 , steven
yinxinhebingbingsxwuwenpin等赞同了此回答
既然理解微服务是用来重构业务应用的,这个问题就很简单,以业务应用为核心,构建业务服务。忘掉,重构! 业务服务需要数据服务、计算服务、搜索服务、算法服务……以及基本的日志、监控、配置、注册发现、网关、任务调度等组件。 至于数据服务怎么实现,看你团队能力。这才涉及数据...显示全部

既然理解微服务是用来重构业务应用的,这个问题就很简单,以业务应用为核心,构建业务服务。忘掉,重构!

业务服务需要数据服务、计算服务、搜索服务、算法服务……以及基本的日志、监控、配置、注册发现、网关、任务调度等组件。

至于数据服务怎么实现,看你团队能力。这才涉及数据分拆,模型重构。

服务通信可以考虑事件驱动机制,也是后期业务数据处理,态势感知,智能风控,智能营销,智能运维等的基础。

收起
 2018-07-10
浏览3250
  • 原来我也觉得没什么固定模式,不过现在觉得还是有的,数据量,请求负载,响应时间,数据存储方式等都是微服务设计需要考虑的重点
    2018-07-11
  • 微服务设计忌拿一个系统或模块分拆,没有顶层设计能力,最好不要轻易微服务化,很多时候是给自己找麻烦。同样一个百万条数据的用户表和订单表,实现微服务化时,考虑的重点和实现方式可能是不一样的,因为订单数据可能持续快速增长,用户数是相对稳定
    2018-07-11
ynwssjxynwssjx  系统架构师 , CMB
yinxinTonyWang王希瑞等赞同了此回答
以下仅代表个人观点:感觉这是个没有标准答案的问题,如何拆?按什么套路来拆?问答这两个问题的基础一定要十分熟悉你的业务逻辑才行。微服务这东西,尤其是那种已经运行多年的老系统,一不小心就能拆出问题。 如果对云计算,对OpenStack有了解,建议以OpenStack中的Kolla项目为微服务入...显示全部

以下仅代表个人观点:
感觉这是个没有标准答案的问题,如何拆?按什么套路来拆?问答这两个问题的基础一定要十分熟悉你的业务逻辑才行。微服务这东西,尤其是那种已经运行多年的老系统,一不小心就能拆出问题。

如果对云计算,对OpenStack有了解,建议以OpenStack中的Kolla项目为微服务入门学习对象,Kolla干的事情就是把OpenStack服务拆分成微服务的形式跑在容器中,OpenStack号称全球最大开源Python项目,由几十个开源子项目组成,如果能把这样复杂的集群项目都拆分成微服务,那么一定会得到很多别人给不了的心得体会。

这里以OpenStack为例,Kolla这个项目对OpenStack的拆分,大概如下:
1、先按服务功能划分,得到粗粒度,如计算服务、网络服务、存储服务,这些租粒度模块通常会共享同一个base镜像,这个base镜像中预置了服务模块的共性依赖;
2、基于服务模块的“原子性”拆分,如把计算服务Nova拆分为noav-api、nova-scheduler、nova-compoute、nova-libvirt等等,所谓原子性拆分,就是拆分到不能再往下拆为止,原子拆分后通常就是彼此独立的单进程了,也可以把他们称为是叶子节点了,他们的镜像都是针对自己依赖的“个人”镜像,不能被其他进程共享了。

如果从镜像的角度来看,大概是这样:
父镜像:centos-base
一级子镜像:centos-openstack-base
二级子镜像:centos-nova-base
叶子节点镜像:centos-nova-api
这几个镜像的继承关系是这样的:centos-base->centos-openstack-base->centos-nova-base->centos-nova-api

以上只是举个例子供参考,建议深入了解下Kolla这个项目,对于微服务的拆分就会更有底气些!

收起
 2018-07-10
浏览2998
  • 感觉OpenStack本身就是按照服务化方式开发的,已经是拆好了的服务,kolla就是把原来跑在操作系统里的代码放到容器里面跑。
    2019-05-21
t3573393t3573393  研发工程师 , 福建省农村信用社联合社
yinxin王希瑞aixchina等赞同了此回答
先将系统模块化 解耦,别的微服务还是一体都只是部署的问题。 常见的耦合方式有 逻辑耦合 功能耦合 时间耦合等, 感觉从码农的角度来分析解决耦合是基于微服务还是soa化的最大区别。 soa化的系统更多的是业务系统,领域模型级别的。 在分布式系统中远远不够需要考虑性能...显示全部

先将系统模块化 解耦,别的微服务还是一体都只是部署的问题。 常见的耦合方式有 逻辑耦合 功能耦合 时间耦合等, 感觉从码农的角度来分析解决耦合是基于微服务还是soa化的最大区别。 soa化的系统更多的是业务系统,领域模型级别的。 在分布式系统中远远不够需要考虑性能,安全,事务等,最起码的cap原则还是要把控的。   码农解耦的角度有 接口化,动静分离(查询和修改等),元数据抽取等等,更多的是代码上,设计模式上的真功夫 。 很多架构的估计没这个水平, 只看大象不看大腿。

收起
 2018-07-11
浏览2887
ppqqppqq  网站架构师 , ppqq
yinxin王希瑞aixchina赞同了此回答
1、充分分析拆分的目的是什么,需要解决什么问题。2、是否具备微服务技术能力,是否已选型好相应的技术框架,技术变化对企业有什么影响。3、是否有完善的运维设施保障,比如快速配置、基础监控、快速部署等能力。...显示全部

1、充分分析拆分的目的是什么,需要解决什么问题。
2、是否具备微服务技术能力,是否已选型好相应的技术框架,技术变化对企业有什么影响。
3、是否有完善的运维设施保障,比如快速配置、基础监控、快速部署等能力。

收起
 2018-07-10
浏览3245

提问者

camilla8989项目经理, 中国民生银行

问题状态

  • 发布时间:2018-07-10
  • 关注会员:5 人
  • 问题浏览:4740
  • 最近回答:2018-07-11