Airbnb架構要點分享

jopen 9年前發布 | 22K 次閱讀 Airbnb 軟件架構

 

Airbnb 成立于2008年8月,總部位于加利福尼亞州舊金山市。Airbnb是一個值得信賴的社區型市場,在這里人們可以通過網站、手機或平板電腦發布、發掘和預訂世界各地的獨特房源,其業務已經覆蓋190個國家的40000座城市。目前,Airbnb已經完成了7輪融資,共募集了23億美元的資金,估值達250 億美元。Mike Curtis是Airbnb工程部門的副總裁。近日, The Platform 編輯 Timothy Prickett Morgan 就Airbnb的架構要點對他進行了采訪 報道

Airbnb自成立之初就部署在AWS上,Curtis認為:

這很重要,我們的工程師可以盡可能地專注于讓我們與眾不同的東西上,而不用運行一個龐大的基礎設施。

目前,Airbnb已經使用了大約5000個AWS EC2實例,其中大約1500個實例用于部署其應用程序中面向Web的部分,其余的3500個實例用于各種分析和機器學習算法。而且,隨著Airbnb的發展,相比于業務處理所需的計算能力,分析和機器學習的計算能力需求增長更快。這是因為,隨著Airbnb的用戶越來越多,其挑戰不是找到一個可供出租的地方,而是找到一個 合適 的地方,并且讓房主和房客都滿意。按照Curtis的說法:

我們在工程上所做的一切工作都是為了在人與人之間創建良好的匹配關系。每個旅行者或房主的情況都不相同。人們都有不同的偏好,希望獲得的旅行體驗就有所不同。因此,我們在工程上所做的大量工作都是關于,如何為了真實世界的線下體驗將合適的人匹配在一起。這是我們所做的一切工作的組成部分,其中包括機器學習、搜索排序、欺詐檢測……

關鍵就是,根據房客和房主的偏好(個人資料及在Airbnb上的交易和搜索歷史),使用搜索引擎和機器學習,找出最好的租房/出租選擇。而且,選項不能太多,否則用戶會很難決定。因此,Airbnb需要借助機器學習強化搜索,為用戶(房客和房主)提供5到10個選項。這縮短了交易時間,降低了 Airbnb系統的負載,而用戶也更滿意。

同許多公司一樣,Airbnb開始時也使用了若干開源軟件,但進行了大量的修改和擴展,以便創建一個機器學習強化的搜索引擎。其核心索引技術使用了 Lucene ,但只用了反向文本部分。而所有的排序和機器學習功能則是他們自己編寫的。他們的 第一個機器學習實驗 就將預訂率提升了4%。Airbnb的動態定價也是由機器學習算法所支撐。據Curtis說,當房主按照Airbnb推薦的價格上下浮動不超過5%定價,其出租成功率提升了4倍。

為了使機器學習更容易嵌入應用程序,Airbnb創建了一個名為 Aerosolve 的工具( GitHub頁面 )。該工具有許多功能,但最重要的是讓數據科學家可以了解機器學習算法(房屋推薦或定價建議)內部正在執行什么操作,然后運用直覺獲得更好的結果。

驅動Airbnb站點和分析的核心數據平臺是Hadoop,所有東西都存儲在Hadoop分布式文件系統中。之前,他們使用Amazon Elastic MapReduce服務,并在AWS EC2計算實例上部署了自己的Hadoop,但去年,他們已經遷移到Cloudera的企業級Hadoop上。此外,Airbnb使用S3存儲Web站點的圖片和Hadoop集群的備份數據。

在HDFS文件之上,Airbnb使用由非死book創建并開源的 HivePresto 創建了一個數據倉庫。對于長時間運行的查詢,他們使用MapReduce。Hive不支持子查詢,使用MapReduce可以獲得同子查詢類似的結果。 Curtis指出,Presto非常強大,它兼容SQL,使得數據查詢非常容易,而且速度很快,雖然功能不如Hadoop MapReduce或Hive多,但在日常分析中非常有用。他們還創建了一個名為 Airpal 的工具( GitHub頁面 ),用于設計SQL查詢,并發送到數據倉庫的Presto層。

Curtis告訴The Platform:

實際上,去年年底,我們做了一次很大的集群遷移,將所有的數據基礎設施分成了兩個單獨的鏡像集群:一個用于運行所有關鍵的業務任務……另一個用于即時查詢……

這兩個Hadoop集群使用 Kafka 保持同步。Airbnb創建有自己的工作流和ETL工具 AirflowGitHub頁面 )。該工具已經鉤入HDFS、Hive、Presto、S3、MySQL和Postgres。此外,Airflow接收來自Airbnb站點的非結構化數據流,增加結構后轉儲到HDFS上的Hive表中。曾經很長一段時間,他們使用成百上千的CRON任務來做這項工作,那很容出問題。而Airflow提供了一種簡潔、可編程的系統,使他們能夠查看、編輯、監控和調試ETL系統。

為了管理AWS上的集群,他們使用Chef進行配置管理,并自己開發了很多工具。雖然Mesos集群控制器已經被前推ter和Airbnb工程師商業化,但他們現在使用Mesos并不多, 因為他們覺得:

本質上講,Mesos是一個抽象層。其設計初衷是讓很多節點看起來像一個節點。我們發現,尤其是在Mesos上運行某些新東西時,這個抽象層實際上會隱藏一些東西,增加了我們調試的難度。

最后,Curtis指出,雖然他們無意運行自己的數據中心,但IT團隊每隔六個月就會對計算和存儲能力及成本進行分析,然后與創建并運營本地數據中心進行對比。他們發現,租用AWS的服務可以節省20%到30%的費用。而按Curtis的說法,實際節省的費用可能更多,而且,在數據中心投入過多的精力就無法專注于業務了。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!