微服务拆分须要考虑的必要因素与坚持原则

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

业务因素

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

投入产出

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

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

服务的维护成本包括维护该服务所须要耗费的人力、物力和时间。若是一个系统拆分红两个或两个以上,致使全部的资源都加倍,那将会很失败。最好的结果是原来维护服务的同一套人马分红两个部分,由于拆分后服务的复杂性下降,所须要的维护资源显著减小,或者对人员能力的要求大大下降。svg

组织结构

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

这里写图片描述

系统扩展

拆分的一个重要理由也是最有价值的结果是提升了系统的扩展性。用户对不一样的服务有不一样的并发和性能方面的要求,所以服务具备不一样的扩展性。把具备不一样扩展性要求的服务拆分出来分别进行部署,能够下降成本,提升效率。好比电商平台的搜索服务有不少请求,须要特别好的扩展性,应该把搜索服务分离出来,单独考虑其扩展性的需求。这样能够确保不会由于搜索服务忽然繁忙而影响其余的服务。也能够根据搜索服务的特色,设计出适合扩展的部署方案。
这里写图片描述性能

软件发布

系统中常常变更的部分大约只占20%,剩下的80%基本不变或极少变化,所以软件的发布周期彻底不一样。咱们能够把不变的80%分离出来,单独部署,单独管理。这不只有利于下降系统的复杂性,精简团队的规模;也有利于在系统发生故障的时候快速定位。若是不作这种拆分,系统在扩展的过程当中会浪费不少资源。
这里写图片描述架构设计

信息安全

不一样的服务可能对信息安全有不一样的要求,所以把须要高度安全的服务拆分出来,进行特别的部署,好比放在防火墙的后面,能够更有针对性地知足信息安全的要求,也能够下降对防火墙等安全设备吞吐量、并发性等方面的要求,下降成本,提升效率。这就像对家里不一样房间的安全作不一样的安排,确保须要加锁的加锁,减小了对锁的需求量,也减小了开门的麻烦。设计

总结

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

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