# 微服務設計java
面向服務的架構(SOA),這是一種設計方法,它所設計的系統包含多個服務,經過相互配合最終提供一系列功能。 每一個服務獨立運行,經過網絡調用,而不是進程之間。
這種設計咱們會有上述的好處,但也會面臨各類問題!在網絡中,使用什麼通訊協議、服務的粒度的大小斷定、中間件的選擇。而後再等到動手去作時,會出現事務怎麼一致啊,數據庫怎麼拆啊,之前的聯查怎麼辦啊等等一系列的問題!數據庫
建模服務是書中的第三章,大概講的是建模服務的原則,總結6個字
鬆耦合,高內聚 遵循這個6個字,讓作的微服務能達到:安全
在書中我認識了個新名詞:洋蔥架構 ——」由於它有不少層,而 且 當 縱 切 這 些 層 次 時, 我 只 想 哭。「 以我目前只有2年的工做經驗,我還沒遇見想哭的。。。但以此自警,不要寫出讓人哭的東西!網絡
好的集成:架構
對於上述的第二點,咱們使用的是dubbo,因此API就是接口,因此咱們的微服務並無徹底獨立!噹噹開源的dubbox能夠提供http協議的接口分佈式
這是個客戶下單過程微服務
協同下降耦合,須要額外的監測服務。相對編排,改動時工做量少!我的也喜歡協同模式,這讓我想起了java中的觀察者模式,很是方便的開發方法~性能
對於相對小點的項目,也許‘編排’開發起來更簡單快捷設計
REST基於http相對低延遲的服務不如RPC,尤爲是在服務端與服務端之間,但RPC要客戶端和服務端代碼共享,也由於代碼共享,序列化和反序列化相對簡單。中間件
重複的代碼致使你修改時可能會漏掉某個地方。因此強制性要求,是有道理的,可是,微服務共享代碼時就會致使耦合現象!
客戶端庫:針對上述問題,網上有不少SDK,例如百度的雲存儲等SDK,實際上,這些sdk可能來自社區,例如阿里的sdk不少都是經過osc懸賞開發的,他們統一API,但具體客戶端實現和升級交給客戶。
對讀取的數據要有容錯性讀取,即對進來的數據,只找本身須要的,不須要的儘可能不去管。
該原則能夠幫助咱們在服務方發生變化時,減小消費方修改。
考慮完集成咱們就開始分解吧!
不要爲了拆分而去拆分,是爲了哪部分代碼抽取出去後收益最大!
各個模塊分離開,安全就能提升嗎?
目前在技術上最大的幫助解決了大型項依賴雜亂!
先拆分數據庫,再拆服務:因事務的關係,當服務未拆分時,還能保持事務的一致性。當數據庫分離的結果滿意後再實施下一步
須要保持一致性的場景的服務,就儘可能在一塊兒,若是避免不了也要避免使用純技術手段去解決,而是顯式的建立一個概念去表達這個事務。在此之上去補償或最終一致事務