打磨16年的架构体系,架构师都用“扩展立方”做架构设计!
谈到架构设计,有许多的方法论可以参考,今天和小伙伴们一起来看看“扩展立方”如何帮助我们设计可扩展的架构吧。在架构设计的初期我们会考虑诸如服务,流程,服务对象的问题。针对这些问题我们可以通过“扩展立方”协助思考,而且在公司发展的不同阶段也可以用这个思维帮助我们找到突破口。
什么是扩展立方
在介绍扩展立方之前我们先介绍一下在架构设计的时候我们需要关注的几个要点:我们的客户是谁(服务对象),我们需要交付什么给客户(服务),交付的内容是如何组织的(流程)。如果把这三个方面用三个坐标轴了表示的话,就是X轴(服务),Y轴(流程),Z轴(服务对象)。
如果说在坐标轴的零点,上述三点所做的扩展是零的话,那么随着架构的扩展,这三个值就在不断的增加,分别向三个正方向延伸,最终想成一个类似立方体的东西。这个就是我们要讨论的扩展立方。实际上就是我们在架构扩展的时候需要考虑的三个方面。大家可以回想一下,在做架构设计的时候,我们都是依葫芦画瓢,按照现有的业务逻辑设计一套可以实施的软件系统。岂不知软件系统会随着业务的扩展不断的扩展,大多数的架构师忽略了这个扩展性,感觉先解决眼前的问题再说,以后业务发展了再修改架构。其实,通过扩展立方的思维方式是可以弥补这方面的不足,即使不按照这个方法来进行设计也可以做到有预见性,起码为未来的扩展留下接口。对我们的架构设计和公司未来业务扩展是非常有帮助的。
X轴,服务扩展
服务扩展的定义用一个例子就可以很好的解释。我们现在都在用微服务,例如电商网站的订单业务比较多,需要承载更高的并发量,原来的“单个订单服务”无法满足需求,这个时候我们可以通过横向扩展的方式增加更多的订单服务。这些订单服务从本质上没有什么不同,就是原有服务的复制。用服务的横向扩展(水平扩展)用来抵抗高并发的行为就是在做服务扩展。能够进行服务扩展的服务,都有这样的特点:本身业务较为独立,功能不是很复杂,可以独立管理。作为架构师在设计初期可以通过对业务的了解识别这部分的服务,并且对其进行扩展设计。
Y轴,流程扩展
流程扩展的定义我们也举一个电商的例子,假设整个商品的购买流程有“浏览商品”,“放入购物车”,“下单”,“付款”,“发货”,“确认收货”几个步骤,每个步骤都完成一个标准的动作,动作串联起来形成一个完成的流程。我们可以把中间这些可以能够被重复使用的步骤抽离出来形成基础的组件,例如:浏览商品,付款,发货等等。做成通用组件可以作为基础服务提供给其他的业务服务调用。这里的流程扩展就是做这个事情的。实际上在面向对象设计中的抽象也是做的这个事情,在说的流行一点,现在的中台服务也是把企业哪些基础的服务提供给业务服务使用,都是一个道理。这部分的设计,架构师也可以在设计的初期考虑进去,针对不同的服务定义好接口,方便日后“搭积木”。
Z轴,客户请求
在实际应用的开发过程中,请求会来自不同的方面。例如北京用户请求系统,上海用户请求系统,广州用户请求系统。又例如:5000人规模的企业请求系统,500人规模的企业请求系统。实际上针对不同的请求类型,请求地区,访问量,我们可以设计不同的系统边界,分配不同的硬软件资源。甚至用故障隔离的思路来设计系统。例如:服务企业客户的时候,我们需要了解,这个企业是私有云还是公有云,这个企业在中国/世界有哪些分公司,总公司和分公司是如何共享数据和请求的。是否需要对不同区域的公司提供不同访问量的服务,等等问题。
XYZ的设计原则
通常来说X轴扩展(服务)成本相对较少,可以马上看到效果。比较适合刚刚起步的企业,小而美的设计总是受人青睐的。Y轴扩展(流程),成本就略高了,需要对流程本身理解比较透彻并且是经过长时间的打磨的,最好架构师和业务专家共同定义流程基础组件。一般是公司发展到了一定规模了,才建立自己的流程比如中台系统。Z轴扩展(客户响应),成本就更高了,他需要针对不同的客户区域,请求类型,访问量来设计系统。对硬件软件的要求都很高,比较适合大型的企业和互联网公司。比如阿里,腾讯在中国各地甚至世界各地都有机房,提供服务。小伙伴们可以根据自身公司的规模和发展方向酌情设计架构,做到因地制宜,因人而异。当然,在设计方面我们是希望XYZ三个扩展方向是齐头并进的,哪个快一些哪个慢一些,取决于公司所在的环境和发展的速度,最终的目的还是平衡发展。
总结:扩展立方的XYZ设计思路给架构设计提供了很好的思路。针对服务,流程,客户请求设计出来的系统会更加接地气,做到有的放矢。