對於京東網站部門來講,CMS核心目的是用來快速開發和上線各類頁面,諸如各類垂直頻道頁,訪問www.jd.com將看到以下頁面,如點擊「服裝城」、「家用電器」等都會跳轉到一個垂直頻道頁;這些頁面中有許多頁面風格是相似的,所以很適合使用CMS進行快速搭建。php
CMS最核心的目的是就是進行數據和模板的統一管理、頁面的統一發布,從而減小以前的不少重複工做。前端
京東CMS具備如下特色:redis
(1)搭建快速,統一發布,統一架構後端
(2)先後端分離。後端再也不負責頁面渲染,只提供高性能、可複用的API服務器
(3)移動端頁面支持數據結構
(4)數據分析、智能投放的特色。架構
從基本功能及架構來看,能夠分爲三個階段:(1)CMS 1.0——虛擬分類系統(2)CMS 2.0——CMS系統(3)CMS 3.0——CMS-portal系統前後端分離
CMS 1.0——虛擬分類系統異步
虛擬分類系統是一個獨立的促銷商品、促銷文字維護系統,與具體前端業務架構脫離,哪條線接入虛擬分類,須要根據本身的業務邏輯單獨開發、維護、部署本身的架構。虛擬分類系統只是一個基礎數據維護平臺,沒法實現信息的共享、複用和集約化管理。這就會存在各類各樣的頻道頁系統,致使管理混亂,性能上各有差別,出現過不少次事故。並且各系統須要獨立配置,致使工做量大,佔用資源多,沒法快速響應業務需求。模塊化
CMS 2.0——CMS系統
Cms2.0總結了1.0時的不足,從節省資源、控制成本的角度考慮,把導購類的個體頁面業務進行了統一,模板能複用的複用,之前虛擬分類系統的頻道也須要遷移到新的系統。
改動以下:
(1)CMS 2.0數據結構適合虛擬分類體系,方便新老數據兼容;
(2)升級架構,統一配置、發佈流程;去memcache爲redis,作大量性能壓測來調優php-fpm配置,單機TPS能達到3000+; 配置定時任務,保證redis數據實時性;
(3)單點發布,一鍵預覽加強採銷維護數據的機動性;
(4)單機閉環,單機閉環服務設計是CMS總體架構的核心部分,須要展現的內容在本機獲取、封裝、校驗;
(5)模塊化、動態數據類型初期版本
對比1.0,新的CMS可讓頻道頁的開發週期下降2~4周,大大提升了業務需求的響應速度;它看起來更獨立,更像一個總體,在容災、規避風險方面作了嚴謹的優化;同時讓採銷在維護數據時,更方便、更簡單。後續因爲個性化的需求愈來愈多,大量的頻道業務須要開發人員一個一個套模板來實現,大大加大了開發人員的工做強度,以前的模板複用方式已經沒法知足業務的需求,同時太簡單的數據模塊,須要手工來綁定數據類型也增長了開發成本,這時候須要必須作出改變。
CMS 3.0——CMS-portal系統
CMS 2.0後也存在不少痛點,所以在CMS3.0上解決這些問題:
(1)本質問題就是要快:快速支持、響應業務愈來愈多的垂直化頁面改版;
(2)先後端分離,頁面渲染讓前端實現,解放後端讓後端作高大上的事情;
(3)減輕運營人員的工做量,系統簡單好用,提升導購類商品的轉化率;
(4)其餘系統的支撐,實現CMS的集約化管理;
(5) 兼容手機端;
(6)站點管理、統一架構、容災、高性能、水平擴容;
統一架構主要分爲如下幾個部分:
(1)CMS系統:統一管理CMS相關數據,並進行頁面的生成和發佈;
(2)數據Worker管理中心:調用第三方服務進行數據校驗(如庫存不足補貨),並調用CMS系統進行頁面生成和發佈,發佈到單點服務器上;
(3)單點服務器:相關頁面的單機閉環實現,即CMS發佈的頁面會存儲在這些單點服務器上;每一個機房會部署一臺;
(4)頁面定時更新Worker:按期同步單點服務器內容到靜態應用服務器集羣,並保存歷史版本,當出現問題時能夠切換回上一個版本;
(5)靜態應用服務器集羣:靜態託底實現,會存儲相關的靜態頁面文件,當單點服務器掛了時,降級到該集羣;
(6)異步加載的個性化服務:有些數據不能存儲到靜態頁,如價格/庫存/推薦等數據,此時經過異步加載這些數據,實現個性化服務;
(7)接入層Nginx:接入層Nginx負責請求的路由和服務的降級。