今天在网上看到人人网使用的开源软件列表 ,人人网的架构师写的,看完后,大概了解了人人网的架构信息

数据层

使用MySQL ,同时使用Tokyo Cabinet(Key-value的存储引擎,简称TC)做一个数据冗余,TC代替MySQL做存储,例如搜索结果页的用户资料,但Tokyo Cabinet没有网络处理能力,需要使用Tokyo Tyrant以提供网络接入能力,并调用Tokyo Cabinet的API进行持久化存储

Tokyo Tyrant其实也是Tokyo Cabinet的作者开发的,主要是支持Memcached传输协议的网络接口,可以理解为Tokyo Tyrant处理网络连接,协议解析,然后调用Tokyo Cabinet的API来完成持久化存储

服务端

Web Server : Nginx, 使用Nginx的代理能力,做跨IDC的请求代理,同时与Java Server–Resin搭配,解决Resin网络连接处理能力弱的问题

Java Server: Resin 替代Tomcat作为Java服务器

代理服务器 : Squid 做图片文件的反向代理缓存

Linux服务器集群系统: LVS(Linux Virtual Server),使用它的4层的负载均衡,替代了很多硬件的负载均衡设备

框架

Java web框架: Struts,王兴同学一开始写校内网果然是用structs,现在的人人网开始慢慢舍弃原有的框架,并自己开发了一个web框架,传闻将来也会开源出来

搜索引擎框架: 基于Lucence提供搜索人的服务

网络框架:Netty,一个Java的网络框架,和apache的mina类似,但比mina更高效,用来提供一些小的服务

服务器系统监控

ganglia Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格

应用层缓存

Memcached   一个纯内存的key-value的cache系统,使用spymemcached作为java的Client

ICE : 一个跨语言的网络通讯框架,框架本身提供了强大的通讯能力,管理工具,负载均衡方案,其跨语言能力也是一个很大的亮点,基于这个框架之上,我们选用合适的语言来提供合适的服务,比如我们使用C++来开发Cache服务,使用Java来开发一些逻辑服务。框架本身可以很重,也可以很轻,具体要看你怎么用:)

Memcached和ICE的缓存服务区别

对Cache的操作粒度不一样,Memcached对Cache对象以binary byte作为一个整体来操作,需要频繁的序列化和反序列化,我们使用ICE提供的Cache服务,可以以Cache对象的一个或者多个字段来操作,比如一个用户对象,我们可以只更新它的姓名。