編寫(xiě)自己的分布式框架—事務(wù)篇(一)

概述

從文章的標(biāo)題可以知道医清,這系列的文章主要是講:一個(gè)java框架是如何開(kāi)發(fā)出來(lái)的÷舭保看到這里会烙,可能已經(jīng)有部分小伙伴不明覺(jué)厲了。
??但其實(shí)筒捺,開(kāi)發(fā)一個(gè)框架并不是什么很神秘柏腻、很高大上的事情,就跟我們平時(shí)做業(yè)務(wù)類(lèi)的項(xiàng)目差不多系吭,這個(gè)差不多指的是開(kāi)發(fā)形式上差不多五嫂。不一樣的地方就在于思想上要做一個(gè)轉(zhuǎn)變,我們要從使用別人提供的功能,轉(zhuǎn)變?yōu)樘峁┕δ芙o別人使用沃缘。這看似很簡(jiǎn)單的一句話躯枢,但卻非常關(guān)鍵,所以有必要再?gòu)?qiáng)調(diào)一次:“提供功能給別人使用”槐臀。有過(guò)框架開(kāi)發(fā)經(jīng)驗(yàn)的開(kāi)發(fā)者都知道锄蹂,在開(kāi)發(fā)一個(gè)框架的過(guò)程中,都會(huì)不斷的對(duì)自己說(shuō)水慨,“我這個(gè)功能是提供給別人用的得糜,怎么才能讓別人用起來(lái)簡(jiǎn)單一點(diǎn),最好讓別人少寫(xiě)代碼”晰洒,“需要怎么提高性能和安全朝抖,讓別人用起來(lái)安心一點(diǎn)”,“為了應(yīng)對(duì)某些人有特殊的需求谍珊,所以必須要提高擴(kuò)展性”槽棍。等等的這些話都是在我們開(kāi)發(fā)一個(gè)框架的過(guò)程中,不斷提醒自己的抬驴,而這些話,正是開(kāi)發(fā)框架應(yīng)該具備的思想缆巧,在這些思想指引下布持,我們才會(huì)想方設(shè)法的使用各種技術(shù)來(lái)實(shí)現(xiàn)目標(biāo)。
??回到我們做業(yè)務(wù)項(xiàng)目上陕悬,更多的是要求快點(diǎn)把功能完成题暖,為了達(dá)到這個(gè)要求,我們就會(huì)不斷的提醒自己:“代碼重復(fù)不要緊捉超,后面有時(shí)間再重構(gòu)”胧卤,“性能很差不要緊,后面有時(shí)間再優(yōu)化”拼岳,但往往后面就不會(huì)重構(gòu)和優(yōu)化了枝誊,因?yàn)槟菚r(shí),項(xiàng)目可能已經(jīng)很臃腫惜纸,看都不想去看了叶撒。這種情況,在開(kāi)發(fā)框架項(xiàng)目上是絕對(duì)不能有的耐版,所以說(shuō)開(kāi)發(fā)框架的話祠够,一定要轉(zhuǎn)變自己的思想。
??還有一部分的小伙伴看到這個(gè)標(biāo)題后粪牲,可能會(huì)想古瓤,標(biāo)題黨又來(lái)了,什么寫(xiě)框架啊,到頭來(lái)估計(jì)又是在講概念落君,講思想就完事了穿香。首先,概念和思想是肯定要講的叽奥,然后扔水,我們才真正的從0開(kāi)始去開(kāi)發(fā)一個(gè)框架。但是朝氓,關(guān)鍵不是這個(gè)框架本身魔市,而是做這個(gè)框架的過(guò)程,所以不要太在意接下來(lái)要做什么框架赵哲,解決什么問(wèn)題待德。而是需要在意做框架的過(guò)程中,它的方法和思想枫夺,這樣我們才能舉一反三将宪,觸類(lèi)旁通。

怎么理解“框架”

可能很多小伙伴從學(xué)習(xí)java的那一刻起橡庞,就跟著老師說(shuō)较坛,這框架那框架的,但是老師從來(lái)沒(méi)有提過(guò)什么是框架扒最,自己也沒(méi)有思考過(guò)丑勤,框架是什么,就知道這個(gè)就是框架了吧趣,那個(gè)不是框架法竞,對(duì)框架的概念理解很模糊,那現(xiàn)在强挫,我們就來(lái)普及一些基礎(chǔ)常識(shí)岔霸,比如插件、框架俯渤、中間件這些術(shù)語(yǔ)的來(lái)龍去脈呆细。
??首先,框架的出現(xiàn)是我們對(duì)于“復(fù)用性”的要求越來(lái)越高八匠,不想重復(fù)造輪子侦鹏,從最初的單個(gè)函數(shù)的復(fù)用,到面向?qū)ο笾蓄?lèi)的復(fù)用臀叙,再到由多個(gè)類(lèi)組成的lib包略水,提供類(lèi)庫(kù)的復(fù)用。復(fù)用軟件的抽象層次越來(lái)越高劝萤,而框架就在這種背景下產(chǎn)生的渊涝。框架復(fù)用是抽象層次的又一提升,框架的復(fù)用不僅僅是功能的復(fù)用跨释,更是設(shè)計(jì)的復(fù)用胸私。
??我們?cè)趤?lái)看看框架的含義:框架是一個(gè)半成品的應(yīng)用,它封裝了某領(lǐng)域內(nèi)處理流程的控制邏輯鳖谈,由于軟件開(kāi)發(fā)各種領(lǐng)域問(wèn)題眾多岁疼,所以框架必須具有針對(duì)性,比如缆娃,有針對(duì)底層通訊領(lǐng)域的框架捷绒,有針對(duì)分布式應(yīng)用領(lǐng)域的框架,有針對(duì)對(duì)象關(guān)系映射領(lǐng)域的框架等等贯要∨龋框架這個(gè)半成品應(yīng)用像是一個(gè)骨架,然后我們?cè)谶@個(gè)骨架上添加血和肉崇渗,就是我們具體的業(yè)務(wù)代碼了字逗,然后組成一個(gè)完整的應(yīng)用。
??框架我們就了解到這里宅广,接著我們來(lái)擴(kuò)展一下葫掉,看看什么是插件,什么是中間件跟狱。插件其實(shí)就類(lèi)似我們上面提到的“類(lèi)庫(kù)”了挖息,由于復(fù)用性的要求,我們需要把一些重復(fù)使用的功能抽取出來(lái)兽肤,而這個(gè)功能的實(shí)現(xiàn)又需要多個(gè)類(lèi)組成,那么把這多個(gè)類(lèi)打成一個(gè)包绪抛,以工具的形式提供某種類(lèi)型的功能給別使用资铡,就是類(lèi)庫(kù)或者說(shuō)插件了,它不能單獨(dú)成為一個(gè)應(yīng)用幢码。比如:二維碼生成工具笤休、文件操作工具、報(bào)表生成工具等等症副。打個(gè)比喻店雅,如果說(shuō)框架是骨架,我們的業(yè)務(wù)功能是血和肉贞铣,那么插件或者說(shuō)工具類(lèi)庫(kù)就像是:牙齒闹啦、頭發(fā)和指甲之類(lèi)的了,有它們最好辕坝,沒(méi)有也不會(huì)死窍奋。最后來(lái)看看什么是“中間件”,不同于剛剛說(shuō)的框架和插件,框架琳袄、插件和我們的業(yè)務(wù)代碼共同組成一個(gè)應(yīng)用江场,而中間件它本身就是一個(gè)獨(dú)立運(yùn)行,并且是完整的一個(gè)應(yīng)用窖逗,不是半成品應(yīng)用址否,這種類(lèi)型的應(yīng)用主要是對(duì)外提供某種領(lǐng)域的網(wǎng)絡(luò)服務(wù)給其他應(yīng)用使用,比如:數(shù)據(jù)庫(kù)服務(wù)中間件碎紊,分布式緩存中間件佑附,消息隊(duì)列中間件,搜索引擎中間件等等矮慕。打個(gè)比喻的話帮匾,就是你的合伙人,你的隊(duì)友之類(lèi)的痴鳄,你們每個(gè)獨(dú)立的個(gè)體相互合作瘟斜,共同完成某個(gè)目標(biāo)。

具體目的

該鋪墊的東西我們已經(jīng)鋪墊好了痪寻,接下來(lái)就要準(zhǔn)備動(dòng)手開(kāi)發(fā)這個(gè)框架了螺句。通過(guò)上面對(duì)框架的了解,我們知道橡类,每個(gè)具體的框架都是在解決特點(diǎn)領(lǐng)域問(wèn)題的蛇尚,那這樣的話,我們接下來(lái)要開(kāi)發(fā)的這個(gè)框架是解決什么領(lǐng)域的問(wèn)題呢顾画?這個(gè)領(lǐng)域的選擇也是不能隨意的取劫,首先,需要排除那些老舊的領(lǐng)域:比如ORM研侣、MVC這些領(lǐng)域谱邪,因?yàn)檫@些領(lǐng)域制造不了多少話題。還要排除解決方案非常成熟的領(lǐng)域:比如底層通訊庶诡,分布式應(yīng)用惦银,這些領(lǐng)域因?yàn)榘l(fā)展的時(shí)間比較長(zhǎng),都比較成熟和完善了末誓,也就沒(méi)有多大的必要再拿來(lái)研究扯俱。那經(jīng)過(guò)排除之后,我們就選擇現(xiàn)在比較熱門(mén)的話題喇澡,面試的時(shí)候也是經(jīng)常問(wèn)到的迅栅,并且現(xiàn)階段,還沒(méi)有一個(gè)非常成熟的解決方案晴玖,就是:“分布式事務(wù)”库继,我們用這個(gè)領(lǐng)域的問(wèn)題作為載體箩艺,去開(kāi)發(fā)一個(gè)分布式事務(wù)框架。但是宪萄,還是需要再?gòu)?qiáng)調(diào)一下艺谆,我們的目的是學(xué)習(xí)框架的開(kāi)發(fā)過(guò)程,而不是這個(gè)具體的分布式事務(wù)框架拜英。

注:阿里在18年年底開(kāi)源了一個(gè)分布式事務(wù)框架:fescar静汤。地址為:https://github.com/alibaba/fescar,雖然現(xiàn)階段還不是很完善居凶,但看阿里官方的規(guī)劃虫给,后面的版本是會(huì)越來(lái)越強(qiáng)大的,大家有時(shí)間可以上去學(xué)習(xí)一下侠碧。

在開(kāi)發(fā)這個(gè)分布式事務(wù)框架的過(guò)程中抹估,我們會(huì)學(xué)到很多技術(shù),學(xué)習(xí)這些技術(shù)才是我們開(kāi)發(fā)這個(gè)框架的目的弄兜,而這些技術(shù)又是在平時(shí)我們做業(yè)務(wù)類(lèi)的項(xiàng)目很少有機(jī)會(huì)接觸的药蜻,具體如下:

·注解的使用

我們這里所說(shuō)的注解的使用,并不是指平時(shí)我們做業(yè)務(wù)功能時(shí)替饿,貼一個(gè)注解就完事的那種用语泽,而是去定義一個(gè)注解,然后給該注解賦予一個(gè)意義视卢,也就是說(shuō)踱卵,我貼了這個(gè)注解,能幫我完成什么功能据过。在我們做業(yè)務(wù)項(xiàng)目的過(guò)程中惋砂,是很少有機(jī)會(huì)讓我們?nèi)ザx注解的,而做框架就不一樣了绳锅,我們上文提到的西饵,做框架其中一個(gè)思想:易用性,如果你想讓你的框架榨呆,在給別人用的時(shí)候,是很簡(jiǎn)單的庸队,那就需要考慮使用注解了积蜻,被人不用怎么去寫(xiě)代碼,只需要貼個(gè)注解彻消,然后框架就幫他做完了事情竿拆。

·并發(fā)的使用

很多小伙伴經(jīng)常反映,java下的并發(fā)包(concurrent)下的東西很少使用宾尚,我們?nèi)绻亲鰳I(yè)務(wù)類(lèi)的項(xiàng)目丙笋,那確實(shí)是這樣的谢澈,但是如果我們要做框架,那就不是了御板,因?yàn)樾阅芎桶踩彩亲隹蚣艿囊粋€(gè)指導(dǎo)思想锥忿,每時(shí)每刻都需要思考,什么功能需要使用多線程來(lái)提高性能怠肋,什么功能又會(huì)不會(huì)因?yàn)椴l(fā)敬鬓,導(dǎo)致出現(xiàn)安全問(wèn)題。在開(kāi)發(fā)的時(shí)候就需要精心設(shè)計(jì)了残揉,而不是說(shuō)開(kāi)發(fā)完了再優(yōu)化廉赔,不然的話例获,我相信做出來(lái)的框架不會(huì)有人敢冒險(xiǎn)使用的。

·SPI的使用

SPI是Service Provider Interface的簡(jiǎn)寫(xiě)数尿,這項(xiàng)技術(shù)也是平時(shí)我們做業(yè)務(wù)項(xiàng)目沒(méi)機(jī)會(huì)接觸的,我們知道惶楼,一個(gè)好的框架右蹦,肯定是一個(gè)擴(kuò)展性很強(qiáng)的框架,這個(gè)在我們上文講開(kāi)發(fā)框架的指導(dǎo)思想時(shí)也提到了鲫懒,也就是擴(kuò)展性嫩实。接下來(lái)我們?cè)俾议_(kāi)SPI的神秘面紗。

·設(shè)計(jì)模式的使用

最后需要提及的技術(shù)就是設(shè)計(jì)思想窥岩,這個(gè)可以說(shuō)是一個(gè)框架的靈魂了甲献,我們?cè)谥v框架概念的時(shí)候提到,框架就是對(duì)軟件“復(fù)用性”的要求越來(lái)越高的產(chǎn)物颂翼,使用硬編碼是肯定不能達(dá)到“復(fù)用性”的要求的晃洒,所以,各種設(shè)計(jì)模式就應(yīng)運(yùn)而生了朦乏。在開(kāi)發(fā)框架的過(guò)程中球及,我們會(huì)接觸一些業(yè)務(wù)項(xiàng)目沒(méi)機(jī)會(huì)接觸的設(shè)計(jì)模式,比如動(dòng)態(tài)代理模式呻疹,工廠模式吃引,策略模式,適配器模式刽锤。
??學(xué)習(xí)以上的這些技術(shù)才是我為什么要寫(xiě)這個(gè)專(zhuān)題文章的目的镊尺,我想每一個(gè)程序猿都有一個(gè)小目標(biāo),不是賺一個(gè)億并思,而是做架構(gòu)獅庐氮,當(dāng)然,架構(gòu)獅是會(huì)寫(xiě)業(yè)務(wù)代碼的宋彼,因?yàn)槿魏伍_(kāi)發(fā)語(yǔ)言的架構(gòu)獅都是從一線開(kāi)發(fā)成長(zhǎng)起來(lái)的弄砍,但是只會(huì)寫(xiě)業(yè)務(wù)代碼的程序猿是不可能做架構(gòu)獅的仙畦,而掌握以上技術(shù),就是成為架構(gòu)獅的第一步音婶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末慨畸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子桃熄,更是在濱河造成了極大的恐慌先口,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞳收,死亡現(xiàn)場(chǎng)離奇詭異碉京,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)螟深,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)谐宙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人界弧,你說(shuō)我怎么就攤上這事凡蜻。” “怎么了垢箕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵划栓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我条获,道長(zhǎng)忠荞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任帅掘,我火速辦了婚禮委煤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘修档。我一直安慰自己碧绞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吱窝。 她就那樣靜靜地躺著讥邻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪院峡。 梳的紋絲不亂的頭發(fā)上兴使,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音撕予,去河邊找鬼鲫惶。 笑死蜈首,一個(gè)胖子當(dāng)著我的面吹牛实抡,可吹牛的內(nèi)容都是我干的欠母。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吆寨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赏淌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起啄清,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤六水,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后辣卒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掷贾,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年荣茫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了想帅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啡莉,死狀恐怖港准,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咧欣,我是刑警寧澤浅缸,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站魄咕,受9級(jí)特大地震影響衩椒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蚕礼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一烟具、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奠蹬,春花似錦朝聋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至狸演,卻和暖如春言蛇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宵距。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工腊尚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人满哪。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓婿斥,卻偏偏與公主長(zhǎng)得像劝篷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子民宿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容