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