架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

微服務,相當火的一個概念,從小到大,所有的公司都在往微服務上靠攏,在面試的時候,微服務相關的技術也是在簡歷上可以說是標黑出來的重點,但是,這些所謂的從使用微服務的公司出來的人,當具體問到一些實際的問題是如何解決的時候,臉上的表情不得讓人深思,於是,在機緣巧合之下,我和一個確定可以發offer的面試者聊了一下,卻發現了一個很嚴重的問題,他所在的公司,在微服務這一塊,“有名無實啊”,面試的時候造航母,可實際工作,連擰螺絲都算不上,就是crud,這也是促使他出來的原因。

那麼,產生這個問題的原因是什麼呢?其實除了被炒起來的概念之外,也和微服務的概念有關係

主要從以下幾個方面跟大家分享:

  • 微服務是什麼
  • 為什麼要採用微服務
  • 微服務架構
  • 該如何學習微服務

關於微服務的態度,這是我見過最好的回答

架構模式有很多,微服務不是唯一的選擇也不是什麼銀彈。國內絕大多數中小公司引入微服務都是在盲目追新,也能看出做此種技術選型的工程師基礎架構素質的不足。

“你必須長的足夠高才能使用微服務”。微服務基礎設施,尤其是容器技術、自動化部署、自動化測試這些不完備,微服務形同虛設,不會帶來什麼質的提升。

微服務架構的關鍵不在於具體的實現,而在於如何合理地劃分服務邊界以及組織架構是否相匹配。不考慮研發團隊的規模和組成就盲目上微服務是不良的技術選型。

Spring Boot 是 Spring 全家桶的上層封裝,並不是什麼嶄新的技術,也不是什麼值得成為自己殺手鐧的技術。

Spring Cloud 中 Spring Cloud Netflix 的組件是經過生產環境驗證的,其他的則建議慎重選擇。

微服務是什麼

來看一下框架

架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

微服務起源於 2005 年 Peter Rodgers 博士在雲端運算博覽會提出的微 Web 服務(Micro-Web-Service),根本思想類似於 Unix 的管道設計理念。

2014 年,由 Martin Fowler 與 James Lewis 共同提出了微服務的概念,定義了微服務架構風格是一種通過一套小型服務來開發單個應用的方法,每個服務運行在自己的進程中,並通過輕量級的機制進行通訊(HTTP API)。

關鍵的三點是:

  • small
  • automated
  • lightweight

對比 SOA,微服務可以看做是 SOA 的子集,是輕量級的 SOA,粒度更細的服務,獨立進程、數據分離,更注重敏捷、持續交付、DevOps 以及去中心化實踐。

其共同的架構原理:

  • 單一職責
  • 關注分離:控制與邏輯相分離
  • 模塊化和分而治之

特點:

  • 用服務進行組件化
  • 圍繞業務能力進行組織
  • 是產品而非項目
  • 端點智能化和啞管道: 控制邏輯都在端點,管道僅僅是傳輸
  • 全自動化部署
  • 語言和數據的去中心化控制
  • 面向失敗設計
  • 漸進式設計

綜合來看,其優缺點如下:

  • 優點: 模塊的強邊界;獨立部署;技術選型的多樣性。
  • 缺點: 分佈式帶來編程複雜度,遠程調用的消耗;捨棄強一致性,實現最終一致性;操作複雜性要求有一個成熟的運維團隊或者運維基礎設施。

為什麼要採用微服務

是否選擇微服務取決於你要設計的系統的複雜度。微服務是用來把控複雜系統的,但是隨之而來的就是引入了微服務本身的複雜度。

需要解決包括自動化部署、監控、容錯處理、最終一致性等其他分佈式系統面臨的問題。即使已經有一些普遍使用的解決方案,但是仍然是有不小的成本的。

架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

生產力和複雜度的關係如圖所示,可見系統越複雜,微服務帶來的收益越大。此外,無論是單體應用還是微服務,團隊的技能都需要能夠把控住。

馬丁·福勒的一個觀點是: 除非管理單體應用的成本已經太複雜了(太大導致很難修改和部署),否則都不要考慮微服務。

大部分應用都應該選擇單體架構,做好單體應用的模塊化而不是拆分成服務。

因此,系統一開始採用單體架構,做好模塊化,之後隨著系統變得越來越複雜、模塊/服務間的邊界越來越清晰,再重構為微服務架構是一個合理的架構演化路徑。

四個可以考慮上微服務的情況:

  • 多人開發一個模塊/項目,提交代碼頻繁出現大量衝突。
  • 模塊間嚴重耦合,互相依賴,每次變動需要牽扯多個團隊,單次上線需求太多,風險大。
  • 主要業務和次要業務耦合,橫向擴展流程複雜。
  • 熔斷降級全靠 if-else。

微服務的三個階段:

  • 微服務 1.0: 僅使用註冊發現,基於 Spring Cloud 或者 Dubbo 進行開發。
  • 微服務 2.0: 使用了熔斷、限流、降級等服務治理策略,並配備完整服務工具和平臺。
  • 微服務 3.0: Service Mesh 將服務治理作為通用組件,下沉到平臺層實現,應用層僅僅關注業務邏輯,平臺層可以根據業務監控自動調度和參數調整,實現 AIOps 和智能調度。

微服務架構

先決條件

微服務的先決條件如下:

  • 快速的環境提供能力: 依賴於雲計算、容器技術,快速交付環境。
  • 基本的監控能力: 包括基礎的技術監控和業務監控。
  • 快速的應用部署能力: 需要部署管道提供快速的部署能力。
  • Devops 文化: 需要具有良好的持續交付能力,包括全鏈路追蹤、快速環境提供和部署等,還需要快速的反應能力(對問題、故障的快速響應),開發和運維的協同工作。

此外,根據康威定律和逆康威定律(技術架構倒逼組織架構改進),組織架構也是一個很關鍵的因素。

對應於微服務架構,組織架構需要遵循以下原則:

  • 一個微服務由一個團隊維護,團隊成員以三人為宜。
  • 單個團隊的任務和發展是獨立的,不受其他因素影響。
  • 團隊是功能齊全、全棧、自治的,扁平、自我管理。

。。。。。。。。。啊!!!


看到這裡,我覺得有些人已經看不下去了,因為真的是,自己公司的業務需求真的沒有達到這個級別,而且相關的人員和資源配置也達不到這個需求,但是,有很多人又會抱怨,確實是“面試造航母,工作擰螺絲”,但是,你有什麼辦法呢?大廠,體系架構相對來說比較完善,有自己的獨立的團隊,而小公司,就像我之前說的,可能就是單純的跟風,但是你有什麼辦法,大廠進不去,在小廠還不知道該怎麼學,因為大環境不允許,所以,小編整理了一部分學習書籍跟大家分享,有需要的,可以私信“資料”獲取,個人感覺這些書籍質量比較高,配合面試資料,你懂的。。。

一、Spring Boot 相關

(1)SpringBoot 面試專題

  • 什麼是 Spring Boot?
  • Spring Boot 有哪些優點?
  • 什麼是 JavaConfig?
  • 如何重新加載 Spring Boot 上的更改,而無需重新啟動服務器?
  • Spring Boot 中的監視器是什麼?
  • 如何在 Spring Boot 中禁用 Actuator 端點安全性?
  • 如何在自定義端口上運行 Spring Boot 應用程序?
  • 什麼是 YAML?
  • 如何實現 Spring Boot 應用程序的安全性?
  • 如何集成 Spring Boot 和 ActiveMQ?
  • 如何使用 Spring Boot 實現分頁和排序?
  • 什麼是 Swagger?你用 Spring Boot 實現了它嗎?
  • 什麼是 Spring Profiles?
  • 什麼是 Spring Batch?
  • 什麼是 FreeMarker 模板?
  • 如何使用 Spring Boot 實現異常處理?
  • 您使用了哪些 starter maven 依賴項?
  • 什麼是 CSRF 攻擊?
  • 什麼是 WebSockets?
  • 什麼是 AOP?
  • 什麼是 Apache Kafka?
  • 我們如何監視所有 Spring Boot 微服務?

SpringBoot 面試專題答案:

架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

(2)Spring Boot 核心技術-筆記

  1. Spring Boot入門
  2. 配置文件
  3. 日誌
  4. Web開發
  5. Docker
  6. Spring Boot與數據訪問
  7. 啟動配置原理
  8. 自定義Starter
架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

二、Spring Cloud 相關

(1)Spring Cloud 面試專題

  • 什麼是 Spring Cloud?
  • 使用 Spring Cloud 有什麼優勢?
  • 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
  • 負載平衡的意義什麼?
  • 什麼是 Hystrix?它如何實現容錯?
  • 什麼是 Hystrix 斷路器?我們需要它嗎?
  • 什麼是 Netflix Feign?它的優點是什麼?
  • 什麼是 Spring Cloud Bus?我們需要它嗎?

Spring Cloud面試題答案:

架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

(2)SpringCloud 參考指南

  1. 微服務簡介
  2. Spring Cloud
  3. 使用Dokcer構建微服務
架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

三、Nginx 相關

(1)Nginx 面試專題

  • 請解釋一下什麼是 Nginx?
  • 請列舉 Nginx 的一些特性。
  • 請列舉 Nginx 和 Apache 之間的不同點
  • 請解釋 Nginx 如何處理 HTTP 請求。
  • 在 Nginx 中,如何使用未定義的服務器名稱來阻止處理請求?
  • 使用“反向代理服務器”的優點是什麼?
  • 請列舉 Nginx 服務器的最佳用途。
  • 請解釋 Nginx 服務器上的 Master 和 Worker 進程分別是什麼?
  • 請解釋你如何通過不同於 80 的端口開啟 Nginx?
  • 請解釋是否有可能將 Nginx 的錯誤替換為 502 錯誤、503?
  • 在 Nginx 中,解釋如何在 URL 中保留雙斜線?
  • 請解釋 ngx_http_upstream_module 的作用是什麼?
  • 請解釋什麼是 C10K 問題?
  • 請陳述 stub_status 和 sub_filter 指令的作用是什麼?
  • 解釋 Nginx 是否支持將請求壓縮到上游?
  • 解釋如何在 Nginx 中獲得當前的時間?
  • 用 Nginx 服務器解釋-s 的目的是什麼?
  • 解釋如何在 Nginx 服務器上添加模塊?

Nginx 面試題答案:

架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

(2)Nginx(精通Nginx)

  • 第1章 安裝Nginx及第三方模塊
  • 第2章 配置指南
  • 第3章 使用mail模塊
  • 第4章 Nginx作為反向代理
  • 第5章 反向代理高級話題
  • 第6章 Nginx HTTP服務器
  • 第7章 Nginx的開發
  • 第8章 在Nginx中集成Lua
  • 第9章 故障排除技巧
架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

四、Docker 相關

(1)Docker 面試專題

  1. 介紹一下docker的優點有哪些?
  2. Docker的組成結構是怎麼樣的呢?
  3. Docker有哪些具體的應用場景呢?

(2)Docker 學習筆記(Xmind)

架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

(3)Docker 實戰系列(Docker技術入門與實戰)

第一部分 Docker入門

  • Docker
  • Docker的核心概念和安裝
  • 鏡像
  • 容器
  • 倉庫
  • 數據管理
  • 網絡基礎配置
  • 使用Dockerfile創建鏡像
  • 第二部分 實戰案例

  • 操作系統
  • 創建支持SSH服務的鏡像
  • Web服務器與應用
  • 數據庫應用
  • 編程語言
  • 使用私有倉庫
  • 構建Docker容器集群
  • 在公有云上使用Docker
  • Docker實踐之道
  • 第三部分 高級話題

  • Docker安全
  • 高級網絡配置
  • Docker相關項目
  • 架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

    五Tomcat相關

    • Tomcat 的缺省端口是多少,怎麼修改?
    • Tomcat 有哪幾種 Connector 運行模式(優化)?
    • Tomcat 有幾種部署方式?
    • Tomcat 容器是如何創建 servlet 類實例?用到了什麼原理
    • 你怎樣給 tomcat 去調優?
    • 如何加大 tomcat 連接數
    • tomcat 中如何禁止列目錄下的文件
    • 怎樣加大 tomcat 的內存
    • Tomcat 有幾種部署方式
    • Tomcat 的優化經驗
    • Tomcat 一個請求的完整過程

    (1)Tomcat面試題答案:

    架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?

    (2)Tomcat系統架構(Tomcat入門到實戰)

    第1章 Tomcat的開幕式

    第2章 配置Tomcat

    第3章 在Tomcat中部署Servlet與JSP Web應用程序

    第4章 Tomcat的性能調校

    第5章 與Apache Web服務器的整合

    第6章 Tomcat安全防護

    第7章 配置

    第8章 調試與疑難排解

    第9章 從源代碼組建Tomcat

    第10章 Tomcat集群

    第11章 閉幕式

    架構師曰:微服務真不是企業必須,但你不會還不行,你說氣人不?


    友情提醒:獲取以上所有文檔資料,轉發+評論,關注我,然後私信回覆【資料】即可打包獲取哦!(免費的啦~)


    分享到:


    相關文章: