中台服务架构落地: 划分与构建

主要记录工作与学习积累的点滴、如有雷同,大概是站在了巨人的肩膀上,诸多不足,请多多包涵

"微服务"近年来越来越热门,越来越多的公司开始拥抱它。微服务也确实带来诸多好处,如关注点分离、数据库连接池压力得到缓解、复杂业务得以拆解、代码发布的周期也变成更快。
同时微服务也带来了诸多挑战:

  • 业务拆分成了很多个服务,维护对象增多;
  • 维护对象增多后,如何快速定位问题
  • 微服务引入了新技术和新的流程采用
  • 需要考虑失效、重试、容错等机制

后续这些我都会一一讲述,通过代码的形式。

公司会因为业务量的剧增,之前一个Tomcat的项目无法满足现有业务的增涨,纷纷改造至微服务。笔者觉得微服务的改造要考虑团队的技术沉淀,建议尝试从边缘业务开始着手迁移,降低技术风险,即使出现问题也容易处理。后续积累沉淀了经验后再逐步改造核心业务。

微服务划分

网上已有不少关于微服务应该如何划分的文章,这里主要结合我经验随便畅谈一下,我也整理了一下网上关于微服务原则划分的文章段落。
来自阿里巴巴《企业IT架构转型之道》:

架构本来就是一个追求平衡的艺术,不仅是设计原则上的平衡,还要在技术、成本、资源、性能、团队等各方面进行平衡,以最高效地解决主要问题。

高内聚、低耦合原则 : 高内聚是从服务中心的业务界域来说的,在一个服务中心内的业务应该是相关性很高、依赖性很高的;而服务中心之间应该是业务隔离性比较大的,即追求尽可能的低耦合。

数据完整性原则 : 服务化架构一个很重要的业务价值就是数据模型统一。

业务可运营性原则 : 数据模型统一之后,可用很低成本把大数据技术引入到服务中心的架构中,让数据来源、数据分析、业务生产可以自然形成闭环。所以能否用大数据能力提升运营水平是服务中心原则之一。

渐进性的建设原则 : 服务中心一开始规划设计时应用了太多的设计原则,在实施阶段,可能碰到拆得过细有延迟太长的问题,数据过于分散有数据库性能的问题和分布式事务的问题,服务接口过于庞大的问题。这些实践都不是好的服务化实践。我们推荐服务化从简单开始。

有通过业务领域分解模式进行拆分微服务,较为典型且网上也拿来应用最为广的就是在线商店系统的划分,切为会员域、商品域、商家域、订单域、支付域,而每个域下的模型也尽不相同,继而拆分不同的子域,例如商品域下有类目子域、商品管理子域。
也有通过业务管理中心进行服务划分的,将公司业务分为某几大管理中心,管理中心之下继而识别出细分的模型,将这些模型按照业务内聚原则划分成微服务,同时一个管理中心采用共享数据库模型,这里大家可能会觉得数据访问应该在微服务之间清楚的分开,共享数据库模型设计的初衷是在业务复杂,边界识别或许模糊时,应对业务可以做到很好的扩展,随着业务的不断识别,有利于后期将这些高内聚的业务模型进行重新抽离,重新组配。
也有将公司业务拆分成多条产品线,继而划分出产品线部门内的组织职能,每个组织职能下根据人员分配该产品线下的业务模块。
这些划分都充分体现了康威定律所说的:

系统架构是组织架构的反应, 应按照业务闭环划分而不是技术划分,减少跨团队的沟通成本

系统架构的设计不可能是大而全的,一定是演进式的,因为业务的不断增涨或因跨产品线的沟通协作都有可能需要重新评审现有架构,做出升级与适应。
我比较不喜欢的是为了微服务而微服务,业务划分过于细,完全成了用代码的行数来划分微服务,我曾遇到过一个微服务里面就三个接口的,完全沦为了CURD的贫血模型。像这种前期业务还处于单一阶段,只会增加维护成本和网络通信开销,完全可以将它视为某个域的子域,例如成长值归为会员域,完全可以采用分包的思想将它纳入到父域,待到业务开始足够丰富起来了或是该业务因为流量剧增对其他业务的影响不能忽略时,再将它拆分出来,分包思想也很好的做到了这一扩展。

构建微服务的流行框架

笔者觉得微服务是概念,并非要使用Dubbo或是Spring Cloud技术才是微服务,微服务是具有独立部署、且微服务之间的启动不会依赖循环。
Spring Boot就是一个很好的框架,用于快速构建独立的微服务,得益于它的 自动装配启动器依赖性(starter) 功能的强大。官方如下介绍Spring Boot

Spring Boot offers a fast way to build applications. It looks at your classpath and at beans you have configured, makes reasonable assumptions about what you’re missing, and adds it. With Spring Boot you can focus more on business features and less on infrastructure.
Spring Boot doesn’t generate code or make edits to your files. Instead, when you start up your application, Spring Boot dynamically wires up beans and settings and applies them to your application context.

更多Spring Boot特性,请参考官方文档

Spring Cloud 无缝扩展了Spring Boot的功能,可以解决微服务架构技术选型相关问题。官方如下介绍:

Building distributed systems doesn’t need to be complex and error-prone. Spring Cloud offers a simple and accessible programming model to the most common distributed system patterns, helping developers build resilient, reliable, and coordinated applications. Spring Cloud is built on top of Spring Boot, making it easy for developers to get started and become productive quickly.

Spring Cloud提供了一站式的微服务解决方案,开源了一系列的组件,比较常用的5大组件如下:

  • Eureka 服务注册与发现
  • Ribbon 客户端负载均衡
  • Zuul 构建网关代理
  • Hystrix 断路器服务保护
  • Spring Cloud Config 管理和外部化配置

此外,Spring Cloud Stream基于消息模式的微服务通信后续会讲到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值