我们都知道将若干功能完整、相对独立的模块以微服务的形式进行开发、部署和演进可以获得较高的效率和较低的维护成本。那么微服务的架构模型应该是什么样子呢?
一、单应用的角度
单应用其实就是我们最熟悉的三层架构——DAL数据访问层、BIZ业务逻辑层以及WEB能力输出层。WEB可以是http基于url请求的形式、也可以是rpc基于服务提供的形式;BIZ层是业务逻辑的组装,当然简单的业务逻辑可能只涉及数据库操作或者API调用,复杂的则需要一些缓存设计以及设计模式相关的知识去做封装处理;DAL层主要负责数据的存取,说白了就是数据库的操作,需要显示地或者使用工具来处理一些分库分表、读写分离、主从一致的问题。
二、领域能力提供的角度
单应用是微服务持续迭代和演进最小的维度,而当我们输出域能力的时候,往往需要若干个微服务之间相互配合,比如优惠域能力就依赖于预算、库存、(优惠)活动多个域能力的输出和组装。从架构上来说,领域能力的完整提供从下到上可能会包含领域层、代理层、接入层、展示层。领域层类似于单应用中的DAL层,代理层类似于BIZ层,而接入层是屏蔽多端对接差异而单独存在的一层,可能不被需要,展示层类似于WEB层。
三、拆还是合
集中式架构的问题显而易见,但是过于细粒度拆分的微服务架构也是灾难,比如说将一张表或若干表的CRUD操作简单地封装一层壳子作为一个微服务提供出去,而它本身明明更适合于依附于一段更完整的业务逻辑存在。这样的拆分就会带来几个问题:1、维护困难,每次至少需要改动两个项目;2、测试、问题排查更加麻烦、困难;3、资源成本更高,至少需要更多的机器来部署;因此我们要考虑好的一个问题是到底在这一层做单应用的逻辑聚合还是抛到上层做微服务间的逻辑聚合,也即是否需要将某个子域独立为微服务,以实现整体复杂度和快速迭代之间的平衡。
其实我们可以参考组件层级三原则:REP(复用、发布等同原则)、CCP(共同闭包原则)、CRP(共同复用原则),REP说的是要复用一段代码就把它抽成组件;CCP说的是将为了相同目的而同时修改的类放在抽成组件,是SRP原则在组件层面的描述;CRP说的是不应该强迫组件依赖它不需要的东西,是ISP原则在组件层面的描述。前两者是粘合性原则,会让组件更大,而后者是排除性原则,会让组件更小。
在项目的不同时期或者说在域能力逐步完善的各个阶段,我们的侧重点是不一样的,可能在项目初期确立了一些领域和职责划分来指导应用分包,但是随着时间的推移,某些功能不断的完善壮大,领域模型愈发清晰,我们就需要依据CCP将它独立出去;同时,如果我们发现某些领域虽然相对独立但是逻辑足够简单,也不妨依据CRP将其组合到上层。我们需要学会在不同的时间节点重新审视曾经的微服务架构模型。
关注源代码清单,技术人的学习清单
相关推荐
《S7-SCL编程手册 v5.3》是专为S7-300/400 PLC编程...《S7-SCL编程手册 v5.3》是西门子自动化和驱动技术的重要参考资料,适用于S7-300/400 PLC的开发、配置、安装和服务人员,是理解和掌握S7-SCL编程不可或缺的工具。
西门子SCL编程语言,全称为Structured Control Language,是一种基于高级语言的编程方式,用于在S7-300和S7-400系列PLC(可编程逻辑控制器)上进行程序编写。SCL提供了更为结构化和模块化的编程环境,与传统的IL...
压缩包含centos-release-scl-rh-2-3.el7.centos.noarch.rpm和centos-release-scl-2-3.el7.centos.noarch.rpm,主要用于centos7的gcc安装
西门子SCL编程语言是SIMATIC编程系统中的一种高级文本编程语言,主要应用于S7-1500和S7-300/400系列PLC。"SCL"代表Structured Control Language,是一种基于IEC 61131-3标准的编程语言,类似于传统的高级语言如C或...
官方离线安装包,亲测可用
《SCL语言详解:从入门到精通》 SCL(Structured Control Language)是西门子PLC编程中的一种高级语言,特别适用于S7-1500系列控制...通过不断的实践和学习,你将能够充分利用SCL的强大能力,解决各种自动化控制问题。
离线安装包,亲测可用
结构控制语言(SCL)是一种高级编程语言,专门用于编程西门子的S7-300和S7-400系列PLC(可编程逻辑控制器)。SCL与标准的PLC编程语言不同,它提供了更多类似于Pascal或C语言的编程结构,因此,它特别适用于复杂算法...
离线安装包,亲测可用
离线安装包,亲测可用
SIMATIC_S7-SCL_V5.6安装包-链接地址
SCL是一种高级编程语言,类似于Pascal或C语言,适用于编写复杂的算法和数学函数。 文档内容包含了以下重要知识点: 1. 安全指导:文档强调了在安装、操作和维护过程中应遵循的安全注意事项。根据可能带来的危险...
SCL编程语言包SIMATIC_S7SCL_V56/s7-300-400
在本文中,我们将深入探讨S7SCL V5.6的功能、用途以及如何利用它来编写和调试SCL程序。 1. **S7SCL简介**: S7SCL是一种结构化编程语言,它提供了一种更接近传统高级编程语言(如C或PASCAL)的方式来编写PLC程序。...
官方离线安装包,亲测可用
官方离线安装包,亲测可用
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
S7-SCL 提供了高级语言结构,因此它适合用于计算和数据管理算法。