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

作者 Boris Lublinsky 译者 胡键 发布于 2007年6月14日
理想情况下,服务调用总能成功完成并返回需要的结果。不幸的是,在现实中,服务可能而且也会失败。这种失败可以有一大堆的问题引起。它可以是由服务本身引起,如入参验证失败,或只是服务实现的一个bug,或通信问题(如服务不可达或实现不可访问底层的数据库)。最后,失败可以由部署问题引起,如软件升级之后,必需的一个库没有被正确地部署。
一种被广泛采用的失败处理机制是异常处理,包括捕获并记录错误,以及在失败发生时选择一个备选执行路径。在应用程序和组件实现中,它已经成为一种标准机制。问题在于,它特别依赖于应用程序设计者和开发者对可能异常情况的预见能力,以及在运行时正确的利用代码1 处理它们的能力。这种方法基于以下假设:
在分布式系统的情况下,试图实现这种异常处理方法明显变得复杂,因为在这种情况下,异常不仅可以由应用程序代码本身,也可以由基础设施(如网络)故障引起,这使得分析所有可能的异常场景变得更加困难。此外,在此情形下,异常日志在多台物理机间传播,也使得协调它们明显更复杂。在面向服务架构(SOA)上下文中的特性,如松耦合(组织性和技术性),自治以及依赖已有实现业务功能的应用使得异常处理变得更加复杂。
由于每个服务是自行设计、实现和维护,并可用到多个企业解决方案(在服务设计时,它们可能是未知的)中,特定服务的异常处理实现围绕3点进行:处理异常;向本地服务实现记录异常;在它们不能被本地解决时,将它们向服务消费者报告为。如果没有采取特殊的度量,这将导致“异常处理孤岛”(见图1)2。
图1 异常处理孤岛
以下的复杂问题在单片应用程序中并不是什么大问题,为了支持SOA下的异常处理,必须被处理[2]。
对异常处理实现应用SOA原则,是SOA中一种优雅的异常处理解决方案。这将导致所有主要的异常管理元素“服务化”[4],(即,日志,异常解决和通知)。图2显示了异常日志、解决和通知的总体架构。
图2 异常日志、解决和通知的统一架构
服务实现中的工具代码用于检测和记录系统级和应用级异常。日志使用标准日志组件(如Log4J、Log4NET、.NET企业库等)暴露的通用API。日志实现将调用请求翻译成对异常记录服务的服务调用。在这种情形下,为了降低异常记录的效率影响,服务调用常常使用异步调用。尽管这个实现是以日志服务为中心,但是异常处理还依赖其它几个元素:
以上的功能划分确保了异常记录和解决风格一致。这允许公式化企业最佳实践(“公共知识”),并改善异常的审计、监视和控制。这代表了合规制定取得了重大进展。
异常解决服务集中化允许更快地实现特定异常类型处理的变更。最常用的异常解决方法是:
附注:服务异常定义
SOA中的异常处理非常依赖服务异常定义语义。服务异常可以属于3组(即系统、应用或业务)之一,因此它在服务有效负荷(回复)中可能有不同的表示。服务有效负荷可以被编码进SOAP消息;即使在消息使用其它编码时,这些想法也是可应用的。SOAP报文提供了特殊化的元素(SOAP Fault)用于异常的传播。使用SOAP Fault的最佳实践在别处描述[6]。
SOAP Fault最适合报告系统级别的异常,而且应该总被用于报告这类异常。(通过给SOAP Fault元素补充执行堆栈的内容,J2EE实现通常提供了与问题有关的额外信息。)系统级别的异常通常与系统的软硬件错误相关。这意味着服务调用可以在问题解决之后重试,这种重试可以自动地(如,通过故障转移)也可以是手动地(如,在物理替换了错误元件之后)。
应用和业务级别异常需要更多数据来正确定义错误起因。这些情况下,往往需要为每个具体错误使用特定模式来定义信息,这样可以有效地扩展领域语义模型以描述失败场景。另一个复杂情形是,基于一次服务调用可能返回多个错误。这种情形的典型例子就是验证错误。为了降低通信开支,通常返回所有的验证错误(即将它们一批打包),这样可以同时解决他们。
这些异常类型可以被作为包含扩展细节信息的SOAP Fault,或作为包含指示错误的有效负荷的普通服务响应被传递回来。两种方法各有优缺点,总结如下:
不考虑在以上总结表中的这些缺点,使用特殊化的有效负荷汇报应用程序和业务级别异常是更好的方法,因为它增加了灵活性和扩展性。
SOAP Fault 特殊化的有效负荷 优点
- 直接被Web服务规范和工具支持。
- 为所有类型异常提供统一的传递方式。
- 直接映射到诸如Java、C#编程语言的异常。
- 明确隔离系统级别和应用级别异常。
- 允许引入同时支持成功和失败场景的语义模型。
- 无需使用SOAP。
缺点
- 需要区分语义模型为成功和失败场景
- 要求服务消费者检查回复有效负载,并显式区分应用级别的成功和失败场景。
图2给出解决方案需要以下前提:
本文所描述的异常管理方法,应用面向服务架构的原则为有效管理SOA实现中的异常提供了基础。它介绍了使用特殊化的基础设施来构建灵活、可扩展的异常处理解决方案。它通过提供整个企业统一的异常处理方法改善实现的一致性。通过提供横跨多个服务消费者和提供者之间的单一、统一的日志,它同样也简化了维护并改善了可测试性。
Boris Lublinsky在软件工程和技术架构方面拥有超过25年的经验。最近几年,他关注企业架构,SOA和过程管理。在他的整个职业生涯中,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。目前Lublinsky博士为大型保险公司工作,他的职责包括开发和维护SOA策略和框架。通过blublinsky@hotmail.com可以联系他。
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于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。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
没有回复
关注此讨论 回复