可伸缩性最佳实践:来自eBay的经验

在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策,身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户,每天的页面浏览量超过10亿,系统中的数据量要用皮字节(1015或250)来计算——可伸缩性是生死交关的问题。

在一个可伸缩的架构中,资源的消耗应该随负载线性(或更佳)上升,负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的资源消 耗,可伸缩性则是衡量当工作单元的数量或尺寸增加时,资源消耗的变化情况。换句话说,可伸缩性是整个价格-性能曲线的形状,而不是曲线上某一点的取值。

可伸缩性有很多侧面——事务的方面、运营的方面、还有开发的方面。我们在改善一个Web系统的事务吞吐量的过程中学到了很多经验,本文总结了其中若 干关键的最佳实践。可能很多最佳实践你会觉得似曾相识,也可能有素未谋面的。这些都是开发和运营eBay网站的众人的集体经验结晶。

基于消息的分布式架构

美国计算机科学家,LaTex的作者Leslie Lamport说:“分布式系统就是这样一个系统,系统中一个你甚至都不知道的计算机出了故障,却可能导致你自己的计算机不可用。”一语道破了开发分布式系统的玄机,那就是它的复杂与不可控。所以Martin Fowler强调:分布式调用的第一原则就是不要分布式。这句话看似颇具哲理,然而就企业应用系统而言,只要整个系统在不停地演化,并有多个子系统共同存在时,这条原则就会被迫打破。盖因为在当今的企业应用系统中,很难寻找到完全不需要分布式调用的场景。Martin Fowler提出的这条原则,一方面是希望设计者能够审慎地对待分布式调用,另一方面却也是分布式系统自身存在的缺陷所致。无论是CORBA,还是EJB 2;无论是RPC平台,还是Web Service,都因为驻留在不同进程空间的分布式组件,而引入额外的复杂度,并可能对系统的效率、可靠性、可预测性等诸多方面带来负面的影响。

HTML的15个最佳实践

HTML已经走过了近20的发展历程。从HTML4到XHTML,再到最近十分火热的HTML5,它几乎见证了整个互联网的发展。但是,即便到现在,有很多基础实践依然需要开发者高度注意。下面,向大家介绍这些应该遵循的开发实践。

Node.js入门

关于

本书致力于教会你如何用Node.js来开发应用,过程中会传授你所有所需的“高级”JavaScript知识。本书绝不是一本“Hello World”的教程。

敏捷体验设计师应该具备的12项技能

敏捷 UX和传统瀑布式 UX不同之处在于它与交付过程的强关联关系,对于人的要求也更加全面。这意味着你将改变你曾经绝大部分时间只在角落里做一件事的习惯,以更加开放的姿态融入合作。本文将从技能交付出发,在策略、设计和研究三个层次阐明敏捷体验设计师应该掌握的12种技能

开发者拒绝写技术博客的常见理由

常有人跟我讨论我在blog上发布过的博文,有时候他们还希望我来撰写某些文章。在讨论的过程中,我几乎总是会问为什么你自己不开一个博客,或者为其他人的博客做些贡献呢?当我在引导他们为技术类的主题写一些博文时,极少有人对此感兴趣。

我的母亲总是告诉我(以及她的学生们)每个人都有自己的故事。她说,写作可能是一种你不曾想到过的非常有益处的行为,直到你写的东西获得了其他人的喜爱和赞同。就像软件开发者为他们的用户开发软件一样,作家为他们的读者而写作。从来都没有什么论断说技术人员无法成为激励他人学习并乐于同他人分享知识的优秀作者。

我写这篇博文的目的就是想鼓励广大的技术人员去享受写作、高效的写作,并能够从中得到乐趣。我将翻出一些我曾经最常见到的关于为什么技术人员不愿意写博客的理由。

Javascript编程风格

所谓”编程风格”(programming style),指的是编写代码的样式规则。不同的程序员,往往有不同的编程风格。

有人说,编译器的规范叫做”语法规则”(grammar),这是程序员必须遵守的;而编译器忽略的部分,就叫”编程风格”(programming style),这是程序员可以自由选择的。这种说法不完全正确,程序员固然可以自由选择编程风格,但是好的编程风格有助于写出质量更高、错误更少、更易于维护的程序。

所以,有一点应该明确,“编程风格”的选择不应该基于个人爱好、熟悉程度、打字工作量等因素,而要考虑如何尽量使代码清晰易读、减少出错。你选择的,不是你喜欢的风格,而是一种能够清晰表达你的意图的风格。这一点,对于Javascript这种语法自由度很高、设计不完全成熟的语言尤其重要。

解析应用程序UI设计的15项黄金法则

好友曾向我展示了最新的iPhone和iPad版《极品飞车》。游戏的渲染效果令人印象深刻,是款蓄势待发的优秀游戏。但是,游戏的前端是典型的 UI设计偏差案例。但界面中有大量的属性数据等内容,它在玩家没有时间做决定时提供了过多的内容。这些内容能够显著改变他们的游戏体验,但却在玩家往往感 受不到变化的时候呈现。

这促使我开始思考UI设计的黄金法则。以下是我认为创造最佳体验应当使用的UI设计方法。坦诚地说,这些规则只是通用做法,并不完全适用于你的UI设计中的所有情况。

Javascript的this用法

this是Javascript语言的一个关键字。

它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,

  
function test(){
  this.x = 1;
}

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

下面分四种情况,详细讨论this的用法。

5 款基于Web浏览器的建模工具

本文介绍5款可以直接在浏览器中使用的很棒的建模工具,无需再单独安装软件。

源代码管理的十条戒律

源代码管理是我们工作中很重的一部分,是很多开发组的生命。但是我们往往在这方面犯错,不理解很多基本的,核心的版本控制的概念。

我在这里列出了十条建议,可以说是戒律。虽然我会用 Subversion 和 .NET 来做示例,但这些戒律和你用的编程语言还有源码管理工具无关。

Javascript的10个设计缺陷

Javascript的设计不够严谨,有很多失误。本文前半部分就谈为什么会这样,后半部分将列举Javascript的10个设计缺陷。

无觅相关文章插件,快速提升流量