`
herman_liu76
  • 浏览: 100036 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

微服务(SOA)的编排与编制及组合的分析与实践

 
阅读更多
    最近在开发公司产品的核心主业务,因为此业务需要串起多个子应用,子应用都已经独立部署,而且拆分的独立应用非常多。比如企业任务子应用,订单子应用,任务执行总控应用(内含很多个子任务执行子应用),签章子应用,支付子应用,未来还有核算子应用,报告子应用。
    在这样一个核心业务中的各相关应用调用中,有可能中断被介入,也可能部分必须同时完成,也可能应用宕机等情况。笔者之前一直做单体应用,刚从事互联网业务,才面临这些问题。如何把这些服务合理的整合在一个业务场景中,这是我一直在思考的一个问题。

    虽然第一个版本已经上线了,但时间仓促,在目前的进一步重构优化中,需要很好的把握多个微服务的调用。虽然网上很多微服务编排的文章,还有多个微服务的分页式事务,但貌似不解决我的业务问题,还有些文章一知半解,到处复制。最近又看到网上的两个文章,基本上心里有思路了。

一、(微)服务相关概念与关系
    标题中的编排与编制来自后面附的文章。
    “编制的英文是Orchestration,本意是乐队指挥。微服务的编制强调的是通过一个可执行的中心流程来协同内部及外部的服务交互。通过中心流程来控制总体的目标,涉及的操作,服务调用顺序。”
    “编排的英文是Choreography。微服务的编排强调的是协作,通过消息的交互序列来控制各个部分资源的交互。参与交互的资源都是对等的,没有集中的控制。”

    提到微服务技术,少不了以下一些概念,先分成几类:
  • 与外部有关的概念:注册、发现、监控(可以没有)
  • 与本身有关的概念:熔断、限流、降级、超时、重试、幂等(部分可以没有)
  • 与组合有关的概念:最终一致性、分布式事务、CAP、BASE、补偿、分布式锁


     而分析上面的业务应用功能:我们目前没有注册、发现,没有熔断、限流、降级。应用之间可能有重试、幂等要求。

     应用之间的关系:有两种情况。比如中间有环节可以被中断,比如账户钱不够就中断到某个状态。重新再支付再运行。所以这时也没有自动重试,用户可以介入。也有的应用之间是强关联,比如订单支付成功与账户金额变化,这两者之间一定要最终一致,重试与幂等,中间不可能产生有用户介入的操作。对用户来说,要么成功要么失败,用户不会知道中间状态的。
    如果两个应用之间是弱关系,其中一个应用down机了,既然有用户介入,是不需要维护一致性的。如果后面的强关联,是一定要维护一致性的(自动或者人工后台干预)。

     我们这些业务系统,到底是soa吗?业务是微服务吗?貌似情况比较多。

二、设想两种极端的调用

   串行调用方式:
   如果企业任务应用接受一个外部任务开始,只调用订单子应用。而订单其内部调用签章子应用,签章内部再调用支付子应用,支付内部再调用执行总任务,执行总任务调用核算子应用...再一层层回溯回来。对外层来说,只调了一个应用,其它都被代理了。也只有一个状态:订单的状态。



  一个明显的问题是,如果很多内部状态要显示给用户,而且用户可能进行介入操作。如果第一层要记录下每个层的状态,层次稍微深一点就非常复杂了。最深一层的状态变化,都要向上冒泡到最外层。比如任务调用了订单,订单调用了执行。外层的任务很难显示执行的状态,只知道订单提交,订单成功或者失败。因为执行完全由订单应用代理了。
   另外,如果用户介入到深层次的操作,外部除了显示内部状态,还要层层把请求转发到相关层,复杂度,失败可能性,失败的处理都非常困难。
   如同生活中找代理公司办事,人家可能一层层找人做,你只能看到最终的结果,如果去打听一层层的进展,将是非常困难的。一般会说,你等着,最后结果会告知的。后面也许还有他不掌握的层层调用,代价很大,怎么可能提供外部详细的调用状态呢。如果想办法找到了某层代理人,要介入,人家也不认识你,人家只认上层调用他的人。

  中心总控方式:
   这在生活中非常常见。比如我们去医院体验,有一个体验表,每个任务都有一个填写块,都完成了就总检。如果有没完成的,第二天再去,也许有步骤可以跳过。再比如一个建设项目,要很多个部门审批,公司肯定有一个项目进展表,规土局,建委,环保局,一个个进展都记录下来。



   不可能你去规土局办事,规土局一门受理了,最后由机关内部流转到建委、环保局,最后你从规土局口子拿到一串部门办好的结果。

   组合方式:
   设想在中心总控的方式中提到的公司的项目进行审批,你得到的状态是一个个部门的受理、办结。而你得不到部门内部的受理环节、科审、处审、办结等具体环节。部门之间你可以介入再发起、部门内部你完全无法介入,如果科审失败就整体失败返回,重新从受理开始。
    用户对服务的调用发起,只能从可介入的服务开始,比如各个部门的受理。而内部要么成功要么失败,中间是不能由用户介入的,用户通常也不知道内部的进展环节。


    如果一个部门的处长审核时认为缺少资料不通过,结果会是本部门办理的整体审核失败,不会在此环节由企业介入补材料。企业可以下次重新受理,也可以不办理了。

三、结论

  我的业务要求在给用户展示出几个重要环节的状态给用户介入,比如钱不够会停止在订单,用户可以再支付。授权时,如果没收到授权,用户可以介入再发起。核算中如果再付款,用户可以再支付。然而有些过程,比如用户帐户有钱,那订单状态与账户扣费及发票都是一起发生的。这几个又有最终一致性要求,不会给用户显示中间的状态。

   所以合理的设计,强组合在一起的业务,可能由一些应用发起,对调用方只返回结果,内部保证最终一致性,这里没有中心,是完全去中心化的。而这些强组合的进一步组合出更大的弱业务流程,中间可正常中断,就需要一个总控,显示某个强组合的状态,这个状态的用户所介入的操作,将启动强组合业务。

   用字母表示应用,应用的组合类似于: “-ABC-DE-F-G-HIJL--”。如果一切顺利,可以从A调用到L不失败,如果中间有问题,只能停留在“-”的状态由用户介入。"DE"是强组合,成功就到F,不管DE哪一个失败,停留在D前的状态。D成功E失败,D可以不断重试,直到超时D回退。比如订单修改了状态与库存,再调用扣费,结果没调成功,反复重试还不成功,订单状态就要回退。如果先扣费,再修改状态与库存,修改出错,扣费就退款。反正必须同时成功;反正不用用户介入。

   这样,我们要合理划分业务流程中的各应用之间的关系。数据库中主业务数据表的状态有一个总控状态,只记录在弱组合中的结果状态。应用强组合之间进行超时、重试,幂等,回退等,只有整体成功与失败。


    此图中,小黑块是一个个服务,服务会有一定的强组合,就是最终一致性,而整体的业务会串起单一的或者组合的应用。强组合内不存在用户可介入的分支(如果重试、超时、意外的不一致,由后台管理介入)。
    我们的业务是整体的由中心控制的编制,与局部无中心化的编排的复杂的结合。

四、感悟

   微服务确实很微。完整的业务往往是一些组合情况。高聚合低耦合的原理无处不在。高聚合的微服务就是要研究编排,一致性,分布锁等。低聚合的微服务就是要编制,为了灵活可以参考工作流的原理进行统一配置。

附参考文章:
https://blog.csdn.net/jessise_zhan/article/details/80129818

https://blog.csdn.net/wp94302948/article/details/79653945
  • 大小: 135.5 KB
  • 大小: 85.9 KB
  • 大小: 165.7 KB
  • 大小: 180.3 KB
分享到:
评论

相关推荐

    SOA与微服务比较

    --微服务产生的背景 --微服务与SOA --微服务架构的定义 --微服务实现工具概述 --微服务对开发方式的影响 --微服务架构应用案例

    微服务与SOA之间差了一个ESB

    微服务只是最近提出的概念,实际上很多巨头公司(FB、Twitter、AWS等)已经在亲身实践。微服务并不是银弹,但是我们可以参考它的思想来解决自己遇到的问题。对于已经找准市场,业务即将或者马上就要急剧发展的创业公司...

    SOA-VS-微服务架构对比分析.docx

    【SOA与微服务架构对比分析】 面向服务的架构(Service-Oriented Architecture,简称SOA)和微服务架构是两种不同的服务化解决方案,它们在应对复杂系统设计时提供了不同的思路。SOA作为一种架构范式,旨在打破系统...

    SOA架构:服务和微服务分析及设计(原书第2版)

    新版的案例研究示例和图例进一步阐释和定位微服务模型,并与更传统的服务类型相关联。本书可作为应用架构师、企业架构师、软件开发人员以及任何有兴趣了解或负责设计与实现现代、面向服务解决方案的IT专业人士的参考...

    漫画-微服务对SOA架构.docx

    ### 微服务与SOA架构对比分析 #### 一、微服务架构概述 微服务架构(Microservices Architecture)近年来在IT行业中受到了广泛的关注与应用。它作为一种新兴的软件设计模式,旨在通过将复杂的大型应用程序分解成一...

    微服务架构实践116页.pdf

    文档内容提到了“微服务架构实践”,并且强调了在电商大型活动中实践微服务架构的案例。这意味着文档中可能包含了微服务架构实施的详细案例分析,包括架构设计、服务的拆分、开发模式、部署策略以及在高流量、高并发...

    微服务架构设计与实践

    ### 微服务架构设计与实践 #### 一、微服务架构概述 微服务架构是一种将单个应用程序开发为一组小型、独立的服务的方法,这些服务通过轻量级通信机制(通常是HTTP资源API)相互通信。每个服务都是围绕特定业务功能...

    SOA实践指南-分布式系统设计的艺术.pdf

     2.7 对比soa与分布式对象  2.8 soa术语  2.9 总结 第3章:服务  3.1 服务  3.2 接口和契约 . 3.3 额外的服务特性  3.4 总结 第4章:松耦合  4.1 对容错的需求  4.2 松耦合的形式  4.3 处理松...

    SOA和微服务架构的区别? - 面向服务的架构(SOA) - 知乎1

    【SOA(面向服务的架构)与微服务架构的区别】 面向服务的架构(Service-Oriented Architecture,简称SOA)是一种软件设计范式,旨在通过将业务功能组织为可复用的服务来构建分布式系统。SOA的核心思想是解耦业务...

    微服务理论和实践

    4. 微服务与服务导向架构(SOA)的区别在于,微服务更关注于小粒度服务的独立性,而SOA倾向于更大规模的服务封装。 5. 案例研究和常见的架构模式包括: - 电子商务折扣网站、金融服务公司和大型实体零售商的案例...

    SOA实践指南_SOA_架构_

    4. **服务编排与 choreography**:服务编排指的是一个中央实体(如ESB,企业服务总线)协调多个服务之间的交互。相反,服务编排是服务间自主协商交互的方式,没有中心控制点。 5. **企业服务总线(Enterprise ...

    广工SOA与Web Service技术实验报告

    包含了广工soa和webservice的四次实验源代码以及四次实验的报告,如创建Web Service,编写Web Service的客户端程序,对SOAP消息包的操作,基于Jersey框架创建RESTful服务端和客户端

    SOA架构 服务和微服务分析及设计 中英文版本

    新版的案例研究示例和图例进一步阐释和定位微服务模型,并与更传统的服务类型相关联。本书可作为应用架构师、企业架构师、软件开发人员以及任何有兴趣了解或负责设计与实现现代、面向服务解决方案的IT专业人士的参考...

    微服务架构体系的深度治理-李鑫.pdf

    综合以上内容,微服务架构体系的深度治理涉及到整个软件生命周期中服务的治理,包括服务治理的发展历程、微服务的度量方法、线上和线下的治理策略、以及对代码的深度分析与理解。这个体系不但要求技术团队具备深厚的...

    SOA Practition SOA实践指南

    6. **服务编排与 choreography**:服务编排是指一个中心实体(如ESB)控制服务间的交互,而服务编排则是服务间自发协调交互的过程。选择哪种模式取决于业务需求和系统的复杂性。 7. **安全性**:SOA的安全性涵盖...

    执行SOA——SOA实践指南

    **执行SOA——SOA实践指南** 在信息技术领域,Service-Oriented Architecture(SOA,面向服务架构)是一种设计和构建软件系统的方法,它强调通过松散耦合的服务来实现业务流程。这篇博客文章和相关的资源集合,...

    SOA原理与实践课件

    7. **现代SOA与微服务** - **微服务架构**:一种更细粒度的服务划分方法,强调单个服务的自治和独立部署。 - **云原生SOA**:结合云计算的弹性扩展和按需付费模式,提升SOA的效率和灵活性。 通过本课件的学习,你...

    单体与微服务架构的演变与选型分析

    内容概要:本文详细探讨了从单体架构到微服务架构的演变历程,分析了单体、分布式、SOA、微服务等架构的优势和局限性,以及它们在不同历史阶段出现和淘汰的原因。文章通过历史视角和具体案例,解释了为何单体和...

    面向服务架构(SOA)中南大学SOA原理与技术 00 课程简介(共66页).ppt

    面向服务架构(SOA)中南大学SOA原理与技术 06 服务组合技术(共61页).ppt 面向服务架构(SOA)中南大学SOA原理与技术 07 BPEL业务流程(共136页).ppt 面向服务架构(SOA)中南大学SOA原理与技术 08 期末复习(共...

Global site tag (gtag.js) - Google Analytics