日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
“軟件教父”又開始整理模式了!

 Martin Fowler是誰(shuí)?

我在之前的文章中寫過(guò),他是《重構(gòu)》、《分析模式》、《企業(yè)應(yīng)用架構(gòu)模式》、《領(lǐng)域特定語(yǔ)言》等一系列老牌書籍的作者,他很少談?wù)摬僮飨到y(tǒng),數(shù)據(jù)庫(kù),網(wǎng)絡(luò)這些底層的東西,也很少聽他談什么高并發(fā),海量用戶, 他也沒有開發(fā)過(guò)什么老牌軟件,但是卻被奉為軟件開發(fā)的“教父”。

如果把軟件分層的話,他其實(shí)生活在最上層:

這一層擠著很多程序員,因?yàn)樵酵聦?,路越難走。必須得能耐得住寂寞,經(jīng)得起誘惑,對(duì)某個(gè)領(lǐng)域有著極為精深的研究才可以。

但是Martin Fowler在應(yīng)用層卻能呼風(fēng)喚雨,因?yàn)樗邆湟粋€(gè)特殊的能力:擅長(zhǎng)把一些軟件開發(fā)實(shí)踐總結(jié)成“概念”。

很明顯,這需要極強(qiáng)的抽象能力。

Martin Fowler最為老牌的作品可能就是《重構(gòu)》,他把軟件編程中各種修改代碼的方法抽象、總結(jié)、命名,影響了全世界每一個(gè)開發(fā)人員。

他還有一本書叫《企業(yè)應(yīng)用架構(gòu)模式》, Martin Fowler把企業(yè)應(yīng)用開發(fā)中的一些最佳實(shí)踐分門別類地總結(jié)了出來(lái)。

比如講領(lǐng)域邏輯模式的“事務(wù)腳本”,“表模塊”,“領(lǐng)域模型”,“Service Layer” 等。

講ORM的“單表繼承”,“類表繼承”,“活動(dòng)記錄”等。

Martin Fowler 絕對(duì)是在應(yīng)用層開發(fā)的程序員的榜樣!

前天在瀏覽Martin Fowler的個(gè)人網(wǎng)站(https://martinfowler.com/)時(shí),發(fā)現(xiàn)了這么一個(gè)寶貝:“分布式系統(tǒng)模式”(Patterns of Distributed Systems)。

我不由得心頭一喜:看來(lái)Martin Fowler沒閑著,又開始整理模式了,這一次更加宏觀,直接進(jìn)入了分布式系統(tǒng)!

但仔細(xì)一看,略有失望,不是Martin Fowler親自操刀的!是一位叫做Unmesh Joshi 的ThoughtWorks顧問(wèn)寫的,Martin Fowler給了一些模式方面的指導(dǎo)和幫助。

這兩天看了一下,我覺得質(zhì)量還是挺高的,比如開篇先講了分布式系統(tǒng)的幾個(gè)通用問(wèn)題:

  • 進(jìn)程崩潰
  • 網(wǎng)絡(luò)延遲
  • 進(jìn)程暫停
  • 非同步的時(shí)鐘

進(jìn)而引出分布式系統(tǒng)的模式是如何解決這些問(wèn)題的 。

比如非常經(jīng)典的Write-Ahead Log 模式,可以用來(lái)解決進(jìn)程崩潰時(shí)數(shù)據(jù)的持久化問(wèn)題:

先把數(shù)據(jù)當(dāng)作Command放入持久化的日志文件中,這樣即使KVStore進(jìn)程崩潰,在重啟以后依然可以從日志中恢復(fù)數(shù)據(jù)。

人家很清楚程序員的交流語(yǔ)言是代碼, 所以馬上給出了簡(jiǎn)單的代碼片段來(lái)幫助理解細(xì)節(jié),真是很貼心。

 
 
 
 
  1. class KVStore…
  2.   public KVStore(Config config) {
  3.       this.config = config;
  4.       this.wal = WriteAheadLog.openWAL(config);
  5.       this.applyLog();
  6.   }
  7.   public void applyLog() {
  8.       List walEntries = wal.readAll();
  9.       applyEntries(walEntries);
  10.   }
  11.   private void applyEntries(List walEntries) {
  12.       for (WALEntry walEntry : walEntries) {
  13.           Command command = deserialize(walEntry);
  14.           if (command instanceof SetValueCommand) {
  15.               SetValueCommand setValueCommand = (SetValueCommand)command;
  16.               kv.put(setValueCommand.key, setValueCommand.value);
  17.           }
  18.       }
  19.   }
  20.   public void initialiseFromSnapshot(SnapShot snapShot) {
  21.       kv.putAll(snapShot.deserializeState());
  22.   }

現(xiàn)在已經(jīng)整理出來(lái)的分布式系統(tǒng)模式有這些:

為什么向大家推薦這個(gè)資料呢?是因?yàn)榫W(wǎng)上有很多分布式理論的文章,干巴巴的,看不了一頁(yè)就想放棄。

網(wǎng)上也有很多源碼分析的文章,專注于貼代碼,糾纏于細(xì)節(jié),讓人云里霧里。

Unmesh Joshi的分布式系統(tǒng)模式則是個(gè)很好的平衡:既有理論,又有代碼細(xì)節(jié)。

如果你是一個(gè)剛?cè)胄械男率?,看這些東西可能有些吃力,因?yàn)樾枰蟹植际较到y(tǒng)的基礎(chǔ),不妨先收藏,等待以后再看。

如果是一個(gè)經(jīng)驗(yàn)豐富的老手,我強(qiáng)烈推薦你去看一看,觀摩下這些大牛們是怎么從各種復(fù)雜的場(chǎng)景中抽取出通用的模式的,絕對(duì)受益非淺, 你可能有這樣的感覺:這種工作我怎么就沒想到呢?

當(dāng)然,這是英文的材料, 會(huì)有一定的障礙,不過(guò)你看了就知道,并沒有用什么高級(jí)的詞匯,我列幾句大家感受感受:

Processes can crash at any time. Either due to hardware faults or software faults. There are numerous ways in which a process can crash.

It can be taken down for routine maintenance by system administrators.

It can be killed doing some file IO because the disk is full and the exception is not properly handled.

并不難,對(duì)吧?嘗試看一下吧,閱讀英文資料也是一項(xiàng)重要的技能。

鏈接在此:https://martinfowler.com/articles/patterns-of-distributed-systems/

【本文為專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】


文章題目:“軟件教父”又開始整理模式了!
文章出自:http://www.5511xx.com/article/ccejsee.html