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頁面)。該工具備許多功能,但最重要的是讓數據科學家能夠了解機器學習算法(房屋推薦或訂價建議)內部正在執行什麼操做,而後運用直覺得到更好的結果。oop
驅動Airbnb站點和分析的核心數據平臺是Hadoop,全部東西都存儲在Hadoop分佈式文件系統中。以前,他們使用Amazon Elastic MapReduce服務,並在AWS EC2計算實例上部署了本身的Hadoop,但去年,他們已經遷移到Cloudera的企業級Hadoop上。此外,Airbnb使用S3存儲Web站點的圖片和Hadoop集羣的備份數據。學習
在HDFS文件之上,Airbnb使用由Facebook建立並開源的Hive和Presto建立了一個數據倉庫。對於長時間運行的查詢,他們使用MapReduce。Hive不支持子查詢,使用MapReduce能夠得到同子查詢相似的結果。Curtis指出,Presto很是強大,它兼容SQL,使得數據查詢很是容易,並且速度很快,雖然功能不如Hadoop MapReduce或Hive多,但在平常分析中很是有用。他們還建立了一個名爲Airpal的工具(GitHub頁面),用於設計SQL查詢,併發送到數據倉庫的Presto層。網站
Curtis告訴The Platform:
實際上,去年年末,咱們作了一次很大的集羣遷移,將全部的數據基礎設施分紅了兩個單獨的鏡像集羣:一個用於運行全部關鍵的業務任務……另外一個用於即時查詢……
這兩個Hadoop集羣使用Kafka保持同步。Airbnb建立有本身的工做流和ETL工具Airflow(GitHub頁面)。該工具已經鉤入HDFS、Hive、Presto、S三、MySQL和Postgres。此外,Airflow接收來自Airbnb站點的非結構化數據流,增長結構後轉儲到HDFS上的Hive表中。曾經很長一段時間,他們使用成百上千的CRON任務來作這項工做,那很容出問題。而Airflow提供了一種簡潔、可編程的系統,使他們可以查看、編輯、監控和調試ETL系統。
爲了管理AWS上的集羣,他們使用Chef進行配置管理,並本身開發了不少工具。雖然Mesos集羣控制器已經被前Twitter和Airbnb工程師商業化,但他們如今使用Mesos並很少, 由於他們以爲:
本質上講,Mesos是一個抽象層。其設計初衷是讓不少節點看起來像一個節點。咱們發現,尤爲是在Mesos上運行某些新東西時,這個抽象層實際上會隱藏一些東西,增長了咱們調試的難度。
最後,Curtis指出,雖然他們無心運行本身的數據中心,但IT團隊每隔六個月就會對計算和存儲能力及成本進行分析,而後與建立並運營本地數據中心進行對比。他們發現,租用AWS的服務能夠節省20%到30%的費用。而按Curtis的說法,實際節省的費用可能更多,並且,在數據中心投入過多的精力就沒法專一於業務了。