作者:人人网架构师 张洁 人人网UGC团队博客首发
MySQL
关系型数据库存储系统,我们的DBA团队很强大,每人管理上百台MySQL服务器,其他就不多说了,网上资料太多了
Tokyo Cabinet
一个key-value的存储引擎,日本人开发,国内很多公司也开始使用,我们内部很多地方也用它来代替MySQL来做存储,比如我们的搜索结果页的用户资料,就是用它来做一层MySQL外的冗余存储,目的是加快搜索结果页的显示。在key-value并需要持久存储的场景下,用它比MySQL更有效,Cabinet本身只是一个存储引擎,没有网络处理能力,你可以用它作为自己的某个系统的下层存储引擎,更好的是搭配Tokyo Tyrant使用。
Tokyo Tyrant
一个支持Memcached传输协议的网络接口,由Tokyo Cabinet的作者开发,目的是为Tokyo Cabinet提供网络接入能力,即Tokyo Tyrant处理网络连接,协议解析,然后调用Tokyo Cabinet的API来完成持久化存储。
ICE
一个跨语言的网络通讯框架,框架本身提供了强大的通讯能力,管理工具,负载均衡方案,其跨语言能力也是一个很大的亮点,基于这个框架之上,我们选用合适的语言来提供合适的服务,比如我们使用C++来开发Cache服务,使用Java来开发一些逻辑服务。框架本身可以很重,也可以很轻,具体要看你怎么用:)
Memcached
一个纯内存的key-value的cache系统,高效、稳定,使用广泛,如果你连它都没听说过就太out啦,memcached本身不具备分布式能力,需要依靠Client来实现分布,这里强调一点的是,你应该选择一致性Hash来做key的分布。各种语言的client都有,我们使用spymemcached作为java的Client,spymemcached是一个异步的NIO的memcached client,对网络IO的处理非常的精巧,也更加高效,同时因为提供异步操作方式,可以让你对Memcached的操作有更好的控制能力,Memcached到1.4.0版本之后,开始支持binary protocol,spymemcached对其也支持的比较好,使用binary protocol可以提高对协议的解析效率和网络IO的读写效率。
上面说到我们使用ICE自己开发了Cache服务,为什么我们还要用Memcached呢?主要在对Cache的操作粒度不一样,Memcached对Cache对象以binary byte作为一个整体来操作,需要频繁的序列化和反序列化,我们使用ICE提供的Cache服务,可以以Cache对象的一个或者多个字段来操作,比如一个用户对象,我们可以只更新它的姓名,而Memcached
Nginx
高效、稳定的Web Server,我们利用其代理能力,做跨IDC的请求代理,同时也将其和我们的Resin(Java Web 容器)搭配,放在Resin的前面来解决Resin的对网络连接处理能力弱的问题,在一些小地方也用它来做7层的负载均衡
Resin
一个Java Web Server,比Tomcat更高效,是我们主要的Java Web容器
Squid
代理服务器,我们用他来做图片文件的反向代理缓存
LVS
能提供4层的负载均衡,高效、高可用,高并发。我们用他替代了很多硬件的负载均衡设备
Struts
Java web框架,不过这个已经是历史了,我们开发了一套自己的Web框架替代了它,未来我们也会把我们的内部的这套Web框架开源出来
Lucence
基于Java的搜索引擎框架,用它我们构建了一个搜索集群来提供搜人的服务
Netty
一个Java的网络框架,和apache的mina类似,但比mina更高效,我们用来做一些小的服务
Ganglia
一个监控系统,帮组我们了解我们每台Server的资源利用情况
还有些小东西就不列出来了,最后要说的一点就是,对这些开源软件或者系统,我们都非常的了解,或者说知根知底,从API到内部实现原理,甚至到一些源码的细节。
很强大的说,看到这些东西很亲切,LUCENCE,很好!
ICE是GPL的,也就意味着基于它开发的软件也要开源
Tokyo Cabinet确实不错,我们也在用!
还有些小东西就不列出来了,最后要说的一点就是,对这些开源软件或者系统,我们都非常的了解,或者说知根知底,从API到内部实现原理,甚至到一些源码的细节。
这个很强大,啥时候给我们讲讲实现原理的细节啊,比如squid。
squid的虽然用起来方便,但是里面问题很多,目前也没有特别好的解决方案,不知道人人网的大侠们有什么好的方法啊
上面说到我们使用ICE自己开发了Cache服务,为什么我们还要用Memcached呢?主要在对Cache的操作粒度不一样,Memcached对Cache对象以binary byte作为一个整体来操作,需要频繁的序列化和反序列化,我们使用ICE提供的Cache服务,可以以Cache对象的一个或者多个字段来操作,比如一个用户对象,我们可以只更新它的姓名,而Memcached
这一段没说清楚。。
To nwind: 用它开发的东西不需要开源吧,只是如果想要传播,不管是任何形式的对外传播,都需要开源。
Linux也算开源软件吧?
用的啥系统呢
最近看到了人人网的初步的开源web框架,跟springMVC的架构基本上说是一样,应该是对springMVC进行的改造吧?
学习
不错呀,列的很全.
今天找不到apache安装文件,于是到apache.org找,找到的是renren.com提供的镜像。太感谢了!
想不到国内的公司也开源起来了,哈~ 今天特意注册上来了~ (不过,不会玩-_-#)
第一次接触到人人的技术站 嘻嘻
我用美国的一个squid服务器试图缓存renren.com来增加海外用户通过这个服务器来访问renren的速度,但是一打开就会被自动跳转回http://www.renren.com/Login.do?rf=r&origURL=后面跟着squid的域名。不知道是什么原因……那台squid服务器用的透明代理vhost模式,同时缓存了多台其他的web server,不知道和具体哪个设置有关系?
互联网web平台管理计算机的方式越来越接近超级计算机了。
附一个Ganglia的监控页面 http://scc.qibebt.cas.cn/ganglia/
为啥不用Oracle呢?
oracle是商用的,有问题的话,不能直接看源代码或者修改源代码
恩。很强大的团队,很牛逼的技术!
”
还有些小东西就不列出来了,最后要说的一点就是,对这些开源软件或者系统,我们都非常的了解,或者说知根知底,从API到内部实现原理,甚至到一些源码的细节。
”
LoL
谢谢,我又多了解了很多东西。
真想成为这个团队的一员 不知道通过千橡的校招可以加入吗?
有机会可以尝试以下你们使用的东东。。
人人神马时候也开源呃?