用動(dòng)詞拆分操作,用名詞拆分資源,或者兼而有之口根據(jù)動(dòng)詞/名詞方法的定義,拆分服務(wù)和數(shù)據(jù)。不僅能有效地?cái)U(kuò)展事務(wù),還能有效地?cái)U(kuò)展與事務(wù)相關(guān)的大型數(shù)據(jù)集合。Y軸拆分,或者說面向數(shù)據(jù)服務(wù)的拆分,能夠有效地?cái)U(kuò)展事務(wù)、大型數(shù)據(jù)集合,并且有助于故障隔離。
拋開關(guān)于面向服務(wù)的架構(gòu)(SOA)和面向資源的架構(gòu)(ROA)這兩個(gè)概念的爭(zhēng)論,深入了解它們的基本前提就會(huì)發(fā)現(xiàn),它們至少有一點(diǎn)是相同的,即都要求架構(gòu)師和程序員考慮架構(gòu)中的職責(zé)拆分。大體上就是采用動(dòng)詞(服務(wù))和名詞(資源)的概念來(lái)實(shí)現(xiàn)拆分。即擴(kuò)展立方上的第二個(gè)軸,采用的就是這種方法。簡(jiǎn)而言之,是通過拆分站點(diǎn)中的各種功能和數(shù)據(jù),從而實(shí)現(xiàn)擴(kuò)展。采用簡(jiǎn)單方法就是把產(chǎn)品拆分為名詞和動(dòng)詞,或者兩者的組合。
首先,我們看看怎么用動(dòng)詞拆分站點(diǎn)。如果我們的站點(diǎn)是相對(duì)簡(jiǎn)單的電子商務(wù)站點(diǎn),那么可以用動(dòng)詞把它拆分為注冊(cè)、登錄、搜索、瀏覽、查看、加入購(gòu)物車、購(gòu)買。在這些事務(wù)中,每一個(gè)事務(wù)所需要執(zhí)行的數(shù)據(jù)可能都與其他事務(wù)需要的大不相同。例如,可能有人會(huì)說,注冊(cè)和登錄需要的數(shù)據(jù)是相同的,但其實(shí)它們都需要一些特有的數(shù)據(jù)。例如,注冊(cè)可能需要檢查該用戶選擇的ID是不是已經(jīng)被別人選用了,而登錄時(shí)則無(wú)需了解其他用戶的ID。注冊(cè)時(shí)可能需要把大量的數(shù)據(jù)寫入持久數(shù)據(jù)存儲(chǔ)中,而登錄則是一種驗(yàn)證用戶身份的只讀應(yīng)用。注冊(cè)可能需要用戶存儲(chǔ)許多識(shí)別個(gè)人身份的信息,包括信用卡號(hào)等,而在用戶只是想建立登錄連接時(shí)則無(wú)需訪問這些信息。
在研究搜索和登錄這兩種截然不同功能時(shí),依據(jù)動(dòng)詞拆分的擴(kuò)展方法的不同之處以及帶來(lái)的好處就更加明顯了。在登錄時(shí),我們關(guān)心的通常是驗(yàn)證用戶身份,可能會(huì)建立某些會(huì)話(這里我們采用術(shù)語(yǔ)會(huì)話,而不是采用狀態(tài))。登錄功能關(guān)心的是用戶,因此需要緩存用戶數(shù)據(jù)并與之進(jìn)行交互操作。另一方面,搜索關(guān)心的是查找數(shù)據(jù)項(xiàng),而最重要的是用戶的意圖(通常是用戶在搜索框內(nèi)輸入的搜索字符串、查詢或搜索項(xiàng))以及我們存儲(chǔ)在目錄中的目錄項(xiàng)。拆分這些數(shù)據(jù)集,可以使我們?cè)谙到y(tǒng)有限的內(nèi)存中緩存更多的數(shù)據(jù),而且,由此產(chǎn)生的高緩存命中率也會(huì)加快事務(wù)的處理。在后端的持久性系統(tǒng)(如數(shù)據(jù)庫(kù))中標(biāo)分?jǐn)?shù)據(jù),就能夠在這些系統(tǒng)中分配更多的專用內(nèi)存,加速對(duì)客戶(應(yīng)用服務(wù)器)請(qǐng)求的響應(yīng)。由于更好地利用了系統(tǒng)資源,這兩個(gè)系統(tǒng)都會(huì)相應(yīng)地更快。顯然,這是拓展這些系統(tǒng)最容易的方法,受內(nèi)存限制地更少。此外,通過采用X軸擴(kuò)展)相同的方法拆分事務(wù),Y軸的事務(wù)擴(kuò)展能力也增加了。
稍等!如果我們想把用戶和產(chǎn)品信息合并在一起,例如向客戶推薦產(chǎn)品,又該怎么辦呢?注意,這里用了新的動(dòng)詞一一推薦。這是另一種需要拆分?jǐn)?shù)據(jù)和事務(wù)的情況。我們可能會(huì)加入一種推薦服務(wù),根據(jù)用戶過去的購(gòu)買行為,與具有相似購(gòu)買行為的用戶進(jìn)行異步評(píng)估。這樣可能會(huì)把數(shù)據(jù)移植到登錄功能或搜索功能(當(dāng)用戶與系統(tǒng)交互時(shí)就會(huì)向他顯示)?;蛘咭部赡苁怯脩魹g覽器發(fā)出的一個(gè)單獨(dú)的同步調(diào)用,顯示在專門分配給這個(gè)推薦調(diào)用的區(qū)域。
現(xiàn)在可以考慮如何用名詞來(lái)拆分項(xiàng)了。還是拿電子商務(wù)的例子來(lái)說,我們可以標(biāo)識(shí)一些最終會(huì)對(duì)其進(jìn)行操作的資源(而不是表示要執(zhí)行的操作的動(dòng)詞)。我們可以認(rèn)為電子商務(wù)站點(diǎn)是由產(chǎn)品目錄、產(chǎn)品庫(kù)存清單、用戶賬戶信息、市場(chǎng)營(yíng)銷信息等構(gòu)成的。采用名詞拆分的方法,可以根據(jù)這些分類拆分?jǐn)?shù)據(jù),然后定義一套高級(jí)的原函數(shù),如創(chuàng)建、讀、更新和刪除等,對(duì)這些原數(shù)據(jù)進(jìn)行操作。
Y軸拆分不僅適用于擴(kuò)展數(shù)據(jù)集合,還適用于擴(kuò)展代碼庫(kù)。由于服務(wù)和資源都被拆分了,那么執(zhí)行的操作和執(zhí)行它們所必需的代碼也會(huì)被拆分。這就意味著可以把開發(fā)復(fù)雜系統(tǒng)的大型編程小組拆分成各個(gè)子系統(tǒng)的專家組,程序員不用再擔(dān)心自己必須是網(wǎng)站建設(shè)系統(tǒng)每一部分的全能專家了。當(dāng)然,由于可以拆分服務(wù),所以擴(kuò)展事務(wù)也就相當(dāng)容易了。
本文地址:http://www.khwajamoinuddinchishty.com//article/3454.html