August 2008 Archives

看片会与 Sun 用户组活动归来

| 15 Comments

上午先在公司解决了一下 Nginx 上跑 Awststs 的问题。然后出门了。计划中我的分享从 3 点开始,先绕道去看一下王晓峰导的 DV 看片会。赶到凡人咖啡馆,都已经没位置了,只好在前面水管上坐着。不得不说,这个咖啡馆在这个下午成了全杭州小资的密集聚集地。

王小峰导演(在字幕上用"小"而不是"晓")简单的做了致辞,告诉大家做字幕的小伙子很辛苦,同时现在的这个版本配音效果有点问题。然后就开演啦。片名《你丫真狠》,讲的是狗仔队的事儿。编剧很见功力,导演水平也明显比前面的《小强历险记》和《十面埋妇》有进步。可惜因为时间关系,我只看了一半就走了,还不知道后半部剧情如何发展的。

在预定的时间前赶到了青藤茶馆,参加活动的人来得不少,大家对技术的热情可见一斑,只是杭州的技术活动相对比较少。今天美中不足的是场地有点小,多少有点局限。中场休息了一会儿,开始我的分享,基本上讲一小段会回答一到两次提问,这种交互式的交流我还是比较喜欢的。如果完全对着 PPT 对很多人讲,其实效果不那么好的。整个 PPT 主要部分在这几个实践点:

  • 建立基准测试(IO层、网络、Cache、App 等)
  • 持久性 Connection("连接风暴"问题)
  • 选取合适的数据类型
  • 非关系型数据的存储选择
  • 分区与 Sharding
  • 反范式(Denormalization)
  • 抛弃存储过程封装业务逻辑的思路

没有内容只有骨架,在这里看起来好像干巴巴的。希望有时间能就这个话题写一篇文稿出来。今天同行的还有同事简朝阳,他最近在 MySQL 方面做了不少研究。

这次活动的视频

--EOF--

os_hangzhou_350.jpg明天下午将去参加 InfoQ 中文站主办的 体验基于OpenSolaris的Web/企业应用 活动,这也是杭州 OpenSolaris/OpenSource 用户组的第一次活动。

我应邀将在活动上做个关于数据库的分享,主题为 "设计可扩展的面向互联网应用的MySQL数据库" ,欢迎感兴趣的朋友光临指导。具体时间和地点 ? 就在上面的链接里 ...

自从 Sun 把 MySQL 收购了之后,好像关于数据库的市场活动并不大,相反,倒是对操作系统做了一些不遗余力的推广。当然,现在的 Solaris 倒也并非没有长处,ZFSDtrace 就是两个很有趣的东西,而这两者对 MySQL 都是很好的互补,对 Linux 其实也是很好的互补,尤其是 ZFS ,最近一段时间,越来越觉得 Linux 的 EXT 文件系统在某些场景多少还有点短板。期待明天能听到关于 ZFS 和 Dtrace 的一些内容。

补充:听说 Sina 有一部分机器用了 OpenSolaris,但也应该是试水性质的吧。国内其他网站有没有用 OpenSolaris 的?

--EOF--

这个片段挺搞。台词写的很有趣,场景也都挺符合的。

有同事说东北话的配音不太标准,建议我上... 暴汗

--EOF--

注:此文首发于 《程序员》杂志 2008 年 7 月刊。

从 Shard 到 Sharding

"Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏(MMORPG)中。"Sharding" 姑且称之为"分片"。

Sharding 不是一门新技术,而是一个相对简朴的软件理念。如您所知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多 MySQL 的潜在用户都对 MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢? 答案是:Sharding。

Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。

事关数据库扩展性

说起数据库扩展性,这是个非常大的话题。目前的商业数据都有自己的扩展性解决方案,在过去相对来说比较成熟,但是随着互联网的高速发展,不可避免的会带来一些计算模式上的演变,这样很多主流商业系统也难免暴露出一些不足之处。比如 Oracle 的 RAC 是采用共享存储机制,对于 I/O 密集型的应用,瓶颈很容易落在存储上,这样的机制决定后续扩容只能是 Scale Up(向上扩展) 类型,对于硬件成本、开发人员的要求、维护成本都相对比较高。

Sharding 基本上是针对开源数据库的扩展性解决方案,很少有听说商业数据库进行 Sharding 的。目前业界的趋势基本上是拥抱 Scale Out,逐渐从 Scale Up 中解放出来。

Sharding 的应用场景

任何技术都是在合适的场合下能发挥应有的作用。 Sharding 也一样。联机游戏、IM、BSP 都是比较适合 Sharding 的应用场景。其共性是抽象出来的数据对象之间的关联数据很小。比如IM ,每个用户如果抽象成一个数据对象,完全可以独立存储在任何一个地方,数据对象是 Share Nothing 的;再比如 Blog 服务提供商的站点内容,基本为用户生成内容(UGC),完全可以把不同的用户隔离到不同的存储集合,而对用户来说是透明的。

这个 "Share Nothing" 是从数据库集群中借用的概念,举例来说,有些类型的数据粒度之间就不是 "Share Nothing" 的,比如类似交易记录的历史表信息,如果一条记录中既包含卖家信息与买家信息,如果随着时间推移,买、卖家会分别与其它用户继续进行交易,这样不可避免的两个买卖家的信息会分布到不同的 Sharding DB 上,而这时如果针对买卖家查询,就会跨越更多的 Sharding ,开销就会比较大。

Sharding 并不是数据库扩展方案的银弹,也有其不适合的场景,比如处理事务型的应用就会非常复杂。对于跨不同DB的事务,很难保证完整性,得不偿失。所以,采用什么样的 Sharding 形式,不是生搬硬套的。

Sharding与数据库分区(Partition)的区别

有的时候,Sharding 也被近似等同于水平分区(Horizontal Partitioning),网上很多地方也用 水平分区来指代 Sharding,但我个人认为二者之间实际上还是有区别的。的确,Sharding 的思想是从分区的思想而来,但数据库分区基本上是数据对象级别的处理,比如表和索引的分区,每个子数据集上能够有不同的物理存储属性,还是单个数据库范围内的操作,而 Sharding 是能够跨数据库,甚至跨越物理机器的。(见对比表格)

Sharding.png
(转载别忘了此图。注明全文来自 http://www.dbanotes.net)

Sharding 策略

数据 Sharding 的策略与分区表的方式有很多类似的地方,有基于表、ID 范围、数据产生的时间或是SOA 下理念下的基于服务等众多方式可选择。而与传统的表分区方式不同的是,Sharding 策略和业务结合的更为紧密,成功的 Sharding 必须对自己的业务足够熟悉,进行众多可行性分析的基础上进行,"业务逻辑驱动"。

Sharding 实现案例分析:Digg 网站

作为风头正劲的 Web 2.0 网站之一的 Digg.com,虽然用户群庞大,但网站数据库数据并非海量,去年同期主数据大约只有 30GB 的样子,现在应该更大一些,但应该不会出现数量级上增长,数据库软件采用 MySQL 5.x。Digg.com的 IO 压力非常大,而且是读集中的应用(98%的 IO 是读请求)。因为提供的是新闻类服务,这类数据有其自身特点,最近时间段的数据往往是读压力最大的部分。

根据业务特点,Digg.com 根据时间范围对主要的业务数据做 Sharding,把不到 10% 的"热"数据有效隔离开来,同时对这部分数据用以更好的硬件,提供更好的用户体验。而另外 90% 的数据因用户很少访问,所以尽管访问速度稍慢一点,对用户来说,影响也很小。通过 Sharding,Digg 达到了预期效果。

现有的 Sharding 软件简介

现在 Sharding 相关的软件实现其实不少,基于数据库层、DAO 层、不同语言下也都不乏案例。限于篇幅,作一下简要的介绍。

MySQL Proxy + HSCALE

一套比较有潜力的方案。其中 MySQL Proxy (http://forge.mysql.com/wiki/MySQL_Proxy) 是用 Lua 脚本实现的,介于客户端与服务器端之间,扮演 Proxy 的角色,提供查询分析、失败接管、查询过滤、调整等功能。目前的 0.6 版本还做不到读、写分离。HSCALE 则是针对 MySQL Proxy 插件,也是用 Lua 实现的,对 Sharding 过程简化了许多。需要指出的是,MySQL Proxy 与 HSCALE 各自会带来一定的开销,但这个开销与集中式数据处理方式单条查询的开销还是要小的。

Hibernate Shards

这是 Google 技术团队贡献的项目(http://www.hibernate.org/414.html),该项目是在对 Google 财务系统数据 Sharding 过程中诞生的。因为是在框架层实现的,所以有其独特的特性:标准的 Hibernate 编程模型,会用 Hibernate 就能搞定,技术成本较低;相对弹性的 Sharding 策略以及支持虚拟 Shard 等。

Spock Proxy

这也是在实际需求中产生的一个开源项目。Spock(http://www.spock.com/)是一个人员查找的 Web 2.0 网站。通过对自己的单一 DB 进行有效 Sharding化 而产生了Spock Proxy(http://spockproxy.sourceforge.net/ ) 项目,Spock Proxy 算得上 MySQL Proxy 的一个分支,提供基于范围的 Sharding 机制。Spock 是基于 Rails 的,所以Spock Proxy 也是基于 Rails 构建,关注 RoR 的朋友不应错过这个项目。

HiveDB

上面介绍了 RoR 的实现,HiveDB (http://www.hivedb.org/)则是基于Java 的实现,另外,稍有不同的是,这个项目背后有商业公司支持。

PL/Proxy

前面几个都是针对 MySQL 的 Sharding 方案,PL/Proxy 则是针对 PostgreSQL 的,设计思想类似 Teradata 的 Hash 机制,数据存储对客户端是透明的,客户请求发送到 PL/Proxy 后,由这里分布式存储过程调用,统一分发。 PL/Proxy 的设计初衷就是在这一层充当"数据总线"的职责,所以,当数据吞吐量支撑不住的时候,只需要增加更多的 PL/Proxy 服务器即可。大名鼎鼎的 Skype 用的就是 PL/Proxy 的解决方案。

Pyshards

http://code.google.com/p/pyshards/wiki/Pyshards 这是个基于 Python的解决方案。该工具的设计目标还有个 Re-balancing 在里面,这倒是个比较激进的想法。目前只支持 MySQL 数据库。

结束语

Sharding 是一项仍处于高速发展中的"老"技术,随着 Web 2.0 的发展,Sahrding逐渐从比较"虚"的概念变成比较"实"的运用思路,开放源代码软件大潮也给 Sharding 注入新的活力,相信会有越来越多的项目采用 Sharding 技术,也会有更多成熟的 Sharding 方案和数据库附加软件涌现。

你的站点 Sharding 了么?

--EOF--

另,本周末我讲参加这个活动:体验基于OpenSolaris的Web/企业应用,做一个题为《设计可扩展的面向互联网应用的MySQL数据库》的简单分享。欢迎杭州朋友光临指导。

Facebook 的 Scaling Out 经验

| 4 Comments

Facebook 其实对待技术的态度其实挺开放的。今天阅读了这篇 Scale Out, 工程师 Jason Sobel 介绍了在对付跨地域 MySQL 复制网络延迟的问题。

Cache 一致性问题解决思路

大量的 MySQL + Memcached 服务器,布署简示:

California (主 Write/Read)............. Virginia (Read Only)

主数据中心在 California ,远程中心在 Virginia 。这两个中心网络延迟就有 70ms,MySQL 数据复制延迟有的时候会达到 20ms. 如果要让只读的信息从 Virginia 端发起,Memcached 的 Cache 数据一致性就是个问题。

  • 1 用户发起更新操作,更名 "Jason" 到 "Monkey" ;
  • 2 主数据库写入 "Monkey",删除主、从两端 Memcached 中的名字值;
  • 3 在 Virginia 有人查看该用户 Profile ;
  • 4 在 Memcached 中没发现用户名字,从 Virginia Slave 数据库读取,因为网络延迟,结果读到了 "Jason";
  • 5 更新 Virginia Memcached 中的该用户名字为 "Jason";
  • 6 复制追上了,更新名字为 ""Monkey";
  • 7 又有人读取 Profile 了;
  • 8 在 Memcached 中找到了键值,返回 "Jason" (实际上造成业务冲突了)

解决办法挺有意思,在 SQL 解析层嵌入了针对 Memcached 的操作。

  • 1 用户发起更新操作,更名 "Jason" 到 "Monkey" ;
  • 2 主数据库写入 "Monkey",删除主端 Memcached 中的名字值,但Virginia 端 Memcached 不删;(这地方在 SQL 解析上作了一点手脚,把更新的操作"示意"给远程);
  • 3 在 Virginia 有人查看该用户 Profile ;
  • 4 在 Memcached 中找到键值,返回值 "Jason";
  • 5 复制追上更新 Slave 数据库用户名字为 "Monkey",删除 Virginia Memcached 中的键值;
  • 6 在 Virginia 有人查看该用户 Profile ;
  • 7 Memcache 中没找到键值,所以从 Slave 中读取,然后得到正确的 "Monkey" 。

这里面的一个简单的原则是: 更新后的数据,用户第一次读取要从数据库读,顺便扔一份到 Cache 里,而不是在写入的时候直接更新 Memcached 。避免写事务过大。

而写操作的原则是:一次写入,到处分发

第二个问题是关于"Page Routing"的 ,也很有参考价值。感兴趣的自己读一下吧。

--EOF--

另推荐一下: 分布式系统中的一致性和可用性,该文是上次在支付宝 QClub 活动的总结之二。

史冬鹏是我心目中的英雄

| 10 Comments

史冬鹏没能进决赛,但他尽力了。纵观大史一直以来在赛场上的表现,他是真正诠释体育精神的英雄。

赛前,我是多么希望史冬鹏能在这次"家门口"的比赛中夺得一枚奖牌,但这毕竟是比赛,胜负只在一瞬间。尽管以后还有更多的比赛,还有世锦赛,大史说"那毕竟不一样",这是绝对的真心话!

刘翔几乎独占了所有可用的资源,留给大史的资源太少了。从这一点上来说,刘翔是一个团队在作战,而大史只是一个人在战斗! 赛前刘翔的信息铺天盖地,关注大史的文章少而又少。看过的文章中,只有《环球企业家》的这篇特刊《奔跑者》能让读者了解一下关于大史的更多信息。

史冬鹏,加油!期待你的精彩!

--EOF--

还要控诉一下冬日娜这"梅超风",你能不能少说几句弱智的话? "没关系,毕竟你上次连第二轮还没跑进呢" ,这是人说的话么?

当有线电视遇上弹窗广告

| 7 Comments
刘翔退赛,没必要对一个用汗水打拼的运动员苛求太多。我们不过是看客。

为了看奥运,把停了半年多的有线电视续费了一下。前几天,杭州华数居然专门派人来送来一个新的遥控器。那个遥控器看起来功能蛮多,老婆还挺高兴,研究了半天。

自从用了这个遥控器,我就感觉不对劲儿,怎么赛事正精彩的时侯屏幕上会出来个小窗口提示有奖答题呢? 第一次看到以为是央视搞的,后来频繁的出现感觉有点不对,按遥控器的"退出"键,居然提示,"确定退出么?" 按"确定",居然也要半天才能消失这个小浮动窗口。真是有些震惊啊,这下真的互动了,弹窗广告居然搞到电视上来了!

流氓会武术,谁都挡不住! 相信这个技术会被更多有线电视运营商采用的。到时候面对时不时的弹窗广告,加上原来就有的贴片广告,以及那些"精彩绝伦"的电视购物广告,这电视还能看下去么? 奥运过后,电视关闭!

--EOF--

有图有真相

有线电视的弹窗广告

guan_hu_tian_xia.jpg今天收到了这本小书《关乎天下》,副标题是"中小企业赢取江山的秘诀",其实在我看来,这也是阿里巴巴赢取江山的秘诀(现在 Alibaba 是大型公司,但当年是绝对的小企业)。

这几天好几位朋友先后提及阿里巴巴前 COO 关明生(Savio)。先是白鸦说 Savio 是很值得研究的人 ,后是同事 Kimi 的回忆。在论坛上看到有人留言说 Savio 写过这本书,所以买了一本回来。

这本书篇幅并不长,64 开本,正文 125 页的样子,差不多是两课时培训课程的信息容量。图书市场里关于阿里巴巴的书现在有很多了,但似乎加起来还不如这一本小册子传递出来内容精炼、精准。从 "独孤九剑" 到 "六脉神剑" ,Savio 就是塑造阿里巴巴文化最主要的那个人。以前的一些趣闻通过这本小书页到了印证,比如 Savio 能够记住每个人的名字,为的是"要发现人才潜才",作为企业管理人,这的确是非常难做到的事情。平凡人做平凡事,平凡事做好了就不平凡。

以前我有幸听过 Savio 将过一次课,这次书里发现的一些素材和那次课程上的有重复的地方,而且网上搜索到 Savio 的采访,也发现他非常喜欢举 "明星和野狗" 这个例子。不难明白,企业管理哪里需要长篇大论的东西,凝练下来精华的部分,并且成功的执行、继承下去才会成功。

建议还在起步中的并且对阿里巴巴公司文化、管理方式比较好奇的中小企业主读一下这本书,这就是阿里巴巴的成功秘诀--如果说有秘诀的话。第四部分的销售篇读来也非常有收获,非常值得作销售的朋友一读。最后也建议阿里巴巴同事能读一下这本书,第一版发行只有 5000 册,我相信公司其实读过这本书的人不多。

--EOF--

点击购买《关乎天下》

日复一日的 Unix/GNU Linux 使用过程中,或许总有一些命令让你感觉肝颤,看看如下几个命令是不是让你很烦?

fsck -- file system consistency check

如果有可能,不要手工运行 fsck 命令。关于人为调用 fsck "修复" 系统而引起更大灾难的实例已经有很多了。

Unix 的 rm 命令问题

rm 命令可能是最容易给 Unix 使用者带来麻烦的一个命令,但我想这个命令带来的问题几率可能并不如 fsck 那么高。所以放到第二位。另请请参考我以前写的 如何避免 Unix 环境中的 'rm -rf' 灾难 这个帖子。

crontab -r -- 不经提示删除了 cron 内容

这条命令我从来没用过,是网友留言提示的,看来他深受其苦,或许还有同病相怜的人。

source ~/.bash_history

The source command sends the contents of a text file to the Unix shell. 我相信如果有人运行了这样的命令,肯定是命令行自动补全惹得错 :)

或许还有很多命令是尽量不要运行的,话说回来,在 Unix 系统里面运行每个命令都需要谨慎。IBM dw 上这篇关于系统管理员的"懒惰"我倒是挺认同的,无为而治。

上面提到的 Unix ,包括 GNU/Linux,具体的 Shell 具体对待。

--EOF--

还有个老生常谈的提醒:不要在 root 用户下做日常操作。

奥运开幕式与麻将文化

| 5 Comments

看了活字印刷那部分后我还到 Twitter 上说,没有麻将的文化展示真是太可惜了。

后来忽然想到,那个"和"不就是说的麻将嘛!不是和平的"和",而是和(hú)牌的"和"啊! 这个字音还暗示了胡哥的"胡",这是何等马屁也

好多外国记者看活字样子误测麻将的文化内涵,谬矣。

不许娱乐,允许联想。

--EOF--

补充一: 以前流行的段子(从前同事 Tony HU 那里看来的):

2008 年北京奥运会开幕式猜想:主场摆 1 万张(为暗合2008, 需要修改成 2008 张) 麻将桌,4 万人在民乐演奏中狂搓,乐声至高潮处戛然而止,全体起立高呼:"和!(hú,胡)"。此刻胡总书记闪亮登场。

补充二: 我个人觉得从电视上看到的开幕式还算不错的,只是孙正平的太监声音解说太差(实在不行,找个能让人"肝胆俱裂"的解说人嘛),而且解说词写的也烂,中学生估计也写的出来。不知道解说词事先有没有给秋雨老师看看。

补充三: 秋雨老师事后赋"梨花体"一首

毫无疑问
不是我写的
解说词
是全世界最差的

Inside Facebook 读书笔记

| 4 Comments

Inside Facebook.jpg 利用电脑启动、收邮件的一些零散时间,看完了这本 Inside Facebook 翻译版,感觉有所得。有些朋友说没看到"实质性"的东西,什么是"实质性"的东西? 难道你要看到"成功宝典"么? Facebook 只有一个,东施效颦的模仿者学其形或许还成,学其神就难了。

观点

  • 任何一件没有全力以赴的事情,都会对其它员工造成不良影响 ... 一个成功的公司的公司,绝对不应该允许其员工只是简单地维持现状。
  • 对于不需要第二天早上八点半爬起来送孩子上学的年轻人来说,熬夜工作是一种纯粹的乐趣。
  • 若是待遇不错,客服人员是公司最能解决问题的人手。他们甚至会发自内心地以愉悦的面貌投入工作。

细节

  • Google 趋向于招聘领域内的知名专家,而 Facebook 则鼓励工程师成为多面手。
  • Note: 一个公司能有几个技术上能包打通关的人(比如 @Livid 同学)是幸事。但在国内,往往走从的路线。
  • 任何公司里都只有一小部分工程师是最出成果的。
  • Note: 这么说是不是会伤害很多人? 但这的确是一句真话。对于公司来说,如何在创业初期找到的人都是这一小部分工程师? 对于个人来说,在创业团队如何成为这样的一小部分工程师?
  • 现在 Facebook 内部还在用 Trac 。
  • Note: 工具无所谓轻量级重量级之分。Trac ,可能上一点规模的开发团队都不屑一顾了,看看Facebook,用的挺好。
  • 简化会议
  • Note: 虽然没看到 Facebook 如何开会的,如果 CEO 在会议上的 PPT 都不超过 5 页,其他人也不会好意思来进行冗长的会议。
  • CEO 肖恩在生活细节上非常马虎。
  • Note: 嗯,如果你也有同样的特点,没准也能做CEO呢...

这本书尽管翻译行文上有一些不一致和粗糙的地方,但还是指的一看的。毕竟应该看传递出来有价值的那一部分,盯着一本书的缺点就没意思了。这本书定价不贵,建议买一本也算支持译言翻译小组辛苦的劳动了。

--EOF--

BTW: 最近工作、私事都很多,奥运也来了,可能更新频率会不那么高了,朋友们见谅!

Founders at Work

| 5 Comments

Founders_at_Work.jpg

为什么有些人创业成功,而更多人失败? 成功的人当初承担过哪些压力,做过那些重要的抉择? 有没有初创公司的创业者们必须要看的一本书? Founders at Work 或许能担当此重任。

前一段时间在财帮子网站创建人孟岩的推荐后读完了这本书,最近这几天分析 Paypal 的一些东西,又把电子版翻了出来。重新读了一遍对 Paypal 创始人 Max Levchin 的采访。10 年前创建的 Paypal 现在是美国互联网最赚钱的互联网企业,而走出 Paypal 的创建者们,也已形成了 Paypal 黑帮,手握着世界 Web 2.0 公司的权柄。

Paypal 最早并不是做在线支付的。因为 Levchin 对软件安全兴趣由来已久,最初做过软件加密、手持设备转帐软件等,在为手持设备用户开发软件的过程中发现了在线支付的庞大需求量和无限商机,这里面比较关键的一点是Paypal 的及时转身

如果用一句话概括 Paypal 该怎样描述? 表面是财务服务公司,实际是一家安全公司。 Paypal 最开始的一段时间,最大的挑战倒不是来自竞争对手那里,而是恶意用户的欺诈行为。最高的时侯 Paypal 每个月因为欺诈造成的损失超过 1000 万美元(前面有篇文章我提到 Paypal 现在有 达 0.25% 的资损,我还觉得挺高的,没想到以前更高),而开始大家对于可能存在的欺诈损失还有些一头雾水,可见摸着石头过河的事情,大家都干过。

与 X.com 合并后,Max Levchin 作为 CTO,而来自 X.com 的"那个家伙"做 CEO 。Paypal 技术架构差点转向 Windows 平台,因为 X.com 是运行在 Windows 上的。工程师的文化对立也比较明显,貌似一场冲突不可避免。问题如何化解呢? Levchin 精心构造了一次测试,对 Unix 、Windows 针对某应用作压力测试,"证实" Windows 扩展性只有 Unix 上的 1%。"那个家伙"闭上了嘴。随之不久,那个家伙离开了 Paypal。如果当初转向 Windows,或许现在的 Paypal 也不是这个样子了...

仅仅因为这篇对 Max Levchin 的采访,就让我要推荐一下这本书。其实,看看其它 Founder 的访谈记录,有趣的东西还有很多,各取所需吧。

--EOF--

又读了一遍这个 PPT: Federation at Flickr: Doing Billions of Queries Per Day ,发现还是值得咀嚼一下,尽管这"甘蔗"已经被吃过了。

针对主机环境的实践参考

Flickr 数据库的硬件配置一般用 16G 内存,6块 15K 硬盘,RAID 10,在 EM64T 下跑 RHEL 4,运行在 Deadline I/O 调度器 模式 。回写 Cache 用控制器电池而不用磁盘的 Cache。Swappiness 设置为 0 . 。

大内存数据库服务器的 Swap 设置问题

上面提到了 Flickr 是把 Swappiness 设置为 0 ,简单的通过:

echo 0 > /proc/sys/vm/swappiness 

个别情况下这样也可能没起作用,因为实际上对 Swap 的调用是由如下的公式计算得到的:

swap_tendency = mapped_ratio/2 + distress + vm_swappiness; 

其中 vm_swappiness 默认值是 60.

这是个防御性的措施。Linux Kernel 2.6 (个别版本)有些诡异行为,当有大量物理内存空闲的时候,Linux 仍(或许)会傻乎乎的调用 Swap 空间,这导致有的时候系统性能很差。有人建议如果是 INNODB 的引擎的话,可以用 O_DIRECT 的方式强制直接调用物理内存。但似乎副作用很大(存疑)。

如果关闭 Swap (swapoff -a)的话,又会遇到 OOM 的问题。这是绝对不推荐的。

还有人用的方式是把 Swap 建立到 RAM 盘上。

Swap 的自动校正其实是个老问题,几年前可能超过 4g 的 Linux 服务器都不多,而现在动辄几十 G 的内存配置,应用场景发生了很大变化,Kernel 的算法思路肯定也要调整一些了吧(尽管几年来不断看到有小的 Patch 出来,可好像 RHEL 的 Kernel 还是老样子)。

我在这里抛砖引玉,大家实际应用中应该也遇到类似问题吧? 有什么建议? 还是干脆就不管? 默认情况下其实也能跑...

--EOF--

Paypal 的 数据仓库管窥

| 6 Comments

一直以来,Paypal 的技术信息都很封闭的,很少能看到披露后台关于信息架构的东西。

Paypal 当前的数据仓库用的是 NCR Teradata ,32 个节点,50 TB 的数据,耗时三年打造。而整个公司投入在 BI 范围上的资金占据全部 IT 投入的 60%。

之前 Paypal 用的是 Oracle 数据仓库的解决方案,旧的 Oracle 数据仓库环境其实类似生产环境 Schema 数据的镜像。从 Oracle 到 Teradata ,不是简单的迁移,而是完全重构了数据模型,对数据重新清洗并提高数据质量。

因为欧美是依赖信用卡的消费习惯,所以 Paypal 面对的信用卡消费欺诈还是很严重的,一度高达 0.25% 的资损(印象中好像有段时间来自俄罗斯和东欧的欺诈特别多),这可能也是 Paypal 在数据仓库/BI 上投入重金的一个原因(此外还收购Fraud Sciences 公司来减少这方面的风险)。

除了有效提供损益报告,Paypal 的数据仓库还必须即时有效的提供的一个指标叫做 "Funny Mix",代表信用卡资金交易帐务平衡指标与 ACH(自动化清算所,Automated Clearing House) 帐务平衡。

作为对比 eBay 数据仓库环境每天新进来的数据就有 40TB(和Yahoo! 的DW不相上下),这样的数据量,处理起来的难度还是有一点点的,据说原来技术人员 90% 的时间要花费在数据清洗上,现在也开始用 Teradata 大集中式数据仓库的模式了。

尽管收集 Paypal 的信息非常不容易,但也希望能挖掘出点有意思的东西来。

--EOF--

关于这篇归档

This page is an archive of entries from August 2008 listed from newest to oldest.

July 2008 is the previous archive.

September 2008 is the next archive.

Find recent content on the main index or look in the archives to find all content.