作者 臧秀濤
去年的雙十一過后,InfoQ曾經采訪過京東云平臺首席架構師劉海鋒。
巡展北京站的活動中,劉海鋒分享了《京東基礎云服務技術演進》。
以服務的形式支撐其他業務單元。下面我們分別來看一下。

?
### 存儲系統面對的挑戰與應對之道
存儲是互聯網公司最基礎的東西。這也是開發團隊花精力最多,持續迭代的一個技術方向。
### 挑戰1:非結構化存儲
京東每天有千萬級的商家上傳圖片,用戶瀏覽完圖片后會產生交易訂單,需要很多文本來描述這些訂單。另外京東有自己的庫房,任何一份訂單經過拆分,經過庫房的流轉,每一分訂單又會產生幾十份非結構化的數據,涉及商品的入庫、出庫、調撥等。商品送到客戶手中之后,還有簽單信息、銀行小票,未來這些信息的電子化、和銀行對賬,又是很多非結構化的數據。

非結構化的數據越來越多,如何存儲這些數據?商家的圖片、交易的訂單、庫房的記錄、電子簽收的信息,這些數據都是非常關鍵的,而且這些數據有一個特點,量比較大,但每份數據一般都比較小。
#### JFS:Jingdong Filesystem
版本,可以統一管理小的對象、大的文件以及私有云中可持久化的塊設備。
的集成方面,目前也有不錯的進展和落地的應用。
目前該系統已經在支撐京東商城的如下服務:
- 圖片服務
- 訂單履約
- 物流數據交換
- 電子簽收
- 內部云存儲服務
- 虛擬機與容器卷存儲
### 挑戰2:越來越多的緩存
等,但當到了很大規模的時候,技術也會發生質變。
#### Jimdb:分布式緩存與高速NoSQL
相比,它有如下特性:
- 精確故障檢測與自動切換
- 混合存儲
- 在線橫向擴容
- 異步、同步、局部復制
- 全自動化接入與管理
這一點是最近半年的主要工作,目的是降低維護成本。
固態硬盤的,支撐了京東的商品詳情頁、搜索、推薦、廣告點擊等很核心數據的快速訪問。
### 下一代新存儲平臺
劉海鋒的團隊最近在做的事情是,更多考慮多數據中心的復制,讓數據更加可靠,并且希望做統一的存儲服務,實現One Jingdong One Stroage,用一個系統抽象出文件、對象、表甚至緩存,能夠在分布式的多個數據中心實現統一的復制存儲底層的數據,在主IDC做緩存,甚至全量內存加速;向上支持在線服務、Hadoop,支持私有云內部的容器卷的管理等。
?

### 中間件:消息隊列與SOA
底層存儲的上面就是各種中間件。
### 挑戰:越來越多的消息傳遞
京東跟很多互聯網公司不一樣的地方是,除了北京和江蘇的核心機房,在全國各地還有很多商品的庫房,每個庫房會有幾十臺服務器,相當于一個小型的數據中心,消息隊列不僅要串聯核心機房里的業務,還要驅動庫房里的訂單生產環節,跟業務存在很強的依賴關系。從訂單管道,到核心機房,再到倉儲庫房,普遍是用消息隊列驅動業務流程的。日均消息數超過百億。
#### JMQ:Jingdong Message Queues
面對業務挑戰,京東的消息隊列系統經過了三代演進,于去年雙十一之前上線了JMQ并完成切換。
JMQ有如下特點:
- 機房斷電不丟消息
因為庫房的網絡環境是不穩定的,所以必須保證不丟消息。
- 組提交技術
引入了數據庫中經典的group commit技術,提高同步刷磁盤的寫的性能。
- 透明壓縮
- 靈活復制

?
### 挑戰:越來越多的在線服務
電商系統內有很多服務。這些服務內部會互相調用,對外也要開放一些接口,供商家或者合作伙伴使用。
#### JSF:Jingdong Service Framework
JSF。可以做到運行時服務質量分析,提供了完善的服務治理功能。目前在京東已經接入了幾萬臺服務器,更好地支持了內部的SOA化以及對外的服務開放。
### 彈性計算
彈性計算云是目前的主要工作。
### 挑戰:越來越多的機器
任何一個高速發展的互聯網公司,機器數量都是在成倍增加的。隨著業務規模的增長,機器的數量也在不斷增加。現在就要面對這樣的場景:有很多數據中心,而每個數據中心內的機器又會被劃分給不同的業務,比如有的機器處理交易,有的處理訂單履約,有的處理搜索,有的處理圖片等等,面對這么多機器,應該怎樣管理,讓研發團隊的效率更高呢?
### 彈性計算云
該項目的愿景是在IDC的資源和業務系統之間建立一個橋梁,讓業務與機器完全解耦,做到真正自動化維護,縮短產品開發到上線的流程,讓工程師的精力更多放在產品的設計和研發上,而不必關注如何申請資源、如何上線;提高資源利用率和服務質量,讓研發團隊的生活更美好。
從公司整體來看,希望能夠提高資源的利用率。因為很多機器是分散的,由各個業務團隊使用,必然有很多機器是空閑的,統一管理必然能提高資源的利用率。
彈性計算云的整體架構如下圖所示,分拆兩層服務。底層是基礎服務,實現軟件定義數據中心。通過OpenStack和Docker的結合,實現容器化。JFS實現可靠的存儲。上層是平臺服務,希望通過集成部署,實現資源的統一分配,業務不用關注自己到底部署到哪臺機器上,并由平臺根據業務量實現自動伸縮。

現在這個系統已經在部分業務中落地,大規模落地會在今年年完成。具體而言,像商品詳情頁、圖片系統,就是彈性計算云支撐的,用戶的每一次瀏覽,都有這個系統在做貢獻,能夠按訪問流量自動調度資源。在流量高峰的時候,這兩個服務會自動擴容。
做為總結,劉海鋒總結了兩點:
1. 業務發展推動基礎架構的演進;
2. 技術的關鍵是團隊。
?
在演講之后,InfoQ采訪了劉海鋒。
**InfoQ:最近兩年,容器技術,特別是Docker在業界非常火,可以介紹一下京東在這方面的實踐經驗嗎?**
> **劉海鋒:**剛才我在演講中提到,我們希望在IDC的資源和業務系統之間建立一個橋梁,讓業務與機器完全解耦,這是一個很復雜的工程,不是一個容器或者Docker就能解決的。彈性計算云分為兩個層面,底層的基礎服務更多是把機器做一個統一的虛擬化、容器化,上層的平臺服務更多地要考慮怎么樣去配合京東的業務,跟應用能夠更順暢地融合在一起。
> 舉個例子,從最簡單的部署角度來說。以前部署是這樣的,一打好包了,在部署界面上選,選了三個機器,三個機器的IP分別是多少,然后部署。部署完成檢查一遍就成功了。而接下來整個系統會做成這樣,一個程序要上線了,要部署,點部署,系統給部署完成之后告訴開發者成功了,然后再說部署在哪里。不需要關心之前的那些環節,不需要層層的領導審批和運營部門審批。而是直接部署,部署位置由平臺來統一控制。一開始分配很少的機器,隨著流量的增大自動擴容。需要的量小的話,再自動縮容,節省出的機器再統一調度。這樣可以提高公司的資源利用率,數據中心中都是公司的機器,而不再分你的我的。
> 我們用Docker,更多的是考慮它比較適合公司內部的私有云環境,而且比較輕量。我們底層的平臺,簡單的理解是Docker和OpenStack的嫁接。我們用OpenStack去管理Docker,比如給它分配一個獨立的IP等。但是除了兩個第三方平臺,我們的底層平臺要做到簡單、可控、穩定,所以上面還有一個很強大的完全自研的一套平臺和服務,能夠統一的調度和控制,實現管理、監控和部署。
> Docker在這里面發揮了很重要的作用。另外我們也稍微做了一些改造,去掉了很多用不到的特性,讓它穩定簡單。
> 網絡方面,用Open vSwitch給每個Docker容器分配一個IP,這樣每個容器看上去跟虛擬機或者物理機沒什么區別,遷移業務的時候大家更容易接受,過渡更為平滑。
**InfoQ:剛才您提到了OpenStack和Docker的嫁接,可以具體介紹一下其結構嗎?**
> **劉海鋒**:基礎服務層面,核心有三點:OpenStack、Docker和自研的JFS存儲。OpenStack和Docker在這里都是非常重要的組件。在這里都是非常重要的組件。
> 先說OpenStack。因為OpenStack變化比較快,我們沒有那么多精力一直跟隨。我們從OpenStack拆出了一個分支,經過定制,做了一個內部的分支,叫做Jingdong Data Center OS。這方面的工作有兩點。一方面是讓它能跟Docker更好地配合;另一方面,我們加入了很多故障處理功能,應對物理機故障和容器故障。物理機故障的時候快速檢測出來,快速報警,快速遷移上面的容器。
> 再說Docker。網絡和存儲上都有些改造,比如可以支持JFS mount過來的目錄。我們會把故障當成常態,物理機的硬件故障,像磁盤、內存和硬件方面的問題,所以對OpenStack做的改造主要是更好地應對故障,快速響應。
**InfoQ:Docker或者OpenStack方面的工作,會向開源社區反饋嗎?**
> **劉海鋒**:其實我們也有考慮。我們計劃在今年年底或者明年年初的時候有些動作,目前還是希望把當前的工作做好。
**InfoQ:社區的版本更新比較快,這方面如何merge自己的特性和新版本的特性呢?**
> **劉海鋒**:外面比較好的我們也會吸收。實際上OpenStack更多是面向公有云設計的,從我們的需求來看,它比較臃腫,不是很好控制。所以我們做了裁剪,砍掉了很多公有云的功能。
**InfoQ:這個會不會像你們的文件系統那樣,在定制的過程中走向自研了?**
> **劉海鋒:**這是有可能的。像Docker這樣的項目,設計的時候考慮的是更為通用的目標,功能非常多,這會引入過多的復雜性,也引入一些問題,所以要做減法。而且就互聯網公司的開發團隊而言,基礎架構是在業務的推動下不斷演進的,而不是滿足某種通用的需求。
**InfoQ:現在彈性計算云的落地情況如何呢?**
> **劉海鋒:**現在彈性計算云已經在支撐很多業務,像圖片服務。很多邊緣系統也在用。根據研發戰略,我們希望今年大規模落地。
**InfoQ:可以介紹一下公司其他業務在向私有云遷移的過程中都有哪些挑戰嗎?**
> **劉海鋒**:挑戰很多,我們很多精力也放在這上面。我們做了一個基礎設施,會面對兩類用戶,像新的用戶和新的產品,直接選擇它就可以了;但像老的服務,可能占用的是物理機,資源利用率很低。遷移其實不僅是技術層面的問題。所以我們會有專門的項目經理團隊去推動。另外我們有一些工具,方便舊業務的遷移。
> 此外,我們還需要在保證業務穩定的前提下追求規模,因為規模大了才有資源管理方面的優勢,所以我們希望做到萬臺規模。我們每天都很謹慎,很小心,但是還是希望量上來。
### 受訪者介紹
**劉海鋒**,2013年加入京東,擔任云平臺首席架構師、系統技術部負責人,主持建設存儲、中間件、彈性計算等私有云技術體系。