微服務常見問題匯總


1、SOA和微服務架構之間的主要區別是什么?
SOA(Service Oriented Architecture)面向服務的架構:他是一種設計方法,其中包含多個服務, 服務之間通過相互依賴最終提供一系列的功能。一個服務 通常以獨立的形式存在與操作系統進程中。各個服務之間通過網絡調用。
微服務架構:其實和SOA架構類似,微服務是在SOA上做的升華,微服務架構強調的一個重點是“業務需要徹底的組件化和服務化”,原有的單個業務系統會拆分為多個可以獨立開發、設計、運行的小應用。這些小應用之間通過服務完成交互和集成。
微服務架構 = 80%的SOA服務架構思想 + 100%的組件化架構思想 + 80%的領域建模思想

功能 SOA 微服務
組件大小 大塊業務邏輯 單獨任務或小塊業務邏輯
耦合 通常松耦合 總是松耦合
公司架構 任何類型 小型、專注於功能交叉團隊
管理 着重中央管理 着重分散管理
目標 確保應用能夠交互操作 執行新功能、快速拓展開發團隊
SOA 微服務
遵循“盡可能多的共享”架構方法 遵循“盡可能少分享”的架構方法
重要性在於業務功能重用 重要性在於“有界背景”的概念
他們有共同的治理和標准 他們專注於人們的合作和其他選擇的自由
使用企業服務總線ESB進行通信 簡單的消息系統
它們支持多種消息協議 他們使用輕量級協議,如 HTTP / REST 等。
多線程,有更多的開銷來處理I/O 單線程,通常使用Event Loop功能進行非鎖定I/O處理
最大化應用程序服務可重用性 專注於解耦
傳統的 關系數據庫 更常用 現代 關系數據庫 更常用
系統的變化需要修改整體 系統的變化是創造一種新的服務
DevOps/Continuous Delivery正在變得流行,但還不是主流 專注於DevOps/持續交付

2、什么是領域驅動設計(DDD)?
Domain Driven Design 領域驅動設計,是一種軟件設計思想。專注於核心領域邏輯、在模型上找到綜合的設計、不斷與領域專家合作。

3、什么是REST/RESTful?它的用途是什么?
REST:是一種軟件架構設計風格,提供了一組設計原則和約束條件,而不是標准。(英文:Representational State Transfer,簡稱REST)即表述性狀態傳遞是:Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。它是一種針對網絡應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。
RESTful:基於REST構建的API就是Restful風格。
總結:URL定位資源,HTTP動詞(GET,POST,PUT,DELETE)描述操作。

4、你能否給出關於REST和微服務的要點?
REST:雖然可以通過多種方式實現微服務,但REST over HTTP是實現微服務的一種方式。REST還可用於其他應用程序,如Web應用程序,API設計和MVC應用程序,以提供業務數據。
微服務:是一種體系結構,其中系統的所有組件都被放入單獨的組件中,這些組件可以單獨構建,部署和擴展。微服務的某些原則和最佳實踐有助於構建彈性應用程序。

5、什么是不同類型的微服務測試?
單元測試、端到端(系統)測試、集成測試、消費者驅動的合同測試(CDC測試)
在底層,我們有面向技術的測試,單元測試和性能測試。
在中間層,我們有探測性測試,如壓力測試和可用性測試。
在頂級,我們有很少的驗收測試。這些驗收測試有助於利益相關者理解和驗證軟件功能。

6、PACT在微服務架構中的用途是什么?
PACT:是一個開源CDC測試框架。允許測試服務提供者和消費者之間的交互,與契約隔離,從而提高微服務集成的可靠性。
1.定義消費者端服務的預期結果
2.生成PACT文件
3.與提供者服務共享生成的PACT文件

7、什么是端到端微服務測試?
端到端測試:即對待測功能在各服務、組件完全正常運行的情況進行測試,這里更類似於功能測試或者UAT測試。
端到端測試:驗證了工作流中的每個流程都正常運行。這可確保系統作為一個整體協同工作並滿足所有要求。

8、容器在微服務中的用途是什么?
容器:是管理基於微服務的程序以便單獨開發和部署它們的好方法。你可以將微服務封裝在容器鏡像及其依賴項中,然后可以用它來滾動開發按需實例的微服務而無需任何額外的工作。

9、微服務架構中的DRY是什么?
DRY:代表不要重復自己。它基本上促進了重用代碼的概念。這導致開發並共享庫,但是反過來導致緊耦合。

10、你對微服務架構中的語義監控有何了解?
語義監控,也稱為綜合監控,將自動化測試與監控程序相結合,以檢測業務失敗的因素。

11、微服務中的反應性擴展是什么?
Reactive Extensions也稱為Rx。這是一種設計方法,我們通過調用多個服務來收集結果,然后編譯組合響應。這些調用可以是同步或異步,阻塞或非阻塞。Rx 是分布式系統中非常流行的工具,與傳統流程相反。

12、Mock 與 Stub 有什么區別?
Mock:關注行為驗證。細粒度的測試,即代碼的邏輯,多數情況下用於單元測試。
Stub:關注狀態驗證。粗粒度的測試,在某個依賴系統不存在或者還沒實現或者難以測試的情況下使用,例如訪問文件系統,數據庫連接,遠程協議等。
 

區別 Mock Stub樁
優點 運行速度快
測試覆蓋率高
容易實現且可以形成良好的測試文檔
能彌補Mock的不足
能夠模擬復雜的測試環境
缺點 不是銀彈,對於集成測試等粗粒度且耗時的測試不太適用 Stub往往比較復雜難以實現,而且需要經常性的調試它。
Stub模擬的都是難以測試的環境依賴,其復雜性導致它難以維護。
Stub並不能提供細粒度的單元測試。
不同的情況需要不同的Stub實現策略。

 13、Kubernetes與Docker有什么關系?

Docker:是一個開源的應用容器引擎,開發者可以打包他們的應用及依賴到一個可移植的容器中,發布到流行的Linux機器上,也可實現虛擬化。
K8s:是一個開源的容器集群管理系統,可以實現容器集群的自動化部署、自動擴縮容、維護等功能。

14、虛擬機和容器之間的區別是什么?
容器:是輕量級的虛擬化,主要是利用NameSpace的隔離,容器內部有獨立的文件系統,但是和主機共享內存空間。
虛擬機:是一套完全的虛擬化,他虛擬了計算機運行的所有部分。
通過了解技術的實現,與主機操作系統的隔離級別是評估的主要方面
進程:是在操作系統層面默認隔離程度很低,主要只有隔離的內存地址空間和用戶權限。 容器:是一個進程(或一組進程),但是與操作系統間的隔離程度比普通的進程高,但比VM低,安全性也更差。
虛擬機:是在操作系統中完全隔離,這意味着他們在主機硬件頂層創建了完整的新的操作系統。完全的獨立伴隨的是更多的資源使用來運行虛擬機。

15、什么是pod?什么是部署?什么是有狀態集?
Pod:是由一組緊耦合的容器組成的容器組。

16、如何在不停機的情況下更新應用程序?
Master/Worker模式:應用容器實現不停機發布特性,最常見是Master/Worker模式。容器中常駐一個master進程和多個work進程,master進程只負責加載程序和分發請求,由fork出來的worker進程完成具體工作。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM