自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

網(wǎng)站擴(kuò)展實(shí)例:1億用戶、50億pv的Tagged架構(gòu)進(jìn)化史

譯文
運(yùn)維 系統(tǒng)運(yùn)維 新聞
一家2004年創(chuàng)建的試水社交網(wǎng)站,經(jīng)過(guò)7年的成長(zhǎng)和擴(kuò)展,現(xiàn)在已經(jīng)擁有了1億用戶。平均50億次的pv,承擔(dān)在1000多臺(tái)服務(wù)器的網(wǎng)站架構(gòu)上。Tagged網(wǎng)站,現(xiàn)在承載了1億個(gè)用戶、1千臺(tái)服務(wù)器和50億次頁(yè)面瀏覽量。這個(gè)過(guò)程是如何實(shí)現(xiàn)的?本文中,Tagged的CTO兼聯(lián)合創(chuàng)始人 Johann Schleier-Smith 將為我們介紹。

【51CTO 8月16日外電頭條】一家2004年創(chuàng)建的試水社交網(wǎng)站,經(jīng)過(guò)7年的成長(zhǎng)和擴(kuò)展,現(xiàn)在已經(jīng)擁有了1億用戶。平均50億次的pv,承擔(dān)在1000多臺(tái)服務(wù)器的網(wǎng)站架構(gòu)上。本文將要介紹的就是這個(gè)叫Tagged的網(wǎng)站——Tagged架構(gòu)實(shí)例:1億個(gè)用戶、1千臺(tái)服務(wù)器和50億次頁(yè)面瀏覽量。下面,Tagged的CTO兼聯(lián)合創(chuàng)始人 Johann Schleier-Smith 將為我們介紹Tagged網(wǎng)站架構(gòu)的成長(zhǎng)歷程。

自2004年以來(lái),Tagged從一家試水社交領(lǐng)域的小不點(diǎn)網(wǎng)站,逐漸變成全球***的社交網(wǎng)絡(luò)之一,數(shù)百萬(wàn)的成員訪問(wèn)該網(wǎng)站以結(jié)交新成員,每個(gè)月的頁(yè)面瀏覽量達(dá)到50億次。這個(gè)逐步發(fā)展的歷程迫使我們Tagged不斷完善網(wǎng)站架構(gòu),最終獲得了功能異常強(qiáng)大的平臺(tái)。

***個(gè)階段:2004年,PHP Web應(yīng)用程序、10萬(wàn)個(gè)用戶和15臺(tái)服務(wù)器

2004年,PHP Web應(yīng)用程序、10萬(wàn)個(gè)用戶和15臺(tái)服務(wù)器

孵化器有著一種快速成型文化:每年通常推出兩個(gè)新概念,尋覓其中的大贏家。正是在這樣的文化中,Tagged 應(yīng)運(yùn)而生。LAMP是適合這種類(lèi)型的工作的自然選擇;這種工作注重靈活性和快速開(kāi)發(fā)周期。當(dāng)時(shí),Java開(kāi)發(fā)主要面向大企業(yè)的開(kāi)發(fā)工作,Python吸引的編程員***,Perl方面的編程員又不是我們所要的那一種。我們還知道,雅虎是PHP的大力支持者;所以一旦有需要,完全有可能擴(kuò)展業(yè)務(wù)規(guī)模。

我在以前的項(xiàng)目上運(yùn)行MySQL方面有著豐富的經(jīng)歷,這讓我對(duì)這項(xiàng)技術(shù)愛(ài)恨交加。本著嘗試的精神,我們?yōu)門(mén)agged購(gòu)買(mǎi)了幾份入門(mén)級(jí)Oracle許可證,看看甲骨文的技術(shù)是不是用起來(lái)更好。

值得注意的是,許多構(gòu)建的小型網(wǎng)站仍然就像早期的Tagged。具有一種簡(jiǎn)單的美;無(wú)狀態(tài)的PHP與有狀態(tài)的Oracle之間的雙向分離正是一臺(tái)服務(wù)器中最棘手的部分,而額外的Web顯示計(jì)算能力很容易添加。

第二個(gè)階段:2005年,緩存PHP Web應(yīng)用程序、100萬(wàn)個(gè)用戶和20臺(tái)服務(wù)器

2005年,緩存PHP Web應(yīng)用程序、100萬(wàn)個(gè)用戶和20臺(tái)服務(wù)器

即使只有在8臺(tái)服務(wù)器的時(shí)候,Tagged的網(wǎng)站流量也要比大多數(shù)人所知道的來(lái)得多。幸運(yùn)的是,分布式內(nèi)存緩存系統(tǒng)memcached帶來(lái)了兩個(gè)優(yōu)勢(shì):既消除了90%以上的數(shù)據(jù)庫(kù)讀操作,又確保含有大量不同信息的社交網(wǎng)絡(luò)面面可以迅速顯示。

自一開(kāi)始,我們的對(duì)象緩存注重顯式緩存更新,支持更簡(jiǎn)單的技術(shù),比如刪除無(wú)效的鍵;或者根據(jù)計(jì)時(shí)器,使失效數(shù)據(jù)無(wú)效。這種方法的缺點(diǎn)是代碼比較復(fù)雜,但大幅減輕了數(shù)據(jù)庫(kù)負(fù)載,而且使網(wǎng)站保持快速運(yùn)行,涉及經(jīng)常更新的對(duì)象時(shí)更是如此。

我們的網(wǎng)站繼續(xù)越來(lái)越復(fù)雜,在標(biāo)準(zhǔn)的社交網(wǎng)絡(luò)功能(交友、個(gè)人檔案和訊息)的基礎(chǔ)上,添加了搜索和社交發(fā)現(xiàn)等功能。我的團(tuán)隊(duì)說(shuō)服我使用Java來(lái)建立搜索功能,那樣我們就能得益于Lucene庫(kù)。當(dāng)我們學(xué)會(huì)了讓Java順暢運(yùn)行后,我有一種如釋重負(fù)的感覺(jué);我早期用過(guò)JDK 1.0,感覺(jué)不爽,所以不大情愿使用Java,但是后來(lái)卻對(duì)這個(gè)平臺(tái)滿懷熱情。

第三個(gè)階段:2006年,數(shù)據(jù)庫(kù)擴(kuò)展、1000萬(wàn)個(gè)用戶和100臺(tái)服務(wù)器

2006年,數(shù)據(jù)庫(kù)擴(kuò)展、1000萬(wàn)個(gè)用戶和100臺(tái)服務(wù)器

此時(shí)Tagged已擁有1000萬(wàn)個(gè)注冊(cè)用戶,隨時(shí)都有成千上萬(wàn)個(gè)用戶在線,我們開(kāi)始著手解決我一直憂心忡忡的挑戰(zhàn)。那時(shí)我們剛籌集到了一筆資金,竭力尋求發(fā)展,但是數(shù)據(jù)庫(kù)亟需添加容量。我們進(jìn)行了一次又一次的緩存或SQL調(diào)整和優(yōu)化,但服務(wù)器的處理器其占用率還是會(huì)一再逼近100%大關(guān)。

向上擴(kuò)展系統(tǒng)的想法是個(gè)權(quán)宜之計(jì),但是多插座服務(wù)器硬件動(dòng)輒數(shù)百萬(wàn)美元,于是我們選擇了Oracle真正應(yīng)用集群RAC,該系統(tǒng)讓我們可以使用標(biāo)準(zhǔn)網(wǎng)絡(luò)系統(tǒng)來(lái)連接數(shù)量眾多的大眾化Linux主機(jī),以構(gòu)建一個(gè)龐大的數(shù)據(jù)庫(kù)。再結(jié)合***處理器具有的優(yōu)勢(shì),Oracle RAC的容量比我們的***臺(tái)數(shù)據(jù)庫(kù)服務(wù)器足足增加了20倍,這一點(diǎn)很重要,而且允許應(yīng)用程序開(kāi)發(fā)人員可以繼續(xù)致力于開(kāi)發(fā)新的功能特性。

Tagged通過(guò)結(jié)合來(lái)自一個(gè)龐大內(nèi)存中數(shù)據(jù)集的統(tǒng)計(jì)數(shù)字,開(kāi)始提供個(gè)性化的人員匹配(people-matching)推薦服務(wù)。用PHP實(shí)現(xiàn)這一點(diǎn)完全不現(xiàn)實(shí),于是Java進(jìn)一步滲透到了我們的環(huán)境中。

第四個(gè)階段:2007年,數(shù)據(jù)庫(kù)拆分、5000萬(wàn)個(gè)用戶和500臺(tái)服務(wù)器

2007年,數(shù)據(jù)庫(kù)拆分、5000萬(wàn)個(gè)用戶和500臺(tái)服務(wù)器

毫無(wú)疑問(wèn),拆分?jǐn)?shù)據(jù)庫(kù)是***有難度的任務(wù),也是在擴(kuò)展Tagged方面***有成效的技術(shù)。由于在多個(gè)數(shù)據(jù)庫(kù)之間分割用戶,我們最終擁有了這種設(shè)計(jì):在所有地方都允許我們只要添加硬件,就可以進(jìn)行擴(kuò)展。

我們Tagged的一條規(guī)定是,將每個(gè)表分成64個(gè)分區(qū);我們牢牢遵守這個(gè)不成文的規(guī)定,除非有著非常誘人的理由才允許有例外。只有得益于游戲玩家之間高性能受保護(hù)事務(wù)的某些游戲才在單獨(dú)的數(shù)據(jù)庫(kù)中垂直分區(qū)。

拆分現(xiàn)有的數(shù)據(jù)意味著針對(duì)數(shù)TB的數(shù)據(jù)進(jìn)行復(fù)雜的轉(zhuǎn)換工作。一開(kāi)始,我們每次逐個(gè)著手解決功能特性,依賴應(yīng)用程序代碼來(lái)代替連接(join),但***我們還是在應(yīng)用程序的核心部分遇到了一大批表,這些表的結(jié)合得太緊密了,這個(gè)方法行不通。于是我們編寫(xiě)了生成SQL的遷移代碼,導(dǎo)出、轉(zhuǎn)換和重新裝入了數(shù)億行的數(shù)據(jù),并使用觸發(fā)器來(lái)跟蹤源系統(tǒng)上面出現(xiàn)的變化,逐漸更新目標(biāo),那樣***的同步所帶來(lái)的停運(yùn)時(shí)間不到30分鐘。

擁有許多數(shù)據(jù)庫(kù)意味著擁有許多的數(shù)據(jù)庫(kù)連接。尤其是由于我們添加了更多的“社交發(fā)現(xiàn)”功能(比如我們的***項(xiàng)約會(huì)功能Meet Me),拆分工作可能會(huì)讓PHP不堪重負(fù),畢竟PHP缺少甲骨文的連接池技術(shù)。為了解決這個(gè)問(wèn)題,我們開(kāi)發(fā)了一款Java應(yīng)用程序,負(fù)責(zé)提供運(yùn)行查詢的Web服務(wù);該應(yīng)用程序還繼續(xù)提供一個(gè)非常方便的監(jiān)控點(diǎn),便于輕松自如地處理數(shù)據(jù)庫(kù)故障。

第五個(gè)階段:2010年,架構(gòu)完善和擴(kuò)展、8000萬(wàn)個(gè)用戶和1000臺(tái)服務(wù)器

2010年,架構(gòu)完善和擴(kuò)展、8000萬(wàn)個(gè)用戶和1000臺(tái)服務(wù)器

這次我們把時(shí)間提前幾年。解決了關(guān)鍵的數(shù)據(jù)庫(kù)擴(kuò)展性問(wèn)題后,我們發(fā)現(xiàn)通過(guò)添加硬件來(lái)支持?jǐn)U展相當(dāng)容易。PHP和memcached繼續(xù)很好地服務(wù)于我們,支持功能特性的快速開(kāi)發(fā)。

在這一段期間,擴(kuò)展性方面的考量因素轉(zhuǎn)向了減少故障和應(yīng)對(duì)越來(lái)越多的易損壞部件所帶來(lái)的威脅。通過(guò)負(fù)載均衡器的運(yùn)行狀況檢查和自動(dòng)關(guān)閉毫無(wú)反應(yīng)的服務(wù),實(shí)現(xiàn)了針對(duì)Web層的全方位保護(hù),避免了各種相關(guān)問(wèn)題。我們?cè)谠O(shè)計(jì)核心組件的架構(gòu)時(shí)還考慮到了彈性;比如說(shuō),如果memcached系統(tǒng)因連接過(guò)多而出現(xiàn)過(guò)載,那么一旦這個(gè)負(fù)擔(dān)卸下,它必須立即復(fù)原。

Java扮演了極其重要的角色,一方面歸因于Java越來(lái)越得到接受,擁有相應(yīng)專長(zhǎng)的人也越來(lái)越多;另一方面是由于面臨的挑戰(zhàn)越來(lái)越多。為了對(duì)付垃圾郵件及其他濫用現(xiàn)象,我們的算法充分利用了龐大的共享內(nèi)存空間,還充分利用了計(jì)算密集型方法。社交游戲也得益于Java的高性能和并發(fā)控制,但面臨的代價(jià)是系統(tǒng)很復(fù)雜;現(xiàn)在不同的應(yīng)用程序池比以前多得多,有待我們加以管理。

展望未來(lái)

如今,Tagged每個(gè)月給數(shù)百萬(wàn)成員帶來(lái)50億次的頁(yè)面瀏覽量。由于我們獲得了可擴(kuò)展的設(shè)計(jì),因而可以將大部分精力花在構(gòu)建能夠更好地服務(wù)于用戶的功能特性上。我們擁有開(kāi)發(fā)可擴(kuò)展軟件的高效工具,但我們可以設(shè)想工具會(huì)出色得多,于是目前的精力和資源主要集中于軟件庫(kù),提高編程人員的效率和生產(chǎn)力,并且改進(jìn)Stig——Stig是我們即將推出的采用開(kāi)源技術(shù)的基于圖形的數(shù)據(jù)庫(kù)項(xiàng)目,該項(xiàng)目為大規(guī)模的社交網(wǎng)絡(luò)、實(shí)時(shí)服務(wù)和云應(yīng)用系統(tǒng)而設(shè)計(jì)。

原文:Tagged Architecture - Scaling To 100 Million Users, 1000 Servers, And 5 Billion Page Views

【編輯推薦】

  1. 大數(shù)據(jù)下的數(shù)據(jù)分析平臺(tái)架構(gòu)
  2. 淺析淘寶數(shù)據(jù)魔方技術(shù)架構(gòu)
  3. Stack Overflow架構(gòu)揭秘(軟硬件、人員、數(shù)字)
責(zé)任編輯:yangsai 來(lái)源: 51CTO.com
相關(guān)推薦

2013-05-29 10:33:16

2011-09-01 09:34:21

架構(gòu)

2014-09-01 16:29:34

2018-08-22 17:58:01

數(shù)據(jù)平臺(tái)數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)

2011-12-21 16:44:00

信息圖手機(jī)進(jìn)化史

2018-03-23 12:20:25

數(shù)據(jù)中心網(wǎng)絡(luò)數(shù)據(jù)

2010-10-09 14:46:20

2024-09-21 10:43:15

數(shù)據(jù)技術(shù)信息

2010-07-27 14:04:52

2011-11-03 15:25:07

Android

2011-11-29 09:54:20

Google進(jìn)化史

2022-03-25 14:01:20

元宇宙虛擬世界進(jìn)化

2023-11-27 09:23:19

2016-02-04 09:17:59

2018-07-19 08:54:48

微服務(wù)架構(gòu)Java

2013-06-24 09:18:05

2010-01-21 16:08:26

C++語(yǔ)言

2010-04-07 14:54:20

Unix操作系統(tǒng)

2018-08-23 09:33:12

2022-03-29 09:35:15

FirefoxUI瀏覽器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)