何川
北京智富云信息科技有限公司 北京 100070
團(tuán)購(gòu)零售的本質(zhì)為通過多人組成的團(tuán)隊(duì),完成產(chǎn)品的統(tǒng)一采購(gòu),這種方式改變了以往消費(fèi)者的購(gòu)物模式,同時(shí),也為傳統(tǒng)消費(fèi)的轉(zhuǎn)型和發(fā)展提供了條件,團(tuán)購(gòu)零售中產(chǎn)品價(jià)格具有較強(qiáng)的價(jià)格優(yōu)勢(shì),在訂單數(shù)量達(dá)到一定標(biāo)準(zhǔn)之后,消費(fèi)者能夠得到更多的優(yōu)惠,并且高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)在運(yùn)行中,能夠?yàn)橄M(fèi)者提供更加高效、便捷的服務(wù),打破地點(diǎn)和時(shí)間的影響,為消費(fèi)者提供更加高水平的購(gòu)物平臺(tái)。
與普通零售平臺(tái)相比,團(tuán)購(gòu)零售平臺(tái)在價(jià)格中具有明顯優(yōu)勢(shì),通過專業(yè)團(tuán)購(gòu)組織的方式,將相同購(gòu)買意愿的消費(fèi)者進(jìn)行整合,利用互聯(lián)網(wǎng)平臺(tái)完成產(chǎn)品的批量購(gòu)買,這一行為稱為團(tuán)購(gòu)。通過團(tuán)購(gòu)的方式進(jìn)行消費(fèi)的根本目的是得到更大優(yōu)惠,控制商品的購(gòu)買成本的同時(shí),讓商家提高銷售額,實(shí)現(xiàn)雙贏。要想達(dá)到這一目標(biāo),則需要構(gòu)建一個(gè)高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái),為團(tuán)購(gòu)活動(dòng)的良好開展提供條件。
尤其是在當(dāng)前互聯(lián)網(wǎng)計(jì)算機(jī)技術(shù)快速發(fā)展的情況下,電子商務(wù)得到了迅速提升,這對(duì)于生活節(jié)奏較快的人們來說,實(shí)現(xiàn)了足不出戶完成消費(fèi)。高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)作為消費(fèi)的支撐平臺(tái),其在架構(gòu)中要想保證最終質(zhì)量,需遵循以下設(shè)計(jì)架構(gòu)原則。
第一,簡(jiǎn)單性原則,在對(duì)平臺(tái)系統(tǒng)功能完成設(shè)計(jì)的同時(shí),針對(duì)平臺(tái)系統(tǒng)的操作設(shè)計(jì)盡量簡(jiǎn)單化,這對(duì)于平臺(tái)使用來說具有非常重要的作用。
第二,針對(duì)性原則,團(tuán)購(gòu)零售平臺(tái)是團(tuán)購(gòu)系統(tǒng)以及后臺(tái)管理的定向設(shè)計(jì),在普通消費(fèi)購(gòu)物網(wǎng)站的基礎(chǔ)上,增加團(tuán)購(gòu)設(shè)計(jì)這一功能,這就需要高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)具有較強(qiáng)的針對(duì)性以及專業(yè)性。
第三,實(shí)用性原則,平臺(tái)運(yùn)行的前端需要接受來自互聯(lián)網(wǎng)用戶的實(shí)際請(qǐng)求,確保用戶在瀏覽以及購(gòu)買商品過程中的便捷性。后端主要負(fù)責(zé)接受平臺(tái)管理人員發(fā)出的請(qǐng)求,在此基礎(chǔ)上,完成產(chǎn)品信息的添加以及刪除等修改,保證產(chǎn)品信息的實(shí)用性。
高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)客戶端頁(yè)面緩存過程中,包含反向代理緩存以及應(yīng)用端緩存等,運(yùn)用內(nèi)存數(shù)據(jù)庫(kù)完成數(shù)據(jù)的存儲(chǔ)工作。
在數(shù)據(jù)規(guī)模較大的情況下,數(shù)據(jù)具有局部性的特點(diǎn),通過局部性原理,針對(duì)數(shù)據(jù)計(jì)算相關(guān)問題完成切分治理。其中MR模型屬于無共享架構(gòu),將數(shù)據(jù)集中分布在各個(gè)節(jié)點(diǎn)中,在數(shù)據(jù)處理階段,各個(gè)節(jié)點(diǎn)根據(jù)就近原則對(duì)本地的存儲(chǔ)數(shù)據(jù)進(jìn)行讀取,再完成數(shù)據(jù)合并和排序工作,完成上述處理之后,分發(fā)到各個(gè)節(jié)點(diǎn)中,這種方式能夠降低數(shù)據(jù)傳輸工作量,大幅度提高數(shù)據(jù)實(shí)際處理效率。
除了任務(wù)切分治理之外,還可以采用多進(jìn)程的并行執(zhí)行方式完成計(jì)算,并行計(jì)算指的是,利用多種計(jì)算機(jī)資源,對(duì)計(jì)算問題進(jìn)行處理,這種方式能夠有效提高計(jì)算機(jī)的運(yùn)行和計(jì)算速度。使用多個(gè)處理器完成進(jìn)程和線程的協(xié)調(diào),共同解決相同問題,將問題分為多個(gè)部分,各個(gè)部分采取一個(gè)獨(dú)立的機(jī)制完成處理工作。這一方法與MR模型的不同點(diǎn)在于,并行計(jì)算是在問題分解基礎(chǔ)上完成的,而MR是在將數(shù)據(jù)分解作為基礎(chǔ)。
首先,負(fù)載均衡以及備份工作,隨著當(dāng)前團(tuán)購(gòu)零售平臺(tái)中的并發(fā)量逐漸增多,需要完成節(jié)點(diǎn)的擴(kuò)容和集群處理,通過負(fù)載均衡設(shè)備的方式完成請(qǐng)求以及分發(fā)工作。負(fù)載均衡設(shè)備能夠在保證負(fù)載均衡的同時(shí),完成失效檢測(cè)工作。要想進(jìn)一步提高其可用性,還要完成有容備份,這種方式能夠避免節(jié)點(diǎn)宕機(jī)產(chǎn)生的負(fù)面影響。備份工作分為在線備份以及離線備份,根據(jù)時(shí)效性要求存在的差異,制定不同的備份措施。
其次,讀寫分離,讀寫分離主要針對(duì)數(shù)據(jù)庫(kù)完成,系統(tǒng)并發(fā)量增加的狀態(tài)下,該種方式能夠提高數(shù)據(jù)訪問的可用性,在分離過程中需要關(guān)注數(shù)據(jù)一致性,利用分布式系統(tǒng)CAP定量中重點(diǎn)關(guān)注其可用性。
最后,依賴關(guān)系,團(tuán)購(gòu)零售平臺(tái)中,不同模塊之間的關(guān)系屬于低耦合,因此,可以通過消息組件的方式完成交互,清晰劃分?jǐn)?shù)據(jù)流轉(zhuǎn)的主流程以及副流程,其中主流程采取異步操作的方式,提高系統(tǒng)在實(shí)際運(yùn)行中的可用性。在異步處理過程中,為了保證數(shù)據(jù)接受處理質(zhì)量,要利用確認(rèn)機(jī)制,但是在部分情況下,雖然已經(jīng)完成請(qǐng)求處理,但是由于網(wǎng)絡(luò)不穩(wěn)定等其他因素的影響,確認(rèn)消息可能出現(xiàn)沒有返回等現(xiàn)象,該種情況下需要重新發(fā)送請(qǐng)求[1]。
團(tuán)購(gòu)零售平臺(tái)系統(tǒng)中的容量有限,所以其承受的并發(fā)量也有限,在設(shè)計(jì)架構(gòu)的過程中,需要對(duì)流量進(jìn)行充分控制,避免由于意外情況或者瞬間并發(fā)量攻擊等,導(dǎo)致平臺(tái)系統(tǒng)癱瘓。在流控控制措施過程中,可以先對(duì)請(qǐng)求進(jìn)行排列,針對(duì)超出預(yù)期范圍請(qǐng)求,給予告警或者丟棄處理。而在原子操作以及并發(fā)控制中,訪問共享資源階段,為了避免出現(xiàn)沖突,則要完成對(duì)并發(fā)的控制工作,并且保證交易一致性,這就要求在設(shè)計(jì)交易系統(tǒng)階段,對(duì)原子操作以及并發(fā)完成控制,當(dāng)前采取的主要手段包括寫時(shí)復(fù)制、CAS以及樂觀鎖等,多版本并發(fā)控制中,往往采取MVCC的方式,當(dāng)前其已經(jīng)成為保證交易一致性的有效措施,在數(shù)據(jù)庫(kù)設(shè)計(jì)中得到了廣泛運(yùn)用。
由于團(tuán)購(gòu)零售平臺(tái)中存在不同類型的業(yè)務(wù)邏輯,其中包含復(fù)雜型、消耗型等,針對(duì)不同類型的業(yè)務(wù)邏輯,其會(huì)消耗不同數(shù)量資源,該種情況下需要根據(jù)邏輯的不同,制定針對(duì)性解決策略。
該系統(tǒng)在實(shí)際使用的過程中,可以根據(jù)網(wǎng)絡(luò)流量以及各個(gè)節(jié)點(diǎn)的連接情況信息,對(duì)用戶請(qǐng)求進(jìn)行處理,將其傳輸?shù)脚c用戶最近的服務(wù)節(jié)點(diǎn)中。這一操作的主要目標(biāo)為,保證用戶能夠根據(jù)就近原則,獲取相應(yīng)的信息內(nèi)容,有效解決網(wǎng)絡(luò)擁堵等問題,最終達(dá)到提高用戶訪問網(wǎng)站響應(yīng)速度的目的。對(duì)于規(guī)模較大的團(tuán)購(gòu)零售平臺(tái),則需要利用CDN作為網(wǎng)絡(luò)加速,例如拼多多等平臺(tái),通過自建的方式建立CDN,中小型企業(yè)則可以與第三方CDN廠商相互合作,完成網(wǎng)絡(luò)加速。在選擇合作廠商的過程中,要綜合分析其經(jīng)營(yíng)時(shí)間、是否具備可擴(kuò)充的寬帶資源以及節(jié)點(diǎn)穩(wěn)定性等,綜合以上因素完成評(píng)估衡量,選擇性價(jià)比最高的合作廠商[2]。
完整系統(tǒng)的團(tuán)購(gòu)零售平臺(tái),其中涉及的業(yè)務(wù)領(lǐng)域較為復(fù)雜,不同領(lǐng)域中的集群不同,因此可以使用DNS完成域名解析的分發(fā)以及輪詢工作,DNS的實(shí)現(xiàn)方式較為簡(jiǎn)單,但是靈活性有待提高。通常需要在商用硬件F5、NetScaler的基礎(chǔ)上完成分發(fā),使用主備方式。在四層完成業(yè)務(wù)集群分發(fā)之后,WEB服務(wù)器在7層位置完成負(fù)載均衡以及反向代理等工作,將其分發(fā)到集群中的各項(xiàng)應(yīng)用節(jié)點(diǎn)。負(fù)載的選擇需要分析各項(xiàng)影響因素,其中包含是否能滿足高并發(fā)以及高性能,負(fù)載均衡算法以及是否支持壓縮等,當(dāng)前常用的負(fù)載均衡軟件主要包含以下幾種。
第一,LVS,在4層工作,Linux能夠完成高并發(fā)高穩(wěn)定的負(fù)載均衡器,支持多種轉(zhuǎn)發(fā)方式,但是對(duì)外界網(wǎng)絡(luò)環(huán)境具有較高的依賴性。
第二,Nginx,其在7層工作,能夠?qū)Ω卟l(fā)多進(jìn)程的負(fù)載均衡器給予支持,針對(duì)地域名以及目錄結(jié)構(gòu)等完成分流。采取端口檢測(cè)的方式確定服務(wù)器內(nèi)部故障,例如根據(jù)服務(wù)器處理網(wǎng)頁(yè)之后代碼狀態(tài)進(jìn)行判斷,將返回錯(cuò)誤的請(qǐng)求,發(fā)送到另一個(gè)節(jié)點(diǎn)中。
第三,針對(duì)其中圖片,需要具備單獨(dú)的地域名以及圖片服務(wù)器等,并在圖片服務(wù)器之上增加varnish完成圖片的緩存。
應(yīng)用層系統(tǒng)具有獨(dú)立性,其中包含前端購(gòu)物以及用戶自主服務(wù)等,可以利用serviet3.0提高系統(tǒng)的吞吐量。Http在經(jīng)過Nginx之后,利用負(fù)載均衡算法,將其分配到App中的一項(xiàng)節(jié)點(diǎn)中,采取層層擴(kuò)容的方式,降低擴(kuò)容難度。除了使用coolie對(duì)少量用戶信息進(jìn)行存儲(chǔ)之外,針對(duì)App接入層,還要保存與用戶相關(guān)的session數(shù)據(jù),但是在反向代理或者不支持該種接入的情況,可以利用session集中存儲(chǔ)的方式,保證App接入層處于無狀態(tài),同時(shí),在系統(tǒng)用戶增多的情況下,可以利用增加應(yīng)用節(jié)點(diǎn)的方式完成拓展。
Session在實(shí)際運(yùn)用中,需要滿足以下要求,第一,具備高效的通信協(xié)議,第二,其分布式緩存要支持節(jié)點(diǎn)伸縮,數(shù)據(jù)冗余備份和數(shù)據(jù)遷移工作,第三,具備過期管理功能。
針對(duì)其中一個(gè)領(lǐng)域開展的服務(wù)工作,稱之為業(yè)務(wù)服務(wù),對(duì)于團(tuán)購(gòu)零售平臺(tái)來說,其中主要涉及用戶、商品、訂單以及支付等各項(xiàng)業(yè)務(wù),針對(duì)不同的領(lǐng)域,提供的服務(wù)也不同。每個(gè)領(lǐng)域代表一個(gè)模塊,所以需要對(duì)模塊進(jìn)行科學(xué)清晰的劃分,保證接口設(shè)計(jì)的科學(xué)性和有效性,通常情況下,需要根據(jù)高內(nèi)聚、接口收的原則進(jìn)行。這種方式能夠提高系統(tǒng)在運(yùn)行中的可用性,根據(jù)實(shí)際團(tuán)購(gòu)零售平臺(tái)規(guī)模大小,可以將不同的模塊相互連接部署,通常規(guī)模較大的平臺(tái)采取獨(dú)立部署的方式進(jìn)行。
業(yè)務(wù)服務(wù)具有高并發(fā)的特點(diǎn),業(yè)務(wù)層對(duì)外協(xié)議通過RPC的方式暴露,可以使用成熟的NIO通訊框架完成,要想進(jìn)一步增強(qiáng)模塊服務(wù)的可用性,則需要一個(gè)模塊部署在多個(gè)節(jié)點(diǎn)中,完成冗余處理,同時(shí),開展自動(dòng)負(fù)載轉(zhuǎn)發(fā)以及失效轉(zhuǎn)移。在初期階段可以通過VIP+heartbeat的方式進(jìn)行,隨著技術(shù)水平的逐漸提升,可以使用單獨(dú)組間HA完成,增強(qiáng)模塊服務(wù)的可用性。
第一,通信組件,其是平臺(tái)業(yè)務(wù)系統(tǒng)調(diào)用的重要組成部分,在高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)中,要保證其符合高并發(fā)以及高吞吐量的要求,其中涉及客戶端以及服務(wù)端兩部分內(nèi)容。采取長(zhǎng)連接的方式實(shí)現(xiàn)維護(hù),能夠降低請(qǐng)求過程中建立連接的成本,在客戶端中針對(duì)每個(gè)服務(wù)器定義一個(gè)連接池,完成初始化連接之后,可以在并發(fā)連接服務(wù)端完成rpc操作,同時(shí)在連接池中設(shè)置超時(shí)時(shí)間。長(zhǎng)連接維護(hù)可以分為兩個(gè)階段,分別為請(qǐng)求發(fā)送過程以及接受響應(yīng)過程,在發(fā)送請(qǐng)求的過程中,一旦出現(xiàn)IOException現(xiàn)象,則要將該連接標(biāo)記為失效[3]。接受響應(yīng)連接中,服務(wù)端返回SocketTimeoutException,在設(shè)置超時(shí)時(shí)間的情況下,需要直接返回異常,對(duì)當(dāng)前連接中存在的超時(shí)請(qǐng)求完成清除。對(duì)于接收相應(yīng)來說,每個(gè)連接需要以單獨(dú)的線程完成運(yùn)行,客戶端利用同步的方式完成rpc調(diào)用,并使用hession序列化方式完成,實(shí)現(xiàn)高并發(fā)高吞吐量的請(qǐng)求。
第二,路由,在設(shè)計(jì)數(shù)據(jù)庫(kù)切分解決方案的過程中,要想保證數(shù)據(jù)庫(kù)吞吐量,先要將不同的表進(jìn)行垂直切分,將其劃分到不同數(shù)據(jù)庫(kù)中,一個(gè)表超出標(biāo)準(zhǔn)大小之后,再對(duì)其進(jìn)行水平切分。例如,在用戶表中,針對(duì)訪問數(shù)據(jù)客戶端,要根據(jù)用戶ID完成定位,確定需要進(jìn)行訪問的數(shù)據(jù)信息。路由表維護(hù)階段,每個(gè)biz客戶端都需保持所有sharding的連接池,要想解決其中存在的全連接問題,可以將sharding切分轉(zhuǎn)移到業(yè)務(wù)服務(wù)層中,每個(gè)業(yè)務(wù)節(jié)點(diǎn)對(duì)一個(gè)shard連接進(jìn)行維護(hù),路由組件可以通過建立replicateset集群的方式增強(qiáng)運(yùn)行可用性。
綜上所述,在云平臺(tái)基礎(chǔ)上,高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)涉及的內(nèi)容較多,要想實(shí)現(xiàn)平臺(tái)的穩(wěn)定運(yùn)行,則需要從各項(xiàng)組成部分入手,完成平臺(tái)的有效架構(gòu)。為用戶提供更加便捷有效的團(tuán)購(gòu)服務(wù),同時(shí)在設(shè)計(jì)中,降低系統(tǒng)操作難度,建立友好穩(wěn)定的操作界面,同時(shí)對(duì)用戶數(shù)據(jù)完成的安全存儲(chǔ),避免出現(xiàn)信息泄露等問題。通過上述方式完成高并發(fā)高穩(wěn)定團(tuán)購(gòu)零售平臺(tái)的科學(xué)建立,最終達(dá)到穩(wěn)定運(yùn)行的目的。