人人网中间层:问题篇

由开源软件组成的系统

与很多大型的网站一样,人人网的系统全部是由开源软件构建的。使用Nginx做前端接入,resin做容器,Memcached做通用cache,MySQL做数据库,使用Linux操作系统。
除了上述的部分外,人人网还有一个与众不同的中间层。中间层以服务的形式存在,位于MySQL和resin中间,提供高并发低成本的数据访问层。

数据库的压力

在上述结构系统中,数据库的性能往往成为系统瓶颈。人人网在发展的过程中不断重构,改变最大的就是数据库部分。大概的步骤是“优化SQL”,“业务拆分”,“垂直拆分”和“水平拆分”几个阶段,关于数据库优化的细节将来再引用到这里。
经过优化后的数据库,单台可以承担每秒3000次的主键查询。再提高性能的优化,我们采用的方案是使用中间层。

性能目标

增加中间层可以在不增加服务器数量的前提下,提高服务的整体性能,并且提高系统的可扩展性。这里简要列举一些使用中间层服务优化的效果。

实时更新的数据

用户的个人信息数据,目前的写操作500次/秒,读操作2万次/秒。这些数据分布在数十个数据表中,如果用数据库做10次主键查询,需要的时间将会非常可观。中间层的缓存服务把这个性能稳定在了99.9%的请求时间小于20ms。
判断好友关系,读操作900次/秒。这个操作现在使用6G内存存储了所有的好友关系,在2ms内返回任意两人的好友关系。
关联查询,仅好友列表就有1300次/秒。如果使用关联查询,数据库需要同步很多无用的字段。现在只需要两次内存请求,并且衍生出很多种类的排序。

大量聚合的访问

聚合的页面在SNS中是访问量最大的部分。首页集成的功能多达17个模块,这些模块之间的关系相对独立。为了快速的把这些数据集合在一起,就需要迅速获取数据。
我们对整体技术框架的要求是,关键页面执行时间要在100ms以内。

Session同步

众多的resin服务器之间,如何共享用户身份验证的结果,在各种session共享机制中,我们的方案是使用中间层服务来集中存储的。

待续

问题篇只是开端,接下来的“求解篇”将会分析人人网中间层的主要应用场景。“实践篇”将会举例一个典型的中间层服务。

Leave a Reply

Your email address will not be published. Required fields are marked *

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.