LinkedIn 架構筆記

2021-08-22 20:26:37 字數 1192 閱讀 8394

**:

現在是 sns 的春天,最近又有訊息傳言新聞集團準備收購 linkedin 。有趣的是,linkedin 也是 paypal 黑幫 成員建立的。在最近乙個季度,有兩個 web 2.0 應用我用的比較頻繁。乙個是twitter ,另乙個就是 linkedin 。

linkedin 的 cto jean-luc vaillant 在 qcon 大會上做了 」linked-in: lessons learned and growth and scalability 「 的報告。不能錯過,寫一則 blog 記錄之。

linkedin 雇員有 180 個,在 web 2.0 公司中算是比較多的,不過人家自從 2006 年就盈利了,這在 web 2.0 站點中可算少的。使用者超過 1600 萬,現在每月新增 100 萬,50% 會員來自海外(中國使用者不少,也包括我 ).

開篇明義,直接說這個議題不講"監控、負載均衡」等話題,而是實實在在對這樣特定型別站點遇到的技術問題做了分享。linkedin 的伺服器多是 x86 上的 solaris ,關鍵 db 用的是 oracle 10g。人與人之間的關係圖生成的時候,關聯式資料庫有些不合時宜,而把資料放到記憶體裡進行計算就是必經之路。具體一點說,linkedin 的基本模式是這樣的:前台應用伺服器面向使用者,中間是db,而db的後邊還有計算伺服器來計算使用者間的關係圖的。

問題出來了,如何保證資料在各個 ram 塊(也就是不同的計算伺服器)中是同步的呢? 需要乙個比較理想的資料匯流排(databus)機制。

第乙個方式是用 timestamp . 對記錄設定乙個字段,標記最新更新時間。這個解決方法還是不錯的---除了有個難以容忍的缺陷。什麼問題?就是 timestamp 是 sql呼叫發起的時間,而不是 commit 的確切時間。步調就不一致嘍。

第二個辦法,用 oracle 的 ora_rowscn (還好是 oracle 10g). 這個偽列包含 commit 時候的 scn(system change number),是自增的,db 自己實現的,對效能沒有影響。ora_rowscn 預設是資料庫塊級別的粒度,當然也可做到行級別的粒度。唯一的缺點是不能索引(偽列). 解決辦法倒也不複雜:增加乙個 scn 列,預設值"無限大"。然後用選擇比某個 scn 大的值就可以界定需要的資料扔到計算伺服器的記憶體裡。

ora_rowscn 是 oracle 10g 新增的乙個特性,不得不承認,我過去忽略了這一點。我比較好奇的是,國內的 wealink、聯絡家等站點是如何解決這個關係圖的計算的呢?

Linkedin 資料爬蟲筆記

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

LinkedIn 啟用奧勒岡資料中心

11 17 2016,社交軟體linkedin日前啟動位於美國奧勒岡州hillsboro的新資料中心。該資料中心耗電8兆瓦,占地36000平方英呎,並靠近跨太平夜海纜登陸點,全年220天可以無需致冷。linkedin表示該資料中心的啟用將滿足未來linkedin未來流量增長的需求。linkedin表...

ESB架構筆記

又一次重溫esb的兩份經典文件 esb綜述1 定義esb esb綜述2 esb使用案例 infoq defining the esb ddj 還有一本三年前的 enterprise service bus o reilly,想想還是算了。openspace 架構,感覺傳統j2ee的程式設計模型的影響...