基于面向服务流水线的体系结构 背景
主存服务正变得日益常见,其中各种应用程序在共享硬件上服务大量消费者(称为多承租人系统)。主存服务可以向多个客户机提供同一类型的服务或向单个客户机提供多个服务。如此,主存服务能是相当复杂的系统。复杂主存服务系统的代表性示例是基于web的客户关系管理(CRM)服务。
CRM解决方案通常在主存计算机应用程序环境中提供创建和维护客户的从第一次接触到购买和售后的清晰形象所需的工具和能力。对复杂承租人而言,CRM系统可提供帮助改善销售和营销组织瞄准新客户的方式、管理营销活动、以及推动销售活动的特征和能力。CRM系统可包括由承租人内部或外部的用户单独地或以共享方式利用的许多硬件和软件组件。
诸如主存CRM服务等复杂系统需要响应于客户机请求来执行一系列操作。这些操作可以是同步的或异步的,可具有次序依赖性,并可由不同的各方来实现。在实现这样的系统时的一个挑战是管理该系统的复杂性,尤其是在第三方提供者添加操作时。这一挑战在其中服务提供者不完全信任第三方扩展的软件即服务(SaaS)应用程序中恶化。
概述
提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。该概述并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
各实施例针对提供采用流水线体系结构的主存服务。用于扩展现有功能或提供附加功能的第三方扩展通过元数据来注册并在流水线中与平台操作串行地执行,其中操作的次序和每一操作的阶段通过元数据来交换,以便均衡地对待系统功能和自定义功能。还可以使用循环检测机制来阻止通过偶然或恶意创建无限循环而对系统资源的滥用。
通过阅读以下详细描述并查阅相关联的附图,这些和其他特征和优点将是显而易见的。可以理解,前述一般描述和以下详细描述均仅是说明性的,且不限制所要求保护的各方面。
附图简述
图1是示出示例多承租人服务系统体系结构的示图;
图2示出具有流水线体系结构的面向服务系统中的各主要组件;
图3示出具有流水线体系结构的示例面向服务系统(CRM);
图4是其中可以实现各实施例的示例联网环境的示图;
图5是其中可以实现各实施例的示例计算操作环境的框图;
图6示出用于管理具有流水线体系结构的面向服务系统中的操作的过程的逻辑流程图;以及
图7示出用于具有流水线体系结构的面向服务系统中的循环检测过程的逻辑流程图。
详细描述
如以上简要描述的,可以在用于管理第三方插件功能的面向服务系统中实现流水线体系结构。在以下详细描述中,参考了构成其一部分并作为说明示出了各具体实施例或示例的附图。可组合这些方面,可利用其他方面,并且可以做出结构上的改变而不背离本发明的精神或范围。因此,以下详细描述并不旨在限制,本发明的范围由所附权利要求及其等效方案来定义。
虽然在结合在个人计算机上的操作系统上运行的应用程序执行的程序模块的一般上下文中描述了各实施例,但是本领域技术人员会认识到各方面也可以结合其他程序模块实现。
一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、组件、数据结构和其他类型的结构。此外,如本领域技术人员理解的,各实施例可以用其他计算机系统配置来实施,包括手持式设备、多处理器系统、基于微处理器或可编程消费者电子产品、小型计算机、大型计算机等等。各实施例还能在其中任务由通过通信网络链接的远程处理设备来执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于本地和远程存储器存储设备中。
各实施例可被实现为计算机进程(方法)、计算系统、或者如计算机程序产品或计算机可读介质等制品。计算机程序产品可以是计算机系统可读并编码了用于执行计算机进程的指令的计算机程序的计算机存储介质。计算机程序产品还可以是计算系统可读并编码了用于执行计算机进程的指令的计算机程序的载波上的传播信号。
参考图1,示出了示例多承租人服务系统体系结构的示图100。在一典型的多承租人系统中,与不同的承租人相关联的用户可以从服务请求操作,该服务可执行涉及承租人专用信息的同步和异步操作。
如上所述,主存服务使用多方面的默认和定制功能来便于各种应用程序与大量客户之间在共享硬件上的交互。例如,客户关系管理(CRM)服务可使与多个承租人相关联的用户能够记录、跟踪、分析、以及处理联系人、销售线索(sales lead)等,同时向每一承租人提供安全和自定义功能。这些所谓的软件即服务(SaaS)的某些自定义(或默认)功能能以与内核平台操作一起注册和执行的第三方扩展或插件的形式提供。
在一典型的主存服务环境中,可伸缩和冗余的一组web服务服务器112与承租人数据存储114一起工作来存储和处理与该服务的各个承租人相关联的数据。还可以通过另一组服务器和/或数据存储来提供补充服务116。例如,不同的服务器组能以优化系统性能的分布式方式来执行同步和异步处理。
通过使用同步和异步进程的独立分发以及服务器和数据库之间的交互,能够使主存服务组的任何部分都可以伸缩。因此,可以提供服务器(和/或数据库)的多个实例来解决增加的工作负载、附加承租人、数据容量等等。
在一操作中,主存服务接收输入数据(例如,CRM服务中的新联系人信息)并从用户102请求处理。用户102可以与用于定制主存服务的用户应用程序、工具、和/或插件104的独立系统相关联。与该独立系统相关联的数据可以存储在用户数据存储106中。用户102可以向主存服务提供扩展(插件)以用于附加或定制功能,其中这些插件连同内核平台操作一起注册和执行。根据一些实施例,这些插件不仅提供附加功能,而且还扩展服务的现有默认功能。
用户102可以自己提供插件或从第三方(未示出)请求插件来由主存服务注册。在这样的场景中,主存服务可以与该第三方提供者直接交互以在平台中注册该插件。此外,第三方提供者可以在用户(承租人)请求注册他们的扩展中的一个或多个时联系主存服务,并提供使主存服务确保所提供的插件确实是用户所请求的插件的证书。
当然,该复杂的交互可对服务造成控制其操作完整性和用户数据安全性的挑战。不是所有的第三方提供者都是可信的源,可能存在与服务平台和插件相关联的兼容性问题,并且将插件集成到服务的操作结构中可能不是简单的。
根据一些实施例,可响应于客户机请求来串行地执行具有基于流水线体系结构的插件功能的灵活且可伸缩的平台。请求对象可以作为参数传递到流水线中的每一插件,并且每一插件可以创建或操纵响应对象。可以沿该流水线传递任意状态以在插件之间传递数据。
图2示出具有流水线体系结构的面向服务系统中的各主要组件。一种根据各实施例的系统可以采用通过响应于客户机请求插入功能来定义灵活且可伸缩平台的流水线体系结构。请求对象作为参数传递到流水线中的每一插件,该插件可以创建或操纵响应对象。如果两个客户机请求操作同一流水线,则它们的行为应当相同。如此,这样的系统中的测试案例矩阵与硬编码行为的系统相比减小了。
在根据一个实施例的系统中,由流水线配置来表示要响应于客户机请求执行的动作序列。流水线中动作的次序可以通过依赖图分析来确定。可以在不重新编译系统的情况下通过在流水线配置中注册“插件”来配置新动作。这样,可以添加新功能或修改现有功能,从而形成动态和可伸缩的执行模型。更重要地,流水线配置包括定义要执行的动作序列的依赖信息以及实际插件代码模块。
面向服务流水线体系结构中的动作也可以是异步的,在这种情况下,可以保存并恢复流水线的状态以进行处理。因此,异步动作不能影响响应。根据一些实施例,插件配置(包括插件代码)可以集中地存储,从而允许具有当前流水线配置的相干视图的基于群集的系统。
根据一个实施例,面向服务体系结构可以被实现为前端以供调用流水线体系结构系统。流水线配置(包括插件代码)随后可通过该面向服务系统的应用编程接口(API)来配置(例如,通过web服务)。插件执行可以使用受管执行环境以取决于它们的作者(例如,通过代码签名确定的)来实施对插件的有限信任。
为了对根据各实施例的面向服务系统构建插件,实现者可以设计调用该插件代码的接口。在调用插件时,系统可将上下文对象与流水线的当前状态一起传递。从该上下文对象,插件可获取可通过其执行附加系统功能的接口。
如该附图所示,web服务212与应用程序222、工具224、以及工作流(业务流程)226进行交互以处理用户请求。另外,web服务212接收用户插件(例如,231、232、235、236)来执行用户定义的动作。用户通过插件定义的动作可包括通过现有功能的扩展或与现有功能并行的新功能的客户化。插件通过元数据在API中注册,该元数据可包括插件的次序和阶段(例如,在激活另一插件之前使操作取消、完成等)。插件随后可与平台操作234一起(由执行流水线230)执行,取决于元数据所定义的注册次序,有些在前(例如,231、232)而有些在后(例如,235、236)。
在一示例场景中,一个插件可被配置成在添加新信息或修改(删除)现有信息时更新联系人信息,同时使用与该第一插件串行执行的另一插件以基于该第一插件所执行的更新来审计用户的联系人记录。在根据各实施例的系统中,给予插件定义它们自己的事务边界的能力,从而允许灵活且可伸缩的系统。插件可以串行或并行执行。各实施例不限于一种特定执行方法。
如上所述,根据各实施例的系统可包括单独的服务器和处理主机(例如,异步处理主机)的许多实例。通过实现其中各单独的服务器将长期运行请求排入队列以供稍后处理的可靠进程队列,可以独立地伸缩这些服务器集群中的每一个。
调用来自这些插件的系统行为的能力,甚至是在受管执行环境中,打开了无限循环的可能性。这可导致系统性能降级,尤其是对于多承租人系统中的其他承租人而言。这些循环可包括偶然或恶意生成无限数据量的退化循环或无限但不是退化的非退化循环(例如,要在不确定的时间段内一年处理一次的生日提醒)。为终止(或控制)这些循环,可以在接收到客户机请求时设置默认“预算”和互相关id。在调用插件内的系统方法时,可以传递互相关标识符和预算的一部分。如果子调用具有不足的预算,则这导致错误,从而终止循环。
一种根据各实施例的系统针对所设预算来为每一操作分配成本,所设预算分布在各个子操作中。因此,调用者独立地发起的且不具有相关联的先前上下文的动作和作为另一动作的结果(例如,子动作)的具有继承上下文的动作可以使用与调用者相关联的操作帐户来跟踪。例如,用户可以经由web服务来要求创建新帐户,并且创建新帐户可以使插件调用创建任务的调用。创建任务的调用具有从对帐户的原始创建所继承的上下文。如果正在创建新帐户,则可在这时设置预算,并且对该帐户每次执行操作时,可以递减预算。根据另一实施例,可以利用深度参数来终止无限循环。可以在一开始设置操作(子操作)次数的计数,并在执行附加操作(创建子操作)时递增。在达到最初设置的深度限制时,终止循环。
根据其他实施例,可以采用基于时间的预算复位以允许作为非退化的无限循环,诸如定时成在唤醒进行生日提醒之前休眠一年的异步事件。在操作序列中存在预定义延迟的情况下,系统可复位预算或深度。又一实施例采用在无限循环检测和终止中的有限树结构化操作(子操作)例外。例如,区域帐户创建可能是非统一的(每一州具有可变数量的销售区域),从而导致有限树结构。在预算(或深度)以固定方式分布在所有子操作中的情况下,基于预算的循环检测算法可能尝试终止操作。该系统可被配置成考虑这样的有限树结构,并且当在执行循环检测时豁免它们。
图3示出具有流水线体系结构的示例面向服务系统(CRM)。CRM系统是其中客户能够向他们的组织(承租人)签到的多承租人系统的示例,该组织逻辑上是他们自己的CRM数据的数据库。客户可请求诸如创建帐户、发送电子邮件、或删除联系人。这些请求在服务器集群上处理。
在图3的示例系统300中,CRM web服务312通过执行平台内核操作334(默认功能)连同提供扩展或替换功能的插件331、332、335、336来处理这样的用户请求,从而允许为用户定制该服务。这些插件在CRM执行流水线330中串行执行并且它们的顺序可由用户来定义(331、332、335、336)。根据一个实现,这些插件可被分组成用于预处理或后处理内核功能所处理的数据的预事件(pre‑event)和后事件(post‑event)操作,但这一分组不是限制。在根据各实施例的系统中,这些插件和内核操作可以用任何方式来分组或根本不分组。
CRM web服务312可以与特定CRM应用程序322交互,利用CRM工具324,以及将业务流程存储为CRM工作流326。根据一示例实现,利用CRM web服务312可用作对用户请求的传输。诸如结构化查询语言(SQL)数据库等关系数据库可用作该流水线配置的储存库,并且另一数据库可用作插件代码模块的储存库。
图2和图3中描述的面向服务的系统和操作是用于说明目的的示例。可以使用更多或更少组件或使用此处描述的原理的其他方案来实现用于在多承租人服务中采用流水线体系结构的系统。
图4是其中可以实现各实施例的示例联网环境。采用流水线体系结构的面向服务系统可以用分布式方式在多个物理和虚拟的客户机和服务器上实现。它们还可以在非群集系统或利用通过一个或多个网络(例如,网络450)通信的多个节点的群集系统中实现。
这种系统可以包括服务器、客户机、因特网服务提供者、以及通信介质的任何拓扑结构。同样,该系统可以具有静态或动态拓扑结构。术语“客户机”可以表示客户机应用程序或客户机设备。尽管实现多承租人服务中的流水线体系结构的联网系统可以涉及更多组件,但结合此附图来讨论相关组件。此外,根据各实施例的系统还可以是用于服务与单承租人相关联的用户的单承租人系统。
处理请求可通过各个客户机设备441‑443来自各个用户。用户自己或第三方提供者(通过服务器444)可向一个或多个服务器(例如,服务器452)所管理的流水线体系结构提供用于扩展或附加功能的插件。该服务还可以在一个或多个服务器中实现。承租人数据库可被包括在数据存储458中。可使用专用数据库服务器(例如,数据库服务器456)来协调一个或多个此类数据存储中的数据检索和存储。
网络450可以包括诸如企业网络等安全网络、诸如无线开放网络等非安全网络、或因特网。网络450提供此处描述的节点之间的通信。作为示例而非局限,网络450可以包括诸如有线网络或直接线连接等有线介质,以及诸如声学、RF、红外线和其它无线介质等无线介质。
可以利用计算设备、应用程序、数据源、数据分布系统的许多其它配置来实现面向服务系统中的流水线体系结构。此外,图4中所讨论的联网环境仅用于说明目的。各实施例不限于示例应用程序、模块、或过程。
图5及相关联的讨论旨在提供对适于在其中实现各实施例的计算环境的简要概括描述。参考图5,示出了诸如计算设备500等示例计算操作环境的框图。在一基本配置中,计算设备500可以是提供与采用流水线体系结构的面向服务系统相关联的服务的服务器,并通常包括至少一个处理单元502和系统存储器504。计算设备500还可包括协作执行程序的多个处理单元。取决于计算设备的确切配置和类型,系统存储器504可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或是两者的某种组合。系统存储器504通常包括适于控制联网个人计算机的操作的操作系统505,诸如来自华盛顿州雷德蒙市的微软公司的
![]()
操作系统。系统存储器504还可以包括一个或多个软件应用程序,诸如程序模块606、web服务522、以及插件524。
web服务522可以是分开的应用程序或是向与计算设备500相关联的客户机应用程序提供数据和处理服务的主存服务应用程序的整合模块。如上所述,插件524可以提供为特定用户和/或操作定制web服务522的操作的附加功能。该基本配置在图5中由虚线508内的组件示出。
计算设备500可具有附加特征或功能。例如,计算设备500还可包括附加数据存储设备(可移动和/或不可移动),诸如例如磁盘、光盘或磁带。这些其它存储在图5中由可移动存储509和不可移动存储510示出。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器504、可移动存储509和不可移动存储510都是计算机存储介质的示例。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD‑ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算设备500访问的任何其它介质。任何这样的计算机存储介质都可以是设备500的一部分。计算设备500还可具有诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等输入设备512。还可包括诸如显示器、扬声器、打印机等输出设备514。这些设备在本领域中公知且无需在此处详细讨论。
计算设备500还可以包含允许该设备诸如在分布式计算环境中,例如在内联网或互联网中通过无线网络与其它计算设备518通信的通信连接516。其他计算设备518可包括执行与提供插件的另一服务或第三方提供者相关联的应用程序的服务器。通信连接516是通信介质的一个示例。通信介质通常由诸如载波或其他传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其他数据来体现,并包括任何信息传递介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。如此处所使用的术语“计算机可读介质”包括存储介质和通信介质两者。
所要求保护的主题还包括各方法。这些方法可以用任何数量的方式,包括本文中所描述的结构来实现。一种此类方式是通过本文中描述的类型的设备的机器操作。
另一可任选方式是结合一个或多个人类操作者执行该方法的各个操作中的某一些来执行该方法的一个或多个操作。这些人类操作者无需彼此同在一处,而是其每一个可以仅与执行程序的一部分的机器同在一处。
图6示出用于管理具有流水线体系结构的面向服务系统中的操作的过程600的逻辑流程图。过程600可作为例如主存CRM服务的一部分来实现。
过程600在操作602开始,在此流水线体系结构服务接收用户构造的方案(和/或操作)。该方案(和/或操作)与可由该用户或由该用户授权的第三方提供的一个或多个插件相关联。处理从操作602前进至操作604。
在操作604,自动地配置该方案。例如,在利用SQL数据库的CRM系统中,可以基于该方案、相关联的元数据、以及操作本身来生成SQL数据(查询)。系统至今不执行任何操作,因为与用户数据相关联的用户没有请求任何动作。处理从操作604移至操作606。
在操作606,接收用户插件。这些插件执行用户请求的动作,从而以均衡方式向该服务的内核功能提供扩展或替换功能。处理从操作606移至操作608。
在操作608,通过元数据在系统API中注册用户动作,元数据还包括在流水线中执行用户动作时每一插件的次序和阶段。处理从操作608移至操作610,其中在来自用户的请求时,服务以指定次序执行注册插件来处理用户数据。该系统可以执行附加操作,诸如用于对流水线操作进行排序的依赖性分析(在上传插件时),从而使多方都能够扩展该系统并可预测地工作。处理从操作610移至调用过程以供进一步操作。
如上所述,通过允许用户注册并以任何次序(以及在进行中)执行他们自己的扩展,该系统因为偶然或恶意生成的无限循环而易受性能降级的损害。因此,可以使用循环检测机制来检测并终止无限循环,同时允许特定准无限(无限但非退化)循环免于终止。这些机制在下面将更详细地描述。
图7示出用于具有流水线体系结构的面向服务系统中的循环检测过程700的逻辑流程图。过程700可以在图6的操作管理过程600内实现。
过程700在操作702开始,在这里接收调用。该调用可以针对最初动作或针对现有帐户上的动作。这由系统通过检查与该调用一起传递的上下文来确定。处理从操作702前进至判定操作704。
在判定操作704,作出所传递的上下文是否包括现有预算(深度)的判定。如果对所请求的动作没有找到现有预算(深度),则在操作706创建一个预算(深度)。如果找到与该调用相关联的现有预算(深度),则在操作708基于与该调用相关联的操作的数量或类型来递减该预算(深度)。每一操作都具有相对于预算的成本,预算分布于各子操作中。如上所述,还可以使用基于子操作或操作的计数的深度来代替预算。
暂时跳过可任选操作710和712,在判定操作714,作出所分配的预算是否耗尽的判定。如果预算耗尽,则终止操作。如果仍然存在可用预算,则在后续操作716执行与该调用相关联的操作。
尽管阻止退化循环,但根据各实施例的系统还可便于看似无限循环的例外,这些例外不应作为标准操作过程的一部分来终止。例如,设定在不确定时间内的、对联系人的生日提醒操作就是一个例外。因此,系统可能感觉它是无限循环并尝试终止它。跟在708之后的可任选操作710旨在进行这一豁免。如果操作包括预定义延迟(如生日提醒之间的一年延迟),则复位预算(深度)。
另一示例例外是涉及有限树结构的操作。例如,CRM服务的销售区域可能是非统一地分布的。尽管可能向一个州分配了一个销售区域,但可能向另一人口更多的州分配多个销售区域。如果在子操作之间采用固定深度或预算分配,则该系统同样感觉这一动作是无限的并尝试终止它。在可任选操作712,如果调用涉及有限树结构,则可以复位预算或深度,从而阻止过早终止这些操作。
包括在过程600和700内的各操作仅出于说明目的。提供采用流水线体系结构的主存服务可以使用此处所述的各原理通过具有更少或更多步骤的相似过程、以及不同的操作次序来实现。
以上说明书、示例和数据提供了对各实施例组成的制造和使用的全面描述。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求和各实施例的示例形式而公开的。