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

作者 Werner Schuster 译者 马家宽 发布于 2008年12月1日
Gartner的分析师Mark Drivezr在近日的一篇blog中提到近来人们对于Smalltalk日益关注。这一现象背后的原因很多,其中的一个重要的因素就是诸如Ruby、Python这些动态语言的流行。Smalltalk早在上世纪七八十年代就已经开始流行,并对于Ruby 这些后来的动态语言产生了深远的影响。许多Smalltalk虚拟机都已经历经时间的考验,非常成熟。
Smalltalk之所以引人关注还得归功于基于Smalltalk的web框架——Seaside,而Seaside之于Smalltalk正如Ruby on Rails之于Ruby。Seaside已经推出了一段时间,也引起了广泛的关注。Avi Bryant正是基于Seaside开发了在线数据库DabbleDB(InfoQ曾做过Avi Bryant的访谈,其中涉及了DabbleDB如何利用Smalltalk的image概念来做持久化,以及Squeak的伸缩性问题)。
虽然Seaside是构建于Squeak之上,但近来还是有很多其它Smalltalk厂商也开始支持Seaside本身。Cincom Smalltalk不仅支持Seaside,并为其提供了一个浏览器中的GUI工具WebVelocity(您可以观看短版本的介绍,也可以在Google Video观看长版本的演示)。提供持久化和集群特性的Smalltalk分支GemStone/S,其出品厂商GemStone同样支持Seaside,比如他们的GLASS产品(这一产品也有免费版)。
Smalltalk曾经对Ruby产生过深远的影响,而且还将持续的影响着ruby的发展。例如Rubinius已经使用Squeak Smalltalk作为实现其虚拟机的参考模型,而GemStone的Maglev更是直接构建于Smalltalk虚拟机之上。
虽然Ruby的语法比起Smalltalk要复杂的多,但还是可以看出许多Smalltalk的影响。例如Named parameters(对应于Smalltalk中的“keyword messages”),在Ruby中并不直接提供,需要使用literal hash来模仿。而literal hash这一特性在Smalltalk中早已存在了。
Ruby:
def foo(arghash) # ... do something with arguments 42 end foo( :name => "foo", :size => 42)
注意:Ruby 1.9提供了更为简洁的literal hash语法,可以减少一些不需要的字符。
而使用Smalltalk的keyword message机制来做(注意方法名由所有keyword argument组成):
:name name :size size "this is a comment ... do something with arguments" ^42. receiver name: 'foo' size: 42.
诸如Objective-C这样的语言也有Smalltalk风格的keyword message特性。
在最近加入新的“stabby lambda”语法(-> {})后,Ruby中Lambdas、Procs和Blocks之间区分变得更加复杂。Smalltalk规避了这一点。在Smalltalk中,创建block的方法只有一种:像[:argument| ^42]这样,接收一个参数,并且返回42。
Smalltalk和Ruby另外一个区别在于可用的工具和IDE。相对于Ruby IDE的短暂历史,Smalltalk则很早就被紧密的集成到了IDE中(当然,诸如GemStone/S和GNU Smalltalk这样的Smalltalk分支并没有特定的IDE)。Ruby IDE与Smalltalk IDE很大区别在于:所有的Ruby IDE都是用非Ruby语言编写的。例如Aptana (RDT)、3rd Rail (DLTK)、Netbeans和IntelliJ是由Java编写,SapphireSteel的Ruby In Steel则是基于Visual Studio。唯一的特例是FreeRIDE,虽然它是基于Ruby的,但其开发工作似乎已经停滞。
Ruby IDEs提供了静态分析,类型推断,以及其它一些用于分析和修改Ruby代码的逻辑——但实现这些逻辑的代码都是用Java或C#编写,并且依赖于JRuby或RubyInSteel的抽象语法树(AST)。这一情况随着最近Ryan Davis的ruby_parser的出现而改观。ruby_parser可以返回Ruby代码的AST(使用UnifiedRuby格式),并且包含完整的注释和代码行。
Smalltalk的IDE则采用Smalltalk编写,同时提供了静态分析工具和重构工具(史上的第一个重构工具其实正是Smalltalk的Refactoring Browser)。
为了了解从脚本语言(Perl)转向Smalltalk的感受,我们采访了Randal L. Schwartz。Randal是Perl领域多本畅销书和专栏的作者。最近他开始积极地使用并推广Smalltalk,提出了“Smalltalk时代”的口号。他同时还是Squeak团队的领导之一。
InfoQ:Seaside使用continuation机制来维护状态,这一做法已广为人知。Avi Bryant最近提到他正在研发的产品DabbleDB已经移除了continuation的使用,因为AJAX提供了另一种应用模型。您对此有何看法?Seaside的优势体现在哪些方面?
continuation让我可以创建抽象控制流,和创建layout view的方式类似。我可以编写一个诸如“显示此表单直到验证结束”的抽象,continuation库就可以在页面尚未完整时,返回web表单直至验证结束,看起来就像是在一次调用中显式的包含了该规则一样。如果没有continuation机制,我就得依仗一些顶级的recognizer来表达 “ok,这是现在需要的对表单输入的response”,我会因此失去本地状态。
InfoQ:你在你的Smalltalk和Seaside应用中使用了什么方法来做持久化?你在使用关系数据库吗?Smalltalk的ORM库情况如何?
对于遗留接口,Glorp是对象-关系映射的不二选择。Glorp正在开发当中,目标是为Glorp也增加一个“Active-Record”风格的层。
对于新应用来说,我强烈推荐GemStone的产品,该产品将虚拟机完全放在了一个可持久化的环境中。对象可以自然的持久化,因而不需要再被拆成SQL来与传统数据库交互。
InfoQ:你使用哪个版本的Smalltalk——你用过那些版本?它们都差不多——还是某些更适合特定的问题领域?
我是Squeak领导小组的成员,并且从最初发布到现在一直在密切关注它。只是最近才开始尝试Cincom VisualWorks,所以还在边用边学。我认为GNU Smalltalk很有意思,但作为Squeak的贡献者,因为许可证问题我看不到源码。(GPL代码不能被导入到使用MIT许可的发布版中)。
InfoQ:Ruby 1.9加入了Fiber——一种进行系统性协同程序的机制。一些Smalltalk版本也使用了Fiber,而不使用重型的内核线程。对此你怎么看?对于那些只有用户空间线程的Smalltalk版本来说,是否有使用内核线程的考虑?
我个人对线程没有什么好印象。在UNIX中,线程被拼写为“f o r k”,这是有原因的。我认为共享应该是选择性的加入,而不是选择性的退出。而线程的默认机制恰恰是错误的。
InfoQ:你已经积极推动Smalltalk一段时间了。关于Smalltalk,你最常遇到的质疑是什么?请列举两个。
“Smalltalk,这语言不是已经退休了吗?”当然不是!
“如果用Smalltalk的话,还能用我最喜欢的编辑器吗?”基本上不可以,而且我觉得当你意识到你只是在编辑5到10行代码时,你不会对你最喜欢的编辑器有多少留恋,而是会很想要一个对于当前环境非常敏感的编辑器。内建的编辑器可以很好满足这一点。
要想在像Eclipse这样的IDE下来完成Smalltalk的编程任务,可以使用STDT。它基于Eclipse并将Smalltalk的代码对应到文件和资源。播客“Industry Misinterpretation”曾对STDT的开发者之一进行过一次很长时间的访谈。 此外,Eclipse和Smalltalk本就应该紧密结合,因为Rick DeNatale表示Eclipse实际上起源于IBM在 Smalltalk方面的投入。
InfoQ:用最简要的语言来描述一下Smalltalk吧!比如你会如何跟perl社区的朋友介绍它?
Smalltalk——我可以在20分钟内给你讲完所有的语法。它是完全面向对象的,debugger允许“现场”调试,甚至是在一个web环境中。Smalltalk包含内建的源代码管理,而且可以直接与系统中的任何库交互,或通过 FFI进行交互。Smalltalk可以与文件、设备和socket交互,其能力丝毫不逊于任何Perl程序。而且,Smalltalk已经历经长时间的检验。你与系统交互的任何一部分都是开放的,可编辑的,可订制的,包括你的开发工具在内。
InfoQ:现在Squeak背后的团队组成是什么样的?开发工作是如何推进的?
Squeak领导小组(我是其中一员)代表整个社区负责这个项目。我们还有Web小组、发布小组、新闻小组等团队来处理各方面的事务。(http://www.squeak.org/Community/Teams/)
InfoQ:你认为Perl中的哪些特性或语言概念是你非常喜欢,但在Smalltalk中无法找到的?
我仍然在使用Perl来编写命令行脚本。Smalltalk可并不是编写这些小程序的好选择:)
InfoQ:你对Ruby的Open Classe(Monkey Patching)有何看法?你使用过Squeak的Trait吗?
Ruby增加了这个包以后,就可以像seaside这样能够让每个对象在页面上“渲染自己”,并且提供类路由机制来做出合适的选择,非常不错。如果没有这种路由,你就得在用户代码级别来建立类似功能的类,这肯定是不合适的。
InfoQ:Ruby最近推出了很多新的实现—— Smalltalk已经有了来自不同厂商的各种运行时。你觉得这些各种各样的实现是问题还是财富?
我现在使用的两个主要(Squeak和VisualWorks)的Smalltalk实际上来自于共同的起源(最初的Xerox Parc image),所以差异性不是个大问题。不过像Seaside这样的项目确实让我们确信,实际上商们在产品特性方面走得很近,这是件好事。
更多关于Randal对Smalltalk的评论信息,可以参见他在Industry Misinterpretation的访谈podcast,他还共同主持FLOSS每周podcast。其中有一集可能对Smalltalk的爱好者来说尤为有趣:FLOSS 29:Dan Ingalls访谈。在1970年代早期,Dan根据Alan Kay制定的语言规约编写了第一个Smalltalk运行时,并随后在PARC编写了很多的Smalltalk版本,包括Squeak。此外,Randal还撰写关于Smalltalk的blog。
想要了解关于Smalltalk的更多信息以及Smalltalk开发者如何进行软件开发,可以关注Cincom公司的James Robertson,他撰写关于Smalltalk的blog,此外每天发布一部screencast,每周发布一部podcast。
GemStone有一个专注于GLASS的blog。GLASS是GemStone/Linux/Apache/Smalltalk/Seaside软件栈的缩写。
最后,你可以在网上获得Smalltalk的免费图书。
阅读英文原文:Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk。
志愿参与InfoQ中文站内容建设,请邮件至editors@cn.infoq.com。也欢迎大家到InfoQ中文站用户讨论组参与我们的线上讨论。
本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于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。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
7 条回复
关注此讨论 回复