简介:如何统一看待和区别分层架构、微服务架构、分布式架构等主流架构?什么是 SOA?咱们采用 SOA 的目的是什么?什么是服务化的本质?如何设计服务以及服务化架构呢?阿里高级技术专家程彦分享他对面向服务架构的一些见解,并给出相关的步骤和方案,较长,同窗们可收藏后再看。跨域
自从提倡 SOA 架构风格以来,我的以为软件架构并未有特别突破的变革,主要是在 SOA 面向服务架构风格基础上不断演化迭代,基于服务的 EA 明确分层架构也好,微服务也罢,都是在面向服务架构基础上的适应不一样的场景的迭代升级。安全
我先抛出一个观点,我以为服务化架构的本质,和西方教育界深受影响的古希腊哲学家苏格拉底的“产婆术”的教育思想本质上是很是相通的:苏格拉底的“产婆术”思想强调教育是一个“接生”的过程,教师就是“接生婆”,人们之因此接受教育是为了寻找“原我”以不断完善自身。也就是教育的目的在于唤醒而再也不于塑造。同理服务化架构的本质也不只仅在采用什么样的技术框架实现和塑造,更重要的是在于经过不停地在共创中反问、反思、检讨等方式进行对业务的本质的不断追溯、抽象、综合概括演绎,咱们的每个架构师都是服务化架构的接生婆,咱们的使命是创建真正反映业务本质并驱动业务不断向前的架构。架构
咱们是否足够深刻理解业务的本质,作了足够的概括演绎以及综合抽象,是否清晰的反应到了咱们的服务化的根基:业务模型、域模型以及平台公共语义模型上?这是咱们每个参与服务化的每个产品、架构师、TL 和核心开发同窗须要回答的第一个根本问题。并发
面向服务的架构(SOA):SOA 是一种架构风格,致力于将业务功能保持一致的服务(系统服务,应用服务,技术服务)做为设计、构建和编排组合业务流程以及解决方案的基本单元。框架
咱们采用 SOA 的架构是为了什么呢?分布式
为了更好的复用?为了更好的责任切分?为了接口和实现的分离,提高灵活性和隔离性?仍是为了更好的接口分类和管理?模块化
以上说法其实都没错,可是面向服务化的架构 SOA 的目的远远超过接口技术细节的设计与定义,其核心的关注点在于服务的业务内容以及内涵,而不只仅是如何设计和实现。微服务
同时,SOA 更多的也不是如何构建一个服务,任何人均可以很容易地建立一个服务,这并非 SOA 的核心挑战,而是如何赋能企业构建有业务价值意义的完整业务语义的服务集合。性能
面向服务的架构致力于在企业内的不一样的业务环境内,建设业务功能驱动的服务,从而将服务组装成有价值、更高级别的业务流程和解决方案平台。学习
面向服务的架构的真正的价值体如今当可重用的服务被灵活组合、编排在一块儿来构建敏捷的、灵活的业务流程,其中敏捷体如今服务能够快速调整,独立演化;灵活性体如今服务因为其业务功能定义明确,边界清晰且功能内聚性强,同时服务具有各自独立完整生命周期,可被灵活组装。
若是面向服务架构能为企业提供了重大的价值,那么这些价值经过什么来体现的呢?
面向服务的架构容许咱们为业务流程、任务或者决策拥有惟一的共同的入口,也就是,无论服务访问的路径如何,服务给业务提供的业务行为都是一致的。
面向服务的架构容许咱们为业务数据信息提供单一的访问入口,也就是它提供给业务一致的、企业内部共识的公用数据访问。
面向服务的架构 SOA 为业务功能、业务决策和业务信息的模块化提供了很是好的机制。同时,在模块化实现好的状况下,这些模块能够在多个业务流程和场景中被灵活复用和从新组合,从而为业务竞争力和创造性提供灵活性和敏捷度支持。
面向服务的架构 SOA 提供了业务功能和信息集成的同时,减小了他们之间的依赖和耦合性。也就是,独立的业务功能单元,应用系统,能够一块儿协同工做,同时各自又具有各自的演进计划,生命周期和业务目标。
SOA 提供给咱们经过定义服务水平协定在服务模块粒度支撑咱们的业务目标,咱们能够不断的设定、监控和优化调整组件,应用以及系统所承载服务的考核。
其中行为一致性和数据一致性做为服务的核心价值根基。
首先咱们先定义一下服务是什么?
服务是经过服务契约的方式来提供业务功能的独立单元,同时受服务契约所明确管理。
服务是设计、构建和编排组合一个完整业务实体中业务解决方案的基础单元。服务契约指定了服务消费方和提供方之间全部的交互约定,包括:
那咱们常常听到模块、组件等其余的软件构件,服务和他们有什么区别呢?其中最核心的区别在于服务自己是被明确管理的,其服务质量和性能是经过服务水平协定(SLA)被明确管理的,而模块以及组件并没有此约束。此外,服务的全生命周期包含从设计、部署到加强升级和维护都是可管理的。
举例(下列内容仅作示例展现用,非适用于严格场景):
补货计算服
服务策略
服务质量
性能要求
补货建议量计算服务
针对行业下商家/供应商维度的入仓货品补货建议计算
在销量预测符合分布要求且知足准确率水平要求的状况下,根据缺货率服务水平要求的产生的补货建议量符合业务指望的周转天数
10W + 货品 * 30 仓,品+仓补货及建议量 <= 30min
订单建立服务
包含购物车下单+当即下单场景,知足全部优惠计算后的订单生成
订单建立成功率 99.999999999%
峰值支撑:100w 单/s
服务自身主要包含两个主要方面,第一方面也是服务最核心的方面就是服务的接口,另一方面则是服务的实现。服务很是好的实现了接口和实现的分离。
1)服务接口
服务接口指定了服务的操做,也就是服务是作什么的(What),操做的输入输出参数,以及用来约定如何使用和提供这些能力的协议。
服务一般包含围绕着一个核心的业务功能操做以及相关联的操做。例如补货建议计算服务中核心的操做是生成货品+仓维度的补货建议单,其余相关操做包含查询补货建议单相关销量预测操做,查询补货建议单对应计划库存操做。
服务
核心功能操做
关联操做
补货建议计算服务
品+仓维度补货建议计算
补货建议单对应销量预测查询
补货建议单对应计划库存操做
2)服务实现
服务实现指的是服务如何经过其明肯定义的接口提供其能力。服务实现能够经过如下方式实现:
核心点是服务如何被实现的对于服务消费方来讲是透明的,服务消费方仅仅须要关心的是服务是作什么的,而不是如何被实现的。
服务能够提供在保持服务接口或者行为约定不改变的状况下,提供根据不一样的行业不一样场景提供各类不一样的实现。
服务实如今保持服务接口或者行为约定不改变的状况下,能够自由进行升级和切换。服务实现既能够是静态的更新升级,也可使动态路由实时切换实现,如对应到不一样的行业以及不一样的业务场景的自动实现切换。
无论服务实现如何升级或者按需自动路由切换,只用服务的行为和契约不会发生改变,用户也就是服务的消费者根本不会感知到任何不一样。
咱们能够把服务接口想象成室内普通电源国标插口,服务策略为室内非防水状况下适用,服务契约想象成 24X7 的 220v 电压供电能力(其中 180V~250V 50Hz 是质量要求,24x7 稳定性要求,电流供给 <= 10A 是性能要求),此国标插座(服务提供方)能够给包含与此接口匹配且符合契约的任何电器(消费方)交互并提供供电能力,支持其运转。
服务接口定义了交互的的风格和细节,而服务的实现定义了一个特定的服务提供方或者特定的业务实现如何提供其能力。
这种相似链接点/插口的设计极大的方便了更松耦合的业务功能解决方案。
服务接口与实现的构成也有两个重要的不一样方面,分别是执行功能的方法和执行的信息数据。换句话说,一个服务是由一个业务服务操做集合以及对应操做的输入输出的抽象业务服务数据模型组成。这层业务服务数据模型是企业业务层次或者平台业务层次的业务实体的抽象,独立于底层数据存储与实现。此业务数据模型是和各子域密切相关联,可是超越各子域以上的,在完整的业务线或者平台层次上达成一致的业务数据模型,也就是说在各子域之间达成共识且约定的严格明确的公共模型,主要用于平台业务流程中不一样域服务的交互,是平台层次统一的业务语言,我把它暂时称为平台业务数据模型。 此平台业务数据模型一般须要包含平台统一语义的业务术语表,平台各域核心实体表,平台各域核心实体交互图等。
接口与实现的逻辑构成:
1)服务操做
服务操做声明定义了这个操做的输入以及输出参数。
2)平台业务实体模型
平台业务实体模型描述了服务中输入输出数据的结构以及含义。服务接口中的信息和服
务实现中逻辑数据之间的差别是相当重要的。
在服务接口层次上,最重要的是信息必须在业务服务之间进行交互来赋能业务流程并完成业务流程。这些信息必须在参与流程的全部业务服务间达成一致且在服务之间通用,也就是平台层次全部服务公用且标准的业务实体模型,同时此业务实体模型必须在平台业务语义上明确且完成,确保能够支撑平台全部端到端的业务。此平台层级的业务实体模型并非一蹴而就的,可是能够随着平台的重心变化不断迭代完善成型的。
然而不一样的是,从内部来看,不少服务在各自实现的子域内部都有这些信息的不一样的超集,可能潜在的存在不一样的数据格式。幸运的是,咱们不须要感知也不须要在全部关联服务的相关子域实体模型上达成共识,即便不是不可能,可是也不太现实。与之相反,服务接口和服务实现的分离设计容许很是方便的进行平台业务实体模型和服务所在子域领域模型进行映射转换。
3)服务接口最后一个重要的方面就是服务水平协议 SLA。服务水平 SLA 协议指定了服务的的两个重要方面的指标,分别是业务上的指标和技术上的指标:
理解服务化分层架构,首先要对 TOGAF Meta-Model 有个清晰的理解,从元模型能够看出业务服务和业务流程的上承业务,下启系统平台的核心做用,必定要深入理解业务服务和业务流程在企业架构中的重要性,下面我把我翻译后画的版本给你们放在这里,给你们作个参考,TOGAF 很少作解释,若有须要,你们能够交流,后面有时间尝试写下我对 TOGAF 的学习和理解。
一般状况下,咱们会按照不一样行业的不一样的业务流程去搭建系统,如供应链最初在你们电 3W 行业孕育,咱们按照 3W 的行业和业务场景搭建了平台商家相适应的计划系统;后续自营行业又根据本身的行业也搭建了自营的计划系统;后续小电数码、国际以及其余业务快速发展,跟随业务快跑的同时,也各自创建的各自的业务流程。在这个过程当中,BPM 为建造不一样的业务系统提供很是好的抽象支撑,可是常常的结果是,BPM 被用做构建了更高层抽象的,也更高效的,可是倒是烟囱式的应用,而不没有更好的贡献更多的支撑到总体上能快速应对业务变化而更灵活,更敏捷的业务平台或者系统。
而这正是面向服务的架构中业务规则以及决策做为服务要发挥更大做用的地方。面向服务的架构容许咱们将特定业务流程中的业务规则和业务决策抽象分离出来变成业务规则或者决策服务,这些规则和决策服务就能够被灵活应用到不一样的业务流程中,从而这些服务能够被统一管理和演化升级。
BPM + SOA 一块儿提供了支撑企业架构的完美组合。BPM 提供更高层抽象定义业务流程的能力,以及与流程相关联的重要监控和管理能力;业务服务提供了支撑业务流程的核心的功能、决策以及信息。面向服务的架构则提供能力将服务组合在一块儿来支撑和建立灵活且敏捷的端到端的企业业务。若是只有 BPM 而没有 SOA 对于建立单独的业务应用或许很是有用,可是一般是建立的烟囱式的应用,很难扩展到企业内或者平台内不一样的业务线。若是只有 SOA 而没有BPM虽然能够建立可重用且一致性高的服务,可是缺乏将这些服务快速搭建业务流程并支撑端到端业务的能力,也没法支撑创建具备竞争力且能够随着外部竞争环境进行敏捷反应的业务。
下图显示了一个建议的的封层服务化架构图,各分层以下:
业务流程是按照必定业务规则决定的顺序执行的业务操做组成。高层级的业务功能,一般跨越应用域或者业务线。一般由行业开发团队开发,此行业开发团队能够具有明确的实现组织结构,也能够由跨团队的相关域共同组成虚线团队。例如,电商业务中,用户选购下单交互流程;供应链业务中的补货调拨计划流程等。
高度模块化的业务功能单元,由不一样类型的子域服务组合编排而来,可做为业务流程的编排单元。跨行业通用的业务服务可由功能所在核心域开发团队编排开发,行业内通用的业务服务能够由行业开发团队负责编排开发。例如,补货审批服务
平台各功能子域提供的服务,对平台可见,用于平台业务服务的组合编排,也能够做为更高层的业务流程编排的基础单元。子域服务一般由平台各子域开发团队负责开发。例如,销量计划服务,补货建议计算服务。
用于支撑各功能子域服务的基础服务,对子域可见,对平台不可见,用于子域服务的编排。
子域基础服务一般由平台各子域开发团队负责开发。例如,入仓决策服务,计划单据服务,计划库存服务等。
或称为基础业务域服务,提供平台基础业务服务,为各个功能子域或平台业务服务提供基础业务功能及数据服务。例如:商家服务,货品服务,库存服务等。
提供不一样层次所公用的基础架构服务,如用用户管理,权限管理,操做审计等等。
咱们一般按照上述分层结构来描述平台架构或者企业内部架构,看上去好像层次结构清晰明了,可是倒是不完整的,由于此面向服务的架构描述缺失了平台系统架构中一个核心部分,暨信息及信息模型分层,这一点很是之关键,每每会决定架构的成功与否。
为了使架构更完整同时也更真实,咱们须要添加对应的完整信息抽象(实体模型 or 领域模型):
端到端业务流程中操做的核心单据,承载业务核心价值的信息单元模型,例如,销售订单,采购订单,补货计划单等。此模型一般是平台公共语义模型的核心子集。
定义了平台层业务流程、业务服务交互数据。在平台层面或企业层面,端到端业务流程中交互信息的公共语义模型,此模型不只对平台业务流程中交互的各实体进行了明确的定义,并且包含了业务流程中所须要的完整的业务语义实体,同时各业务语义实体边界明确,责任清晰。核心单据模型一般是平台公共语义模型的子集。平台公共语义模型包含下层子域的对外服务实体子集,按照端到端的完整平台业务语义,可由平台各功能子域模型所共享给平台的核心实体子集有机整合而成,也可由平台业务模型全新定义,或者从 TOP-DOWN 以及 BOTTOM-UP 两个方向共同融合而成。须要注意的是此模型必然是没法一蹴而就,须要通过无数迭代而不断完善,但其必定是不可或缺的。平台的诸多架构决策和不断演化完善须要基于此模型来进行。
平台各功能子域的领域模型,用于驱动各功能子域的应用系统设计和开发。子域领域模型须要保持动态稳定,经过防腐层同所依赖的外域或者外部服务进行隔离,防止外部服务污染子域内的核心业务语义,同时保持域内业务功能灵活可控。子域领域模型仅经过其对外服务实体子集对外可见,其他对外不可见。
用于各子域领域模型实现对外部模型的防腐依赖。
提供不一样层次所公用的基础架构信息模型,如用户模型,权限模型等。
如今来讨论下服务化分层架构重视度并不过高的另外一个重要侧面:信息架构,之因此说信息架构很是之重要,是由于信息架构与服务化架构是一个密不可分的完整的总体。我对信息架构模型进行了分层划分,下面从 TOP_DOWN 方向来讨论不一样的分层模型。
这层次模型用于定义企业的战略方向和商业目的,从而定义了企业内任何系统平台开发的方向和终局。这必然做为企业内任何系统平台开发的基本背景和基调,影响任何系统平台开发项目的中长期目标定义和终局设定。
这层模型从业务线 owner 的视角,用运营主体的业务术语描述其商业模式的本质,包括其总体结构,业务流程,以及组织结构等。
这层模型从业务架构的视角用信息化的方式对单个业务线或者多个业务线的业务进行抽象。Level 1 描述是对于企业业务来讲有意义的东西或者事情,而 Level 2 则给予这些有意义的东西以更严格且清晰的定义,明确其内涵以及外延并体系化,同时根据不一样行业线的业务内容进行提取抽象,抽象出共性的内容,用于更高效灵活的描述和定义业务 。
Level 1 描述的是业务运营人员所感知的业务流程,Level 2 不只描述了这些业务流程,更重要的是抽象并描述了了这些业务流程所应该包含的底层业务功能。
一样的,Level 1 描述对企业业务来说全部重要的东西,Level 2 描述的是组织想要管理的信息后面最根本的内容。Level 1 描述的事情是 Level 2 定义的基本实体的实际业务中对应的样本或事例。
简而言之,Level 2 是 Level 1 的抽象(Abstraction)与综合(Synthesis)。 为了达成这一视图,必需要仔细分析和概括,有时候须要演绎的方式来定义出隐藏在企业业务运营主体视图下根本结构和内容。
Level 3 层公共语义模型同 Level 2 层业务概念模型保持紧密一致,在此基础上增长了服务化视角的语义。Level 3 公共语义模型描述的内容是在必须在平台层业务服务间共享的具备一致语义的业务实体和信息,是平台层一致的共享信息模型。这层模型用于描述平台层服务接口交互的共享信息,基于平台完整业务语义下全部服务所公共数据的标准化视图模型。简而言之,平台公共语义模型,定义了业务平台层次基本业务服务语义,是平台各业务服务之间,平台业务流程和平台业务服务交互的统一语言。
Level 4 层域模型定位于平台各子域的领域模型/实体模型,用于对各子域的核心业务功能进行抽象。域模型是平台各子域的标准模型,不只明肯定义的各子域功能服务暨服务接口的语义,同时也包含各子域内服务实现中的关键实体的定义。域模型从总体上来讲是平台各子域的私有模型,除了服务语义外总体不对外可视。公共信息中的服务视图是域模型的子集。
域模型核心用于除了用于暴露到平台子域的业务服务设计与实现外,同时也用于驱动域内服务功能的设计和实现。
域模型是须要保持动态稳定的,除非域内业务发生本质变化,域模型应该是相对稳定的。域模型稳定性最大的敌人是外部的依赖,如何不受外部依赖的侵蚀而逐渐腐败,域防腐层存在的最主要缘由。子域防腐层维护外部依赖服务和子域模型之间的动态映射,维护域模型的独立性,保护域模型不受有害侵蚀。
域模型我理解基本和咱们一般谈的领域模型基本接近,对于各域内业务的抽象,驱动各域技术设计方案设计和实现,至于具体的模型表现形式,采用基于亚里士多德的物质本源的思想(“Material Cause,Formal Cause,Efficient Cause,Final Cause" —> 实体+属性+关系)的ER图,仍是基于咱们老祖宗老子道家思想("人法地、地法天、天法道、道法天然" —> 实体+行为)的思想的领域驱动 DDD 的方式,我的认为各有伯仲,组中能清楚表达出业务本质便可,后面单独写一篇抽象建模的文章聊一下这两种不一样的思想。
此层模型为开发者视角的实现模型,也就是咱们系统实现核心的对象模型,是咱们系统落地的基石。
咱们初步了解的什么是服务,以及什么是服务化的分层?那如何设计服务以及服务化架构呢?下面给出基本步骤和方案。
首先,咱们要理解服务化架构的总体背景。咱们必须理解咱们所支撑的业务和业务根本驱动力以及全部的业务流程,业务场景以及业务用例;同时对于平台系统,咱们还必须理解公司的战略所赋予平台的使命是什么?咱们平台中长期的目标是什么?平台的终局是什么?这些组合和在一块儿才是服务化架构的完整的上下文背景。这些必需要反映到咱们的业务模型、平台公共语义模型和各域模型中去。
而后,咱们须要提出并回答以下问题:
前面六个问题描述了总体的架构需求(包括业务和平台),而剩下的问题则描述了整个服务化架构的上下文以及引入了服务目录库的需求。咱们服务不能只从单个服务的角度来看,而必须从整个服务集合的角度来反应完整的业务语义和平台语义。咱们的服务集合也就是服务目录库必须具有完整的上下文语义,必须能识别出:
服务目录库的设计必须支持两个主要的设计时目标:
服务目录库中的服务能够按照服务类型以及服务角色来进行组织。服务类型请参照服务化分层架构内容里的描述;服务角色包含任务服务角色、实体服务角色和决策服务角色,请参照后面小节描述。
面向服务化的架构的其中一个成功的关键是建立一个具有完整业务语义的服务集合以便于能够方便一块儿进行组合编排来支撑不一样的业务流程以及丰富的业务场景。
咱们常常谈论各功能域要提供松耦合的服务,是由于服务间的松耦合是很是重要的,特别是经过减小服务间的依赖以便于服务能够在不一样的场景中被复用,以及能够起到隔离变动影响的做用。可是如何才能尽量的实现这个目标呢?
首先咱们来看下对于服务最重要点是什么?首先就是这个服务提供了什么样的业务功能,其次这个服务对业务有价值的数据产生了那些影响。从这两个点上咱们就能够比较
容易得出两种类型的耦合在服务接口设计中是特别重要的:
举例来讲明下:
交易服务协调全部的活动,而后依赖其余服务来帮助完成流程。交易服务依赖于或者说耦合于用户服务,商品服务,库存服务,营销服务、订单服务以及支付服务等。
为啥交易服务没有实现全部的功能?
首先是由于咱们想在其余高级别流程或者服务中重用底层的能力。
第二是交易服务服务并不负责用户服务,商品服务,库存服务,营销服务、订单服务以及支付服务。交易服务只是使用它们,而不是负责实现它们。
用户服务被用做管理客户信息访问,它具备惟一的责任来提供、维护和更新客户信息,这样作的目的是为了能够在任何须要访问客户数据服务的地方重用客户服务。比代码重用更重要的是隔离或者是集中式访问客户信息,由于只有惟一的路径访问数据,数据就老是一致的,真正实现 Source Of Truth。所以,尽管有不少服务包含交易服务,购物车,订单历史等服务须要访问客户服务,经过松耦合的这种模式去管理这些依赖是比较容易被理解的。
经过建立服务来执行用户管理,商品管理,库存管理,以及营销管理等,就能够在任何能够用到的地方,执行保持一致性的这些业务功能。
敲黑板:好的服务设计并不只仅是关注重用性,更重要的是要提供一致性,既包含功能一致性,也包含数据一致性。
那么下一个问题是你如何决定有哪些服务以及这些服务分别是什么呢?一样,你用功能分解和信息隔离组合在一块儿来决定服务有哪些而且各自是什么?
所以,服务设计原则基本原则以下:
在服务化设计中,如何实现上述的这些原则呢?答案是提出并回答以下问题:
这些问题的答案会帮你来识别以下信息:
咱们一般设计服务时候一个很大的疑惑是个人服务到底要设计成什么样的颗粒度,应该更粗粒度一些,仍是更细粒度一些?答案是:没有一个统一正确的服务颗粒度标准。那怎么办?我如何设计个人服务的颗粒度呢?虽然没有统一的标准,可是咱们能够依赖下面的因素来决定合适的服务粒度:
在几乎任何复杂的环境或者系统平台中,咱们能够预期到多种多样类型的服务。这些服务具备不一样的类型和颗粒度,能够参考服务化分层中的内容,也能够见下面的描述:
业务流程一般跨越整个企业或者平台多个业务域,一般是由底层服务构建而成
业务服务是最粗粒度的服务,业务服务提供高度抽象的,组合的业务功能给到平台或者企业。业务服务的功能和数据同业务流程所须要的业务语义紧密结合。数据整合服务在这个层次提供端到端的业务流程所须要的整合后的数据。
子域服务是中等粒度的,他们提供特别针对于每一个业务子域的业务相关服务,被本域内的不一样业务服务所使用,可是未必暴露出子域外
子域基础服务一般是最小粒度的服务,他们提供更低层次的服务,用来提供子域内子域业务功能的基本功能支撑
子域基础服务一般也提供教小粒度的服务,用于支撑上层业务功能服务的业务功能完整实现。
基础架构提供了在更高层级服务构建中细粒度的能力,独立于任何业务域。这些服务须要和业务相关明确区分开来,例如安全认证,权限管理以及纯粹技术编排服务。
独立于服务的粒度,职责范围以及服务建立之外的另一个重要考量或者说是侧面是:服务在服务组合或者流程编排中所承担的角色是什么?
那么怎么来区分不一样的角色呢?咱们使用关注点隔离的架构原则。例如,咱们在构建应用中就使用了将数据同逻辑隔离做为重要的概念。这样不只提供了不一样关注点解耦的可能以及机会,并且容许采用不一样的方式,在不一样的地方来实现这些不一样的关注点。
对业务流程进行单独管理的BPM就是一个很是好的例子,BPM做为另一个关注点分离的例子,将业务流程方案从其余逻辑中分离出来,可使工做流程能够在一个特定的层次或者环境内进行执行和管理, 这样就能够实现经过快速的创建新的流程模型来快速响应业务的变化。同时面向服务的架构SOA提供了将业务服务做为构建业务流程的基础构件的功能。业务规则系统BRMS一样也做为一个关注点分离的例子,将业务规则或者业务决策从其余应用逻辑中区分开来,这样业务规则和业务决策也能够在一个特定的层次被执行和管理,从而就能够很容易的被变动来支持新的业务需求。这里,业务规则以及决策服务也是面向服务的机构来暴露出规则和决策服务来支撑规则和决策与业务流程的分离。
一般咱们经过较粗粒度的来定义三大类服务角色来构建不一样的服务层次:
任务服务一般实现一个完整的业务功能,既能够是基本业务功能,也能够是复杂的业务功能,如计算某个货品在某个仓的补货量,或者一个简单的业务校验,如此货品在此仓是否可补。
此服务类型颗粒度范围较广,包含从独立的子域基础服务到大的平台业务服务均可以具备任务服务角色,更小颗粒度的服务倾向于具备更通用的目的,更大的可重用的潜力。业务服务几乎老是承担任务服务的角色,一般是小颗粒度服务较大的组合,能够被设计成支持一个或者更多特定的流程。所以这些服务一般在跨业务流程中普遍复用的潜力更低。可是也是正常的,由于他们一般是有其余可重用的服务组成的。
一般,具备业务角色的服务是主动服务,经过主动行为来提供价值
主要管理访问业务实体的服务具备这个角色。业务实体的例子如用户、类目、商品、价格、库存、购物车,主要对应主要的业务信息。实体一般是中到大型实体,倾向于独立于任何特定的业务流程,而可作为多个不一样业务流程的组成部分。具备实体服务角色的服务一般经过适配和提供须要的信息来实现任务的方式来支撑任务服务。实体服务一般都具有较大的重用的潜力。
规则 / 决策服务是经过执行业务规则来提供业务决策的服务,如补货计划自动审核服务。
规则 / 决策服务一般用做对复杂问题进行判断或者支持变化频繁的业务规则,如复杂且多变的审核规则等。
规则 / 决策服务一般为小到中等大小颗粒度,一般用来组装成更大的服务。规则/决策服务是能够不一样层次不一样类型的服务,包括平台业务服务,子域服务,子域基础服务等,可是一般状况下规则/决策服服务也来支撑这些服务类型。
咱们经过组合这些不一样类型的服务角色来提供灵活的业务能力,从而用来支持业务流程内的活动。咱们提供了一些基本原则来帮助咱们进行服务组合以便于帮咱们减小依赖,限制耦合以及最大化灵活性。
服务层次以及组合基本原则:
如今咱们能够经过丰富的流程,实体和决策服务的集合,能够建立新的不一样的服务组合,把规则的灵活可变的好处同服务化架构的模块化,灵活性以及重用性结合起来做为业务系统平台级别的基本架构方式。
大的规划首先要明确 2-3 年内的服务化的目标。大的规划切记事无巨细,而是根据长期规划设定明确的指导性原则和要求,在体系化的基础上鼓励协同和创新。
服务化不该该是运动式的大跃进推动,而应该是坚持试点、推广、总结、扩大试点,从而由点到面,逐步落实的方法,由各域根据规划的体系化要求,再各自状况暨各自成熟度来设定各自服务化目标,制定一个个小目标,快速迭代,敏捷式的总结推动。
创建共识的根本是要讲清楚服务化的目标、架构、设计、开发背后的清楚的逻辑,让每一个人想的清楚,听的明白。
接地气同达成共识同样,要用朴素的工程师语言讲清楚目标和逻辑,而不是拿各类看上去很是光鲜亮丽的各类名词来充当台面,讲的人解释不清楚,听得人一头雾水,没有体系化逻辑来支撑落地,最终很难达到服务化真正的目标的。
服务化是一个庞大的,迭代的,渐进的体系化工程,不是快闪战,不是突袭战,是场持久战,必定要有曾国藩的“结硬寨,打呆仗”的耐心和准备,踏踏实实落地迭代推动,小步快跑,在坚持体系化思考的基础上进行持续总结改进,经过一个接一个战斗,一个小胜利接一个小胜利,一个战役接一个战役不停的攻城略地的基础上逐渐迈向成功。
一句话,高效的方式就是慢想、快干。咱们不必定缺乏高执行力的人,可是必定缺乏能独立思考并体系化行事的人。