谈谈对服务化的理解

首先:服务化是什么,为什么要服务化

服务化是一种将业务、功能或流程抽象为服务的设计方法,通过服务之间的协作和调用来实现系统的整合和复用。它可以提高系统的可维护性和扩展性,主要用来构建分布式系统。

然后:怎样服务化

SOA微服务都是实现了服务化的、比较典型的架构风格。

0ac2b1cf8a9d7cd17a12887f90354d7b.png

SOA的出现是为了解决功能复用的问题,将一些通用的模块提取出来做成服务。但是SOA对于通用模块的设计没有设计核心原则,因此在对应需求变化等变更时,会产生可维护性变差,通用模块需求影响能力不足等问题。

54568abfd783e9c800e1049aeab3a5e3.png

微服务架构与DDD配合使用从理论上解决了SOA这方面的问题。基于微服务的服务设计一般要要满足下面的原则

1>单一职责,一个服务要从属于一个领域或者子领域,也就是说一个服务做的事情理论上应该是一句话能说清楚的。

2>服务自治,一个服务要具备独立的业务能力和运行环境,依赖包括存储也是独立的,有一套完整的流程,可以当成一个项目来对待。

3>服务组合,多个小型服务可组成一个更大的服务。

4>服务契约,API应该明确和清晰地定义其接口、协议、通信方式、版本管理和SLA。

在微服务架构中,技术上的关键是服务治理。服务网格本质是服务治理的一个范畴。微服务架构给出了服务拆分的基本原则,DDD给出了拆分的一个参考方向:面向领域拆分,也给出了一些基本的拆分模型,比如DDD四层架构、洋葱型架构。实际使用过程中也可以面向流程拆分或者面向功能拆分。典型的面向功能拆分的架构是微内核架构。这两个拆分方向与DDD并不冲突。

项目实施时,还需要解决拆分粒度的问题。这个问题DDD中没有给出明确的解决方案。

3936f0152a0683fc9ffcc82fc51c86a9.png

拆分粒度可以从成本维度和质量维度两个大方向来考虑。

成本维度

考虑资源占用情况,虚机来做成本高,如果公司容器化做得好,粒度可以细一些,通过基础设施来提高整体资源利用率。

考虑人力情况,多人维护一个服务,沟通成本高;一人维护多个服务,开发成本高。理论上,一个中级工程师独立维护一到两个服务是比较理想的。

考虑变更情况,如果两个服务经常一起变更,分开成两个服务成本相对较高。

质量维度

考虑服务治理等基础设施支持,如果基础设施支持足够完善,提供标准的RPC调用、完善的链路追踪、监控、数据可视化支持,粒度可以细一些,反之,基础设施不完善,粒度粗一些,整体服务质量更可控。

考虑性能消耗情况,拆分服务会增加通信成本,这个成本是否可以接受、与收益是否成正比或者是否可以通过其他的技术手段降低影响。

考虑部署速度,如果粒度太粗,一个服务服务器数量可能会增加,发布时间可能会很长;如果粒度太细,也可能因为要部署多个应用发布时间增长。要做好权衡。

考虑应用规模和业务量,项目初期,建议粗分,然后演进。上量之后,一个原本简单的业务,量级上的质变也可能需要拆得很细来解决稳定性、拆解场景的复杂性。

考虑高可用要求上,高可用等级不同也可能拆分成不同服务,比如核心应用三地六机房部署,非核心应用双机房部署。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值