掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
「定制旅行」已經(jīng)逐漸成為旅游行業(yè)「消費升級」的一個主流模式。

創(chuàng)新互聯(lián)建站主營都安網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app開發(fā)定制,都安h5微信小程序搭建,都安網(wǎng)站營銷推廣歡迎都安等地區(qū)企業(yè)咨詢
隨著用戶對旅游服務的要求越來越高,對行程安排有個性化需求的消費者來說,常規(guī)的跟團游和自由行產(chǎn)品已經(jīng)很難滿足他們的需求。在這樣的環(huán)境下,馬蜂窩電商業(yè)務平臺也在不斷探索在提供門票、機票、酒店等這樣旅游電商「標品」之外,如何充分結(jié)合現(xiàn)有的供應商、旅行定制師資源優(yōu)勢,更好得滿足用戶需求,創(chuàng)造多樣化服務。
2018 年 6 月,馬蜂窩電商業(yè)務上線了支持多工單搶單的「定制旅行交易系統(tǒng)」(圖 1)。不同于之前電商標品連接人和商品的屬性,定制旅行的本質(zhì)是連接人和服務,將有定制旅行需求的消費者與有承接能力的供應商、旅行定制師實現(xiàn)更好的匹配。
圖 1—馬蜂窩定制旅行交易系統(tǒng)
搶單模式帶來的定制旅行平臺升級
通過定制旅行平臺,用戶可以根據(jù)自己的定制主體(個人/企業(yè))、出發(fā)地、目的地、往返時間、人數(shù)、預算,提交個性化旅行需求,系統(tǒng)通過搶單、派單的方式將需求與有承接能力的供應商進行對接。
最初,定制旅行系統(tǒng)采用的是將一個需求分發(fā)給一個供應商的一個定制師的解決方案。這樣的做法存在幾個明顯的缺陷,比如:
為此,研發(fā)團隊首先開發(fā)了多工單系統(tǒng),在用戶提交定制需求時,根據(jù)用戶選擇服務的定制師數(shù)量,由系統(tǒng)派發(fā)給多個供應商的多個定制師,然后在此基礎(chǔ)上進行系統(tǒng)升級,引入了搶單功能,主要用于熱門目的地有定制游需求的個人用戶。
用戶提交定制需求后,系統(tǒng)將會根據(jù)用戶特征數(shù)據(jù)和供應商、定制師特征數(shù)據(jù)進行算法匹配,使用戶和定制師之間進行雙向選擇。每個定制需求最多可以支持三家供應商的定制師搶單同時為用戶提供旅行方案,由用戶挑選最終確認其中一個定制師的旅行方案為用戶服務。搶單系統(tǒng)帶來的幾個好處是:
圖2-多工單系統(tǒng)改造
搶單系統(tǒng)的關(guān)鍵是高效的資源匹配和信息溝通。因此,搶單系統(tǒng)的核心設計主要有兩點,一是搶單池的消息隊列,如何滿足并發(fā)需求;二是消息通知服務,如何及時有效地通知定制師。
核心技術(shù)實現(xiàn)
并發(fā)控制
搶單功能允許同一需求被多個供應商的多個定制師同時搶到。用戶提交需求后,會進入統(tǒng)一的搶單消息隊列。每個需求最多會有三個定制師同時為用戶提供服務;在同一企業(yè)內(nèi),只有一個定制師可以搶單。
在降低并發(fā)方面,主要是通過以下兩點來實現(xiàn):
1. 定制師分級,使用馬蜂窩消息總線延遲消息服務,按照等級延遲通知
根據(jù)供應商和定制師的業(yè)務范圍,BD、運營根據(jù)定制師的服務能力對定制師進行定期考核劃分等級,不同的定制師通過商家后臺或者微信公眾號可以看到不同的搶單池隊列。
通過使用電商自研的消息總線服務,根據(jù)定制師服務范圍異步分發(fā),同時利用等級信息過濾搶單池隊列,保障所有的相同等級的定制師在同一時刻看到相同的搶單池隊列。
2. 控制并發(fā)鎖粒度及鎖釋放,防止死鎖
搶單接口調(diào)用時進行十余種業(yè)務防刷控制,搶單分配時,將死鎖放置到可控最細粒度,保障并發(fā)度,搶單結(jié)束后,通過長連接自動更新?lián)寙纬兀瑢⒃撘褤屝枨髲膿寙纬匾瞥?,避免過度打擾用戶,同時減少定制師之間競爭造成的資源浪費。
定制旅行交易系統(tǒng)使用 Ko 框架,關(guān)于控制并發(fā)是采用文件鎖還是 Redis 鎖的問題,主要是考慮:
圖3-鎖的控制
消息通知-長連接
據(jù)統(tǒng)計,定制師聯(lián)系用戶需求越及時,需求轉(zhuǎn)化率越高,及時獲得搶單消息通知至關(guān)重要。消息通知的方式主要有兩種:PC 端消息彈窗,以及在移動端通過微信公眾號的模板消息來實現(xiàn)。
為了實現(xiàn)有搶單池變更可以***時間提醒定制師,讓定制師不用自己刷新?lián)寙纬鼐涂梢詫崟r看到***的待搶需求,這里引入了長連接服務的解決方案,并進行了以下應用層優(yōu)化:
1. 長連接復用
定制師在查看商家后臺時,會打開多個頁面,系統(tǒng)需要在當前的活躍頁面上進行通知。理論上來講,每個窗口理論上都需要提供一個長鏈接的服務。但這樣無疑上會造成長鏈接的資源浪費。使用“長連接復用”的方式可以解決這個問題:
(1)同一個瀏覽器多個tab頁之間共用一個長連接ID(setcookie),重啟瀏覽器新建conn id
(2)同一個瀏覽器,來回切換用戶,一個用戶只產(chǎn)生一次長連接ID(redis hash)
2. 消息廣播
同一個瀏覽器多個 tab 頁復用 conn id,互相廣播,對于活躍窗口如果出現(xiàn)沒有監(jiān)聽的消息,廣播到活躍窗口上去。
圖4-搶單系統(tǒng)消息通知與廣播
3. 重試機制
網(wǎng)絡異常是不可避免的,我們不知道什么時候網(wǎng)絡會斷,導致長連接斷掉,會對消息通知帶來影響。采用重試機制,限定時間周期,監(jiān)聽網(wǎng)絡有沒有異常。在長連接斷開時指定短時間內(nèi)自動重試,超過最多重試次數(shù)后,自動延長重試間隔,防止服務異常雪崩問題。
圖5-重試機制
4. Lua 協(xié)程
最初長連接請求打到服務器之后,服務器的承接方式是通過 PHP 進程。項目上線后發(fā)現(xiàn)了一個問題,服務器上的請求長時間掛在一個比較高的點上,可以處理的長連接需求受限。而且特點是內(nèi)存比較大,但 CPU 消耗比較小。后來我們采用了 Lua 協(xié)程的解決方案,不是把請求轉(zhuǎn)到 PHP FPM 上,而是轉(zhuǎn)接到 Lua 上,減少內(nèi)存的消耗。
小結(jié)與未來規(guī)劃
定制搶單功能的上線促進了供應商之間的良性競爭,能夠適應供應商服務能力和資源控制力多樣性而進行動態(tài)分配,確保用戶的需求得到充分滿足,另外,也在一定程度上促進了供應商內(nèi)部的定制師考核制度不斷完善。更重要的是,使定制游平臺上的收益轉(zhuǎn)化率有了超過 70% 的明顯提升。
本文作者:王偉陽,馬蜂窩技術(shù)專家,2017 年加入馬蜂窩,現(xiàn)負責馬蜂窩電商度假業(yè)務開發(fā)。2010 年研究生畢業(yè)于中國農(nóng)業(yè)大學,曾在甲骨文、百度工作,先后從事分布式拓撲環(huán)境任務調(diào)度與報告系統(tǒng),工程效率與質(zhì)量平臺與工具,評估測評系統(tǒng)等方向的研發(fā)工作。
【本文是專欄作者馬蜂窩技術(shù)的原創(chuàng)文章,作者微信公眾號馬蜂窩技術(shù)(ID:mfwtech)】

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流