2009年2月20日星期五

mixi.jp:使用开源软件搭建的可扩展SNS网站

Mixi目前是日本排名第三的网站,全球排名42,主要提供SNS服务:日记,群组,站内消息,评论,相册等等,是日本最大的SNS网站。Mixi从2003年12月份开始开发,由现在它的CTO - Batara Kesuma一个人焊,焊了四个月,在2004年2月份开始上线运行。两个月后就注册了1w用户,日访问量60wPV。在随后的一年里,用户增长到了21w,第二年,增长到了200w。到今年四月份已经增长到370w注册用户,并且还在以每天1.5w人的注册量增长。这些用户中70%是活跃用户(活跃用户:三天内至少登录一次的用户),平均每个用户每周在线时间为将近3个半小时。

下面我们来看它的技术架构。Mixi采用开源软件作为架构的基础:Linux 2.6,Apache 2.0,MySQL,Perl 5.8,memcached,Squid等等。到目前为止已经有100多台MySQL数据库服务器,并且在以每月10多台的速度增长。Mixi的数据库连接方式采用的是每次查询都进行连接,而不是持久连接。数据库大多数是以InnoDB方式运行。Mixi解决扩展问题主要依赖于对数据库的切分。
首先进行垂直切分,按照表的内容将不同的表划分到不同的数据库中。然后是水平切分,根据用户的ID将不同用户的内容再划分的不同的数据库中,这是比较通常的做法,也很管用。划分的关键还是在于应用中的实现,需要将操作封装在在数据层,而尽量不影响业务层。当然完全不改变逻辑层也不可能,这时候最能检验以前的设计是否到位,如果以前设计的不错,那创建连接的时候传个表名,用户ID进去差不多就解决问题了,而以前如果sql代码到处飞,或者数据层封装的不太好的话那就累了。
这样做了以后并不能从根本上解决问题,尤其是对于像mixi这种SNS网站,页面上往往需要引用大量的用户信息,好友信息,图片,文章信息,跨表,跨库操作相当多。这个时候就需要发挥memcached的作用了,用大内存把这些不变的数据全都缓存起来,而当修改时就通知cache过期,这样应用层基本上就可以解决大部分问题了,只会有很小一部分请求穿透应用层,用到数据库。Mixi的经验是平均每个页面的加载时间在0.02秒左右(当然根据页面大小情况不尽相似),可以说明这种做法是行之有效的。Mixi一共在32台机器上有缓存服务器,每个Cache Server 2G内存,这些Cache Server与App Server装在一起。因为Cache Server对CPU消耗不大,而有了Cache Server的支援,App Server对内存要求也不是太高,所以可以和平共处,更有效的利用资源。

这篇文章由于转载太多,根本找不到原作者 若作者看见 可与我联系加上引用链接

2009年2月19日星期四

【转】SNS网站LinkedIn的Java架构技术

在JavaOne 2008的会议上,著名社交网站LinkedIn的开发者做了2个关于LinkedIn网站的架构技术的演讲
可以看一下LinkedIn网站的基本情况:
1.2千2百万用户
2.每个月4百万独立用户访问
3.每天4千万page view
4.每天2百万搜索流量
5.每天25万邀请发送
6.每天1百万的回答提交
7.每天2百万的email消息发送



这是一个世界顶尖级别流量的网站了,看看LinkedIn的系统架构:

* 操作系统:Solaris (running on Sun x86 platform and Sparc)

* 应用服务器:Tomcat and Jetty as application servers

* 数据库:Oracle and MySQL as DBs

* 没有ORM,直接用JDBC No ORM (such as Hibernate); th** use straight JDBC

* 用ActiveMQ在发送JMS. (It’s partitioned by type of messages. Backed by MySQL.)

* 用lucene做搜索Lucene as a foundation for search

* Spring做逻辑架构Spring as glue



下面是随着流量增加,LinkedIn的架构演化:

2003-2005

1。一个整体的web程序,

2。一个核心数据库,

3。在Cloud中缓存所有network图,Cloud是用来做缓存的独立server。

4。用lucene做搜索,也跑在Cloud中。

2006年

1。复制另外一个数据库,减少直接load核心数据库,另外一个server来管理非只读数据库的数据更新。

2。把搜索从Cloud中移出来,单独一个server跑搜索

3。增加Databus数据总线来更新数据,这是通过分布式更新的核心组件,任何组件都需要Databus

2008年

1。WebApp不再任何事情都它自己做,把业务逻辑分成很多部分,通过server群来做。WebApp仍然提供用户界面给用户,但是,通过server群来管理用户资料,小组等等。

2。每个服务有自己的域数据库

3。新的架构允许其他应用链接LinkedIn,比如增加的招聘和广告业务。



The Cloud

1。Cloud是整个架构最重要的部分,整个LinkedIn的网络图都缓存在Cloud里面

2。Cloud大小:22M nodes, 120M edges

3。需要12GB RAM

4。在生产环境要跑40个实例

5。从硬盘重建Cloud一个实例需要8个小时

6。Cloud通过databus实时更新

7。关闭时持久化到硬盘

8。缓存通过C++实现,用JNI调用,LinkedIn选择C++而不是Java有两个原因:

1)尽可能的减少RAM的使用

2)垃圾收集暂停会杀死整个系统,LinkedIn用了最新的GC程序,也就是就是说java的的垃圾搜集性能不太好

9。将所有东西放在缓存里面是一种限制,但是LinkedIn指出,分割业务图将更麻烦

10。Sun提供了2TB的RAM




Communication Architecture交流架构包括:

Communication Service

Communication Service是用来提供永久信息的,比如收件箱里面的消息和email

1。整个系统通过JMS异步通讯

2。客户端用JMS发送消息

3。消息通过路径服务器来到达相应的邮箱或者直接放到email进程中

4。消息发送:同时使用Pull主动寻求信息(如用户需要信息)和Push发送信息(如发email)

5。使用Spring和LinkedIn专业Spring插件完成,使用HTTP-RPC

Scaling Techniques

1。通过功能来划分:发送,接受,文档等。

2。通过类别来划分:用户信箱,访问者信箱等

3。等级划分:用户ID等级,Email等级等

4。所有的操作都是异步的。

原文地址http://www.liyingfei.com/read.php/9.htm

2009年2月17日星期二

感谢金融危机 破窗原理

这次的金融危机,甚是可怕,每天都能看见网上看的某某知名企业裁员多少人。哪个国家的哪项经济指标同比下降了多少等等。

但我也看到了很多因为这次金融危机的破窗原理,加大加快开发创造的现象。

windows7 明显提快了上线的速度。照常理来说这样肯定会影响到vista的销量,但是确实提前了上线的时间。
另外看现在的智能手机业,真可谓是百家争鸣,百花齐放了。

很多原本不做手机行业的如acer,华为,也都加入了进来。当然得感谢iphone的先驱作用和google的Android的推出。现在智能手机的迅猛发展,将可以带动手机软件的市场。外加上3g的推广,那手机上网网速的枷锁也将解除,那是手机网站,sns,等的网点,软件,又将是一块新天地。外加上云的推广,手机软件业不可小觑。

这次金融危机,进一步让世界认识,中国的重要性,以及中国在世界的地位。

金融危机的危害可以想象,危机也是机遇。笑对危机者,将立于不败之地。

2009年2月15日星期日

【转】BlazeDS與LCDS功能比較

很多人關心BlazeDS 與LCDS(LiveCycle Data Services ES)主要差異在哪?BlazeDS是Opensource,也就是說免費讓你使用,LCDS是Adobe需付費的方案,什麼情況下會需要使用LCDS呢?這是國外朋友給的比較表,我祗是稍微中文化一下,想清楚得知BlazeDS的Spec可以到這裡http://opensource.adobe.com/wiki/display/blazeds/Features

而LCDS的功能列表可以從這裡看,http://www.adobe.com/products/livecycle/dataservices/features.html

先給一個觀念,原本程式人員動輒要寫到上千行的程式,而且效能還不見得管用情況下,不管你是用哪種Server,Server在處理這任務是大大減輕許多。




转自:http://forum.j2eemx.com/blaze-ds-livecycle-data-services/1633-blazeds-lcds.html

【转】先长地下的28米

非洲草原上有一种尖毛草,是那里长得最高的茅草,可它的生长过程却极为特别,在最初的半年里,它几乎是草原上最矮的草,只有一寸高,但半年后雨水一旦到来时,却像施了魔法一样,三五天后,便有一米六至两米的高度。原来,在前六个月里,尖毛草不是不长,而是一直在长根部,雨季前,它虽然露头一寸,但却扎根地下超过28米。



在不少人的价值观中,长上边的那一节儿,是出头露脸,算长了,长在下边的多少节都是“盘根错节”,长也白长。


当今的人们巴不得自己就是花圃里的玫瑰,我哪天怒放,你哪天就是情人节。借助园丁的勤劳早开花,借力名人的助推早上市,借用市场的效应早成交,一举成功,一夜成名。人人都知道要想出名快,演一部戏不如做一次“访谈”,谱十首曲子不如自己唱一首歌,半辈子忠贞的美德,不如一次“劈腿”。如今是写作的不如讲课的,讲课的不如剪彩的,剪彩的不如“带色”的。


可这样闹哄哄的“成长”到底能长多高呢?无论是一个人的成长,还是一个地方的文化建设,都不能只要地面以上的高度,而忘了扎根地下的28米。 (摘自《文汇报》 作者 阮直)

这篇文章其实不用多说什么,一目了然。转帖在次,用来自勉。

2009年2月14日星期六

【转】Web搜索引擎原理和技术

主要的三个功能模块:网页搜集、预处理、查询服务

基本要求:在一个可以接受的时间内返回一个和该用户查询匹配的网页信息列表,列表的每一条目至少包含三个元素--标题、网址链接、摘要

网页搜集
网页搜集的两种方式:定期搜集,增量搜集

一种搜集方式是将Web上的网页集合看成是一个有向图,搜集过程从给定起始URL集合S开始,沿着网页中的链接,按照先深、先宽或者某种别的策略遍历,不停的从S中移除URL,下载相应的网页,解析出网页中的超链接URL,看是否已经被访问过,将未访问过的那些URL加入集合S
整个过程可以形象地想象为一个蜘蛛spider在蜘蛛网Web上爬行crawl

另一种可能的方式是在第一次全面网页搜集后,系统维护相应的URL集合S,往后的搜集直接基于这个集合。没搜到一个网页,如果它发生变化并含有新的URL,则将它们对应的网页也抓回来,并将这些新URL也放到集合S中;如果S中某个URL对应的网页不存在了,则将它从S中删除

还有一种方式是让网站拥有者主动向搜索引擎提交它们的网址,系统在一定时间内定向向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存入数据库中

预处理
1,关键词的提取
作为预处理阶段的一个基本任务就是提取出网页源文件的内容部分所含的关键词
对于中文来说,就是要根据一个词典E,用一个所谓的“切词软件”,从网页文字中切出E所含的词语来
这样,一个网页主要就由一组词来近似代表了,p={t1,t2,...,tn}
要去掉诸如“的”,“在”等没有内容指示意义的词,称为“停用词”stop word
一篇网页有效的词语数量大约在200个左右

2,重复或转载网页的消除
网页的重复率平均大约为4

3,链接分析
词频TF、文档频率DF之类的统计量能在一定程度上指示词语在一篇文档中的相对重要性
h1可能比h4的内容重要
还可以利用链接信息来提取关键词

4,网页重要程度的计算
被引用多的就是重要的,引用这个概念恰好可以通过HTML超链在网页之间体现得非常好,Google创立核心技术的PageRank就是这种思路的成功体现

查询服务
1,查询方式和匹配
根据查询的短语分词q{t1,t2,...tm},然后按各词查询结果取交集

2,结果排序
词频越大则该文档排在越前面
文档频率越大,则该词用于文档排序的作用越小

另一个指标就是文档重要性PageRank

3,文档摘要
两个问题:
1)网页的写作通常不规范,文字比较随意,因此从语言理解的角度难以做好
2)复杂的语言理解算法耗时太多,不适应搜索引擎要高效处理海量网页信息的需求

搜索引擎生产摘要的简便方式:
1)静态方式,独立于查询,按照某种规则,事先在预处理阶段从网页内容提取出一些文字,如截取网页正文开头512字节(对应256个汉字)
2)动态摘要,在响应查询的时候,根据查询词在文档中的位置,提取出周围的文字来,在显示时将查询词标亮。这是目前大多数搜索引擎采用的方式。为了保证查询的效率,需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置

搜索引擎体系结构:


转自:http://hideto.javaeye.com/blog/288742

2009年1月23日星期五

IT人保持健康的必备法宝

在以计算机维生的人越来越多了,但你知道吗!天天坐在计算机前面想要维系健康,又要与岁月硬撑可不容易,循环不良的坐姿,三不五时的熬夜,若再加上没有吃对食物,时间久了身体可是会向您抗议的! 


必喝的汤: 
绿豆薏仁汤 
  绿豆可以清热解毒、利尿消肿,薏仁则可以健脾止泻,轻身益气,对于经常需要熬夜工作者或是心烦气躁、口干舌燥、便秘、长青春痘时,除了多吃蔬菜水果与补充水份外,把绿豆薏仁汤当点心食用,对于消暑除烦非常有帮助。 

必喝的茶: 
绿茶 
  绿茶是近几年来最为人所津津乐道的养生饮品,因为其中含强效的抗氧化剂儿茶酚以及维他命C,不但可以清除体内的自由基,还能使副肾皮质分泌出对抗紧张压力的荷尔蒙,当然绿茶中所含的少量咖啡因也可以刺激中枢神经,提振精神。最好在白天饮用以免影响睡眠。 

必须用的液体    
眼药水 
这个要常备,因为我们这种职业长期盯着屏幕,眨眼的次数会明显减少,这样会使眼睛很干涩,严重的会得眼睛干涩症(那个就真的要用药来治了!),所以大家要经常提醒自己,不要老是等着电脑,可以看看办公室的花花草草,当然也可以看看美女,哈哈 眼药水牌子也比较多,什么珍视明、Visine之类(日本的牌子效果好像比较好,我也是听别人说的,有抵制日货的兄弟可不要骂我,就事论事)的都可以,一般大药房都有卖。 

必须用的家居产品 
靠垫 
之所以说靠垫也是IT人所必需的装备是因为它可以有效保护我们的脊椎,我们这样的程序员由于工作原因需要长期坐在,如果不加个靠垫的话,坐得时间长了,脊椎会很疲劳,如果坐姿不好,容易造成脊椎变形,靠垫的作用是帮助脊椎保持笔直,同时承担一部分压力,从而让脊椎更加轻松些。一个靠垫的价格也就30左右,大家都知道这年头看病比啥都贵,这点小钱还是值得花的。当然靠垫的样式更多了,有卡通的、油画、动物等,看你自己的喜好了。尺寸也会有所不同,30*30cm、40*40cm、50*50cm,当然也有些特大的定制尺寸,就是比较少点。 

必须用的护肤产品 
防辐射护肤品 
市面上类似的挺多,好像鱼目混杂。多数是不知名的牌子。有印象的只是“爱雾”,“雪芙妮”,“亚顿水印”(这个好像是假冒国外的),相比这几款产品,爱雾比较方便,是套喷雾。最主要是其珍稀成分特别好:天山雪莲和红景天提取液。成分本身的抗辐射能力很好,而且相比其他产品有权威检测报告的数据支持。 

必须吃的保健品 
21金维他 
 [成分] 维生素A、维生素D、维生素E、维生素B1、维生素B2、维生素B6、维生素B12、维生素C、烟酰胺、泛酸钙、重酒石酸胆碱、肌醇、铁、碘、铜、锰、锌、磷酸氢钙、镁、钾、L-赖氨酸盐 
维生素和矿物质均为维持机体正常代谢和身体健康必不可少的重要物质。特别是维生素C对长期电脑工作的人特别好。 

必须常吃的瓜果蔬菜 
IT人平时用眼最辛苦。 

健眼的食物有各种动物肝脏、红枣、牛奶、奶油、小米、胡萝卜、青菜、菠菜、大白菜、番茄、黄花菜、空心菜、枸杞子和各种新鲜水果。

在javaeye上看到的 转来提醒自己