前言:创业公司往往因为有限的时间和投入,把系统所有的功能都聚集在一起。随着业务的不断发展,技术人员开始不断地对架构进行解耦和拆分。微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,或者在做微服务的路上,拆分服务是个很热的话题。那么我们应该按照什么原则将现有的业务进行拆分?是否拆分得越细就越好?这里我想谈谈系统拆分需要考虑的因素和坚持的原则。

业务因素

所有技术方面的考虑,包括架构设计和解耦拆分都要考虑业务的需要。在服务拆分时,先从业务角度确定拆分的方案。拆分的边界要充分考虑业务的独立性和专业性,比如搜索类服务、支付类服务、购物车类服务,按服务的业务功能合理地划出拆分边界。避免按团队来定义服务边界,这样做会出现土匪抢地盘的局面,严重破坏团队之间的信任,削弱创新的潜在机会。

投入产出

衡量拆分收益的标准是拆分后的维护成本要低过拆分前的维护成本,也就是说不能因为拆分而带来更大的维护工作。

拆分前的维护成本 - 拆分后的维护成本 ≧ 0

服务的维护成本包括维护该服务所需要耗费的人力、物力和时间。如果一个系统拆分成两个或两个以上,导致所有的资源都加倍,那将会很失败。最好的结果是原来维护服务的同一套人马分成两个部分,因为拆分后服务的复杂性降低,所需要的维护资源显著减少,或者对人员能力的要求大大降低。

组织结构

拆分不仅仅是架构上的调整,也意味着要在组织结构上做出相应的适应性调整,确保拆分后的服务由相对独立的团队负责维护,尽量不要出现在不同服务之间的交叉调用。在这里要坚持的原则是明确每个服务的分工,充分授权而且自给自足的相对独立。切不可出现一个服务由几个不同的团队共同负责的情况,这会造成无人负责或多方争抢,也不利于团队积累相关服务的经验。

系统扩展

拆分的一个重要理由也是最有价值的结果是提高了系统的扩展性。用户对不同的服务有不同的并发和性能方面的要求,因此服务具有不同的扩展性。把具有不同扩展性要求的服务拆分出来分别进行部署,可以降低成本,提高效率。比如电商平台的搜索服务有很多请求,需要特别好的扩展性,应该把搜索服务分离出来,单独考虑其扩展性的需求。这样可以确保不会因为搜索服务突然繁忙而影响其他的服务。也可以根据搜索服务的特点,设计出适合扩展的部署方案。

软件发布

系统中经常变动的部分大约只占20%,剩下的80%基本不变或极少变化,因此软件的发布周期完全不同。我们可以把不变的80%分离出来,单独部署,单独管理。这不仅有利于降低系统的复杂性,精简团队的规模;也有利于在系统发生故障的时候快速定位。如果不做这种拆分,系统在扩展的过程中会浪费很多资源。

信息安全

不同的服务可能对信息安全有不同的要求,因此把需要高度安全的服务拆分出来,进行特别的部署,比如放在防火墙的后面,可以更有针对性地满足信息安全的要求,也可以降低对防火墙等安全设备吞吐量、并发性等方面的要求,降低成本,提高效率。这就像对家里不同房间的安全做不同的安排,确保需要加锁的加锁,减少了对锁的需求量,也减少了开门的麻烦。

总结

所以我们在考虑服务拆分时,要坚持:面向业务、大道至简、分而治之的三个原则,充分考虑业务需求、投入产出、组织结构、系统扩展、软件发布和信息安全等方面。不能只从技术角度出发,把服务切成很多细微的小块,这样做很有可能会出现劳民伤财、欲速而不达的结果。

作者简介:陈斌,陈斌现任易宝首席技术官(CTO),一直专注于互联网技术领域的探索和创新,拥有丰富的海外经历、多年的架构经验,深谙移动互联网对传统行业的影响。作为业界最前沿技术的实践者和布道者,致力于推动移动互联网技术引领行业变革,出版过多本书籍,荣登京东新书销售榜第一名,并获中央电视台隆重推介。(责编/魏伟)

微服务拆分需要考虑的必要因素与坚持原则相关推荐

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

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

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

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

  3. 微服务拆分,选型与演进

    微服务拆分原则 在微服务拆分中,核心需求在于拆开的微服务之间的联系越少越好,数据交互也是越少越好.因为微服务之间的数据一致性非常难处理,如果一致性方面的问题很少,整体做起来就比较简单了. 微服务架构选 ...

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

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

  5. 迭代开发中的微服务拆分

    微服务拆分是微服务架构绕不过的话题,随着架构演进,在迭代开发中拆分微服务有时非常必要,微服务拆分不仅仅是一项技术层面的重构,首先要选择的合适的时机,另外在拆分前一定要理清业务现状,制定好拆分的基本原则 ...

  6. 如何把项目改成微服务项目_微服务拆分那点事

    Mar. 19th 2018 BY 王保平 wangbaoping@360.cn 背景 最近参与了两个项目的开发,两个项目都有多组件,各自服务功能清晰等特点,也就是所谓的微服务,再结合以前的一些单体项 ...

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

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

  8. 这才是微服务拆分的正确姿势,值得学习!

    作为Java工程师,微服务拆分则是在开发过程发展到一定阶段不得不面对的技术架构要求.大家可能会遇到这些问题:为什么要拆服务?拆解方法有哪些?公司真的这样拆解微服务的吗? 以上问题统统别担心!慕课网特意 ...

  9. 微服务拆分时机与原则

    微服务拆分 微服务拆分时机 为了快速迭代 高并发场景 可重用 提交代码经常冲突 小功能要积累到大版本才能上线 服务拆分原则 原则一:高内聚和低耦合. 原则二:服务拆分正交性原则 原则三:服务粒度适中. ...

最新文章

  1. 支持wince 系统的USB wifi 模组推荐
  2. 快速记忆python函数-让Python程序快速提升30%的技巧
  3. sql查询语句for xml path语法
  4. AcWing之从尾到头打印链表
  5. 关于__str__和__repr__的用法和区别
  6. ios html字符转义字符串,iOS HTML特殊字符转译
  7. html5 lang作用,HTML5中的lang属性,zh
  8. DWR3.0 dwr 返回值(数组,集合,Map)
  9. greendao3.0版本更新 新增字段遇到的问题
  10. hadoop元数据mysql中表字段_Hive元数据表汇总分析
  11. latex中的对号和错号
  12. qtcpserver无法启动监听_EOS基础全家桶(四)启动节点
  13. 计算机领域CCF推荐会议列表+
  14. NSGA2学习(1)——与遗传算法的比较
  15. 自学 Java 怎么入门?
  16. NetFlow网络流量分析
  17. 格创东智获《互联网周刊》2020工业互联网平台TOP12 解决方案提供商TOP16
  18. 思科交换机的基础操作命令有这些!
  19. 基于InfluxDBGrafana的JMeter实时性能测试数据的监控和展示
  20. 第129章 SQL函数 %SQLUPPER

热门文章

  1. 教授直言:学术界存在内卷化,而且非常严重;不改变量化式的管理模式,内卷化就不会消失...
  2. 一支笔卖70万,为的是能打开笔,复杂的像辆车,英国女王都用它
  3. 美国科学院公布新一批院士名单,中科院曹晓风及五名华裔教授当选
  4. 这张父子照曾火遍全国,如今他们的故事比照片更动人
  5. 被百度AI官方认证的大学,到底是什么水平
  6. 《世界已无法阻挡Python入侵!》(附学习资源)
  7. 爬虫遇到路径转换的解决方案
  8. sdut 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
  9. SQLite、MySQL和PostgreSQL 三种关系数据库比较
  10. 全员学习低代码,一汽大众领跑数智化转型背后的秘密