如何玩轉微服務
作者簡介
黃朝兵,目前就職於一家跨國軟體公司,任專家級開發工程師。曾就職於網際網路金融企業、大型國企、日企等,分別任職技術經理,高階軟體開發工程師,軟體開發工程師。
微服務,軟體應用開發的新紀元
2014年 Martin Fowler 在《MicroServices》論文中首次提出了微服務的概念。近些年,伴隨著網際網路的日益發展,微服務在國內、甚至國際上的發展已達到一個新高潮。
在微服務流行之前,SOA(Service Oriented Architecture)被廣泛熟知與採用。微服務基於 SOA 發展而來,但與之相比,微服務更易於理解,也更利於設計者、開發者的實踐落地,它把“面向服務”的設計思想實現得更加徹底。
微服務架構模式的優勢與痛點
微服務架構建議實踐者以“業務”來切分服務,鼓勵開發者選擇最適合的技術實現具體的服務,只需保證其對外提供的 API 介面保持一致即可。也就是說,微服務架構理念的出現,使得應用開發前的技術選型的選擇空間更加寬廣、靈活。
將系統拆分為多個微服務,也便於對每個微服務分別實施監控,不斷收集每個微服務的具體指標。當某個微服務出現效能瓶頸時,可針對性的對該服務進行水平擴充套件以支撐當前大流量,而無需對整個系統進行橫向擴充套件。
除了以上優點,微服務架構按業務拆分服務的理念,更使服務之間彼此隔離,相互之間不會產生影響。這也便於我們在開發過程中利用技術手段,更高效地實現自動化部署。
正因為這些優點,當前很多軟體企業在開發新專案時,首先考慮的是微服務架構,甚至企業正將以前的老系統慢慢迭代為該架構模式。
當然,除了以上優點,微服務架構也存在以下缺點:
- 微服務粒度大小難以劃分,需要設計人員對業務有很好的掌握;
- 分散式複雜性,主要體現在分散式事務、網路延遲、系統容錯等問題解決難度較大;
- 微服務之間通訊成本較高,對微服務之間網路穩定性,通訊速度要求較高;
- 微服務數量較大,對運維人員的運維、部署工作帶來較大的挑戰。
微服務開發踩坑經驗
經過多年來不斷的探索與總結,在微服務設計、開發領域,我已積累了豐富的實戰經驗,深知微服務實踐過程中各個痛點及難點。
避免大家再踩我之前所趟過的坑,讓開發過程更加順利、更專注於業務開發,我特別推出了我的達人課《微服務一站式開發》,它集合了自己在微服務開發過程中的所有經驗總結,主要包括以下主要內容:
目前,微服務開發中,各大公司通常採用的技術主要有 Spring Boot、Spring Cloud,因此在課程的開篇首先會對 Spring Boot 的基礎知識,以及它與其他常用的各大技術框架的整合進行演示,並帶大家利用 Spring Cloud 整合 Consul 實現服務的註冊、發現等;
微服務呼叫過程中,遇到網路等不穩定因素時,如果不加以控制,系統很容易發生雪崩效應。本課程將充分利用 Spring Cloud 相關特性教各位讀者如何實現服務的熔斷、降級、限流等功能,從而解決這一問題;
將整個系統按業務拆分成多個服務,這個過程需要解決微服務鑑權、分散式事務、分散式鎖等關鍵問題。為此,本課程引入了 Spring Cloud Zuul 對微服務進行統一鑑權的講解;對 Redis、Zookeeper 高階技術點的解讀,及利用它們如何實現分散式鎖的過程分析;對分散式事務的理論說明,以及訊息中介軟體 RabbitMQ 之死信佇列、釋出確認、消費確認的應用指南,並利用它們實現資料的最終一致性,解決微服務分散式事務;還會講解如何利用第三方開源框架實現資料的實時一致性等內容;
微服務的數量往往較大,運維人員面臨著運維、部署困難等問題,為此課程為各位讀者帶來了微服務監控、Docker 的常用命令、架構以及容器管理平臺 Rancher、K8S 等相關技術使用指南;
最後,課程將通過一個完整的專案,帶大家瞭解微服務從開發,到程式碼提交,再到打映象、自動拉起容器、容器的擴縮容等一系列完整的過程,並對其中使用到的關鍵技術和工具(如 Jenkins)一一進行精要說明。
為了方便大家更清晰地學習本課程,我們再來看下課程目錄安排。
第01-02課:主要演示微服務開發過程中,Spring、Spring MVC 常用主要知識點;
第03-05課:主要演示在實際工作中,Spring Boot 如何整合諸如 Spring Data JPA、Redis、MongoDB、RabbitMQ、Elasticsearch 此類的常用技術; 第06-09課:將對 Consul 相關知識做詳解,並利用 Spring Cloud 和 Consul 實現服務的註冊與發現;同時將演示 Spring Cloud常用元件(如 Zuul、Ribbon、Hystrix、Feign 等)在實際工作中使用方法;此外,在閘道器層整合 OAuth 2 實現微服務鑑權、配置中心及請求鏈路跟蹤等內容也會在本部分進行詳細解讀與演示;
第10-13課:首先會對 Redis 分片原理、叢集搭建、分片資料遷移,Redis 與 Lua 指令碼整合進行詳解;接著,對 ZooKeeper 相關演算法(如 Paxos、ZAB)進行介紹,並對其 watcher 的實現原理及 ZooKeeper 叢集搭建過程作分析與說明;之後講解如何利用 Redis、DB、ZooKeeper 等實現分散式鎖,介紹分散式事務相關原理,並演示在工作中如何利用訊息中介軟體實現資料最終一致性和利用第三方元件實現資料實時一致性等內容;
第14課:主要演示如何實現微服務監控;
第15-17課:介紹 Docker 架構及常用命令;對常用容器管理平臺如 Rancher、K8S 進行詳細說明,並說明工作中如何用其管理容器;
第18課:實戰部分,對前17課所講內容進行綜合實戰,讓讀者瞭解在工作中如何應用以上技術。其中主要包括微服務開發、微服務閘道器、微服務呼叫、負載均衡、熔斷、微服務鑑權、日誌監控、配置中心、微服務映象生成、容器管理平臺搭建及如何管理容器等技術內容。
最後,我要對各位讀者說明的是,經過本次課程的學習,我將帶領大家的微服務開發能力再上一個新臺階。在學習的過程中,如果各位遇到任何問題,請通過 GitChat 的讀者圈與我交流互動,我會盡力解答各位提出的問題。