賦能O2O——蘇寧隨時業務系統的設計與實現
【51CTO.com原創稿件】
一. O2O“雙線融合”
2020年之于電子商務無疑是激蕩的一年,以“宅經濟”為代表的電商第二波爆發增長,在全社會掀起了一場深遠的范式變革。其不僅完整重塑了日用、快消、電子等多種業態,其溢出效應也對物流、支付、廣告等周邊產業顯現出了強大的正外部性。但就像每一場潮水都終將歸于平靜,經歷十數年的高速增長,電商模式也已初顯疲態,對此,相關從業者亦有所察覺。線上購物的增長點已被充分挖掘,如今的電子商務更多的只是在原有模式上進一步細化和深化,卻遲遲無法找到新一輪增長著力點。電子商務亟待發掘新的價值發軔點。在尋求變革的浪潮中,蘇寧率先布局,早在2017年就做出了“智慧零售”的戰略布局。
作為探索線上線下“雙線融合”發展模式的先行者,蘇寧逐步搭建起一套整合了線下實體與線上銷售的全新業態。當下,蘇寧易購、蘇寧廣場,蘇寧小店,蘇寧紅孩子,蘇寧家樂福等十多種業態已經全面鋪展,且正通過到家服務進一步拉近同消費者的距離。而實現線上線下業務精準縫合,模式互補,技術賦能則成為了蘇寧“智慧零售”戰略的關鍵突破點。
二.蘇寧業務架構下的購物鏈路整合
在戰略定位上,“O2O模式”意味著“賦能”。賦能不是另起爐灶、各自為戰,而是通過整合雙線資源以便更好析出潛藏的商業價值。線上購物雖然極大降低了用戶的篩選成本,但是也存在履約滯后,售后流程繁瑣等問題。蘇寧坐擁遍布全國的末端銷售節點,如果能夠打通線上與線下的業務壁壘,那么線上便捷的購物流程不僅能夠為線下門店導流,同時也能進一步拓寬門店推廣范圍,降低營銷成本。此外,在線下末端節點的加持下,線上業務也可以依托于精準的地理定位服務,為用戶提供更為多樣化的履約模式和更為便捷的即時配送服務。線下門店不僅可以作為前置倉、自提點等,還可以作為打通最后一公里的中繼站,真正實現從商家到用戶的無縫銜接。
放諸于蘇寧易購而言,現有的核心購物鏈路主要依附于易購前臺,交易中臺,支持后臺,商戶平臺這四大核心模塊。其中易購前臺作為蘇寧的“門戶”,通過蘇寧易購APP,蘇寧易購小程序,第三方小程序直接與消費者交互。用戶進入蘇寧易購主站后,由首頁、頻道頁、促銷頁等相關系統將用戶進一步導流到具體的商品類目。而對于有明確購物需求的用戶,則通過搜索系統將用戶引導到目標品類下。
當用戶選定目標商品,進入購物支付流程,后續邏輯則由交易中臺承接。交易中臺以“場景化”和“通用化”為建設導向。不僅提供訂單生成與查詢,實時價格查詢,庫存查詢等基礎服務,還包納了商品尋源、購物車、加車結算等場景化服務。
當用戶下單支付進入履約流程后,由支撐后臺負責從倉儲到用戶的配送及售后服務。物流平臺接到訂單后根據訂單時效分派配送任務。同時大數據、財務、會員融合等平臺會將相關數據記入系統用于后續的財務記賬及用戶行為畫像等。易購前臺,交易中臺,支撐后臺串聯成邏輯閉環,構成用戶側的完整購物鏈路。
而商家側則由商戶平臺提供入駐、推廣、管理等完整的適配化服務。入駐商家通過供應商平臺維護商家信息,進行商品規劃及推介管理。之后商戶平臺將門店信息及合同主數據下發給各下游系統,進而與用戶側系統共享數據鏈路。
蘇寧O2O業務的拓展立足于“雙線融合”戰略,因此在業務架構設計上,不僅要盡可能復用原有購物鏈路,避免重復建設,還要疏通各系統,實現O2O業務在當前架構下的無縫整合。就初衷而言,O2O賦能旨在于對易購入駐商家的模式升級,而O2O模式的核心在于圈定線下實體精確的地理服務范圍并提供多級時效履約模式。基于這一要求,O2O業務的鋪設亟需一個能夠提供地理數據分析處理能力的前臺業務系統整合易購前臺與交易中臺之間的技術鏈路,“隨時業務系統”應運而生。
三.“隨時業務系統”的技術賦能
“隨時業務系統”旨在于為O2O商家及用戶提供精確的地理數據處理分析能力支撐,同時提供收束性的前臺O2O業務統一接入服務。蘇寧當前的業務架構下,隨時業務系統扮演了易購前臺與交易中臺之間O2O業務樞紐的角色。
就業務鏈路而言,隨時業務系統同時與易購前臺、交易中臺、商戶平臺三大模塊交互。作為O2O業務的接入層,隨時業務系統提供了統一的多渠道尋店服務,用戶使用蘇寧易購APP時便通過這一服務獲取精確的地理位置信息與附近店鋪信息。其根據用戶地理信息調用推薦、搜索、尋源、價格、時效等系統,并基于業務需求整合商品數據推送給用戶,進而賦予用戶更為多樣化的時效履約選擇。
圖一:隨時業務系統技術架構
在技術架構上,隨時業務系統可以進一步拆分為前臺、中臺、后臺三個子模塊。其中隨時前臺除了提供基于地理數據分析能力支撐的尋址尋店服務外,還向用戶及其它系統提供同城店鋪、促銷店鋪、身邊好店、廣場門店等信息查詢服務。基于蘇寧分布式調用框架的技術支撐,隨時前臺與推薦、搜索、價格、促銷、時效、運費等后端系統實現了數據鏈的無縫整合。
當O2O商家在商家平臺入駐并維護店鋪信息,商戶信息以及電子圍欄信息后,商家管理系統和商家管理庫存系統會將這一部分信息通過消息隊列下發給隨時中臺。隨時中臺接收到電子圍欄數據后,首先會對電子圍欄數據進行規整性校驗。濾除不合規的數據后,將常規數據的地理信息編碼為EWKT格式的文本幾何對象并保存在數據庫中。
圖二:競爭型接口路由收束策略
隨時中臺除了承接店鋪,商家,電子圍欄信息外,還負責提供多活部署場景下的接口級路由收束功能。鑒于O2O業務的重要價值,隨時業務系統采用了主-備雙機房部署方案,并通過主-備拓撲復制機制實現雙機房數據一致性。在這一部署架構下,需要對數據更新與插入操作進行收束以保證其在主機房統一落庫。借由分布式調用中臺提供的跨機房路由服務,所有前臺的更新與插入請求都被收束到中臺的服務治理組件中,并統一路由到主機房數據庫。
隨時后臺在功能設計上較為簡單,主要用于運維人員進行店鋪信息與商戶信息的查詢與管理等。
四.地理數據分析能力建設
就設計初衷而言,隨時業務系統旨在于提供一套完善的地理數據解析服務與精確的LBS尋店服務,這一服務主要借由PostgreSQL的PostGIS地理插件實現。
PostgreSQL是以加州大學開發的PostGres4.0版本為基礎的對象關系型數據庫。相比于傳統的關系型數據庫,PostgreSQL提供了更為多樣化的擴展特性,如對象存儲,復雜查詢,自定義類型等。
PostGIS是針對于PostgreSQL的一個空間數據處理插件,其符合并實現了OpenGIS的設計規范,為PostgreSQL提供了復雜空間、平面、曲面幾何對象的存儲分析能力。
隨時業務系統的地理數據分析能力可以切分為尋址和尋店兩個向度。所謂尋址,即將用戶手動填寫的文本化地址解析為掛載經緯度信息的結構化地址。為了向用戶提供更為精準的地理定位服務,隨時業務前臺通過主動的地址數據清洗來規整用戶地址信息。當拿到用戶的文本地址后,隨時業務系統會調用地址組件系統相關API接口并將文本地址數據解析為掛載興趣點(包含了經緯度,省市區等詳細地理信息)的結構化地址數據并同步給相關系統,這一過程用戶是無感知的。當用戶打開蘇寧易購APP后,便可以借助結構化的地址信息找尋附近的O2O門店并享受及時配送服務。
相較于尋址、尋店的技術實現則更為復雜。其主要依托于目前國際流行的地理坐標系統EPSG:4326(WGS84)與PostGIS地理組件來實現。PostGIS遵循了OpenGIS相關技術規范。其地理數據分析能力建基于大地測量,地理勘測,投影制圖等相關技術理論:
1.大地水準面與參考橢球體
圖三:地球自然表面與參考橢球體
在地理測量中,“大地水準面”是一個極為重要的概念。因為地球是一個兩極壓扁的近似橢球體,而自然表面由于地勢差異凹凸不平,無法直接用于標準化的地理測量。為了精確測量地球表面,便需要人為設置參照面。所謂“大地水準面”,指的是在只考慮重力和自轉影響下的理想海洋平面的延伸面。這一平面包裹整個地球構成密閉曲面。而“參考橢球體”即由“大地水準面”所封閉的幾何空間。由長半軸、短半軸、扁率三組參數唯一定義一個參考橢球體。參考橢球體是虛構的幾何模型,地理測量中的經緯度,海拔等都是相對于參考橢球體而言。因為各地地形差異,因此不同地區所選用的參考橢球體也不盡相同,目前國際流行的參考橢球體基本遵循WGS規范。
2.投影坐標系和地理坐標系
因為地理測量中存在不同的測量需求,因此也就衍生了不同的參考坐標系。不同的坐標系下對位置的描繪也不盡相同。目前地理測量中所使用的主要有投影坐標系和地理坐標系兩種。
圖四:等距圓柱投影法
因為地球本身是立體的,而在航海,軍事,導航的實際應用中往往以平面地圖為主,因此就需要將三維地球的表面轉換為二維平面。限于三維曲面的幾何特性,在投影到二維平面時不可避免的會出現失真。目前常用的投影方式有等距投影和墨卡托投影兩種。
對于地表某點的精確定位及海拔勘測,平面投影的方式無法滿足要求,這時就需要用到以參考橢球體為基準的地理坐標系。對于地理坐標系而言,通過經度,緯度,海拔可以唯一確定地球表面任何一個點的精確位置。
3. EPSG:4326(WGS84)地理坐標系統
WGS84地理坐標系統是目前使用最為廣泛的地理坐標系統,其與1983年的北美基準(NAD83)坐標系統相似,以地球中心作為坐標原點。這一坐標系統被GPS全球定位系統所采用。蘇寧隨時業務系統地理數據分析均以WGS84為基準坐標系。
4.WKB(Well-Known Binary)與WKT(Well-Known Text)
PostGIS不僅支持所有的OpenGIS規范,而且在此基礎上擴展了3DZ,3DM,4D坐標。在OpenGIS中提供了兩種描述幾何對象的方式,分別是WKB和WKT。PostGIS還提供了功能更為強大的EWKB和EWKT擴展幾何對象。我們主要通過EWKT來完成幾何對象的構建。使用EWKT構建幾何對象的方式如下:
(1)SRID=4326;POINT(1 1)表示WGS84坐標系中的一個點。
(2)SRID=4326;LINESTRING(1 1,2 2)表示WGS84坐標系中的一條線。
(3)SRID=4326;POLYGON(1 1,2 4,3 9,1 1)表示WGS84坐標系中的一個面(閉合多邊形)。
PostgreSQL存儲幾何數據時并不是直接存儲,而是要編碼成十六進制的Geometry格式。因此需要用到PostGIS提供的幾何對象構建函數:ST_GeomFromEWKT(text)。如:GeomFromEWKT(SRID=4326; POLYGON(1 1,2 4,3 9,1 1))。其中“SRID=4326”表示在WGS84地理坐標系下構建該幾何對象,“POLYGON(1 1,2 4,3 9,1 1)”表示閉合多邊形。
PostgreSQL構建Geometry類型的幾何對象時并不會直接轉換,而是先對EWKT表示的幾何對象進行合法性校驗。PostgreSQL主要通過ST_IsValid函數來檢查幾何對象。比如執行如下兩條SQL:
(1)SELECT ST_IsValid(‘POLYGON((1 1,2 4,3 9,1 1))’);
(2)SELECT ST_IsValid(‘POLYGON((0 0,1 1,2 2,0 0))’);
前者會返回TRUE,但后者會返回FALSE,因為后者四個點在一條直線上,無法構成閉合多邊形,校驗不通過。
5.基于用戶經緯度的尋店方案
借助PostGIS,隨時業務系統可以將文本化的店鋪電子圍欄信息轉碼為可供計算的幾何數據類型。當用戶打開蘇寧易購APP后,會調用隨時業務系統的相關接口。獲取到用戶的地址信息后,可以據此計算出用戶所在位置的周邊店鋪。這一功能主要借由PostGIS的幾何包含關系判定函數ST_Contains(geometry,geometry)來實現,該函數可以判斷兩個幾何對象之間是否存在包含關系。當拿到用戶位置信息后,系統會將其編碼成WGS84坐標系下的標準幾何點對象,并查詢包含該點的電子圍欄數據。查詢到電子圍欄信息后,系統會根據需要進行相應的業務封裝后返回給用戶,以此向用戶提供高精度的身邊店鋪查詢服務。
五.PostgreSQL的高可用方案
鑒于O2O業務可能的增長潛力和商業預期,未來O2O入駐店鋪可能達到百萬甚至千萬級別。有使于幾何運算本身的性能耗費,單臺PostgreSQL無法保障高并發場景下的服務能力。因此隨時業務系統采用了PostgreSQL的Citus插件來搭建高可用的分布式集群。Citus基于PostgreSQL的開源分布式數據庫進行開發,完美集成了PostgreSQL的應用生態。Citus良好的擴展性使得其在無縫兼容PostgreSQL版本演進的同時又能良好保障數據庫的穩定性。
1. 常規Citus集群部署架構
圖五:常規Citus集群部署架構
Citus采用了Container-Worker的部署架構,即由一臺或多臺數據庫擔任Container節點,多臺數據庫擔任Woreker節點。Container節點中不存儲任何業務數據,而只保存跟分片規則,數據切分相關的元數據。業務數據被切分為M個分片分散在N個Worker節點中。除了分表數據外,還有一部分參考數據不進行數據切分,在每一個節點中都會存儲相同的數據副本。
為了防止單點故障下的數據丟失,Citus還提供了“分片復制”功能,開啟該功能后,Citus會將每個分片數據副本散布在多個Worker節點中。當單節點宕機后,Container會自動將指向該節點的請求路由到其它備份節點。
2.蘇寧Citus集群部署架構
圖六:蘇寧Citus集群部署架構
在常規的Citus部署方案中,一般由多臺數據庫擔任Container節點組成高可用的Container集群,并通過流復制來保證不同Container節點的元數據一致性。但是這種方案存在兩個缺陷,一是Container節點只存儲元數據,浪費了大量的存儲空間。二是為了提升讀寫性能和集群的高可用性就必須橫向擴充Container節點。基于性能和穩定性考慮,蘇寧采用了另一種部署方案。借助Citus的MX功能,可以讓所有Worker節點也攜帶元數據并通過流復制保持一致性。這樣就不需要進一步區分Container節點和Worker節點。每臺數據庫中同時保存了元數據和業務數據,不僅節省了存儲空間,也實現了數據庫集群的去中心化,避免了因為Container節點宕機導致集群失去服務能力。
結語
借力于高可用PostgreSQL集群和PostGIS地理組件的技術賦能,蘇寧隨時業務系統具備了更為精準可靠的O2O服務能力。線上數據與線下末端的整合不僅為蘇寧開拓了更為廣闊的發展空間,同時也在零售行業觸發了一場全新的價值嬗變。
作者簡介:
王翔,蘇寧科技集團消費者平臺研發中心技術經理。畢業于安徽大學電子信息工程專業。目前致力于蘇寧隨時,蘇寧基礎,蘇寧拼購等系統多活方案設計及部署,系統架構拆分,后端性能優化,服務端開發等工作。
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】























