使用开源软件搭建的可扩展SNS网站

文/于敦德

Mixi目前是日本排名第三的网站,全球排名42,主要提供SNS服务:日记、群组、站内消息、评论、相册等等,是日本最大的SNS网站。Mixi从2003年12月份开始开发,由现在它的CTO - Batara Kesuma一个人焊,焊了四个月,在2004年2月份开始上线运行。两个月后就注册了1w用户,日访问量60wPV。在随后的一年里,用户增长到了21w,第二年,增长到了200w。到今年4月份已经增长到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对内存要求也不是太高,所以可以和平共处,更有效的利用资源。

图片的处理就显得相对简单的多了。对于mixi而言,图像主要有两部分:一部分是经常要使用到的,像用户头像、群组的头像等等,大概有100多GB,它们被Squid和CDN所缓存,命中率相对比较高;另一部分是用户上传的大量照片,它们的个体访问量相对而言比较小,命中率也比较低,使用Cache不划算,所以对于这些照片的策略是直接在用户上传的时候分发到图片存储服务器上,在用户访问的时候直接进行访问,当然图片的位置需要在数据库中进行记录,不然找不到放在哪台服务器上就郁闷了。

《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”相关推荐

  1. 整理 | 程序员必读书单1.0

    编程语言 C和C++开发 Java 开发 <Java核心技术> <Java编程思想> <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> 周志明 著 A ...

  2. 程序员快放弃 Android 9.0 吧,10.0 正在来的路上!

    本文经授权转自终端研发部(ID:codeGoogler) 目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 An ...

  3. 【读书笔记】程序员修炼手册—实战式学习最有效(项目驱动)

    持续学习&持续更新中- 学习态度:守破离 程序员修炼手册-实战式学习最有效(项目驱动) 1.学会观察这个世界(学会思考) 2.学会学习再去学习(守破离) 守 破 离 3.要动手,实战吧(JUS ...

  4. 程序员学习和实战指南-工欲善其事必先利其器(2)

    VS Code前端插件 Babel JavaScript Beautify css/sass/scss/less Better Comments Bookmarks CSS Formatter CSS ...

  5. 程序员的奋斗史(三十五)——人在囧途之应聘篇(五)

    文/温国兵 人活着总要学会尝试,并在试错中成长. 周一,微凉.做BRT到面试地点的途中,仰头一望,灰蒙蒙的天.在我记忆里本以为只有成都才可见的雾霾天原来广州同样可以看到.一座座高楼大厦直逼云霄,好似要 ...

  6. 老婆:“给我讲讲你们程序员好笑的事情呗?”我扔给她这篇文章,她狂笑不止!

    我老婆有个习惯,就是不开心的时候去看搞笑视频,昨天她又不开心了,要我给她讲讲程序员的搞笑事情,于是我就把我这篇文章的草稿给她看,结果她笑到自己肚子疼,直言"我终于懂你们程序员的痛苦了&quo ...

  7. TensorFlow 2.0开发者预览版发布

    整理 | Jane 出品 | AI科技大本营 从去年 8 月 Google 公开发布消息正在研发 TensorFlow 2.0 ,让我们在 12 月 提前看到了一些 高级 API 的变化,今天我们终于 ...

  8. 微信小程序云开发实现上传文件和预览下载文件

    微信小程序云开发实现上传文件和预览下载文件 一.前言 目前微信提供了一个接口 wx.chooseMessageFile 它能让用户从聊天记录里面选择一个或者多个文件,然后返回它的一些信息,列入文件的p ...

  9. nacos配置ap_Nacos 1.0.0 功能预览

    本文来自于我的个人主页:Nacos 1.0.0 功能预览,转载请保留链接 ;) Nacos 1.0.0 是正式 GA 的版本,在架构.功能和API设计上进行了全方位的重构和升级,1.0.0版本标志着N ...

最新文章

  1. 慕了!北京大学新校区来了!
  2. semilogx 多条曲线_怎么让两个指数在一个坐标,matlab里怎样一个坐标上显示多个曲线,而且横轴要用指数形式的?谢谢...
  3. Nexus安装及配置
  4. mysql关联查询去重_MySQL外键和高级查询(连接查询、联合查询、子查询、去重查询)...
  5. 基础才是重中之重~再说面向接口的编程
  6. Lua元表(Metatable)简易教程
  7. Extjs Grid 中给已经添加过Filter的列增加标识
  8. element提交图片限制一张_element-ui上传图片限制图片比例
  9. metasploit学习之路(二) msfconsole基本使用
  10. Springboot毕设项目房屋租赁系统4yvi2(java+VUE+Mybatis+Maven+Mysql)
  11. 八十年代的古董级晶体管直流稳压电源 WYJ-15V/1A
  12. 郭天祥 10天搞定单片机 (3)数码管+中断
  13. python监控网站更新_Python 通过网站search功能监控网站内容更新
  14. 酷睿7代cpu安装win7
  15. 易到用车服务器修复了提现,易到用车提现最新消息 易到用车跑路了吗?
  16. android圆形进度条
  17. 从苏宁电器到卡巴斯基第34篇:我与卡巴斯基的邂逅(上)
  18. 世界上最神奇的数字 算法求解
  19. Kotlin Jetpack Compose remember 给Icon添加透明度 remember 添加参数来记录其位置
  20. 计算机科学与技术考研双非院校排名,ESI工科高校新排名:两所双非院校跻身世界500强...

热门文章

  1. 《漏洞战争——软件漏洞分析精要》读后感(一)
  2. Java 入门练习(6 - 10)
  3. 电脑密码忘记了? 使用U盘启动破解电脑密码
  4. CANoe从入门到精通“保姆级”教程(五)- Panel面板设计之一
  5. 经典递归——兔子繁殖问题
  6. linux关闭触摸板命令
  7. 10天完成民猫电商毕设——商品模块实现1(3th day)
  8. Linux下通过USB连接并利用手机拨号上网
  9. 发现了个比HomeShare更好用的单网卡共享上网的东西Sygate
  10. 【英语】大学英语CET考试,导学规划与听力部分1(选项发音,短选项答题技巧)