楊釗,王婷,董立華
(1.中國鐵道科學研究院集團有限公司 電子計算技術研究所,北京 100081;2.北京經緯信息技術有限公司,北京 100081)
為落實中國國家鐵路集團有限公司(簡稱:國鐵集團) “大統籌、大平臺、大監管”的物資管理改革發展要求,基于微服務理念,以大數據、云服務、物聯網等技術為支撐,開發了國鐵通用物資采購平臺(簡稱:國鐵商城),并致力于將國鐵商城打造成為專業化、信息化、集約化、智能化的鐵路特色采購交易平臺,使其發揮采購、供應、管理、服務的優勢,實現降低物資采購成本、提高效率效益、保障供應質量、規范采購行為、加強風險管控的目的。隨著應用的不斷推廣,用戶群體不斷增大,入駐國鐵商城的單位采購人用戶越來越多,且習慣于在每天特定時間段集中訪問,尤其是鐵路特有的集中采購時間段,國鐵商城的訪問壓力極大。
交易型平臺面向高并發的設計原則包括拆分、服務化、消息隊列、數據異構、緩存等[1]。一般應對高并發的設計思路是限流、削峰、異步處理、負載均衡、緩存、微服務、數據庫設計等方式。微服務方面,王雪峰等人[2]采用Spring Cloud 作為微服務基礎框架集合,保證平臺的可靠性和可擴展性;仇念飛[3]、高豪[4]等人采用微服務架構對平臺進行了模塊的劃分和設計,對高并發訪問進行了實踐和研究。緩存方面,叢磊[5]提出為用戶行為所有環節加上合理緩存,并將緩存時間設置為毫秒級,針對不同接口指定不同緩存策略,有效提高緩存命中率;梅巧玲等人[6]基于Redis 分布式緩存,論證了在大并發訪問下分布式數據處理技術的可行性。
基于上述研究,本文采用微服務、多級緩存、Kubernetes 和對象存儲技術,解決高并發訪問難題。
國鐵商城作為國鐵集團及所屬單位、商戶進行在線采購交易的平臺,由中國鐵道科學研究院集團有限公司自主研發。該商城基于B2B 模式,部署于中國鐵路主數據中心,于2020 年上線運營。國鐵商城首頁如圖1 所示。

圖1 國鐵商城首頁
國鐵商城在功能上覆蓋了對商家入駐、商家開店、商品上架管理、采購人下單、在線支付、訂單履約、物流發貨追蹤、發票管理、售后服務、對賬結算等采購交易的全流程管理。國鐵商城的核心子系統包含了運營管理中心、采購人中心、供應商中心、電商采購、批量采購專區、專用物資專區、消費幫扶專區、防疫物資專區、采購人端App 等。其中,電商采購類支持用戶在系統中直接選品下單,可滿足全部鐵路單位采購人小批量采購需求;批量采購結合鐵路集中采購管理的特點,針對單品采購數量較多的情況,額外提供采購人與供應商議價的途徑;專區采購則針對鐵路專用物資、防疫物資等鐵路特殊采購需求,提供相對獨特的專區模式進行在線交易等。
截至2022 年6 月底,國鐵商城入駐品牌數已超過60 000 個,單品數量超過400 萬件,訂單數超過300萬單,銷售額累計逾170 億元人民幣。
在需求調研階段,就明確了國鐵商城未來需要面對的高并發訪問挑戰。因此,國鐵商城在性能需求方面,按照采購人用戶數過萬、供應商企業1.5 萬家、年交易額50 億元人民幣的規模進行設計。隨著業務的不斷擴展,截至2022 年6 月,鐵路采購人用戶數已近4.5 萬,供應商企業近3 萬家。按照2022年初國鐵商城的運營總體規劃和部署,預計到2023年初,供應商企業會超過20 萬家,商城累計交易額超過240 億元人民幣。
國鐵商城的關鍵訪問數據包括商品圖片信息、商品基礎信息、采購單信息、訂單信息、對賬信息等。其中,圖片信息的訪問特點是文件較多,總體訪問數據量大,僅單個商品主圖片的當日瀏覽流量可超13 G,單日圖片的總流量約在1.4 T 左右。
商品基礎信息查詢的訪問壓力核心是檢索功能,日均訪問量在10 萬次以上;其次是商品詳情頁查詢,日均訪問量可達30 萬次;采購單信息、訂單信息及對賬信息日均查詢量均在10 萬次以上。
除數據訪問量較大外,國鐵商城存在用戶訪問集中的情況。分析發現,日均3 萬的訪客數和45 萬的瀏覽量集中在9:00~11:00 和14:00~17:00。域名訪問帶寬峰值工作日內保持在400 Mbps 左右,以2022 年6 月15 日為例,流量最高的3 個時間點分別是10:00(393.9 Mbps)、15:05(401.6 Mbqs)及15:35(405.6 Mbps),如圖2所示。

圖2 6 月15 日國鐵商城域名訪問帶寬情況
國鐵商城的訪問流量大多在采購人用戶工作時段的幾個小時內形成,隨著業務不斷擴展,國鐵商 城高并發訪問的壓力不斷增大。
解決高并發問題的關鍵是要采用擴展性強的技術架構,同時,針對高并發訪問情況進行單獨設計和改造。
微服務具有模塊化開發、分布式部署的特點,各服務間使用輕量級通信機制,各服務單元獨立開發、部署、運行、更新,有靈活的擴展性。每個服務單元可由多個實例副本支撐,副本的數量可隨系統的負荷變化進行調整。微服務技術中的節點擴容、探活和自動容錯重啟、削峰和降流等特點是應對高并發訪問、提高整體系統可用性的關鍵要點。國鐵商城在微服務技術架構體系下不斷拆解訪問量較大的服務,將流量分攤到不同的服務單元,并提高相應服務單元的副本數量,借助微服務技術,通過異步通信保障業務邏輯的可用性,以解決高并發訪問的瓶頸。
國鐵商城采用Spring Cloud 微服務架構。將國鐵商城劃分為商品、訂單、交易、售后、結算等微服務,實現服務與服務間的解耦。每個微服務都在自己的進程中運行,并以輕量機制進行通信[7],圍繞業務功能構建,可通過全自動部署機制來獨立部署。各業務服務均可將自己發布到注冊中心上(包括網關服務Gateway),注冊中心提供服務注冊及實時健康檢查,以防止向不健康的服務發送請求。網關實現路由轉發、統一認證,以及服務的降級、限流、熔斷等[7],并作為后端服務的唯一出口。各后端服務間通過feign 調用完成業務操作。
國鐵商城微服務架構采用雙分組進行部署,每個服務分組中的服務均為多副本部署,拒絕單點故障,提升國鐵商城的穩定性;在國鐵商城發生性能并發問題時,可通過灰度切換,在用戶無感的情況下,對國鐵商城進行升級和擴容;用戶請求通過負載均衡接入,負載均衡將請求轉發至國鐵商城的Nginx 服務,Nginx 根據規則將請求轉發到前端服務或網關服務。國鐵商城微服務架構如圖3所示。

圖3 國鐵商城微服務架構
對于高并發場景,設計原則是為用戶行為所有環節加上合理的緩存。從用戶請求數據到數據返回,數據通常經過了瀏覽器或App 端、內容分發網絡(CDN,Content Delivery Network)、代理服務器、應用服務器、中間件緩存及數據庫各個環節,每個環節都可運用緩存技術,重點是每個環節,尤其是對于傳統易忽略的數據接口,都要進行合理的緩存,提高服務性能。
在應對國鐵商城高并發訪問的問題上,本文在緩存方面主要采用以下做法:(1)使用客戶端緩存,減少不必要的數據傳輸,節省帶寬、提升性能;(2)使用邊緣CDN 對國鐵商城內的所有靜態腳本資源、部分圖片文件和數據資源進行緩存,方便用戶終端在互聯網端直接獲取CDN 緩存的資源,分擔國鐵商城核心服務器的壓力,減緩國鐵商城出口帶寬流量阻塞的情況,提高用戶訪問響應速度;(3)使用Nginx 緩存服務器的靜態資源,訪問時直接讀取Nginx 緩存,減少對后端服務器的訪問,從而減輕國鐵商城核心服務器的壓力;(4)使用應用框架緩存Guava、分布式緩存Redis 將數據存在國鐵商城核心服務器內存中,可處理大量請求;(5)對所有只讀型數據接口加緩存,將緩存時間設置為毫秒級,針對不同接口制定不同緩存策略,有效提高緩存命中率,提升并發數據處理效率[8],減輕數據庫服務器壓力,提升國鐵商城性能。國鐵商城通過對不同層級采用不同的緩存技術,來解決不同類型數據并發訪問的要求,從而減少針對數據庫資源的訪問,減輕微服務架構的性能負擔,更好地支撐互聯網用戶高并發的訪問需求。
容器編排引擎Kubernetes 為容器化的應用提供資源調度、部署運行、服務發現、擴容及縮容等功能。Kubernetes 具有完備的集群管理能力,包括服務注冊和服務發現機制、智能負載均衡、故障發現和自我修復能力、服務滾動升級和在線擴容能力、可擴展的資源自動調度機制,以及多粒度的資源配額管理能力[9]。
Kubernetes 將集群中的機器劃分為管理節點(Master)和工作節點(Node),Pod 是Kubernetes中可以創建和管理的最小單元。在Master 上運行集群管理相關的一組進程(apiserver、controller manager 和scheduler),實現整個集群的資源管理、調度、彈性伸縮、安全控制、系統監控和糾錯等管理功能;在Node 上運行真正的應用程序(kubelet、kube-proxy 服務進程),這些服務進程負責Pod 的創建、啟動、監控、重啟、銷毀,以及實現軟件模式的負載均衡。
國鐵商城部署在基于Kubernetes 搭建的平臺即服務(PaaS,Platform as a Service)環境中,可實現容器集群的自動化部署、自動擴縮容、維護等功能。鑒于Kubernetes 完備的集群管理能力,可定時巡查國鐵商城每個服務的所有實例的可用性,確保服務實例的數量始終保持為預期的數量,當發現某個實例不可用時,會自動重啟該實例或在其他節點上重新調度、運行一個新實例[9]。Kubernetes 可更好地支持微服務架構,其服務彈性擴容機制可讓國鐵商城應對突發流量。在服務高峰期,可快速擴容國鐵商城某些服務的實例副本,以提升吞吐量,應對高并發訪問,改善用戶體驗。
國鐵商城使用對象存儲服務(OSS ,Object Storage Service)來存儲商品圖片、視頻、日志等海量文件。各種終端設備、Web 網站程序、移動應用可直接訪問OSS 域名讀取數據。利用互聯網帶寬,OSS 可實現海量數據的互聯網并發下載。OSS 結合CDN,提供靜態內容存儲和分發到邊緣節點的解決方案,利用CDN 邊緣節點緩存的數據,提升同一個文件被同一地區客戶大量重復并發下載的體驗。
本文分析了國鐵商城的高并發需求,采用微服務、多級緩存、Kubernetes、對象存儲等技術,有效解決了當前國鐵商城高并發的問題。今后會持續、深入研究高并發相關技術,并應用到國鐵商城,提升其性能,改善用戶體驗。