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進程完成具體工作。

