微服務:又稱微服務 架構,是一種架構風格,它將應用程序構建爲以業務領域爲模型的小型自治服務集合 。
通俗地說,你必須看到蜜蜂如何經過對齊六角形蠟細胞來構建它們的蜂窩狀物。他們最初從使用各類材料的小部分開始,並繼續從中構建一個大型蜂箱。這些細胞造成圖案,產生堅固的結構,將蜂窩的特定部分固定在一塊兒。這裏,每一個細胞獨立於另外一個細胞,但它也與其餘細胞相關。這意味着對一個細胞的損害不會損害其餘細胞,所以,蜜蜂能夠在不影響完整蜂箱的狀況下重建這些細胞。前端
請參考上圖。這裏,每一個六邊形形狀表明單獨的服務組件。與蜜蜂的工做相似,每一個敏捷團隊都使用可用的框架和所選的技術堆棧構建單獨的服務組件。就像在蜂箱中同樣,每一個服務組件造成一個強大的微服務架構,以提供更好的可擴展性。此外,敏捷團隊能夠單獨處理每一個服務組件的問題,而對整個應用程序沒有影響或影響最小。面試
如下是設計微服務的最佳實踐:spring
微服務架構具備如下組件:數據庫
開發一些較小的微服務聽起來很容易,但開發它們時常常遇到的挑戰以下。瀏覽器
SOA 和微服務之間的主要區別以下:安全
您能夠列出微服務的特徵,以下所示:服務器
若是您必須定義泛在語言(UL),那麼它是特定域的開發人員和用戶使用的通用語言,經過該語言能夠輕鬆解釋域。
無處不在的語言必須很是清晰,以便它將全部團隊成員放在同一頁面上,並以機器能夠理解的方式進行翻譯restful
模塊內部元素所屬的程度被認爲是凝聚力。網絡
組件之間依賴關係強度的度量被認爲是耦合。一個好的設計老是被認爲具備高內聚力和低耦合性。架構
Representational State Transfer(REST)/ RESTful Web 服務是一種幫助計算機系統經過 Internet 進行通訊的架構風格。這使得微服務更容易理解和實現。
微服務可使用或不使用 RESTful API 實現,但使用 RESTful API 構建鬆散耦合的微服務老是更容易。
事實上,隨着新功能的增長,彈簧變得愈來愈複雜。若是必須啓動新的 spring 項 目,則必須添加構建路或添加 maven 依賴項,配置應用程序服務器,添加 spring配置。因此一切都必須從頭開始。
Spring Boot 是解決這個問題的方法。使用 spring boot 能夠避免全部樣板代碼和配置。所以,基本上認爲本身就好像你正在烘烤蛋糕同樣,春天就像製做蛋糕所需的成分同樣,彈簧靴就是你手中的完整蛋糕。
Spring Boot 執行程序提供了 restful Web 服務,以訪問生產環境中運行應用程序的當前狀態。在執行器的幫助下,您能夠檢查各類指標並監控您的應用程序。
根據 Spring Cloud 的官方網站,Spring Cloud 爲開發人員提供了快速構建分佈式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智能路由,領導選舉,分佈式會話,集羣狀態)。
在使用 Spring Boot 開發分佈式微服務時,咱們面臨的問題不多由 Spring Cloud解決。
在測試目標只關注 Spring MVC 組件的狀況下,WebMvcTest 註釋用於單元測試Spring MVC 應用程序。在上面顯示的快照中,咱們只想啓動 ToTestController。執行此單元測試時,不會啓動全部其餘控制器和映射。
雖然您能夠經過多種方式實現微服務,但 REST over HTTP 是實現微服務的一種方式。REST 還可用於其餘應用程序,如 Web 應用程序,API 設計和 MVC 應用程序,以提供業務數據。
微服務是一種體系結構,其中系統的全部組件都被放入單獨的組件中,這些組件能夠單獨構建,部署和擴展。微服務的某些原則和最佳實踐有助於構建彈性應用程序。
簡而言之,您能夠說 REST 是構建微服務的媒介。
在使用微服務時,因爲有多個微服務協同工做,測試變得很是複雜。所以,測試分爲不一樣的級別。
分佈式事務是指單個事件致使兩個或多個不能以原子方式提交的單獨數據源的突
變的任何狀況。在微服務的世界中,它變得更加複雜,由於每一個服務都是一個工
做單元,而且大多數時候多個服務必須協同工做才能使業務成功。
冪等性是可以以這樣的方式作兩次事情的特性,即最終結果將保持不變,即好像它只作了一次。
用法:在遠程服務或數據源中使用 Idempotence,這樣當它屢次接收指令時,它只處理指令一次。
有界上下文是域驅動設計的核心模式。DDD 戰略設計部門的重點是處理大型模型和團隊。DDD 經過將大型模型劃分爲不一樣的有界上下文並明確其相互關係來處理大型模型。
雙因素身份驗證爲賬戶登陸過程啓用第二級身份驗證。
所以,假設用戶必須只輸入用戶名和密碼,那麼這被認爲是單因素身份驗證。
這三種憑證是:
客戶端系統用於向遠程服務器發出通過身份驗證的請求的一種數字證書稱爲客戶端證書。客戶端證書在許多相互認證設計中起着很是重要的做用,爲請求者的身份提供了強有力的保證。
PACT 是一個開源工具,容許測試服務提供者和消費者之間的交互,與合同隔離,從而提升微服務集成的可靠性。
微服務中的用法
OAuth 表明開放受權協議。這容許經過在 HTTP 服務上啓用客戶端應用程序(例如第三方提供商 Facebook,GitHub 等)來訪問資源全部者的資源。所以,您能夠在不使用其憑據的狀況下與另外一個站點共享存儲在一個站點上的資源。
「任何 設計 系統 的組 織( 普遍 定義 )都 將產 生一 種設 計, 其結 構是 組織 通訊 結構的副 本。」 – Mel Conway
該法律基本上試圖傳達這樣一個事實:爲了使軟件模塊起做用,整個團隊應該進行良好的溝通。所以,系統的結構反映了產生它的組織的社會邊界。
根據 Martin Flower 的說法,合同測試是在外部服務邊界進行的測試,用於驗證其是否符合消費服務預期的合同。
此外,合同測試不會深刻測試服務的行爲。更確切地說,它測試該服務調用的輸入&輸出包含所需的屬性和所述響應延遲,吞吐量是容許的限度內。
端到端測試驗證了工做流中的每一個流程都正常運行。這可確保系統做爲一個總體協同工做並知足全部要求。
通俗地說,你能夠說端到端測試是一種測試,在特定時期後測試全部東西。
容器是管理基於微服務的應用程序以便單獨開發和部署它們的好方法。您能夠將微服務封裝在容器映像及其依賴項中,而後可使用它來滾動按需實例的微服務,而無需任何額外的工做。
DRY 表明不要重複本身。它基本上促進了重用代碼的概念。這致使開發和共享庫,
這反過來致使緊密耦合。
這基本上是用於開發微服務的模式,以便它們能夠被外部系統使用。當咱們處理微服務時,有一個特定的提供者構建它,而且有一個或多個使用微服務的消費者。
一般,提供程序在 XML 文檔中指定接口。但在消費者驅動的合同中,每一個服務消費者都傳達了提供商指望的接口。
微服務架構基於一個概念,其中全部服務應該可以彼此交互以構建業務功能。所以,要實現這一點,每一個微服務必須具備接口。這使得 Web API 成爲微服務的一個很是重要的推進者。RESTful API 基於 Web 的開放網絡原則,爲構建微服務架構的各個組件之間的接口提供了最合理的模型。
語義監控,也稱爲 綜合監控, 將自動化測試與監控應用程序相結合,以檢測業務失敗因素。
跨功能測試是對非功能性需求的驗證,即那些沒法像普通功能那樣實現的需求。
非肯定性測試(NDT)基本上是不可靠的測試。因此,有時可能會發生它們經過,顯然有時它們也可能會失敗。當它們失敗時,它們會從新運行經過。
從測試中刪除非肯定性的一些方法以下:
存根
例如,對於空堆棧,您能夠建立一個只爲 empty()方法返回 true 的存根。所以,這並不關心堆棧中是否存在元素。
嘲笑
例如,對於 Customer 對象,您能夠經過設置名稱和年齡來模擬它。您能夠將 age設置爲 12,而後測試 isAdult()方法,該方法將在年齡大於 18 時返回 true。所以,您的 Mock Customer 對象適用於指定的條件。
Mike Cohn 提供了一個名爲 Test Pyramid 的模型。這描述了軟件開發所需的自動化測試類型。
Docker 提供了一個可用於託管任何應用程序的容器環境。在此,軟件應用程序和支持它的依賴項緊密打包在一塊兒。
所以,這個打包的產品被稱爲 Container,由於它是由 Docker 完成的,因此它被稱爲 Docker 容器!
Canary Releasing 是一種下降在生產中引入新軟件版本的風險的技術。這是經過將變動緩慢地推廣到一小部分用戶,而後將其發佈到整個基礎架構,即將其提供給每一個人來完成的。
持續集成(CI)是每次團隊成員提交版本控制更改時自動構建和測試代碼的過程。這鼓勵開發人員經過在每一個小任務完成後將更改合併到共享版本控制存儲庫來共享代碼和單元測試。
持續監控深刻監控覆蓋範圍,從瀏覽器內前端性能指標,到應用程序性能,再到主機虛擬化基礎架構指標。
微服務架構中的架構師扮演如下角色:
咱們知道擁有本身的數據庫的每一個微服務都是一個可獨立部署的程序單元,這反過來又讓咱們能夠建立一個狀態機。所以,咱們能夠爲特定的微服務指定不一樣的狀態和事件。
例如,咱們能夠定義 Order 微服務。訂單能夠具備不一樣的狀態。Order 狀態的轉換能夠是 Order 微服務中的獨立事件。
Reactive Extensions 也稱爲 Rx。這是一種設計方法,咱們經過調用多個服務來收集結果,而後編譯組合響應。這些調用能夠是同步或異步,阻塞或非阻塞。Rx是分佈式系統中很是流行的工具,與傳統流程相反。
但願這些微服務面試問題能夠幫助您進行微服務架構師訪談 。
歡迎你們關注個人公衆號:前程有光,金三銀四跳槽面試季,整理了1000多道將近500多頁pdf文檔的Java面試題資料,文章都會在裏面更新,整理的資料也會放在裏面。