`
famoushz
  • 浏览: 2856653 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mixi.jp:使用开源软件搭建的可扩展SNS网站

阅读更多

于敦德 2006-6-27
来源:http://www.example.net.cn/2006/06/mixijpsns.html

Mixi目前是日本排名第三的网站,全球排名42,主要提供SNS服务:日记,群组,站内消息,评论,相册等等,是日本最大的SNS网站。Mixi从2003年12月份开始开发,由现在它的CTO - Batara Kesuma一个人焊,焊了四个月,在2004年2月份开始上线运行。两个月后就注册了1w用户,日访问量60wPV。在随后的一年里,用户增长到了21w,第二年,增长到了200w。到今年四月份已经增长到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不划算,所以对于这些照片的策略是直接在用户上传的时候分发到到图片存储服务器上,在用户访问的时候直接进行访问,当然图片的位置需要在数据库中进行记录,不然找不到放在哪台服务器上就郁闷了。

 

附:

mixi.jp的数据库服务器结构:

Hardware: Dell PE850
OS: Fedora Core 4
CPU: Intel Pentium
RAM: 4 GB
Hard Disk: 300GB SCSI
Language: Perl
Database: MySQL Server
Database Size: 836 GB
(Diaries) 400 Million Rows per Table

分享到:
评论

相关推荐

    Web2.0站点构建技术初探

    四、 mixi.jp:使用开源软件搭建的可扩展SNS网站 五、 Technorati的后台数据库架构 六、 通过了解MySpace的六次重构经历,来认识分布式系统到底该如何创建 七、 从LiveJournal后台发展看大规模网站性能优化方法 ...

    jp.co.mixi.monsterstrikeTW_25.5.0_signed_mod_YasKashije_platinmods.com.apk

    jp.co.mixi.monsterstrikeTW_25.5.0_signed_mod_YasKashije_platinmods.com.apk

    高性能高并发服务器架构大全

    mixi.jp:使用开源软件搭建的可扩展SNS网站 51 总概关键点: 51 1,Mysql 切分,采用Innodb运行 52 2,动态Cache 服务器 -- 52 美国Facebok.com,中国Yeejee.com,日本mixi.jp均采用开源分布式缓存服务器Memcache ...

    memcached全面剖析–5.memcached的应用和兼容程序

    此外,我们也从增加可扩展性的方面进行了验证,证明了memcached的速度和稳定性都能满足需要。现在,memcached已成为mixi服务中非常重要的组成部分。图1现在的系统组件mixi使用了许许多多服务器,如数据库服务器、...

    memcached全面剖析.docx

    如今,越来越多的 Web 应用程序开始...而日本的 mixi(http://mixi.jp)则在这方面走在了前面,不仅大规模使用 memcached 作为缓存来加速 Web 应用,而且自行开发了 Tokyo Cabinit、Tokyo Tyrant 等一系列相关的软件。

    Mixi-D+Toolbar.exe.dat

    Mixi-D+Toolbar.exe.dat

    mixi_js:mixi入侵培训 员工学习教材

    如果您使用的是虚拟机,您可以通过以下方法启动服务器。 Python python -m SimpleHTTPServer 要指定端口号时 例) 8888 python -m SimpleHTTPServer 8888 节点 npm 安装 grunt 服务器 图书馆 我正在使用 jQuery 和...

    MiXi2001.github.io

    MiXi2001.github.io

    SNS应用交换「SNS App Swap」-crx插件

    2)访问在线应用程序(http://mixi.jp/run_appli.pl?id=27446)。 3)单击工具栏中的浏览器操作按钮(将首次打开选项页面以接受参数,例如“ App URL”)。 4)在线应用将根据您在选项页面中的输入值替换为新应用。 ...

    SNS App Swap-crx插件

    2)访问在线应用程序(http://mixi.jp/run_appli.pl?id=27446)。 3)单击工具栏中的浏览器操作按钮(将首次打开选项页面以接受参数,例如“ App URL”)。 4)在线应用将根据您在选项页面中的输入值替换为新应用。 ...

    自用样式解决方案:使用一像素边框

    import 'common.scss'  在需要1px边框的元素样式的开头添加@include px-border(#color,(some_position));。 其中color为边框颜色,some_position中填入需要边框的方位(不填则默认为所有方向),  ...@mixi

    Laravel开发-mixi

    Laravel开发-mixi Laravel 4的Mixi图形API

    mixi-inc.github.io

    mixi-inc.github.io

    StandardPlusTokenizer:Lucene 的 StandardTokenizer 的扩展

    java -cp .../jflex-1.6.0.jar jflex.Main src/java/jp/co/mixi/rd/lucene/analysis/StandardPlusTokenizerImpl.jflex 在 4.10.0 之后,您应该编辑结果 src/java/jp/co/mixi/rd/lucene/analysis/...

    ソーシャルゲームPCブラウザ-crx插件

    pc是一个观看者扩展,可以与mobage,gree,mixi,ameba,dmm等的社交游戏舒适地玩.thtp://socialgamebrowser.com/ mobage(gree)·gree(gree)· Ameba·MIXI·允许您播放Mobage,Mixi,DMM等社交游戏的观众延期...

    memcached-win64-1.4.4-14.rar

    Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。 Memcached是以LiveJournal旗下Danga ...一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

    Canonical Url Open-crx插件

    (4)mixi(mixi check)设置了mixi check的PC的URL。 仅当网页的内容具有以下规格时,它才起作用。 <input type="hidden" name="pc_url" value="http://www.????.com/index.html">(5)URL被唯一更正。 它是...

    Memcached缓存资料

    一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。 Memcached 的守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与...

Global site tag (gtag.js) - Google Analytics