0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

微服務(wù)架構(gòu)與實(shí)踐摘要

lhl545545 ? 來源:電子發(fā)燒友網(wǎng) ? 2018-02-07 16:57 ? 次閱讀

微服務(wù)架構(gòu)與實(shí)踐摘要

一、微服務(wù)架構(gòu)圖:

微服務(wù)架構(gòu)與實(shí)踐摘要

二、技術(shù)介紹:

微服務(wù)架構(gòu)與實(shí)踐摘要

三、為什么選擇微服務(wù)架構(gòu)

首先,當(dāng)然是該套架構(gòu)方法有著名的成功經(jīng)驗(yàn)才導(dǎo)致大家去了解與學(xué)習(xí)它。

微服務(wù)架構(gòu)中的 “微” 體現(xiàn)了其核心要素,即服務(wù)的微型化,就是每個服務(wù)微小到只需專注做好一件事。這件事緊密圍繞業(yè)務(wù)領(lǐng)域,形成高度內(nèi)聚的自治性。

一些大型應(yīng)用系統(tǒng),采用模塊化的分層式架構(gòu),所有的業(yè)務(wù)邏輯代碼最終會打進(jìn)一個代碼庫中統(tǒng)一部署。這種應(yīng)用架構(gòu)的問題是,全部開發(fā)人員會共享一個代碼庫,不同模塊的邊界模糊,實(shí)現(xiàn)高內(nèi)聚、松耦合極其困難。如果你接手過這類應(yīng)用的遺留系統(tǒng),嘗試去做重構(gòu)改進(jìn)時(shí),肯定碰到過這類場景,改了一個地方好幾個其他模塊也需要同步改動,模塊的邊界輕易被穿透,這種應(yīng)用的架構(gòu)有一個很形象的名字叫 “洋蔥架構(gòu)”,洋蔥的特點(diǎn)就是一層又一層的粘連,重構(gòu)這樣的系統(tǒng)就像切洋蔥一樣讓人忍不住飆淚。

微服務(wù)架構(gòu)強(qiáng)調(diào) “微”,但之前有些采用了 SOA 服務(wù)化架構(gòu)思想的系統(tǒng)會搞出很多胖服務(wù)來,一點(diǎn)也不微,這依然帶來耦合。

這一點(diǎn)只能依賴系統(tǒng)架構(gòu)師的服務(wù)化建模能力了,但微服務(wù)架構(gòu)強(qiáng)調(diào)每個服務(wù)一個進(jìn)程,使用進(jìn)程為邊界來隔離代碼庫至少讓同一應(yīng)用系統(tǒng)不同層次的開發(fā)人員享有自己完全自治的領(lǐng)地,每個微服務(wù)都有一個掌控者。從某種程度上讓不小心做錯事,例如:跨出服務(wù)邊界的代碼耦合依賴,變得沒那么容易。

一個 20 人的團(tuán)隊(duì)維護(hù)一個 40 萬行共享代碼庫的單一應(yīng)用,在里面修改 bug 和添加功能都將十分困難。

有一篇文章 《程序員的成長和代碼行數(shù)的關(guān)系》 里提到大部分普通程序員成長生涯的瓶頸在 2 萬行代碼左右,

超過這個代碼行數(shù)的應(yīng)用系統(tǒng)維護(hù)起來將倍感吃力,所以我們系統(tǒng)這兩年的高速發(fā)展膨脹,已讓團(tuán)隊(duì)維護(hù)起來倍感吃力了。

所以我們想要把一個大系統(tǒng)拆分成許多不同的微服務(wù),每個微服務(wù)的規(guī)模大小控制在一個普通程序員的舒適維護(hù)區(qū)能力范圍內(nèi)。

微服務(wù)架構(gòu)實(shí)施

把 1 個應(yīng)用進(jìn)程部署到 1 臺主機(jī),部署復(fù)雜度是 1 x 1 = 1,我們有 200 臺主機(jī),那么部署復(fù)雜度是 1 x 200 = 200。

把 1 個應(yīng)用進(jìn)程拆分成了 50 個微服務(wù)進(jìn)程,則部署復(fù)雜度變成了 50 x 200 = 10000。

部署變得復(fù)雜和麻煩多了,同時(shí)監(jiān)控的進(jìn)程數(shù)也大幅增加,監(jiān)控的復(fù)雜度也上升了很多。所以實(shí)施微服務(wù)架構(gòu)是有很高成本的,只有系統(tǒng)的規(guī)模到了一定程度才適合,這也是為什么微服務(wù)架構(gòu)實(shí)踐誕生于大型互聯(lián)網(wǎng)公司。

微服務(wù)推崇一切自動化的文化,這也是因?yàn)槠溥\(yùn)維復(fù)雜度的乘數(shù)級飆升,從開發(fā)之后的構(gòu)建、測試、部署都需要一個高度自動化的環(huán)境來支撐才能有效降低邊際成本。

《Building Microservices》一書對實(shí)施微服務(wù)架構(gòu)有系統(tǒng)性的描述和很多業(yè)界案例的簡單引用描述,這里不展開講實(shí)施細(xì)節(jié),那樣就太長了。

我們這里簡單總結(jié)下實(shí)施的要點(diǎn):

自動化文化與環(huán)境:自動構(gòu)建、自動測試、自動部署。

圍繞業(yè)務(wù)能力建模服務(wù),松耦合、高內(nèi)聚、暴露接口而隱藏實(shí)現(xiàn)細(xì)節(jié)。

服務(wù)協(xié)作模型:中心化(樂隊(duì)模型:中心指揮)和去中心化(舞蹈模型:群舞自組織),各自場景不同。

服務(wù)交互方式:RPC/REST/WS 技術(shù)很多但考慮統(tǒng)一。

服務(wù)部署的獨(dú)立性、失敗隔離性、可監(jiān)控性。

服務(wù)流控:降級、限流

服務(wù)恢復(fù):多考慮故障發(fā)生如何快速恢復(fù)而非如何避免發(fā)生故障。

服務(wù)發(fā)布:灰度。

服務(wù)部署:一服務(wù)一主機(jī)模型,需要虛擬化(Hypervisor)、容器化(LXC, Docker)等技術(shù)支持,實(shí)現(xiàn)硬件資源隔離。

服務(wù)配置:中心化配置服務(wù)支持

康威定律:任何設(shè)計(jì)系統(tǒng)的組織,最終產(chǎn)生的設(shè)計(jì)等同于組織之內(nèi)、之間的溝通結(jié)構(gòu)。系統(tǒng)架構(gòu)的設(shè)計(jì)符合組織溝通結(jié)構(gòu)取得的收益最大。

伯斯塔爾法則:服務(wù)健壯性原則 —— 發(fā)送時(shí)要保守,接收時(shí)要開放。

自進(jìn)化的微服務(wù)架構(gòu)

早期人們把軟件開發(fā)和建筑學(xué)作類比,Architect 這個詞來就源于建筑學(xué),但軟件產(chǎn)品和建筑物的性質(zhì)完全不同。建筑物本身一旦建成則幾無變化了,唯有老化后被替代了。軟件系統(tǒng)會在其生命周期中不斷變化,唯一不變的就是變化,擁抱變化,需用進(jìn)化的觀點(diǎn)看待架構(gòu)演進(jìn)。與此類似的是城市,城市的演進(jìn)發(fā)展總是漸進(jìn)式的,我們不會在一座舊城旁建一座新城,然后把舊城的居民遷到新城然后再把舊城廢棄了。但經(jīng)常我們會用這樣的方法重寫一個新系統(tǒng)并替換掉舊系統(tǒng),付出高昂的成本。

而微服務(wù)架構(gòu)思路是不鼓勵這種方式的,系統(tǒng)的演進(jìn)是通過局部的新增、改進(jìn)或替換微服務(wù)來實(shí)現(xiàn)的。而微服務(wù)本身的變化周期是不同步的,從整體上就形成了一種漸進(jìn)式的、符合自然進(jìn)化的系統(tǒng)演進(jìn)道路。所以 Architect(架構(gòu)師)更像是城市規(guī)劃師而非建筑師,對軟件系統(tǒng)進(jìn)行類似城市劃分區(qū)域的規(guī)劃。

從常識上我們知道把學(xué)校和住宅放在一個區(qū)域內(nèi)是合理的,但如果再放一個垃圾處理廠則不合理。學(xué)校和住宅就是提供兩種不同能力的服務(wù),垃圾處理廠是另一種服務(wù),但現(xiàn)實(shí)中軟件系統(tǒng)的規(guī)劃其實(shí)不像城市規(guī)劃那么有常識性,這是架構(gòu)師能力和經(jīng)驗(yàn)發(fā)揮作用的地方,前期規(guī)劃的不合理會在后期帶來維護(hù)成本的放大。

每個歷史悠久的城市都有各自不同的味道,城市中的人、時(shí)間、技術(shù)進(jìn)步共同決定了今天城市的面貌。微服務(wù)架構(gòu)的妙處就在于它符合城市歷史演進(jìn)規(guī)律,隨著人員變化、時(shí)間、技術(shù)改進(jìn)而引發(fā)自然漸進(jìn)式的進(jìn)化。

微服務(wù)架構(gòu)與架構(gòu)師

架構(gòu)師的一個角色是技術(shù)決策者,技術(shù)決策涉及很多權(quán)衡取舍(trade-off),而微服務(wù)架構(gòu)給了架構(gòu)師更多權(quán)衡取舍的空間。

每個微服務(wù)實(shí)現(xiàn)層面的技術(shù)決策更多由服務(wù)負(fù)責(zé)人決定,服務(wù)的分拆伴隨著決策權(quán)和責(zé)任的分拆,這也減輕了整體應(yīng)用負(fù)責(zé)人的責(zé)任負(fù)擔(dān)。

架構(gòu)師解放出來從整體和全局上將更加關(guān)注服務(wù)之間是如何交互,并確保能正確的監(jiān)控系統(tǒng)全局的健康性。

分拆了服務(wù)實(shí)現(xiàn)的技術(shù)決策權(quán),那何時(shí)又該適當(dāng)?shù)慕槿胍员苊夥?wù)實(shí)現(xiàn)不當(dāng)危及整體系統(tǒng)的安全?

就像教孩子騎車,你無法代替它們?nèi)ヲT,你小心的看著他們騎的歪歪扭扭,擔(dān)心他們摔倒。事實(shí)上,孩子騎車摔倒的次數(shù)比你擔(dān)心的要少,但如果每次快摔倒時(shí)都去扶住,那么他們也許永遠(yuǎn)學(xué)不會騎車。當(dāng)孩子騎車失控時(shí)沖向了繁忙的馬路或要沖下路邊的深溝,那時(shí)才有必要介入去穩(wěn)住他們。

架構(gòu)師工作在抽象和具體兩個層面:

架構(gòu)是一項(xiàng)技術(shù)工作,技術(shù)工作要服務(wù)于組織的戰(zhàn)略目標(biāo)。大量的工程實(shí)踐在每日的工作中不斷變化,而漸漸穩(wěn)定的實(shí)踐方式被抽象提煉為一系列原則。原則的普及帶來整體效率的提升和邊際成本的下降,以更有效的支持組織戰(zhàn)略目標(biāo)的快速達(dá)成。另外也要確保這些原則不是讓開發(fā)人員的生活變得更凄慘而是更美好。跟蹤新技術(shù)發(fā)展確保能在合適的時(shí)候做出正確的取舍折衷。讓開發(fā)人員理解某項(xiàng)技術(shù)決策的影響和制約以便最有效的執(zhí)行,甚至在特定情形下深入到代碼的實(shí)現(xiàn)層面。

文章開頭說了,這是我們實(shí)施系統(tǒng)的第四個大版本,而之前每一個大版本升級都是一次舊城倒新城的整體搬遷。而微服務(wù)架構(gòu)天然的自然進(jìn)化屬性是否預(yù)示著這應(yīng)該是最后一個大版本升級了?微服務(wù)架構(gòu)述說著沒有永恒的架構(gòu),只有進(jìn)化的架構(gòu),但微服務(wù)架構(gòu)不是銀彈,也沒有銀彈。

1. 單塊架構(gòu)及其面臨的挑戰(zhàn)

1.1 三層架構(gòu)

三層架構(gòu)包括表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。

1.2 單塊架構(gòu)

所有的功能在一個工程項(xiàng)目中。

單塊架構(gòu)常見的架

微服務(wù)架構(gòu)與實(shí)踐摘要

1.3 互聯(lián)網(wǎng)產(chǎn)品特性

創(chuàng)新成本低、需求變化快、用戶群里龐大。單塊架構(gòu)無法滿足。

2.微服務(wù)架構(gòu)綜述

2.1 什么是微服務(wù)

微服務(wù)架構(gòu)模型(Microservice Architect Pattern)

引用下當(dāng)今世界軟件開發(fā)領(lǐng)域最具影響力的五位大師之一的定義:

微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間 互相協(xié)調(diào)、互相配合 ,為用戶提供最終價(jià)值。每個服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)于服務(wù)間采用輕量級的通信機(jī)制互相溝通(通常是基于HTTP的RESTful API)。每個服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立地部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等。另外,應(yīng)盡量避免統(tǒng)一的、集中式的服務(wù)管理機(jī)制,對具體的一個服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下文,選擇合適的語言、工具對其進(jìn)行構(gòu)建。 —摘自 馬丁·福勒先生的博客

2.1.1 多微才夠微

微服務(wù)架構(gòu)通過對特定業(yè)務(wù)領(lǐng)域的分析與建模,將復(fù)雜的應(yīng)用分解成為小而專一、耦合度低并且高度自治的一組服務(wù)。

代碼行數(shù)和開發(fā)時(shí)間都不能衡量是否”微”的重要因素。

“微”所表達(dá)的是一種設(shè)計(jì)思想和指導(dǎo)方針,是團(tuán)隊(duì)或組織共同努力找到的一個平衡點(diǎn)。仁者見仁智者見智,但要遵循如下2點(diǎn):

業(yè)務(wù)獨(dú)立性: 保證微服務(wù)具有業(yè)務(wù)獨(dú)立性的單元,如:

業(yè)務(wù): 訂單,產(chǎn)品,合同

功能:發(fā)送郵件,單點(diǎn)登錄驗(yàn)證,數(shù)據(jù)庫同步

團(tuán)隊(duì)自主性: 考慮團(tuán)隊(duì)的溝通及寫作成本,一般建議不超過十人。

2.1.2 單一職責(zé)

高內(nèi)聚:一個模塊各個元素彼此結(jié)合的緊密度高。

低耦合:對于一個完整的系統(tǒng),模塊與模塊之間,盡可能的獨(dú)立存在。

SRP :(Single Responsibility Principle,單一職責(zé)原則):即一個對象應(yīng)該只有一個發(fā)生變化的原因,如果一個對象可被多個原因改變,那么說明這個對象承擔(dān)了多個職責(zé)。

### 2.1.2 輕量級通信

服務(wù)之間應(yīng)通過輕量級的通信機(jī)制,實(shí)現(xiàn)彼此間的互通互聯(lián),互相協(xié)作。

格式: XML,JSON

協(xié)議: HTTP,REST(Representational State Transfer,表述性狀態(tài)傳遞)

2.1.3 獨(dú)立性

交付過程中,開發(fā),測試以及部署的獨(dú)立性。改變某個服務(wù)時(shí),對其它服務(wù)不產(chǎn)生影響。

2.1.4 進(jìn)程隔離

理論上,多個服務(wù)部署到一個節(jié)點(diǎn)上,并且能運(yùn)行在不同的進(jìn)程中,且互不影響,但是不推薦這么做。

因?yàn)樵黾恿瞬渴鸷蛿U(kuò)展的復(fù)雜度,建議還是一個服務(wù)一個節(jié)點(diǎn)。

總結(jié): 微服務(wù)架構(gòu)就是將單一的應(yīng)用程序劃分為一組小的服務(wù),每個服務(wù)都是具有業(yè)務(wù)屬性的獨(dú)立單元,同時(shí)能夠被獨(dú)立開發(fā),獨(dú)立運(yùn)行,獨(dú)立測試以及獨(dú)立部署。

2.2 微服務(wù)的誕生背景

互聯(lián)網(wǎng)行業(yè)的快速發(fā)展,敏捷、精益方法論的深入人心,單塊架構(gòu)系統(tǒng)面臨的挑戰(zhàn),容器虛擬化技術(shù)(Docker),

2.3 微服務(wù)和SOA

2.3.1 SOA(Service-Oriented Architecture,面向服務(wù)架構(gòu))

2.3.2 微服務(wù)和SOA

微服務(wù)架構(gòu)與實(shí)踐摘要

2.4 微服務(wù)的本質(zhì)

1) 服務(wù)作為組件(組件能獨(dú)立部署);2)圍繞業(yè)務(wù)組織團(tuán)隊(duì);3)關(guān)注產(chǎn)品而非項(xiàng)目;4)技術(shù)多樣性(支持各種開發(fā)語言);5)業(yè)務(wù)數(shù)據(jù)獨(dú)立(數(shù)據(jù)庫也獨(dú)立);6)基礎(chǔ)設(shè)置自動化;7)演進(jìn)式架構(gòu)

2.5 微服務(wù)不是銀彈

獨(dú)立性,單一職責(zé),技術(shù)多樣性

2.5.1 分布式系統(tǒng)的復(fù)雜度:性能,可靠性,異步,數(shù)據(jù)一致性,工具

2.5.2 運(yùn)維成本 配置,部署,監(jiān)控與告警,日志收集

2.5.3 部署自動化

2.5.4 DevOps 與組織架構(gòu)

2.5.5 服務(wù)間的依賴測試

2.5.6 服務(wù)間的依賴管理

微服務(wù)架構(gòu)將一個應(yīng)用拆分成多個獨(dú)立的、具有業(yè)務(wù)屬性的服務(wù),每個服務(wù)運(yùn)行在不同的進(jìn)程中,服務(wù)與服務(wù)之間通過輕量級的通信機(jī)制互相協(xié)作、互相配合,從而為終端用戶提供業(yè)務(wù)價(jià)值。同時(shí),每個服務(wù)可以根據(jù)業(yè)務(wù)邏輯,采用不同的語言、框架、工具以及存儲技術(shù)來解決業(yè)務(wù)問題。因此,微服務(wù)架構(gòu)強(qiáng)調(diào)的是一種獨(dú)立開發(fā)、獨(dú)立測試、獨(dú)立部署、獨(dú)立運(yùn)行的高度自治的架構(gòu)模式,也是一種更靈活、更開放、更松散的演進(jìn)式架構(gòu)。

3.構(gòu)建第一個服務(wù)

3.1 場景分析;3.2任務(wù)拆分

1)Hello World API;2)代碼測試與靜態(tài)檢查;3)構(gòu)建Docker映像;4)部署Docker映像;5)持續(xù)集成與交付;6)監(jiān)控與告警;7)日志聚合;8)功能迭代

4.Hello World API

Ruby;

Rack:Ruby的Web應(yīng)用抽象接口;

Rack Gem: Rack輔助類的集合;

RSpec:代碼測試工具

Rubocop:代碼的靜態(tài)檢查

5.構(gòu)建Docker映像

Docker:開源的Linux 應(yīng)用容器(Linux Container)引擎。

Boot2docker:Mac下輕松搭建整個Docker

Docker Hub:

Docker 映像存儲介質(zhì)的比較

微服務(wù)架構(gòu)與實(shí)踐摘要

6.部署Docker映像

AWS:Amazon Web Services

Amazon EC2: (Amazon Elastic Compute Cloud)

Infrastructure As Code:基礎(chǔ)設(shè)施自動化

7.持續(xù)交付流水線

Snap-CI: 持續(xù)集成工具,ThoughtWorks

提交、驗(yàn)證、構(gòu)建、發(fā)布。

Jenkins

8.日志聚合

Splunk:日志管理工具,日志聚合,日志搜索,語義提取,對結(jié)果進(jìn)行分組、聯(lián)合、拆分和格式化,強(qiáng)大的可視化功能,電子郵件提醒功能。

核心:數(shù)據(jù)(采集器)轉(zhuǎn)發(fā)器、數(shù)據(jù)索引器、搜索、分析和可視化、

LogStash:收集日志、過濾日志、結(jié)果輸出。

ELK: ElasticSearch、LogStash、Kibana

9.監(jiān)控與告警

Zabbix、Ganglia、NewRelic、Nagios、OneAPM。

Nagios: Nagios Ain’t Goona Insist on Saintood,免費(fèi)的開源IT基礎(chǔ)設(shè)施監(jiān)控系統(tǒng)。 能有效監(jiān)控Windows、LInux、VMware和UNIX主機(jī)狀態(tài)以及交換機(jī)、路由器等網(wǎng)絡(luò)設(shè)置。同事,它能夠?qū)崿F(xiàn)錯誤通知、事件處理。一旦主機(jī)或服務(wù)狀態(tài)出現(xiàn)異常,Nagios會發(fā)送郵件或短信第一時(shí)間通知IT運(yùn)維人員,并在狀態(tài)恢復(fù)正常后發(fā)出郵件或短信通知。

Nagios結(jié)構(gòu): Nagios核心、Nagios插件。

Nagios網(wǎng)站: http://www.nagios.org/

Nagios原理,Nagios安裝,Nagios配置。

10.功能迭代

10.1定義模型;10.2持久化模型;10.3 定義表現(xiàn)形式,10.4實(shí)現(xiàn)API;10.5服務(wù)描述文件

11.微服務(wù)與持續(xù)交付

持續(xù)交付的核心:小、頻、快。小批量價(jià)值流動,頻繁可發(fā)布,快速反饋。

微服務(wù)架構(gòu)與持續(xù)交付:

1) 開發(fā)

獨(dú)立代碼庫、服務(wù)說明文件、代碼所有權(quán)團(tuán)隊(duì)、有效的代碼版本管理工具【git,Mercurial,svn】、代碼靜態(tài)檢查工具【SonarQube,cane】、易于本地運(yùn)行);

2) 測試:

集成測試的二義性,mock和stub,接口測試,測試的有效性

3) 持續(xù)集成: Jenkins,Bamboo,在線持續(xù)集成平臺:Travis-CI,Snap-CI.

4) 構(gòu)建: Docker

5) 部署: A.部署環(huán)境:基于云平臺(IAAS,PAAS),基于數(shù)據(jù)中心,基于容器技術(shù)(Docker)

B.部署方式:手動部署,腳本部署,基礎(chǔ)設(shè)施部署自動化(Chef,Puppet,Ansible),應(yīng)用部署自動化,映像部署,容器部署

6)運(yùn)維: 監(jiān)控,告警,日志聚合

Asgard: netflix asgard https://github.com/Netflix/asgard

12. 微服務(wù)與輕量級通信機(jī)制

12.1 同步通信與異步通信

1)同步通信與一步通信的選擇 ;

2)遠(yuǎn)程調(diào)用RPC(Remote Procedure Call 遠(yuǎn)程過程調(diào)用) 遠(yuǎn)程過程的核心:客服端/服務(wù)端模式(客戶端客戶代理存根[Stub],服務(wù)器代理存根[Skeleton]);RMI(Remote Method Invocation 遠(yuǎn)程方法調(diào)用)

優(yōu)點(diǎn):耦合度高

缺點(diǎn):靈活性差,依賴于變成語言以及特定平臺,

二進(jìn)制,客戶/服務(wù)端提供序列化,反序列化操作,任何一方發(fā)生變化,另一方就要造成影響

3)REST(Representational State Transfer 表述性狀態(tài)描述;Resource 資源[返回?cái)?shù)據(jù)],Representation 表達(dá),State Transfer狀態(tài)轉(zhuǎn)移,Uniform Interface 統(tǒng)一接口 GET,POST,PUT,DELETE) 概述,軟件架構(gòu)風(fēng)格,

優(yōu)點(diǎn) :與語言無關(guān),與平臺無關(guān),水平伸縮容易。

缺點(diǎn) :如何標(biāo)準(zhǔn)化資源結(jié)構(gòu):業(yè)務(wù)增長,邏輯增加后,服務(wù)器端對內(nèi)容的響應(yīng)結(jié)構(gòu)會越來越復(fù)雜[響應(yīng)結(jié)構(gòu):是指服務(wù)器段的響應(yīng)內(nèi)容結(jié)構(gòu),即資源結(jié)構(gòu)],++可能企業(yè)內(nèi)部的不同部門,不同小組,對同一資源,所定義的結(jié)構(gòu)不盡相同++.

如何處理資源的相關(guān)鏈接: 大多數(shù)返回JSON,JSON最大的遺憾就是沒有對超鏈接處理做內(nèi)置的支持。對于調(diào)用的客戶端,++每次需要查看相關(guān)的接口文檔,才能了解如何修改資源的狀態(tài)++.

如:多個接口:獲取用戶接口,獲取用戶好友接口,用戶文章接口。如果REST只有開放三個接口,但是用戶好友和用戶文章實(shí)際上是用戶接口的子鏈接就可以的,但是JSON不支持。

REST的HTTP并不是低延時(shí)通信的最好選擇 對低延時(shí)要求的場景,可以選擇底層協(xié)議,如果UDP(User Datagram Protocol)或其它的RPC框架。

開發(fā)成本略高 傳輸格式為JSON或XML,則需要來解析文本格式協(xié)議,還好當(dāng)前開源工具庫成熟。

4)HAL(Hypertext Application Language) : 輕量級超文本應(yīng)用描述協(xié)議。HAL的實(shí)現(xiàn)基于REST,并有效的解決了REST中的資源結(jié)構(gòu)標(biāo)準(zhǔn)化和如何有效定義資源鏈接的問題。

核心:狀態(tài)(State),鏈接(Links),子資源(Embedded Resource)。

狀態(tài) 資源本身固有的屬性。

鏈接 定義了與當(dāng)前資源相關(guān)的一組資源的鏈接的集合。包括鏈接名稱、目標(biāo)URI,訪問URI的參數(shù)。

子資源 描述在當(dāng)前資源的內(nèi)容,其嵌套資源的定義。

HAL瀏覽器: (HAL Brower)

5)MQ :核心部分,訪問方式.RabbitMQ,ActiveMQ,ZeroMQ

核心部分 : 持久性(內(nèi)存,磁盤,數(shù)據(jù)庫),排隊(duì)標(biāo)準(zhǔn)(常見FIFO),安全策略,清理策略,處理通知

訪問方式 拉模式,推模式

消息隊(duì)列的優(yōu)缺點(diǎn): 優(yōu)點(diǎn): 服務(wù)間耦合,異步通信,消息的持久化以及恢復(fù)支持。

缺點(diǎn): 實(shí)現(xiàn)復(fù)雜度的增加,平臺或者協(xié)議依賴,維護(hù)成本高,

6)* 后臺任務(wù)處理系統(tǒng)* Resque=>Sidekiq(ruby),Delayed_job

輕量級通信,維護(hù)成本低,SDK和API支持

微服務(wù)架構(gòu)與實(shí)踐摘要

13.微服務(wù)與測試

13.1微服務(wù)的結(jié)構(gòu)

業(yè)務(wù)模型(Domain),業(yè)務(wù)邏輯(Service/Business Logic),模型存儲(Respository),資源定義(Resource 包括表述內(nèi)容,表述格式),網(wǎng)關(guān)集成(Gateway/Http Client)。

13.2微服務(wù)的測試策略

測試金字塔。 單元測試,接口(契約)測試,集成測試,組件測試,端到端測試,探索。

單元測試 (Unit Testing)被測單元依賴于模擬部分(MOCK,STUB),被測單元依賴于真實(shí)部分。

接口(契約)測試 Pact測試框架

集成測試 (Integration Testing),自頂向下集成(Top-Down Integration),自底向上集成(Bottom-Up Integration)。測試內(nèi)容: 網(wǎng)關(guān),模型存儲。

集成測試弊端: 運(yùn)行效率低,運(yùn)行結(jié)果不穩(wěn)定,反饋周期慢。

組件測試 (Component Testing),進(jìn)程內(nèi)測試,進(jìn)程外測試。

端到端測試 (End-To-End Testing,System Testing)

14.使用微服務(wù)架構(gòu)改造遺留系統(tǒng)

14.1 改造策略

最小修改(優(yōu)先修改緊急,核心功能),功能剝離(構(gòu)建接口,分離核心功能),數(shù)據(jù)解耦(數(shù)據(jù)庫獨(dú)立),數(shù)據(jù)同步(ETL Extract,Transform,Load),迭代替換(最小修改-》功能剝離-》數(shù)據(jù)解耦-》數(shù)據(jù)同步(-》獨(dú)立服務(wù))-》功能剝離)。

14.2快速開發(fā)實(shí)踐

微服務(wù)快速開發(fā)模板(Microservice Template):快速開發(fā)模板(Webmachine或Grape 作為Web框架,RESTful和JSON構(gòu)建服務(wù)之間的通信方式,RSpec作為測試框架),代碼生成工具,持續(xù)集成模板(Bamboo),一鍵部署工具(Asgard)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    145

    瀏覽量

    7690
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    微服務(wù)架構(gòu)幾種典型的基礎(chǔ)框架,你了解嗎?

    SpringCloud、Dubbo、Dropwizard、Akka等是常見微服務(wù)框架。SpringCloud基于SpringBoot,生態(tài)豐富;Dropwizard輕量且繼承SpringBoot優(yōu)點(diǎn)
    的頭像 發(fā)表于 03-04 11:05 ?372次閱讀

    NVIDIA 發(fā)布保障代理式 AI 應(yīng)用安全的 NIM 微服務(wù)

    NVIDIA NeMo Guardrails 包含全新 NVIDIA NIM 微服務(wù),能夠?yàn)楦餍袠I(yè)構(gòu)建 AI 的企業(yè)提高 AI 的準(zhǔn)確性、安全性和可控性。 ? AI 智能體有望成為能夠完成各種任務(wù)
    發(fā)表于 01-17 16:29 ?147次閱讀

    微服務(wù)容器化部署好處多嗎?

    微服務(wù)容器化部署好處有很多,包括環(huán)境一致性、資源高效利用、快速部署與啟動、隔離性與安全性、版本控制與回滾以及持續(xù)集成與持續(xù)部署。這些優(yōu)勢助力應(yīng)用可靠穩(wěn)定運(yùn)行,提升開發(fā)運(yùn)維效率,是現(xiàn)代軟件架構(gòu)的優(yōu)質(zhì)選擇。UU云小編認(rèn)為微服務(wù)容器化
    的頭像 發(fā)表于 01-17 10:22 ?303次閱讀

    容器化能替代微服務(wù)嗎?兩者有何區(qū)別

    容器化不能替代微服務(wù),但它是微服務(wù)的解決方案之一。微服務(wù)架構(gòu)的核心在于將大型應(yīng)用程序拆分為一系列小型、獨(dú)立的服務(wù),每個
    的頭像 發(fā)表于 01-13 10:40 ?380次閱讀

    Java微服務(wù)中如何確保安全性?

    在Java微服務(wù)架構(gòu)中確保安全性,可以采取以下措施: 身份驗(yàn)證與授權(quán): 使用OAuth 2.0和OpenID Connect框架進(jìn)行身份驗(yàn)證和授權(quán)。OAuth2允許用戶在不分享憑證的情況下授權(quán)第三方
    的頭像 發(fā)表于 01-02 15:21 ?588次閱讀

    寶藏級微服務(wù)架構(gòu)工具合集

    寶藏級熱門微服務(wù)架構(gòu)工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot簡化了微服務(wù)
    的頭像 發(fā)表于 12-21 16:33 ?579次閱讀

    k8s微服務(wù)架構(gòu)就是云原生嗎?兩者是什么關(guān)系

    k8s微服務(wù)架構(gòu)就是云原生嗎?K8s微服務(wù)架構(gòu)并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes在云原生架構(gòu)中扮演著核心組件的
    的頭像 發(fā)表于 11-25 09:39 ?484次閱讀

    SSR與微服務(wù)架構(gòu)的結(jié)合應(yīng)用

    隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,前端技術(shù)棧不斷更新迭代,后端架構(gòu)也經(jīng)歷了從單體應(yīng)用到微服務(wù)的變革。在這個過程中,服務(wù)端渲染(SSR)作為一種提升頁面加載速度和SEO性能的技術(shù),與微服務(wù)
    的頭像 發(fā)表于 11-18 11:34 ?776次閱讀

    架構(gòu)與設(shè)計(jì) 常見微服務(wù)分層架構(gòu)的區(qū)別和落地實(shí)踐

    架構(gòu)風(fēng)格越傾向于清晰的職責(zé)定位,且讓領(lǐng)域模型成為架構(gòu)的核心。 基于這些架構(gòu)風(fēng)格,在軟件架構(gòu)設(shè)計(jì)過程中又有非常多的架構(gòu)分層模型。 傳統(tǒng)三層
    的頭像 發(fā)表于 10-22 15:34 ?601次閱讀
    <b class='flag-5'>架構(gòu)</b>與設(shè)計(jì) 常見<b class='flag-5'>微服務(wù)</b>分層<b class='flag-5'>架構(gòu)</b>的區(qū)別和落地<b class='flag-5'>實(shí)踐</b>

    微服務(wù)架構(gòu)與容器云的關(guān)系與區(qū)別

    微服務(wù)架構(gòu)與容器云密切相關(guān)又有所區(qū)別。微服務(wù)將大型應(yīng)用拆分為小型、獨(dú)立的服務(wù),而容器云基于容器技術(shù),為微服務(wù)提供構(gòu)建、發(fā)布和運(yùn)行的平臺。區(qū)別
    的頭像 發(fā)表于 10-21 17:28 ?511次閱讀

    入門級攻略:如何容器化部署微服務(wù)?

    第一步理解容器化基礎(chǔ),第二步創(chuàng)建Dockerfile,第三步構(gòu)建推送鏡像,第四步部署微服務(wù),第五步管理微服務(wù)、第六步優(yōu)化更新。容器化部署微服務(wù)是現(xiàn)代軟件開發(fā)中的一種高效方法,可提供良好的可移植性、可擴(kuò)展性和管理性。容器化部署
    的頭像 發(fā)表于 10-09 10:08 ?357次閱讀

    Proxyless的多活流量和微服務(wù)治理

    1. 引言 1.1 項(xiàng)目的背景及意義 在當(dāng)今的微服務(wù)架構(gòu)中,應(yīng)用程序通常被拆分成多個獨(dú)立的服務(wù),這些服務(wù)通過網(wǎng)絡(luò)進(jìn)行通信。這種架構(gòu)的優(yōu)勢在于
    的頭像 發(fā)表于 08-28 16:54 ?1942次閱讀
    Proxyless的多活流量和<b class='flag-5'>微服務(wù)</b>治理

    NVIDIA NIM微服務(wù)帶來巨大優(yōu)勢

    服務(wù)通過熱門 AI 模型為數(shù)百萬開發(fā)者帶來高達(dá) 5 倍的 token 效率提升,使他們能夠立即訪問在 NVIDIA DGX Cloud 上運(yùn)行的 NIM 微服務(wù)。
    的頭像 發(fā)表于 08-23 15:20 ?910次閱讀

    采用OpenUSD和NVIDIA NIM微服務(wù)創(chuàng)建精準(zhǔn)品牌視覺

    全球領(lǐng)先的創(chuàng)意和制作服務(wù)機(jī)構(gòu)率先采用 OpenUSD 和 NVIDIA NIM 微服務(wù)來創(chuàng)建精準(zhǔn)的品牌視覺。
    的頭像 發(fā)表于 08-01 14:33 ?687次閱讀

    全新 NVIDIA NeMo Retriever微服務(wù)大幅提升LLM的準(zhǔn)確性和吞吐量

    企業(yè)能夠通過提供檢索增強(qiáng)生成功能的生產(chǎn)就緒型 NVIDIA NIM 推理微服務(wù),充分挖掘業(yè)務(wù)數(shù)據(jù)的價(jià)值。這些微服務(wù)現(xiàn)已集成到 Cohesity、DataStax、NetApp 和 Snowflake 平臺中。
    的頭像 發(fā)表于 07-26 11:13 ?1223次閱讀
    全新 NVIDIA NeMo Retriever<b class='flag-5'>微服務(wù)</b>大幅提升LLM的準(zhǔn)確性和吞吐量

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品