- 博客(45)
- 收藏
- 关注
原创 互联网巨头为什么会“宕机”(二)
二、严防死守精益求精 回过头来说这个“局部故障由于种种原因,影响范围越来越大,最终导致总体失效”,是系统大规模故障的一种典型模式,术语称为“连锁失效”(cascading failure,有时也叫cascade failure,一般翻译成连锁故障,但我觉得叫做连锁失效更准确些)。 话说连锁失效的研究由来已久,最早应该是从大规模电网全面故障的分析开始的,时间基本上是上世纪九...
2013-09-04 03:03:24
283
原创 互联网巨头为什么会“宕机” ——超大规模分布式系统总体失效原因探析
说明:本文是作者以往跟踪部分大型互联网服务提供商(Google、Amazon、Facebook、MS等)出现的俗称大规模宕机(本文所称总体失效)案例进行的原因分析,结合分布式系统设计方面的一些经验所做的粗浅总结。因google最新一次宕机而参与微博话题的相关讨论,将以前的一些思路和最新的学习整理出来,算是这个领域的一个普及贴吧,供批判之用。 一、大型分布式系统为什么...
2013-08-29 10:11:21
543
原创 做事三部曲
做事三部曲: 我们要什么样的目标我们为达到这个目标要走什么样的路这条路我们怎么走这三个问题有了基本答案,就可以开干了。想要明确的,精确的,不可以驳倒的答案?那还是不要干了...
2013-08-23 14:11:53
218
大型分布式系统更容易总体宕机?
今天在微博上(http://e.weibo.com/1919897211/A5MFWtQ8S)参与讨论【分布式为何解决不了宕机问题?】,说到了我以往提出的一些观点,被“求链接”,结果愣住了。想来也是,我一贯不把日常工作中的东西发出来的做法,减少了很多沟通机会。虽说当时立刻发可能不太合适,但过了两年了,随便找个八点二十发一下应该问题不大,更何况可以裁减,把敏感信息都删除就行了。 当...
2013-08-21 19:04:59
175
原创 Scala概述(六)合成(3.总结)
面向服务的组件模型(Service-Oriented Component Model)在Scala中,类的抽象与合成机制可以被视作面向服务的组件模型的基础。软件组件是一个个有明确定义的,提供特定服务的计算单元。一般而言,一个软件组件并不是完全自含的,也就是说它的实现依赖于其他一系列提供相应服务的组件。在Scala中,软件组件即对应着类和trait,类和trait的具体成员相当于他们获得的服...
2012-07-15 02:00:01
115
原创 创新=挂账
创新=挂账,貌似有点哗众取宠的味道?对于不太了解会计的人来说,挂账的概念不一定很明确。我这里也不多做解释,只想说明一件事,那就是这两个词都非动宾式,这是问题的关键。很多人看到创新(当然是中文),误以为这是个动宾结构的概念,也就是“创出新来”。其实恰恰相反,创新是一种结果状态,也就是你为了做一件事情,没找到可以复制的、以往存在过的方法,结果只好自己去做,做出来的东西是前人没有实践过的,结果就...
2012-06-11 02:32:47
117
原创 学会表达
不同的表达方式,决定人、人们的命运。 猴子的表达方式:我就在边上看着,我就是不说。要说就得一鼓作气让我当上大王,我当了之后再按我的想法改变这一切。 狼的表达方式:对月长鸣。...
2012-04-26 20:31:29
101
原创 如何才能做到创新(续)
所谓“真正知道用户需要什么”,到底怎么体现出来呢?实际上有一个简单的判断标准(当然也是事后诸葛亮),那就是:不需要对用户行为进行统计分析,而做到了与根据统计分析结果得出的结论相一致,简单地说,就是“暗合”。...
2012-03-21 16:06:19
126
原创 福特找马
如果我当年去问顾客他们想要什么,他们肯定会告诉我:想要一匹更快的马. If I had asked people what they wanted, they would have said faster horses. 我把这个故事就叫做“福特找马”吧。 据相当详细的考证,http://blogs.hbr.org/cs/2011/08/henry_ford_never_s...
2012-02-12 23:08:40
208
写过东西的人都知道,内容决定形式啊
真有那么多人不懂文字的规律吗——很多人用韩寒这次自我辩解的文笔来和他原来的文章作对比,结果更加相信了代笔论。这样的想法太业余了,最简单而又最根本的因素:这次的论战涉及他自己,因此利益攸关,务求逻辑上严禁,避免被挑出更多的刺,而写那些风凉话政治文章时完全不需要,这就是差异所在。 ...
2012-01-26 22:07:30
110
到底如何才能做到创新?
关于如何才能做到创新,或者如何去创新,其实有一个很简单的答案:你知道用户真正想要什么,或者说你真正知道用户想要什么,那么你就必然在创新,你所做的事情就必然是创新。...
2012-01-22 23:15:14
197
著名的滥竽充数的故事(二)
滥竽充数的故事告诉每一个中国人,要么你在一个集体中混日子,显不出你来,但也不会出问题。要么你一个人单打独斗,所谓宠辱集于一身啊。 有没有想到,第三种选择是什么呢? 所谓中国人的一条龙还是一条虫的矛盾,盖源于此吧,贻害千年的根源找到了...
2012-01-19 14:39:02
339
原创 著名的滥竽充数故事
【原文·出处】 齐宣王使人吹竽,必三百人。南郭处士请为王吹竽,宣王说之。廪食以数百人。宣王死,湣王立,好一一听之,处士逃。 ——《韩非子·内储说上》节选 【译文·故事】 齐宣王让人吹竽,一定要三百人一起吹。南郭处士请求给宣王吹竽,宣王很高兴。官府给他的待遇和...
2012-01-07 17:46:02
247
今天才开始用ipod
收拾东西的时候翻出了一个ipod,好几年前的,当时觉得不好用,就扔在那里了。 今天翻出来,上网搜了一下,才知道得用itunes才能往里复制音乐。 搞好后发现怎么也不能在菜单中挑选,也没有音量调整功能。胡乱按了一通才发现按钮所在的圈圈支持“多点触控”(不知道什么原理,但感觉和电容屏不是一种,所以加个引号吧) 真是落伍啊,再次产生这种感觉:估计我在消费者产品这个领域不会有什么机...
2010-09-18 13:44:10
119
捐款庆祝eclipse helios发布
值此 eclipse helios发布之际,捐款35美元,成为 eclipse friends。想来这么多年使用开源软件,尚未有任何回报,不能贡献代码,就贡献一点其他的吧。 ...
2010-06-23 19:22:49
122
大型企业信息系统架构设计——完整图文整理稿
前面单独发过PPT,又发过一两次文字整理稿,感觉还是没有完整体现演讲的作用。终于想出了这个办法,一页PPT加上对应演讲的文字整理,应该能起到一点演示的效果。 再次感谢博文视点的小卢及其他编辑为整理这个稿子所付出的辛勤劳动,感谢周筠老师主动安排人来做这件枯燥的工作。 前面是发到博客频道,发现原来看过论坛里面帖子的人找不到,还是重新发到论坛频道,和原帖保持继承性吧。 ...
2010-06-07 12:39:59
798
大型企业信息系统的架构设计(二)——架构设计方法论简介
4. 架构设计方法论概览下面我简单介绍一下信息系统架构设计的方法论,为什么要介绍方法论呢,这里就要进入到架构设计领域的特点了。刚才我们说到了,要做企业信息系统的架构设计,最关键是要理解企业的内部环境和外部环境,以及企业的目标。但是从另一方面说,架构设计这个领域,在这二三十年内,越来越成为一个专业的领域。也就是说,已经有很多人做了大量的工作,构建出了一些架构设计...
2010-03-12 11:41:48
595
大型企业信息系统的架构设计(一)——企业信息系统特点
这是前面发布过的关于《大型企业信息系统架构设计》的演讲的文字整理,这次演讲内容实际上很多,单纯看PPT难以全部了解,而我又没有时间写很多篇博客文章去系统性地介绍我在这方面的观点。好在CSDN对此次讲课内容有录音,我就此想出了一个偷懒的办法:把我的演讲内容直接整理成文字,除了方便阅读而做一些字面上的调整之外,力求保持原样,因此有些地方看着并不那么顺畅...
2010-03-11 00:26:58
543
大型企业信息系统的架构设计-SD2C-2009
我在CSDN SD2C 2009上的讲演稿,讲的时候标题页上一点自我介绍都没有,也没留联系地址,可能是习惯了,想不起来,发出来特意加上了。 里面提到的的网站还没建好,我会尽量避免像我的翻译工作一样遥遥无期,敬请期待。 看来看去没有特别合适的频道,还是发在企业应用这里合适点...
2009-10-25 19:04:02
173
Scala概述(六)合成(2)
成员(Membership)如前所示,Iter类从StringIterator和RichIterator同时继承了类成员(members)。简单而言,一个类从以混入合成方式继承Cn with … with C1,将会继承其中所有类的成员,同时还可以自定义新的成员。由于Scala保留了Java和C#的静态重载机制,因此可能从父类继承同名的方法...
2009-08-02 00:46:29
111
原创 关于Scala的“猛料”
Groovy的发明者之一,James Strachan,这两天在他的博客上说:如果当年我看到了《programming scala》这本书,恐怕真的不会去发明Groovy了。 I can honestly say if someone had shown me the Programming Scala book by by Martin Odersky, Lex Spoon &a...
2009-07-07 15:40:54
113
Scala概述(六)合成
6. 合成(composition)解释了Scala的类型抽象体系之后,本节主要描述类的合成方式(译注:class composition似乎也没有固定的译法,此处翻译成“合成”)。Scala的基于混入的类合成(mixin class composition)体系是Brach[6]中的面向对象的线性混入合成(linear mixin compostion)和[14、25]中提出...
2009-06-28 19:49:09
126
原创 终于聊出了我的两套”名言“
今天(严格说是昨天)晚上在与孟岩、草原、小宋(兴烈)及左猴子的狂喷中,终于聊到我的大量“名言”中的两套:1.一流企业创造语义,二流企业实现语义,三流企业转换语义也许还有四流、五流?不过无所谓了,句式上就是类比”一流企业做标准、二流企业做技术、三流企业做产品“之类的说法,但内容并没有任何对应关系。 其实也不仅限于企业,大到国家、社会,小到个人都是如此。至于这其中的语义的概念,当然还是...
2009-05-04 00:45:40
95
Scala概述(五)抽象(3)
5.3 用抽象类型建立泛型模型(Modeling Generics with Abstract Types)一种语言里有两套抽象语法体系肯定会让人产生对这种语言复杂性的疑问:能不能就用一种形式化体系来实现?本节当中我们将会展示,函数式的类型抽象机制(也就是泛型)实际上可以通过面向对象的类型抽象机制(也就是抽象类型)来表达。这种表达方式的思路如下所述:假定一个参数化类型C有一个类型参数t(可...
2009-03-13 20:24:39
110
Scala概述(五)抽象(2.3)
族多态和self类型(Family polymorphism and self types.)Scala的抽象类型概念非常适合于描述相互之间协变的一族(families)类型,这种概念称作族多态。例如:考虑发布/订阅模式,它有两个主要类型:subjects和observers。Subjects定义了subscribe方法,用于给observers进行注册,同时还有一个publish方法,用于通知所...
2008-12-31 17:04:43
93
Scala概述(五)抽象(2.1、2.2)
路径依赖类型(Path-dependent types) 不知道AbsCell绑定的类型情况下,也可以对其进行访问。下面这段代码将一个cell的值恢复成为其初始值(init),而无需关心cell值的类型是什么。def reset(c: AbsCell): unit = c.set(c.init)为什么可以这样做呢?因为c.init的类型是c.T,而c.set是c.T=>unit类型的函数...
2008-12-22 22:33:24
124
Scala概述(五)抽象(2)
5.2 抽象成员(Abstraction Members)在Scala中,面向对象的抽象方式可以与函数式抽象起到同样的作用。例如:下例是一个以OO抽象方式定义的Cell类型。abstract class AbsCell {type Tval init: Tprivate var value: T = initdef get: T = valuedef set(x: T): un...
2008-12-22 22:00:05
91
原创 参加CSDN SD2.0大会
头一次参加这种东东,最大的收获就是认识了很多、很多人,总得有十个八个吧 ——不比别人啊,我交往的人少,一下子认识十个八个,顶我好几年增加的交往数量了。十年没见的老朋友也见了两个,听说我没怎么变样,高兴啊,就爱听这个 聊天还是老几位,一如既往的狂喷几个小时,一次凌晨两点,一次三点。继续被孟岩引导空谈我爱大清国自然是免不了的,除此之外,我正式展开了语义学解释一切的套路,得到的反应似乎主要有三种...
2008-12-06 19:28:25
155
Scala概述(五)抽象(1.3、1.4)
二元操作和参数下界(Binary methods and lower bounds)迄今为止,我们一直将协变性与不可变数据结构联系在一起,然而由于二元操作(Binary methods,就是指一个对象的方法,其参数类型也是这个对象类型,例如:x+y这种——译注)的存在,这种做法并不完全正确。例如,为GenList类增加一个prepend(前追加)方法,最自然的做法是将其定义成为接收一个相应的lis...
2008-11-04 22:48:32
105
Scala概述(五)抽象(1.1、1.2)
参数限定(Parameter bounds)考虑这样一个方法:updateMax,他将一个cell的值设置为其当前值与一个给定值之间较大的那个。我们希望这个函数能够作用于所有的cell类型,只要其值类型能够按照一个特征(trait)Ordered定义的“<”操作符进行比较。目前假定这个特征定义如下:(更精确的定义在Scala标准类库中)trait Ordered[T] {def <...
2008-11-02 11:52:34
87
Scala概述(五)抽象(1)
5. 抽象(Abstraction)在组件系统中,一个重要的议题就是如何抽象所需的组件。编程语言当中有两种最主要的抽象方式:参数化和抽象成员。前一种主要是函数式抽象方式,而后一种主要是面向对象的方式。传统意义上,Java对值提供函数式抽象,而对操作提供面向对象的抽象。Java 5.0所支持的泛型,对类型也提供了一定的函数式抽象。Scala对于值和类型提供上述两者抽象模式的统一支持,...
2008-10-30 23:02:33
106
Scala概述(四)操作也是对象(4、5)
4.4. 序列(Sequences)高阶函数的使用是序列处理时的一个普遍特点。Scala类库定义了几种不同类型的序列:数组(arrays)、列表(lists)、流(streams)和迭代器(iterators)。所有的序列都继承自特征(trait):Scala.Seq;从而都定义了一套方法使得相应处理更简介、高效。例如:map方法将一个函数应用于一个序列的所有元素,产生一个以相应结果为元素的序...
2008-10-21 21:52:58
94
Scala概述(四)操作也是对象(2、3)
4.2. 函数也是对象(Functions are Objects)既然方法是值,值是对象,方法当然也就是对象。实际上,函数类型和函数值(注意:指函数本身作为值——译注)只不过是相应的类及其实例的语法糖衣。函数类型S=>T等价于参数化类型scala.Function1[S, T],这个类型定义在Scala标准类库中:package scalaabstract class Func...
2008-10-06 13:12:45
126
Scala概述(四)操作也是对象(1)
4. 操作也是对象(Operations Are Objects)Scala是一种函数式编程语言,也就是说每一个函数都是一个值。Scala有很简洁的语法用于定义匿名和curry化函数(curried function,functional programming的概念之一,名字源于Haskell Curry,Haskell的发明者,一般都不翻译。本文后面并没有针对这个概念的解释和实现...
2008-09-28 22:40:34
110
Scala概述(三)统一的对象模型(3)
3.3. 变量和属性(Variables and Properties)如果所有操作都是方法调用,那么变量引用(dereferencing)和赋值语句呢?实际上,如果这两种操作是针对类成员变量,那么也是被解释为方法调用的。对于所有类成员变量x:T,Scala这样定义其getter和setter:def x:Tdef x_=(new val:T):unit这些方法引用和更新一个可修改(...
2008-09-26 12:51:06
98
Scala概述(三)统一的对象模型(2)续
某些Scala的操作符并不总对所有参数求值,例如标准布尔操作符&&和||,这种操作符也可以是方法调用,因为Scala的参数是允许传名的。下面是一个Bool类,模拟系统内建的布尔类型。abstract class Bool { def && (x: => Bool): Bool def || (x: => Bool): Bool}在这个类中,...
2008-09-25 00:04:26
81
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人