应用云平台的可用性——从新浪SAE看云平台设计
云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。
该内容已经被标记书签!
标记书签错误,请重试!
作者 Mirko Stocker 译者 杨晨 发布于 2009年8月29日
Antonio Canginano的最新Ruby基准测试表明,IronRuby的性能优于Ruby 1.8.6。Luis Lavena对此不以为然,他认为Antonio只是“将IronRuby的性能和一个在官方一键式安装中使用的那个12岁的老旧编译器(VC6)进行对 比”。Luis的工作即是开发一键式安装器的替代品,这个替代品的性能将会像在第二次基准测试中那么优秀。
InfoQ采访了Luis Lavena以期了解更多信息,而我们最想知道的,是Ruby 1.8.6和1.9的新Windows安装器。
虽然Ruby社区感到非常有用,但是事实上肯定有比写一个安装器更加激动的事情吧?
是的,事实上有更多比构建和重新构建Ruby以及其依赖直到正常运行更加有意思的事情可以做。但是这件事情对我来说如芒在背,不做不行。
个人来说,在开发时,我在Windows下将Ruby作为连接C、C++甚至是汇编语言的连接工具和脚本工具。Ruby在关注和自动化某些任务方面帮了我大忙。
我认为有必要分享我这么多年来在这个开放和包容的社区所获得的知识和经验。
新的安装器和旧有的有何不同呢?
新的安装器关注于正确地安装使用Ruby,以及更加紧密方便地和Windows整合在一起。
另一个重点是它减少了Linux和Windows用户之间的隔阂。大多数Windows用户缺乏在Windows下构建程序的知识,他们只能等到gem的作者或者其他人发布Windows的原生gem。
现在有个大麻烦了:因为Ruby创建扩展以及它与编辑器集成的方式迫使其不得不使用这个有12年历史的老编译器(Visual C 6.0)。
这个安装器将是全新的,而不是由一些Ruby核心开发者发布的程序组成,因此我们能够更加深入地调整配置和选择捆绑的插件等。
并不仅仅是这些,我们将会替代一些依赖程序,例如使用纯净的ruby版readline(叫做rb)来替代GNU的Readline。
为了加快发布周期,新版的安装器不会包含任何第三方库,而这些第三方库在加入到安全器之前通常都会耗费大量的时间来检查和维护。
用户能够得到一个包含Ruby、RubyGems和文档的最小安装器,而且用户可以安装所需的gems,而不用担心大量冗余的下载。
为什么创建一个全新的安装器是如此重要呢?你为啥不能仅仅重编译一下Ruby然后进行处理呢?
也许听起来简单,但是我们并不是简单地打包Ruby然后发布。
Ruby依赖于其他的包,例如ZLib、OpenSSL、Readline和其他需要外部库的包。有一些外部库很难在Windows下找到预编译版本。
当这些程序不存在的时候,我们就不得不自己编译。一个典型的例子就是我们使用的这个还不算太旧的OpenSSL版本,因为它在这个平台下没有最新的版本,并且从源代码编译是一个非常复杂的任务。
有些时候我们不仅仅只是处理Ruby,而且还要升级和调整整个Ruby系统的包和扩展。
如果我们已经安装了一个新Ruby Windows版本,那么会对那些原生扩展的Gems有什么影响呢?我能在新版的RubyInstaller上使用为旧版Ruby编译的Gems和原生扩展吗?
当你试图这样做的时候,你会发现有时候强制使一个gem工作在这个版本的Ruby上是行不通的。这就是RubyInstaller这些年一直在开发的原因之一。
对于那些熟悉C语言的开发者来说,Ruby是全内建的,他们知道当他们编译C程序的时候,他们需要连接到一个叫做CRT的C Runtime库,这个库提供了一些底层服务,例如内存分配、字符串处理和IO等。
Windows下到GCC和VC6编译器都是连接到同一个CRT(MSVCRT.DLL)(更多信息请参见Luis的博客)。
明白这个的话,问题的一部分就解决了,另外一部分是Ruby代码。
现在的情况是,当编译Ruby的时候,它在内部和一些配置文件中保存了编译器的选项,所以,当使用VC6构建的时候,它定义宏RUBY_PLATFORM为“mswin32”,当使用GCC的时候定义为“mingw32”。
理论上,两种都是二进制兼容的,但是现在需要明白的是,使用某些库的Ruby代码是如何和这些库交互的。有些开发者在他们的库中包含了平台相关的代码,并且决定这个库是否工作在Windows下,他们检查RUBY_PLATFORM,看看是否是“mswin”,“mswin32”或者是比较少见的“win”。
这些库的RUBY_PLATFORM的“mingw32”部分都有问题, 这些代码会让这些库认为你的运行平台是Linux,结果当然是失败的。
所以现在是让这些开发者改正这些坏习惯的时候了。
我曾经建议使用RUBY_PLATFORM =~ /mingw|mswin/这种形式来保护Windows代码。
你决定好了大概什么时候发布第一版吗?
这几个目标已经达到:
- 自动获取Ruby 1.8.6以及1.9.1。
- 能够将这些程序绑定到安装器中。
- 简化使用开发工具包的用户的开发工作。
- 使用rake-compiler,使gem作者更加容易地发布Windows版本。
我已经在项目的TODO上写出了一些大致的任务。我将会重新安排它们,然后在RubyInstaller的Wiki上写出来。
一旦我们完成了文档和安装器的大部分任务,我相信我们就要准备发布第一个稳定版了。
更多关于RubyInstaller的信息以及preview 1版可以在Luis的博客上找到。RubyInstaller的代码库位于GitHub。
查看英文原文:New Installer Provides a Much Faster Ruby for 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。
本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。
随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。
随着互联网应用的发展,Java分布式远程服务技术受到越来越多的关注,本文将对各种相关实现以示例的形式逐一介绍,并总结其中的优缺点,使读者能够在技术选型时有所准备。这是文章的下篇。
没有回复
关注此讨论 回复