大规模视频网站的计费与流量管理
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011。
该内容已经被标记书签!
标记书签错误,请重试!

作者 Boris Lublinsky 译者 郭晓刚 发布于 2007年8月10日
当前大多数SOA方面的文章书籍都集中在个别的业务服务的定义和实现。构建企业的解决方案通常都需要结合多个现有的企业服务。这些复合而成的服务又可以与其他服务再次复合成更高级的解决方案。这种业务服务的递归复合是SOA最重要的特性之一,它使我们可以快速地在现有业务服务的基础上构建新的解决方案。随着业务服务(及其复合)的数量增长,要实现新的企业解决方案也变得更加容易。
按照《Toward a pattern language for Service-Oriented Architecture and Integration 》的定义,产生复合服务的主要推动力来自以下方面:
复合服务有两个方面(按照《Tools for Composite Web Services: A Short Overview》的说法):复合设计,关注的是综合的规范,来确定如何协调各组件服务(Component Service)去满足客户请求;复合的实现,即如何执行由复合设计产生的规范,以实际达成各服务之间的协调。
在本文中,我们将分别从设计和实现两方面讨论复合服务的主要方式。
复合设计是关于如何在一组现有服务的基础上设计出一个解决方案。它要做的是确定复合设计中用到的各个服务、它们之间交互的方式、以及复合的拓扑。
根据《Service–Oriented Composition in BPEL4WS》,复合的交互主要有两种设计方式:
对于分层复合,复合服务的实现对于服务的消费者是完全不透明的(黑盒)。调用服务的消费者一直等待到执行完成,然后(直接或间接地)使用执行的输出结果(图1)。

图1 分层服务复合
这种复合方式对于实现逐层分解的系统来说非常自然。每个层次被实现成一个独立的复合服务,并协调低一层的(符合)服务的执行。这也是工作流系统中对高层方案通常采用的建模方式——对一系列活动进行组合,而每个活动可对应一个低层的业务过程、或者由人或程序执行的一项任务。虽然任意复合服务可被使用它的外部系统监控和中断,但除了最初的调用之外,复合服务并不与服务的消费者发生任何其它功能性的交互1。
虽然黑盒复合方式(分层复合)是对付复杂性的强有力工具,但在某些情况下消费者仍然需要根据执行的即时结果来控制复合服务的执行。会话复合可以完成这种功能。在会话复合的情形中,复合服务的实现对于服务的消费者仍然是完全不透明的,但特定的即时执行结果可被暴露给消费者(灰盒)。
这是通过支持显式的会话状态来实现的(会话状态和执行状态的区别请见[4])——复合服务然后向消费者暴露出多个接口:一个用作原来的服务调用,其他的用作获取即时结果以及依此控制服务的执行(图2)。

图2 会话服务复合
在这种复合类型中,进行交互的消费者和提供者被看作是对等的伙伴,互相交换数据和控制信号。
两种交互方式都是可行的复合设计方案。运用严格的层次结构是对复杂业务过程建模的地有效途径,工作流技术的成功是一个证明。另一方面,会话的丰富表现方式让它更容易抓住日常业务交互的精髓——谈判的行为、对结果的监控等等——通过明确地为消费者和服务之间的信息交互建立模型。
复合服务的设计不光需要定义服务的交互活动,也需要为其实现定义成员和拓扑。复合服务的拓扑有两种主要设计方式("《Service–Oriented Composition in BPEL4WS》"):
基于中介的拓扑(图3)假设存在一个被称为中介者的服务,它担当着一个特殊角色,既与服务的消费者交互,又控制参与本复合的其他服务(或复合服务)的执行。

图3 基于中介的复合拓扑
在基于中介的分层复合服务中,中介者实现一个编制规划(Orchestration Schema)以定义成员服务的调用序列,从而在特定的约束下完成特定的目标。中介者的实现可以采用不同的方式,包括编制语言/引擎、OWL-S复合、Petri Net等等。
在基于中介的会话复合服务中,中介者按照消费者的输入实现服务状态和状态的转换。中介者的典型实现一般都基于转换系统(Transition System)或有限状态机。
在对等拓扑中不存在中介者的概念。每个参与的服务(成员服务)都可以(部分地)执行复合服务(图4)。

图4 对等(Peer-to-Peer)复合拓扑
复合,在这里被定义为一个消息发送模板,成员服务可被插入其中。其目标行为被定义为一个允许的消息交换序列的家族,并应由系统具现化。一般这种拓扑仅被用于实现分层复合服务,因为它缺乏支持会话状态所必需的机制(即实现会话型交互的需求)。
看起来实现服务中介者的最简单方式是使用通用编程语言(图5)。

图5 编程实现复合服务
不幸的是,这种方案有几个缺陷:
虽然已经存在若干实现复合服务的框架(例如WS-CAF),用编程方式实现复合服务看起来并非一个正确的选择。
另一种实现复合服务的可能方式是基于事件的复合。这种复合实现建立在基与事件的服务交互的基础上:服务消费者向发布/订阅代理(Publish/Subscribe Intermediary)发布事件,代理再向实际的服务提供者投递事件(图6)。

图6通过发布/订阅机制的服务交互
在这种情形中,发布/订阅引擎作为一个中间层,在服务消费者和提供者之间起到了解耦的作用,因此可以允许极其灵活的复合服务实现。复合服务可以被实现成下面的样子(图7):

图7用事件实现复合服务
服务消费者将初始化事件(通过发布/订阅引擎)投递到订阅了此事件的若干服务。随后,每个服务可以发送另一个消息来(通过同样的发布/订阅引擎)调用另外一些服务。这样的事件序列有效地创造出了一个复合服务。通过发布/订阅机制实现的复合服务有以下特点:
通过使用编制引擎(Orchestration Engine)来实现服务中介者,可以进一步完善复合服务的实现(图8):

图8用编制引擎(Orchestration Engine)实现复合服务
这种实现方式通过采用编制语言(Orchestration Language)而非通用语言,从而改进了前述的编程实现方式。这意味着我们可以使用量身定做的可视化编辑器来编写/维护复合逻辑。这也意味着我们可以利用编制引擎的强大功能,编制引擎内建支持异步调用、状态管理、事务的补偿(Compensation)等等。使用编制引擎来实现复合服务有以下优点:
综上所述,在前面讨论的三种方式中,基于编制的实现看起来是创建复合服务最可行的方式。
复合服务在SOA实现中扮演了重要角色,它带来了以下优点:
本文讨论的各种复合服务的设计方式针对了多种多样的业务场景,因此我们可以为特定的业务需要设计出最适合的复合服务(及其拓扑)。
最后,我们建议使用编制引擎来实现复合服务。
Boris Lublinsky在软件工程和技术架构上有超过25年的经验。在最近几年中,他主要关注企业架构、SOA和过程管理。在他的整个职业生涯中,Dr. Lublinsky经常作技术演讲和写作工作。他在不同杂志上出版了超过40篇技术文章,包括Avtomatika i telemechanica、IEEE Transactions on Automatic Control、Distributed Computing、Nuclear Instruments and Methods、Java Developer’s Journal、XML Journal、Web Services Journal、JavaPro Journal、Enterprise Architect Journal和EAI Journal。最近Dr. Lublinsky为一家大型咨询公司工作,职责包括开发和维护SOA策略和框架。可以通过blublinsky@hotmail.com联系他。
1. Ali Arsanjani. Toward a pattern language for Service-Oriented Architecture and Integration, Part 2: Service composition. Developworks, December 2005.
2. Richard Hull, Jianwen Su. Tools for Composite Web Services: A Short Overview.
3. Rania Khalaf, Nirmal Mukhi, Sanjiva Weerawarana. Service–Oriented Composition in BPEL4WS.
4. B. Lublinsky. Defining SOA as an architectural style. IBM Developworks, January 2007
5. Web Services Composite Application Framework (WS-CAF)
查看英文原文:Service Composition
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011。
Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011。
2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。
12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011。
篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
1 条回复
关注此讨论 回复