阅读更多

45顶
0踩

编程语言

 

强烈推荐:著名社交网站LinkedIn的Java架构技术

JavaOne 2008的会议上,著名社交网站LinkedIn的开发者做了2个关于LinkedIn

网站的架构技术的演讲,目前这两个演讲的PPT已经可以下载了。下载地址如下:

需要注册才可以下载,能下载PDF版本。

可以看一下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); they 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。所有的操作都是异步的。

 

推荐阅读:LinkedIn架构图:99%都是用Java写的

 

45
0
评论 共 29 条 请登录后发表评论
29 楼 shuaiji 2011-12-23 09:55
高手都是自己写ORM ,从来不用什么HIBERNATE
28 楼 itlangqun 2009-01-05 19:56
我没经验,看不懂啊
27 楼 kooen.chen 2008-09-13 23:05
小小网站吧,没什么值得探讨的吧!
26 楼 kingwang520 2008-07-16 17:25
引用
我也只喜欢 Spring不喜欢Hibernate。Spring提供了很多方便的功能,侵入性却很小。Hibernate只能做做小型程序差不多。


spring跟hibernate有互相可替代性???

好逗     

25 楼 myreligion 2008-07-07 13:55
才4千万PV而已,有必要搞得那么复杂嘛!

我们有个系统每天高的时候也有2000万PV,主业务数据表也有近2000万数据,都是基本的架构,做作分库,做作负载均衡也就完了,没必要搞得恁复杂!到4千万加点机器估计也就行了,楼主介绍的东西太过了~~~,而且“5。从硬盘重建Cloud一个实例需要8个小时”,要是Cloud机器挂掉了,重启下都要8小时,还不疯了!


24 楼 davidcen 2008-07-05 19:00
8。缓存通过C++实现,用JNI调用,LinkedIn选择C++而不是Java有两个原因:
   1)尽可能的减少RAM的使用
   2)垃圾收集暂停会杀死整个系统,LinkedIn用了最新的GC程序,也就是就是说java的的垃圾搜集性能不太好
9。将所有东西放在缓存里面是一种限制,但是LinkedIn指出,分割业务图将更麻烦

系统庞大到一定程度之后,着重考虑的就是性能问题,开发效率问题,倾向工厂化生产的趋势,代码产品要够简单,以遵循已经优化的策略,架构上呈现扁平化才能提高数据的加工效率.仅仅使用jdbc可以减少调优的方案,尤其是如此庞大的系统,使用orm那绝对要再头疼一次,结果肯定也是可以的,但是会很繁杂,花钱也会更多.这也说明了技术上长江后浪推前浪,不过还是姜是老的辣,沉淀的会更多.而从成本考虑,这个网站玩java估计成本会比php要高很多,不过谁让他有2kw有钱人用户呢,还是烧得起.

引用
再次证明了,java不适合做大型互联网程序,用户一多竟然要耗费12G多的RAM!


抨击一门语言是否要需要解决所有问题,如同使用低级语言来写网页一样可笑.
23 楼 kaituozhe6666 2008-07-05 16:04
22 楼 xo_tobacoo 2008-06-19 08:51
直接用JDBC No ORM (such as Hibernate); they use straight JDBC
-------这个应该非常关键吧!这么大的系统!无论用其他什么技术都是无比复杂的事。
21 楼 Wallian_hua 2008-06-18 11:00
是为了打造JAVA制做互联网应用的颠峰???
20 楼 neaton 2008-06-16 18:18
网速太慢,哪位有空传一下,coosuu@gmail.com
19 楼 ganyu21 2008-06-15 13:12
hibernate再加一个分布式二级cache,暴强无比!
18 楼 ganyu21 2008-06-15 13:11
12G怎么了?不就是多了几根内存条吗?总比用C的开发费用小很多吧,可维护性也好很多吧
17 楼 wym0291 2008-06-15 01:06
引用
再次证明了,java不适合做大型互联网程序,用户一多竟然要耗费12G多的RAM!用这么多内存,GC起来确实很可怕,不死才怪!另外,我也只喜欢Spring不喜欢Hibernate。Spring提供了很多方便的功能,侵入性却很小。Hibernate只能做做小型程序差不多。


.....相当经典的java盲人评论.....完全不懂GC的调优....
16 楼 vdgame 2008-06-08 16:48
引用
试试能不能直接下载

不能直接下载,但是放到迅雷里可以
15 楼 fxbird 2008-06-08 14:04
试试能不能直接下载:
http://s3.amazonaws.com/ppt-download/linkedinjavaone2008techsessioncomm-1211223608637383-9.pdf?Signature=bq3zR1KBX72YUJBtcR1J3zPFt9Y%3D&Expires=1212911935&AWSAccessKeyId=1Z5T9H8PQ39V6F79V8G2

http://s3.amazonaws.com/ppt-download/linkedinbofjavaone2008-1210975769299886-8.pdf?Signature=7mtRpPrZrBbz%2BgOjJcsJNOhyOOI%3D&Expires=1212911913&AWSAccessKeyId=1Z5T9H8PQ39V6F79V8G2
14 楼 fight_bird 2008-06-08 12:09
太复杂了,大型网站的架构一定要这么复杂吗?应该简化一点。
13 楼 galaxystar 2008-06-07 18:42
大型网站,复杂的业务,上亿PV的,谁会用ORM。搞笑
12 楼 runjia1987 2008-06-07 12:38
不用ORM,  仔细揣摩中。。。。。
11 楼 ahuaxuan 2008-06-07 10:29
引用

再次证明了,java不适合做大型互联网程序,用户一多竟然要耗费12G多的RAM!

结论太搞笑了,而且用户一多需要12g得内存也很正常得,2200w得用户信息随便放在什么地方都很占内存,而且人家也没有说这12g内存是放在什么地方的,一般都会放在memcached中或者其他什么地方,我还没有见过把这么多应用放在app中的呢
10 楼 allenny 2008-06-07 02:06
引用
再次证明了,java不适合做大型互联网程序


你倒是给介绍一种适合大型互联网程序的来看看。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics