檢視 社群發展/FB 的原始碼
←
社群發展/FB
前往:
導覽
、
搜尋
由於下列原因,您沒有權限進行 編輯此頁面 的動作:
您請求的操作只有這個群組的使用者能使用:
使用者
您可以檢視並複製此頁面的原始碼。
Facebook(原本稱作thefacebook)是一家位於美國加州聖馬刁郡門洛帕克市的線上社群網路服務網站。其名稱的靈感來自美國高中提供給學生包含相片和聯絡資料的通訊錄暱稱「face book」 ===主要功能:=== 動態訊息(News Feed):動態訊息就是用戶登入之後,在全螢幕的模式之下,網頁右邊會顯示登入用戶所關心的人事物的最新動態,成為Facebook最重要的資產。 #動態時報:動態時報就是用戶檔案頁上的留言板,與留言板不同的是,動態時報的內容會被同步到各個朋友的首頁,因此可以在自己的動態時報上發表一些最新狀態,也可以設定為不同步給所有好友。很多用戶可以在動態時報上留簡訊,動態時報留言可以進行編輯。亦可以針對已發送的回應貼文進行編輯。讓用戶向他們的朋友分享他們現在在哪裡、做甚麼、甚至是心情與表情符號。然後讓好友看到這些狀態,並了解您的狀態,接著回應您的狀態。 #訊息(Messages):可以透過私密訊息發送給目標用戶的訊息匣,就像電子郵件,只有收信人和發信人可以看到。 #讚(Like):是用來表示網友對發文者的表態,發文者可以是個人、社團、公司、與粉絲專頁。利用「讚」按鈕網友們對該頁面進行讚賞及表態。透過「讚」,Facebook會讓你的朋友知道你曾經按過那些讚,例如你如果按了某個粉絲專頁所設計的小測驗,這樣當你按了讚之後,你的朋友也會看到哪個小測驗或小遊戲。 #直播視訊。 #共享相簿(Shared Photo Albums):「共享相簿」功能方便用戶收集單一活動的相片,用戶建立相簿後,可上傳無限張相片至同一相簿內,一起編輯及「tag」相某人到相片當中,新功能只允許上傳用戶自行設定隱私權限並使用。 #打卡(Check-in)。打卡就可以吃到比較便宜的食物。 #戳一下:作為提醒對方,並表示你還記得他,或讓對方記得你。 #活動(Events):Facebook活動的功能幫助用戶通知朋友們將發生的活動,幫助用戶組織線下的社交活動。 #遊戲:網站內有許多與第三方合作廠商所開發的社群小遊戲,比較知名的有Zynga.com、King.com等,可以利用Facebook網頁或下載Facebook Gameroom。 #建立Facebook 廣告。 #建立粉絲專頁。 '''粉絲專業補充'''<br/> -外部[http://gg90052.github.io/comment_helper/ 網站]有抽獎功能<br/> -好管理 #建立「社團」。 #撰寫「網誌」。 #我的這一天:在每一天,Facebook都會顯示你在不同年份同一天的所有動態。 ===FB技術=== Facebook標識語言(英語:Facebook Markup Language、FBML)是HTML的子集。Facebook應用的開發者可以用這種語言客製他們的應用程式的外觀。 以UML示範Facebook的域模型,顯示Facebook系統所管理的資訊。它展示出Facebook資料庫中的實體、關係、欄位。比如,圖中顯示有關工作、學校、信用卡、顯示用戶名等的欄位,但僅為概念類圖,並非具體實施的細節。其他資料模型的細節可透過Facebook查詢語言(Facebook Query Lanuage)——一種類似SQL的查詢語言的相關資料中獲得。Facebook使用LAMP(Linux、Apache、MySQL、PHP)作為技術架構。其技術架構工程師史提分·格瑞姆(Steven Grimm)在部落格中提及到: 幾乎我們所有的伺服器都運行開源軟體。我們的Web伺服器是Linux,Apache和PHP。我們資料庫是MySQL。我們使用memcached來保證網站的快速反應。一些後台應用Python、Perl和Java,以及一些gcc和Boost。程式員用Subversion和git來進行代碼管理。還有很多——像很多網站一樣,從頭到腳都是開源軟體。 2010年,Facebook開源自家開發的「HipHop for PHP」;HipHop for PHP 比純PHP 高一倍的效能。 ====名詞解釋:==== HipHop for PHP是一系列PHP腳本語言的程式碼轉換器的集合,它包含HPHPc、HPHPi、HPHPd以及HHVM,這四個腳本引擎各有所不同,但是他們共用相同的執行時(Runtime)及工具集(Toolset)。HipHop是由Facebook所建立,他們用它來節省伺服器的資源。HipHop被發布時,已經是高達60萬行由C++及C所撰寫的程式碼,它以自由軟體發布,採用PHP許可證 3.01版。 HipHop for PHP可顯著的增快PHP應用程式的速度,藉由2到6個已觀察到的要素,HipHop改善了網頁生成的效能。 Facebook作為最大的社群網站,目前流量排名世界第二,僅次於Google,要支撐如此龐大的資料量,所需的硬體設備與技術當然不簡單,我們先來看看Facebook有哪些驚人的成就: Facebook估計擁有超過六萬台伺服器。 所有Memcached的執行程式所儲存的資料總量達300TB。 Hadoop跟Hive叢集是由三千台伺服器組成。每台都是八核心,32GB記憶體,12TB硬碟。結果是24000核心,96TB記憶體與36PB的儲存空間。 每天有一千億次的點擊,光log也有130TB。 Facebook目前活躍人數已經快突破10億人,要如何使每一個使用者都享有一樣高品質的使用經驗,一直是一個嚴峻的挑戰,因此Facebook採取了綜合的策略,在整個社群網路中,能夠提昇使用者體驗的技術,都要作最佳化處理,因此本文接下來介紹Facebook主要使用了哪些技術來架構這個系統。以下為本文所要介紹的技術列表: #雲端平臺Hadoop與相關元件(HBase、MapReduce、HDFS、Hive #HipHop #Apache Thrift #Memcached #BigPipe #Scribe #Haystack 雲端平臺Hadoop與相關元件(HBase、MapReduce、HDFS、Hive) 分散式架構主要目的是讓服務開發人員,不用考慮在這些分散式系統上資料要怎麼放置、運算要怎麼切割,只需要專注在服務的開發就可以了,而資料與運算的切割及分散就交給雲端運算的架構來處理。Hadoop是Apache軟體基金會 (Apache Software Foundation) 底下的開放原始碼計劃 (Open source project),最初是做為Nutch這個開放原始碼的搜尋引擎的一部份。Hadoop是以java寫成,可以提供大量資料的分散式運算環境,而且Hadoop的架構是由Google發表的BigTable及Google File System等文章提出的概念實做而成,所以跟Google內部使用的雲端運算架構相似。 因此我們可以想像,一個雲端平臺必須要有自己的檔案格式與管理策略,因此HDFS就是為了處理分佈於各個伺服器上的檔案系統,而HBase提供了分散式資料庫的功能,MapReduce則提供了在分散式系統上進行更有效率的運算架構,Hive提供了在分散式系統上資料倉儲的功能。Hadoop主要核心完全使用Java開發,而使用者端則提供C++/Java/Shell/Command等程式開發介面,目前可執行於Linux、Mac OS/X、Windows和Solaris作業系統,以及一般商用等級的伺服器。 MapReduce MapReduce誕生源由是Google需要進行大規模資料處理,而在這個過程中,發現了處理大量資料時會面臨某些共同問題,如需要使用許多機器協同計算,以及處理輸入資料時有兩項作業:Map和Reduce。 這兩項作業主要是受到函數編程的啟發,以Map/Reduce為基礎的應用程式,能夠運作於數千台PC所組成的大型叢集上,並以一種容錯的方式平行處理P級別的資料量。 在函數編程中很早就有了Map和Reduce觀念,其實類似於演算法中各個擊破的作法(Divide and Conquer),也就是將問題分解成很多個小問題之後再做總和。Map函數的輸入是一個(Keg,Value)序對組,輸出則為另一組中繼過渡的(Key,Value)序對組。而Reduce函數則負責針對相同的中繼過渡的(Key,Value)序對組合併其所有相關聯的中繼值,並產生輸出結果的鍵/值序對組, 簡而言之,MapReduce提供程式設主要功能:計者一個在分散式系統上處理問題的框架,程式設計者需要設計Map與Reduce函數,決定如何切割與合併問題以達到最佳的效能,剩餘的底層處理則交給MapReduce框架。MapReduce是由Google所發展的軟體框架,目的是對電腦叢集上的大型資料集執行分散式運算,讓使用者可以把心力放在定義Map和Reduce函數,進行運算的Mapper和Reducer會由系統會自動指派不同的運算節點擔任,所以程式設計時完全不用做資料和運算的切割 (decomposition),運算資源會由JobTracker分配到各個運算節點上的TaskTracker,並指派不同的節點擔任Mapper和Reducer。透過MapReduce可以用於大型資料處理,例如:搜尋、索引製作與排序,大型資料集的資料採礦與機器學習,大型網站的網站存取日誌分析等應用。 在龐大的分散式架構下,有伺服器或資料損壞是十分常見的事,由於有MapReduce在處理細節,因此在處理過程中能夠大大降低因資料錯誤造成整個程式需重新啟動的狀況,因為龐大的資料量往往需要數十小時至數天的運算時間,因此能夠避免不必要的時間浪費。 HDFS Hadoop Distributed File System (HDFS) 將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的儲存環境,在Hadoop系統中大量的資料和運算時產生的暫存檔案,都是存放在這個分散式的檔案系統上。HDFS的設計理念是在分散式的儲存環境裡,提供單一的目錄系統 (Single Namespace),一個典型的超大型分散式檔案系統中,通常會有數萬個節點、數億個檔案、以及數十Peta Bytes的資料量,而這樣的分散式檔案系統具備的資料存取特性為Write Once Read Many存取模式。 也就是檔案一旦建立、寫入之後就不允許修改,因此當資料有異動時,檔案系統會重新建立一個新的檔案,在這之中,每個檔案被分割成許多區塊(block)與異地備份,每個區塊的大小通常為128 MB,系統會將每個區塊複製許多複本(replica),並分散儲存於不同的資料節點(DataNode)上。 除此之外,HDFS中很重要的概念是認為移動運算到資料端通常比移動資料到運算端來的成本低,這是由於資料的位置資訊會被考慮在內,因此運算作業可以移至資料所在位置,處理資料的檔案複本預設是每個檔案儲存3份,該設定可由開發人員自訂。 如前面提到的MapReduce在系統分配運算工作時,會將運算工作分配到存放有運算資料的節點上進行,減少大量資料透過網路傳輸的時間。HDFS採用的是一般等級伺服器,因此透過複製資料的方式以因應硬體的故障,當偵測到錯誤時,即可從複製的備份資料執行資料回復。 HBase 簡而言之,HBase的目標是作為Hadoop所使用的資料庫,這可讓我們需要在隨機且即時的讀寫超大資料集時所使用。HBase是一種分散式儲存系統,其類似RDBM資料表的資料結構(Multi-Dimensional Map),並具備高可用性、高效能,以及容易擴充容量及效能的特性。HBase適用於利用數以千計的一般等級伺服器上,來儲存Petabytes級的資料,其中以Hadoop分散式檔案系統(HDFS)為基礎,提供類似Bigtable的功能,HBase同時也提供了MapReduce程式設計的能力。 HBase使用列 (row) 和行 (column) 為索引存取資料值,因此查詢的時候比較像在使用map容器 (container);HBase的另一個特點是每一筆資料都有一個時間戳記 (timestamp),因此同一個欄位可依不同時間存在多筆資料。一個HBase的資料表 (table) 是由許多row及數個column family組成,每個列都有一個row key做為索引;一個column family就是一個column label的集合 (set),裡面可有很多組label,這些label可以視需要隨時新增,而不用重新設定整個資料表如下表所示。在存取資料表的時候,通常就使用 (‘row key’, ‘family:label’) 或 (‘row key’, ‘family:label’, ‘timestamp’) 的組合取出需要的欄位元。 HBase為了方便分散資料和運算工作,又將整個資料表分為許多region,一個region是由一到數個列所組成的,可以分別存放在不同HBase主機上,這些存放region的主機就是region server,另外還有master server用來紀錄每一個region對應的region server;master server也會自動將不能提供服務的region server上的region重新分配到其他的region server上。 Hive Hive是架構在Hadoop上的資料倉儲系統,目的是提供在分散是環境下的資料倉儲功能,我們先來簡單瞭解一下資料倉儲與資料庫的差異。資料庫與資料倉儲最大差異點是資料庫進行資料的新增、刪除、修改、查詢等功能其主要目的於管理資料庫的存取;而資料倉儲重視的是資訊的獲得,以問題決策分析導向,強調多維度視野,視覺化的提供決策者資訊可用性。 而Hive提供了類似SQL的語法稱為HQL讓使用者更容易操作Hive,同時Hive也提供了MapReduce外掛功能,來補足Hive本身指令的不足,Hive在Facebook主要是作為資料探勘的功能,例如當Facebook在推出新功能時,就會利用Hive研究新功能與舊功能兩者之間使用者行為的差異,藉以決定是否該推出新功能。當時Facebook計畫推出他們的“Like”按鈕時,他們擔心會不會發生“自相蠶食”的結果,會不會因此反而減少了文字評論,而不是提升了參與度?為了驗證這一點,他們運行了A/B測試來比較用戶行為,給一組用戶使用新功能(Like按鈕),而另一個對照組則沒有。這需要在一個互接連的社區內進行測試,“內生的組織”,在組織之外的連接很少。他們使用了兩組南美國家來進行比較,哥倫比亞、委內瑞拉 vs 阿根廷、智利。測試的結果是使用Like按鈕的時候評論增加了4.46%,而對照組的資料則是0.63%。這一類測試所產生的巨大的資料集正是Facebook使用Hadoop來處理資料的例子。 HipHop Hiphop是一個由PHP到C++的轉換程式,一個重新實現的PHP運行庫和許多常用PHP擴展的重寫版本構成,目的是在加速和優化PHP。眾所周知,Facebook的前端主要是用PHP寫的。PHP非常簡單,易學易用,好讀好調適,因此新工程師成長很快,有利地促進了Facebook的快速創新。PHP是一種指令碼語言,其好處是程式設計效率高,能夠支援產品的快速反覆運算。但是與傳統的編譯語言相比,指令碼語言的CPU和記憶體使用效率不好。隨著Ajax技術的廣泛採用,加上SNS對動態要求較高,這些缺點更顯得突出。對於每月超過4000億次PV的Facebook來說,如何實現擴展,尤其具有挑戰性。常見的辦法是直接用C++重寫PHP應用中比較複雜的部分,作為PHP擴展。從技術角度講這也沒有問題,但是增加了技能需求,能夠在整個應用上工作的工程師數量就大大減少了。最後,Facebook選擇了HipHop,工程師可以編寫代碼,用PHP編寫組合最後頁面的邏輯,並能夠繼續快速反覆運算,同時後端服務使用C++, Erlang, Java, Python編寫,提供新聞提要、搜索、聊天和其他核心功能。 HipHop將PHP代碼轉換為高度優化的C++代碼,然後再用g++編譯器編譯。它可以保持語義等效地執行原始程式碼,但為了提高性能,犧牲了一些很少用到的特性,比如eval()。HipHop開發中的主要困難在於,在PHP和C++這兩種很不一樣的語言之間怎麼實現轉換。雖然PHP也可以寫一些很巧妙的動態特性,但是大多數PHP代碼還是非常簡單的。if (...) {...} else {..} 比foo($x) { include $x; } 肯定更常見。HipHop生成的代碼盡可能地使用函數和變數的靜態繫結。同時,還使用類型推演來選出變數最可能對應的某個類型,從而節省記憶體。 轉換過程分三步驟: #靜態分析。收集聲明關係和依賴關係等資訊。 #類型推演。選擇最合適的類型,是C++?還是String, Array, classes, Object或者Variant。 #代碼生成。大部分直接將PHP語句和運算式對應為C++的語句和運算式。 HipHop在保持了PHP優點的同時,也兼得了C++的性能優勢。專案總共有30萬行代碼,5000多個單元測試。所有這些都將以PHP開源許可證形式發佈到GitHub。 Apache Thrift Thrift源自於facebook之手,在2007年facebook提交Apache基金會將Thrift作為一個開源專案,對於當時的facebook來說創造thrift是為了解決facebook系統中各系統間大資料量的傳輸通訊以及系統之間語言環境不同需要跨平臺的特性。所以thrift可以支援多種程式語言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不同的語言之間通訊,thrift可以作為二進位的高性能的通訊中介軟體,支援資料(物件)序列化和多種類型的RPC服務。Thrift適用於程式對程式靜態的資料交換,需要先確定好他的資料結構,他是完全靜態化的,當資料結構發生變化時,必須重新編輯IDL檔,代碼生成,再編譯載入的流程,跟其他IDL工具相比較可以視為是Thrift的弱項,Thrift適用於搭建大型資料交換及存儲的通用工具,對於大型系統中的內部資料傳輸相對於JSON和xml無論在性能、傳輸大小上有明顯的優勢。 Thrift 具有自己內部定義的傳輸協定規範(TProtocol)和傳輸資料標準(TTransports),通過IDL腳本對傳輸資料的資料結構(struct) 和傳輸資料的業務邏輯(service)根據不同的運行環境快速的構建相應的代碼,並且通過自己內部的序列化機制對傳輸的資料進行簡化和壓縮提高併發、大型系統中資料交互的成本,下圖描繪了Thrift的整體架構,分為6個部分: #你的業務邏輯實現(Your Code) #用戶端和服務端對應的Service #執行讀寫操作的計算結果 #TProtocol #TTransports #底層I/O通信 假定需要傳輸相同的內容,但使用不同的方式從1、傳輸內容所產生的大小 2、傳輸過程中服務端和用戶端所產生的開銷,這2個方便進行比較。最臃腫的是RMI,其次是xml,使用Thrift的TCompactProtocol協定和Google 的 Protocol Buffers 相差的不算太多,相比而言還是Google 的 Protocol Buffers效果最佳。 最占資源是REST2中協定,使用Thrift的TCompactProtocol協定和Google 的 Protocol Buffers 相差的不算太多,相比而言Thrift的TCompactProtocol協議效果最佳。 ===優點=== #能透過搜尋找到以前的動態。 #可以直播。 #容易加朋友,可以在頁面左上角收尋好友的名字,然後就可以直接加好友。 #按讚功能可以調動情緒,激勵人。 #透過粉絲專頁、社團、活動、廣告,能夠大量互動。 #公布訊息容易,而且訊息流通得極快。每個用戶都自己的主頁,可以在上面貼東西,上傳自己的最新資訊。如果用得適當可以學到更多的知識,也能知道更多時事,就能增加自己的判斷力。 ===缺點=== #和所有社群軟體一樣有被盜用的風險,但FB特別嚴重,因為資料基本全部公開,會被盜用照片,別人就能夠冒充你。 #主頁的訊息像瀑布一樣,訊息沖走就很難找。 #<span style='color:red'>按讚讀心術?</span> #網路不穩時訊息容易重覆傳出很多次 ===散佈方式=== FB有發散性的好友圈,ID或用戶名都能用FB的搜尋引擎來搜查到這個人的主頁。主頁裡的按鈕,系統會發送一份通知給這個用戶,就能與此用戶成為好友。 ===特點=== 有粉絲專頁可使用,功能類似對比於WeChat的微信公眾號與LINE的官方帳號。 ===被封鎖使用的國家:=== 許多國家曾在國內網路對Facebook進行全面的網站封鎖與審查,包括伊朗、烏茲別克、敘利亞、古巴。朝鮮政府則全面封鎖Facebook至今。(註:敘利亞是戰爭因素,朝鮮是因為限制國民連接網路。) *巴基斯坦和孟加拉曾在2010年因為穆罕默德漫畫封鎖Facebook,直至其刪除穆罕默德漫畫後解封。 *沙烏地阿拉伯在2010年11月以不遵從該國的保守價值,內容越過王國的保守道德為由封鎖Facebook,但是亦有訊息指出封鎖並不徹底,部分網頁仍可以顯示。現時已解封。 *緬甸在2011年9月中解除對Facebook、YouTube及大量境外網站的封鎖。 *越南政府封鎖一些「危害社會主義」的網站,Facebook也受到間歇性的遮蔽。 *2008年7月初,中國大陸的防火長城不完全封鎖Facebook,當時使用者仍可以間歇性地看到部分內容,官方未說明任何原因。同年7月底,因中國舉辦北京奧運會,封鎖被暫時解除。 *中華人民共和國政府在烏魯木齊七五事件之後對Facebook封鎖,至今未解除。但是有一定數量的中國大陸民眾通過翻牆等方法來存取。 ===變動:ARPU持續拉升,北美已達26.76美元=== 而從Facebook的簡報可以看到,全球ARPU(每個用戶的平均貢獻金額)在去年第四季持續維持增長走勢,已經來到6.18美元,其中,在全球四大區域中,月活躍使用者數最低的北美市場,單一使用者貢獻度遠遠高於其他地區,ARPU已經拉升到26.76美元;另歐洲、亞太和其他地區的ARPU也同樣在持續成長中,依序為8.86美元、2.54美元,和1.86美元。 值得注意的是,在Facebook改變演算法之後,會否因此提高廣告版位競爭,更進一步加速各地區ARPU的增長? 而Facebook也公布至去年第四季月活躍用戶數已經來到21.29億人,其中除了北美市場用戶成長停滯,其他地區都還在增長中,並以亞太地區的8.28億人最多。
返回「
社群發展/FB
」頁面
導覽選單
個人工具
登入
命名空間
頁面
討論
變體
檢視
閱讀
檢視原始碼
檢視歷史
更多
搜尋
導覽
首頁
近期變更
隨機頁面
說明
工具
連結至此的頁面
相關變更
特殊頁面
頁面資訊