服务拆分理论和原理及方法

谈到微服务,议论的最多,吵架的最多的就是服务拆分问题,服务拆分是否合理直接影响到微服务架构的复杂性、稳定性以及可扩展性。然而并没有任何一本书籍或者规范来介绍如何拆分服务,那么如何正确的做服务的拆分? 目前各家做法也都是根据架构师经验以及业务形态和用户规模等因素综合考虑。在工作中曾经遇到以下二种服务拆分的模式:

一个方法一个服务:视业务规模和业务场景而定;

基于代码行数的划分:简单粗暴,不推荐;

有人说按方法拆分服务太过于细致,应该要按业务功能来拆。其实当业务达到一定规模的时候,按方法拆分是一种非常有效的做法,以用户服务举例,在初始阶段的时候,用户服务具备了用户的增删改查功能,当用户规模上升之后需要对增删改查功能做优先级划分。大家都知道在互联网中流量获客是最贵的,运营团队通过互联网投放广告获客,用户在广告页上填写手机号码执行注册过程,如果此时注册失败或者注册过程响应时间过长,那么这个客户就可能流失了,但是广告的点击费用产生了,无形中形成了资源的浪费。所以此时需要按方法维度来拆分服务,把用户服务拆分为用户注册服务(只有注册功能),用户基础服务(修改、查询用户信息)。

在做服务拆分的时候,每个服务的团队人数规模也是非常重要的,人数过多可能会变成单体应用,沟通决策会缓慢,人数太少工作效率又会降低,一般来说会遵循 2 个披萨原则和康威定律:

2 个披萨原则:两个披萨原则最早是由亚马逊 CEO 贝索斯提出的,他认为如果两个披萨不足以喂饱一个项目团队,那么这个团队可能就显得太大了,所以一个服务的人数划分为 5-7 人比较合适。因为人数过多的项目将不利于决策的形成,而让一个小团队在一起做项目、开会讨论,则更有利于达成共识,并能够有效促进企业内部的创新。

康威定律:你想要架构成为什么样,就将团队分成怎样的结构。比如前后端分离的团队,架构就是基于前后端分离。在基于微服务设计的团队里,一个很好的理念是自管理,团队内部对于自己所负责的模块高度负责,进行端对端的开发以及运维。

整个单体应用有那么多的功能,到底哪些业务功能需要拆分,哪些业务功能又不需要拆分呢?可以遵循服务拆分的方法论:当一块业务不依赖或极少依赖其它服务,有独立的业务语义,为超过 2 个或以上的其他服务或客户端提供数据,应该被拆分成一个独立的服务模,而且拆分的服务要具备高内聚低耦合。

关于服务拆分模式,使用比较多的是业务功能分解模式和数据库模式,因为容易理解而且使用起来比较简单,效果也很好。

业务功能分解模式:判断一个服务拆分的好坏,就看微服务拆分完成后是否具备服务的自治原则,如果把复杂单体应用改造成一个一个松耦合式微服务,那么按照业务功能进行分解是最简单的,只需把业务功能相似的模块聚集在一起。比如:

用户管理:管理用户相关的信息,例如注册、修改、注销或查询、统计等。

商品管理:管理商品的相关信息。

数据库模式:在微服务架构中,每个服务分配一套单独的数据库是非常理想方案,这样就缓解了单个数据库的压力,也不会因为某个数据库的问题而导致整个系统出现问题。

微服务初始阶段服务拆分不需要太细,等到业务发展起来后可以再根据子域方式来拆分,把独立的服务再拆分成更小的服务,最后到接口级别服务。如果服务拆分的过小会导致调用链过长,以及引发没有必要的分布式事务,此时阶段性的合并非常重要。做为架构师不仅要学会拆分服务,也需要学会合并服务,需要周期性的去把拆分过小或者拆分不合理的服务要及时合并。

总得来说,在服务拆分的时候需要抓住以下重点:

高内聚的拆分模式
以业务为模块拆分
以迭代频率和改动范围拆分
阶段性合并
定期复盘总结

服务拆分理论和原理及方法相关推荐

  1. SpringCloud 从菜鸟到大牛之三 服务拆分 理论

    上一篇文章 介绍了 服务注册的概念 与及 SpringCloud Eureka 的使用 和配置. 接下来,就来 介绍一下 服务拆分?在这里 作为 抛砖引玉 ? 问题 1 如何 拆分? 问题2 什么是 ...

  2. 微服务架构服务建模方法+服务拆分和集成2:服务拆分的维度和拆分策略

    目录 一.架构的轮回理论 二.服务拆分的维度:业务与数据的AKF扩展立方体分析 X轴扩展讲解: Y轴扩展讲解: Z轴扩展讲解: 总结: 三.服务拆分的两大策略:绞杀者模式+修缮者模式 1.绞杀者模式策 ...

  3. 计算机编制列车运行图实验分析,计算机编制列车运行图原理与方法/铁路列车运行图编制理论及系统优化新技术丛书...

    导语 倪少权.赵春雷.庄河.吕红霞编著的<计算机编制列车运行图原理与方法>对铁路列车运行图编制的关键问题进行深入研究,包括高速铁路通过能力计算方法.全国铁路列车运行图编制系统的总体目标和技 ...

  4. 微服务拆分策略和原则

    目录 微服务拆分目的 单体应用拆分成微服务的时机 拆分时指导原则 拆分的粒度把控 微服务拆分策略 微服务合并 拆分过程中要注意事项 注意:本文参考  微服务拆分策略和原则 - 简书 微服务拆分目的 不 ...

  5. ThoughtWorks专家:使用 DDD 指导微服务拆分的逻辑

    对于服务拆分的逻辑来说,是先设计高内聚低耦合的领域模型,再实现相应的分布式系统.服务的划分有一些基本的方法和原则,通过这些方法能让微服务划分更有操作性.最终在微服务落地实施时也能按图索骥,无论是对遗留 ...

  6. Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】

    在本节内容之前,我们已经对如何引入Sleuth跟踪信息和搭建Zipkin服务端分析跟踪延迟的过程做了详细的介绍,相信大家对于Sleuth和Zipkin已经有了一定的感性认识.接下来,我们介绍一下关于Z ...

  7. 点餐业务服务拆分分析

    我们有两种方式可以拆分服务,第一种我们的系统分为买家端和卖家端,你可以把vue放到app上,用来做买家端需要的接口,卖家端呢,也就是PC端,由freemark做的html页面作为另外一个边缘服务,两端 ...

  8. 面试基操:微服务拆分需要考虑什么因素?

    面试官:微服务如何拆分?需要考虑什么因素? 候选人:一般按照功能拆分 面试官:还有吗? 候选人:唔-- 要拆分微服务,首先我们要了解微服务拆了会有什么问题?怎么合理拆服务? 拆分服务会带来什么问题? ...

  9. 如何使用 DDD 指导微服务拆分?

    点击上方肉眼品世界, 右上角选择"设为星标 深度价值体系传递 开发者在刚开始尝试实现自己的微服务架构时往往会产生一系列问题 : 微服务到底应该怎么划分? 一个典型的微服务到底应该有多微? 如 ...

最新文章

  1. windows10 ubuntu 无法连接到 无法建立到 raw.githubusercontent.com 的服务器 IP 地址,解决办法
  2. ubuntu 安装 phpstorm
  3. 最高科技——疯狂的前缀和
  4. THttprio连接WebService的内存泄漏问题
  5. python把c语言的.h文件转为c++的.cpp和.h文件
  6. [博客园公告]编辑器改进(二)
  7. esp8266手机端app_OKEX手机端APP提币教程(附视频)
  8. 【UOJ#246】套路(动态规划)
  9. linux判断值相等_Shell字符串比较相等、不相等方法小结【转】
  10. Python实现生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
  11. python就业方向-为什么这么多人喜欢Python?Python的就业方向是什么?
  12. Linux 下构建域名服务器
  13. excel下拉公式保持一些参数不变
  14. html5中加下划线,为超链接添加下划线
  15. 路由器、交换机、集线器的区别
  16. Win10大更新后(悦米)机械键盘无法使用
  17. Drying POJ - 3104 二分
  18. 10.3、DHCPv6原理与配置
  19. pip download与pip install简介
  20. 小米路由器登录服务器无响应是怎么回事,小米路由器登录界面打不开怎么办? | 192路由网...

热门文章

  1. zblog 全站ajax,ZBlog全站缓存
  2. zblog插件-zblog搜狗推送插件
  3. Panabit镜像功能配合wireshark抓包的方法
  4. 计算球体积和球表面积
  5. 【软件群英会】 12月1日晚上聊天记录
  6. vue详细知识,语法和必备知识
  7. 量子计算机1003无标题,量子计算机研究
  8. MNIST导入图片数据集
  9. OpenCV的各种矩阵基本运算、基本操作及示例代码(加、减、乘、点乘、点除、乘方、开方、累加、转置、比较等)
  10. SQL视图是什么?视图的作用,视图可以更改么?