首頁 後端開發 php教程 听豆瓣架构变迁分享会总结_PHP教程

听豆瓣架构变迁分享会总结_PHP教程

Jul 13, 2016 pm 05:17 PM
server 分享 變遷 左右 總結 數位 架構 註冊 使用者 目前 重點 豆瓣

要点如下:


目前23台pc server


每天pv数2k万左右。注册用户数300万。
表的数据,大部分是行数量是千万的。

5个人算法团队。另外开发人员总共11个,包括全职和兼职(以前看百姓网分享其技术也只有10名)

06年的时候每天120万左右动态请求。这个时候主要瓶颈在磁盘i/0上面,拿到风投,有钱购买硬件设备。购买两台iu服务器(双核,4g内存)
一台作为应用服务器,一台作为数据库服务器,迁移到双线ip机房,使用dns解析不同网段ip(自己去找哪些网段是电信的哪些网段是网通,然后自己进行解析)。看演讲后面提到的机房调整感觉到,其实这是走了弯路,可以选择一个好的机房来解决dns解析方面(后来总结是靠ip段来分布数据不靠谱)

具体怎么做,就是放到一个支持多线的(教育网铁通等)机房,现在我们公司用的阿里云就是多线)
那么这样子就不需要自己多ip段分配了(就是判断访问用户是电信还是网通等)。

使用内存缓存(豆瓣使用的是memcached)的两点原则:
1、对于需要比较消耗资源的数据
2、需要重复使用的数据。如果只需要使用一次,那么即便是比较消耗资源,丢入缓存也没多少意义

理解:内存缓存也需要内存,没必要浪费。如果不需要重复使用,丢入内存中也比较浪费(毕竟内存不便宜,也占用服务器资源)

豆瓣的memached命中率挺高的。靠这个也缓解了很多压力。



innodb并发访问支持好,因为支持行级存储。使用myisam还是innodb他们的的业务特点是:读多写少使用myisam,写多读少使用innodb

数据库切分方面:目前是按照功能进行分区(作者没有详细解释,应该是按照功能模块划分表。一个功能模块相关的表放到一个库中去),提到,采用了经典的mysql主从架构。所以每个库其实是重复三份的(他说的主辅库)。应该是三个mysql从服务器

分库之后,操作多个库,使用游标的方式获取具体的库和具体的表。传入参数进去(具体没看懂)

数据库主从复制延迟问题一直是一个常见问题。

购买硬盘是一个教训:刚开始还是宁愿投资多点钱购买好的点的磁盘,因为磁盘这东西升级不太可能。到时候网站扛不住了。仍然得换。那么,刚开始宁愿多花点钱,购买高速磁盘,因为业务如果发展快了的话,就得换。即便贵点,磁盘仍然没有浪费的。



200万每天的动态请求的时候,豆瓣提到,静态的小文件服务(用户头像、封面图片)使得磁盘i/0成为瓶颈,以前愚蠢得把图片都放到一个目录下面,这个目录下面有几十万个小文件(直接导致不能使用ls命令,一使用服务器就死掉了),这个时候把文件分目 录。分成每个目录存储10000个文件。



有专门的数据挖掘团队。算法团队进行矩阵计算,把结果放入mysql,供前端查询显示出来。


豆瓣的fs是专门针对图片存储,自己开发的。其实机制是参考了amazon的,写的时候写三份数据。


磁盘随机寻道比吞吐量更加重要,当时的性能瓶颈在磁盘寻道速度上(这点跟之前看淘宝的图片文件系统分析的大量的图片访问带来的磁盘磁头频繁定位造成的延时类似)


后来把所有myisam表改为innodb表。

innodb的缓存:是在进程中自我管理(也就是内存中),而myisam的缓存是基于文件中(受操作系统控制)。以前既用myisam表也用innodb表,导致两种类型的表相互竞争内存,效率不高。索引全部换成innodb存储引擎(这点我不是很理解,只明白其考虑点是为了更好利用内存)



应用服务器故障:nginx自带功能。


图片的流量成为很大成本:迁移到天津机房是因为更加便宜点。机柜比较便宜,把数据挖掘方面的数据和图片数据都搬过去。

北京与天津两个机房。里面各自搭建mysql的master-slave结构。



搜索方面:以前一直使用mysql的全文索引。后来迁移使用sphinx(这个结合mysql来使用,作为mysql的一个存储引擎),后来又变为xapain

为什么没使用sphinx了?没有详细解释


使用MogileFS来存储图片,后来又自己开发了doubanfs存储。迁移的原因:mogilefs出现性能瓶颈,由于mogilefs是把元数据(命名空间, 和文件在哪里)存储在mysql中,数据库行数变多之后,就会变得越来越慢。而大量的小文件需要读取数据库,也影响了速度。当时的行数增长非常快,当时瓶颈在于mysql数据库上。



大字段影响了数据库的性能,实际上数据表行数并不多。就是大字段的影响。大文本字段移除出去,存储到自己开发的doubanDB中(是一个key-value数据库,参考了亚马逊的dymamo,进行简化)。底层存储基于tokyocabinet。后来把doubanfs重写,基于doubandb实现,把图片存储进去。


使用双master方案。解决了复制延迟问题,因为写和读都是对同一个master,读取到的数据是最新的。而以前:从master写入,然后从slave读,存在数据延迟



部署lvs。

之前使用spread作为消息队列,后来使用rabbitMQ替代


=========================================================


总结:照搬其架构和技术方案是不可行的。借鉴他的错误经验和背后的设计思想才能学到本质(主要了解为什么那样子做,出于什么考虑)。

教训:磁盘的选择和机房的选择。磁盘选择转数快的,开始成本贵点值得。

分库,首先从功能角度划分区。暂时还没必要去做水平分区。功能相关表放到一个库中或者单独的服务器上这是必经的阶段。

把钱花在内存上是值得的的,一台机器的内存永远不嫌多,数据库消耗的内存比较多,一般内存往往会成为瓶颈(大量连接,计算数据都能导致内存不够用)。memcached并不廉价(网络i/0,消耗cpu)。放入memcached的东西要慎重。

避免数据库的join操作(这点与以前看的石展分享的观点类似,减少join操作,宁愿拆分成多次获取数据,facebook的架构中也提到不做JOIN 操作)



总体感觉,从豆瓣中学到数据库方面的经验是分库方面。他们的访问量级别还不需要进行到水平切分,进行分库即可了,按照业务功能分区。一个业务功能模块相关的表都拆分到同一个库中去。然后对数据库服务器做主从同步保持数据热备份。

Sharding 在业界的应用场景基本上也就是这种读应用比较重的情况,而且对事务的安全性要求不高,这样的场景会非常适合。

sata*3查了一下 450G 1000多块钱一个。

sata硬盘故障率比较高,换了scsi硬盘。

针对图片存储或者小文件存储方面,因为量大(流量成本,存储成本),开发了自己的文件系统

图片存储如果依赖于数据库做存储,数据量大之后,确实会成为瓶颈(难怪淘宝的图片文件系统,将一部分元数据隐藏到图片的保存文件名上)


疑问:北京和天津跨机房,两边的mysql之间进行同步数据,或者是天津那边的数据挖掘程序往北京写入数据,这个速度如何?

这个我查了一下资料,一般是需要使用专用光钎网络通道。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/626607.htmlTechArticle要点如下: 目前23台pc server 每天pv数2k万左右。注册用户数300万。 表的数据,大部分是行数量是千万的。 5个人算法团队。另外开发人员总...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何用小紅書號找出用戶?能查到手機號碼嗎? 如何用小紅書號找出用戶?能查到手機號碼嗎? Mar 22, 2024 am 08:40 AM

隨著社群媒體的迅速發展,小紅書已經成為了備受青睞的社群平台之一。用戶可以透過建立小紅書號來展示個人身份,並與其他用戶交流互動。如果你需要找某個用戶的小紅書號碼,可以按照以下簡單步驟來操作。一、如何用小紅書號找出用戶? 1.開啟小紅書APP,點選右下角的「發現」按鈕,然後選擇「筆記」選項。 2.在筆記清單中,找到你想找的用戶發布的筆記。點擊進入筆記詳情頁。 3.在筆記詳情頁中,點選使用者頭像下方的「追蹤」按鈕,即可進入該使用者的個人首頁。 4.在使用者個人主頁右上角,點選三個點按鈕,然後選擇「個人資訊

小紅書怎麼註冊多個帳號?註冊多個帳號會被發現嗎? 小紅書怎麼註冊多個帳號?註冊多個帳號會被發現嗎? Mar 25, 2024 am 09:41 AM

小紅書作為一個集社交和電商於一身的平台,吸引了越來越多的用戶加入。有些用戶希望能夠註冊多個帳號以便更好地體驗和小紅書互動。那麼,小紅書要怎麼註冊多個帳號呢?一、小紅書怎麼註冊多個帳號? 1.使用不同手機號碼註冊目前,小紅書主要採用手機號碼註冊帳號的方式。用戶有時會嘗試購買多個手機號碼卡,並利用它們註冊多個小紅書帳號。但這種做法有一些限制,因為購買多個手機號碼卡比較麻煩且成本較高。 2.使用信箱註冊除了手機號碼,信箱也可以用來註冊小紅書帳號。使用者可以準備多個郵箱地址,然後分別用這些郵箱地址註冊帳號。不過

怎麼註冊小紅書帳號?註冊小紅書帳號需要什麼? 怎麼註冊小紅書帳號?註冊小紅書帳號需要什麼? Mar 22, 2024 am 10:16 AM

小紅書,一個集生活、娛樂、購物、分享於一體的社交平台,已成為許多年輕人日常生活中不可或缺的一部分。那麼,如何註冊小紅書帳號呢?一、怎麼註冊小紅書帳號? 1.開啟小紅書官網或下載小紅書APP。點擊下方的「註冊」按鈕,您可以選擇不同的註冊方式。目前,小紅書支援手機號碼、信箱以及第三方帳號(如微信、QQ、微博等)進行註冊。 3.填寫相關資料。根據選擇的註冊方式,填寫相應的手機號碼、郵箱或第三方帳號資訊。 4.設定密碼。設定一個強壯的密碼,確保帳號安全。 5.完成驗證。根據提示完成手機驗證或信箱驗證。 6.完善個人

小紅書帳號怎麼註冊?它的帳號異常怎麼恢復? 小紅書帳號怎麼註冊?它的帳號異常怎麼恢復? Mar 21, 2024 pm 04:57 PM

小紅書作為全球最受歡迎的生活方式分享平台之一,吸引了大量用戶關注。那麼,如何註冊小紅書帳號呢?本文將為您詳細介紹小紅書帳號的註冊流程,並解答小紅書帳號異常如何復原的問題。一、小紅書帳號怎麼註冊? 1.下載小紅書APP:在手機應用程式商店搜尋並下載小紅書APP,安裝完成後開啟。 2.註冊帳號:開啟小紅書APP後,點選首頁右下角的「我」按鈕,然後選擇「註冊」。 3.填寫註冊資料:依照指示填寫手機號碼、設定密碼、驗證碼等註冊資料。 4.完善個人資料:註冊成功後,根據指示完善個人資料,如姓名、性別、生日等。 5.設定

網路易雲音樂怎麼分享到微信朋友圈_網易雲音樂分享到微信朋友圈教程 網路易雲音樂怎麼分享到微信朋友圈_網易雲音樂分享到微信朋友圈教程 Mar 25, 2024 am 11:41 AM

1.首先我們進入到網易雲音樂中,然後在軟體首頁介面中,點選進入到歌曲的播放介面中。 2.然後在歌曲播放介面中,找到右上方的分享功能按鈕,如下圖紅框所示位置,點擊選擇分享的管道;在分享管道中,點擊底部的「分享至」選項,然後選擇第一個“微信朋友圈”,即可將內容分享至微信朋友圈。

Spring Data JPA 的架構和工作原理是什麼? Spring Data JPA 的架構和工作原理是什麼? Apr 17, 2024 pm 02:48 PM

SpringDataJPA基於JPA架構,透過映射、ORM和事務管理與資料庫互動。其儲存庫提供CRUD操作,派生查詢簡化了資料庫存取。此外,它使用延遲加載,僅在必要時檢索數據,從而提高了效能。

百度網盤怎麼分享文件給好友 百度網盤怎麼分享文件給好友 Mar 25, 2024 pm 06:52 PM

近期,百度網盤安卓客戶端迎來了全新的8.0.0版本,這個版本不僅帶來了許多變化,還增添了許多實用功能。其中,最引人注目的便是資料夾共享功能的增強。現在,使用者可以輕鬆邀請好友加入,共同分享工作與生活中的重要文件,實現更便利的協作與分享。那麼究竟該如何分享給好友自己需要分享的文件呢,下文中本站小編就會為大家帶來詳細內容介紹,希望能幫助大家! 1)開啟百度雲APP,先點選在首頁選擇相關的資料夾,再點選介面右上角的【...】圖示;(如下圖)2)接著點選「共用成員」一欄中的【+ 】,最後在勾選所

一個手機號碼怎麼註冊兩個B站號? B站怎麼解除手機綁定? 一個手機號碼怎麼註冊兩個B站號? B站怎麼解除手機綁定? Mar 21, 2024 pm 10:10 PM

B站(嗶哩嗶哩)作為中國年輕人非常喜歡的影片分享網站,吸引了大量的用戶。有些使用者希望擁有兩個B站帳號,以便於分開管理和使用。那麼,一個手機號碼要怎麼註冊兩個B站號碼呢?本文將圍繞這一問題以及如何解除手機綁定展開講解。一、一個手機號碼怎麼註冊兩個B站號? 1.註冊新帳號:首先,在手機上開啟B站App或登入官網,點選「註冊」按鈕,選擇註冊方式,可以使用手機號碼、信箱或第三方帳號(如微信、QQ等)進行註冊。 2.註冊帳號時,請根據系統提示填寫必要的信息,包括手機號碼、驗證碼以及設定密碼等。務必確保兩個帳號使用不同

See all articles