`
tiantian911
  • 浏览: 224871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

服务颗粒度的困扰ZZ

阅读更多
服务颗粒度的困扰

  选择SOA就意味着将业务流程或功能用服务来表达,而服务的颗粒度直接影响到服务的质量,包括灵活性和效率等诸多方面。 因此,选择合适的颗粒度对服务设计是至关重要的。因为老被人问起,节前就有了就“服务颗粒度”问题写点东西的想法,没想到却因此困扰了我整个国庆节。回头想这其中很重要的一个原因,就是业界并没有就此形成一个非常清晰的答案。一个服务应该选择怎样的颗粒度,目前来看基本上还是一个主观的度量,并没有一个严格的标准可以遵循,很大程度上取决于设计者的经验。

  什么是服务的颗粒度?一般的说法,服务颗粒度(service granularity)就是指一个服务包含的功能大小。举个例子,对于电信九七系统中的营业受理来说,提交客户订单就是一个典型的粗粒度的服务,而实现这个提交订单服务的一系列内部操作,比如说创建客户资料,生成客户订单,记录产品属性,更新帐务关系等等就可能成为一系列细粒度的服务。细粒度的服务(fine-grained)提供相对较小的功能单元,或交换少量的数据。完成复杂的业务逻辑往往需要编排大量这种细粒度的服务,通过多次的服务请求交互才能实现。相反,粗粒度的服务(coarse-grained)则是在一个抽象的接口中封装了大块的业务/技术能力,减少服务请求交互的次数,但相应也会带来服务实现的复杂性,交互大量的数据,并因此而不能灵活更改以适应需求的变化。就像任何事物都有两面性一样,服务粒度不能太大或者太小,而应该大小合适。一个良好的SOA架构设计,必须在服务粒度设计上维护一种平衡,以获得成本降低,灵活响应的好处。

  尽管没有一本Bible让我们可以依此正确地设计服务的粒度,但我们还是能从与之相关的多方面利弊权衡的设计实践中,总结出一些能够帮助正确选择服务颗粒度的经验法则。识别并设计一个粒度适中的服务,我们可以主要从以下三个方面权衡考量。

  重用性

  所谓重用性,就是指服务能够应用于不同上下文的能力。重用可以说是SOA的核心思维,通过重用获得降低开发维护成本,缩短应用交付周期,提升质量等种种好处。

  与任何基于分解的范例相一致,颗粒度的大小直接影响到服务的可重用性。一个简单的经验法则就是细粒度的服务更容易被重用。换句话说,就是颗粒度越粗,服务越少被重用或者越难以被重用。因为随着颗粒度增加,越来越多的业务规则和上下文信息被嵌入到业务逻辑中,服务逐渐变得具有特定的业务意义。要使用它,我们必须首先了解它到底封装了哪些规则,否则我们无法确信这个服务正是我们所需要的。这并不意味着我们就不要构建粗粒度的服务,事实上粗粒度的服务往往还停留在”business-grained”层面,它让业务用户和IT人员可以直接对话,对业务有直接的意义,应该暴露出来。同时,如果我们仅仅机械地考虑重用性,将导致大量颗粒度很小的功能单元,这将对系统整体性能和容量带来严重的影响。就拿大家常用来描绘SOA的乐高玩具为喻,一个最小尺寸的1x1的乐高积木,带有一个标准的凸起接口,通过它几乎可以与任何其它乐高积木拼装出任意可以想想的物体,其广泛的重用性是不言而喻的。但是当你真正尝试用这种粒度的积木完成一个复杂物体拼装的时候,你可能会感叹:“Oh, My God! It’s mission impossible!”,因为,为此付出的时间和成本的代价几乎是不可接受的。因此,我们在一心希望构建美好的重用世界之前,需要先掂量清楚服务颗粒度的选择。

  在这里,我借用关于演讲的一个有名的“迷你裙定律”来尝试表达服务颗粒度的选择上的权衡之道。“mini-skirt theory”告诉我们,一个出色的演讲应该“short enough to keep people interested, but long enough to cover the important part”。套用在服务颗粒度的选择上,一个设计良好的服务应该“fine-grained enough to be reusable, but coarse-grained enough to make business sense”。

  灵活性

  所谓灵活性,就是能够容易地因情形做出改变的能力。SOA的目标之一就是让IT变得更灵活,能够更快地适应持续变化的业务环境。因此,灵活性作为设计良好的服务的重要考量,理所当然地也是选择服务粒度的重要标准之一。众所周知,细粒度的服务可以更容易地组装,为交付新的业务功能或改变业务流程提供了更多的灵活性。但是,仅仅考虑灵活性将导致大量的细粒度的服务,带来昂贵的开发成本,并使得维护变得困难。因此,在考虑业务流程灵活性的同时,考虑后台服务的良好组织、效率和开发维护成本,对于识别和设计粒度适中的服务是至关重要的。

  我们知道,服务识别方法之一就是top-down的一级级流程分解,直到不能或者不需要进一步分解为止,其中识别出来的的业务活动就是候选的业务服务。因此,一个有效的经验法则就是区别对待不同的业务流程,因为并不是每一个业务流程都需要相同的灵活性。如何确定哪些流程需要更多的灵活性,哪些流程不需要,可以参考SAP就企业业务流程的一个观点。SAP将流程划分为核心流程(core process)和支撑流程(context process)。其中,支撑流程是指那些不可或缺的,但又不影响企业差异化的流程,如财会管理流程等,它们关注的是如何提升生产效率,降低生产成本。因此这些流程在分解过程中,一旦识别出自治的(事务一致、上下文独立的)、粗粒度的服务就可以结束,因为它们相对稳定。而核心流程是指企业独特的,差异化的,代表企业竞争力的业务流程,如营销销售流程等。它们需要比支撑流程更细粒度地分解,以获得最大的灵活性,因为它们是时刻变化的。

  性能

  灵活性和效率往往是成对出现的,性能因素自然也是限制服务粒度不能太大或者太小的约束之一。Dan Foody曾在他的weblog里建议Webservice的每一个operation执行应该在5ms到5s之间完成,小于5ms或者 大于5s就意味着服务粒度要么太小,要么太大。我在这里倒不想评价这个量化的指标有多大指导意义,而是借此希望引起大家的思考,并不是服务粒度越小或者越大,系统性能就会一定越好。

  一个服务本身的复杂度以及业务到服务映射的复杂度(即实现一个业务活动所需的服务调用次数)是影响SOA性能的两个主要方面。服务颗粒度越大,意味着包含的功能越多,业务逻辑越复杂,网络延迟就会增加,对客户端响应变慢。而服务颗粒度越小,也就意味着包含的功能越简单,虽然单个服务执行效率很高,但从业务意义上,完成一项业务任务所需的服务调用次数越多,来回请求响应次数增加。一般来说,服务都是远程调用的,这种来回请求响应的次数增加意味着显著的性能开销。因此,为了保证服务的性能可控,一方面需要限制服务包含的功能范围和复杂度,也就是说服务粒度不能太粗;另一方面需要限制服务调用的次数和复杂度,也就是说服务粒度不能太细。我想这才是前面提到的5ms和5s背后真正的原因。很显然,二者的着眼点是背离的,为了符合性能的需求,需要在二者之间折中妥协。

  除以上几点之外,还存在其它可能影响服务颗粒度决策的因素,比如服务类别和使用范围等等。如果服务使用的范围有限,如仅仅在Intra-Application范畴,则可以选择相对较细粒度的服务接口,为服务请求者提供更多的灵活性;随着范围扩大,服务大小也应随之扩大,如Multi-Enterprise的范畴,则要求服务尽可能提供粗粒度的、较稳定的接口,保证服务请求者以一致的方式使用系统中所暴露出的服务。最后,需要记住的一点是,服务的颗粒度在其生命周期内不是一成不变的,它是随着业务的调整变化,以及服务的迭代发展过程,不断演化精炼、甚至重构的。
0
8
分享到:
评论

相关推荐

    base zz zz zz zz

    base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz

    ZZ-2022038 酒店服务赛项赛题

    4. **服务意识**:服务质量的关键在于服务态度,参赛者应具备热情周到的服务精神,善于观察客户需求,主动提供帮助,确保客人满意度。此外,良好的团队协作能力和职业道德也是评判的重要标准。 5. **英语能力**:...

    服务器端口关闭工具zz

    标题中的“服务器端口关闭工具zz”显然是一款用于管理服务器端口的应用程序,可能是由开发者命名为“zz”的特定工具。这款工具的主要功能是帮助系统管理员关闭指定的端口号,以优化服务器性能、增强安全性或者应对...

    ZZ561401.CAB

    ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB

    wincc AX NF ZZ

    wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。

    超出NLO QCD的高横向动量的ZZ产生

    我们研究了四轻子最终状态ℓ+ℓ-ℓ+ℓ-的产生,这些状态主要由一对弱电Z玻色子ZZ产生。 使用LoopSim方法,我们合并ZZ和ZZ + jet的NLO QCD结果,并获得ZZ产生的近似NNLO预测。 还包括对ZZ过程的精确胶子融合环平方的...

    zz CAD快速计算长度插件

    在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。

    Zz归零.LSP

    cad标高归零,好用的

    中医大夫助理信息系统 zz-doctor

    另外,“zz-doctor”可能还涉及网络通信,如调用远程API获取更新的医学知识库或实现在线咨询服务。这就需要用到HTTP请求库,如OkHttp或Volley,以及JSON解析库,如Gson或Jackson,来处理服务器端的数据交换。 最后...

    ZZ Fibo Trader - MetaTrader 5EA.zip

    用户可以通过调整参数来控制EA的敏感度,如斐波那契回调的百分比、抛物线SAR的步长和加速因子等,以达到最佳的交易效果。 总的来说,ZZ Fibo Trader EA结合了技术分析的两大经典工具,为交易者提供了一套完整的自动...

    ZZ不锈钢制品公司网站建设方案(doc).docx

    "ZZ不锈钢制品公司网站建设方案" 本文档是关于ZZ不锈钢...ZZ不锈钢制品公司网站建设方案的目的是为了提供一个完善的电子商务解决方案,帮助ZZ不锈钢制品公司更好地服务客户,增加客户忠诚度,提高业务效率和销售额。

    DT_ZZ_optimized - MetaTrader 4脚本.zip

    1. 参数调整:原版指标可能有固定或有限的参数设置,优化版本通常会提供更多的可调参数,允许用户根据市场状况和交易策略进行定制,例如周期、阈值、灵敏度等。 2. 计算效率提升:通过算法优化,减少不必要的计算,...

    3_Level_ZZ_Semafor.zip_3 level_zz_3_Level_ZZ_semafor_ZZ Semafor_

    ,主图指标,顶底信号,突破,转折信号,都很明显

    ZZ酒店服务赛项规程.pdf

    【ZZ酒店服务赛项规程】是全国职业院校技能大赛中专为中职学生设立的一项比赛,旨在提升学生的酒店服务业专业技能、服务意识、问题解决能力、沟通表达能力和卫生安全意识等综合素质。该赛项反映了中等职业教育旅游...

    ZZ_MODIFIED_GEEBINF.ENS.zip endnote的样式文件

    标题中的“ZZ_MODIFIED_GEEBINF.ENS.zip”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...

    ZZ商业中心物业管理服务细则.docx

    ZZ商业中心物业管理服务细则主要涵盖了房屋管理、共用设施设备维修保养、小区公共秩序维护以及卫生服务四大方面,旨在为业主和住户提供高效、专业且贴心的服务。以下是对这些服务内容的详细说明: 1. 房屋管理服务...

    zz809.com留言本

    《zz809.com留言本》是一款基于网络的互动交流平台,源于柏图留言本BTB 1.2版本,并经过管理员zz809的定制和优化。这个平台旨在为用户提供一个简便、实用的在线留言功能,使得用户可以方便地在网站上发表评论、交流...

    变形版SD ZZ高达 纸模型

    "变形版SD ZZ高达"是一款深受高达爱好者喜爱的纸模型,它源于日本著名的机器人动漫《机动战士Z高达》中的角色。SD(Super Deformed)是日本动漫中的一个术语,意为超级变形,通常指的是角色被夸张地简化和可爱化,...

    atguigu_springboot2_zz-master.zip

    在`atguigu_springboot2_zz-master`中,我们可以看到如何通过自动配置实现各种服务的快速集成。 4. **内嵌Web服务器** 项目中通常使用Tomcat、Jetty等作为内嵌Web服务器,无需额外部署,极大地提高了开发效率。`...

    我的资源zzzzzzzzzzzzz

    我的资源zzzzzzzzzzzzz

Global site tag (gtag.js) - Google Analytics