前言
在計算機技術日新月異的今天,層出不窮的新技術推動了生產力的發展,也推動了整個社會的進步。軟體架構從單體架構到分散式架構,從SOA架構到微服務架構,再到服務網格。資料庫從 Oracle包打天下到 MySQL大行其道,再到記憶體資料庫、NoSQL資料庫遍地開花。容器編排排程技術從Mesos、Swarm、Kubernetes三足鼎立,到最終Kubernetes一統天下。“工欲善其事,必先利其器。”在網際網路轉型的大潮中,需要在思想、方法、技術等方面全面轉型。網際網路架構的高可靠、高併發、高擴充套件與低耦合,共同創造了網際網路應用的無限可能。
微服務的核心思想是將整個系統拆分為多個相互獨立的業務,各模組可以獨立地開發、測試、部署、執行和運維。這種低耦合、高內聚的靈活特性正是所有架構設計人員所期盼的。因此,微服務架構在短時間內便得到大型網際網路企業的青睞,成為打造複雜網際網路應用的一把利器。Kubernetes作為目前主流的容器編排排程平臺,從新生事物逐漸發展成為影響全球IT技術的基礎設施平臺,更推動了微服務架構、雲原生應用、服務網格等熱門技術的普及和落地。
本文內容循序漸進,概念清晰明瞭,由淺入深,從易到難,為讀者呈現了一幅包括微服務、容器化及技術實踐在內的全景圖。
本文融合了作者在企業推廣實施微服務的諸多經驗,不但理論架構完整,而且包含典型的實踐案例。
目前,大資料、雲計算、物聯網、人工智慧、區塊鏈等技術遍地開花,藉助5G技術的翅膀,我們定能展翅翱翔!
本文目錄本文包括的主要內容微服務和 Docker容器技術是目前分散式架構中常用的主流技術,結合Kubernetes強大的容器服務編排與排程能力,中小企業能夠簡單快速地構建自己的分散式網際網路架構系統。
本文結合實際生產專案的架構重構過程和經驗,詳細介紹從單體架構過渡到微服務容器化的分散式架構的各個方面,主要包括微服務開發和運維技術棧的選型、Spring Cloud微服務開發、Rancher 和Kubernetes 生產離線環境下的安裝與部署、微服務的容器化與服務編排、日誌呼叫鏈的採集和展示、基於Prometheus 的系統監控,以及微服務的持續整合等要點。
本文基於Spring Boot、Spring Cloud、Docker、Rancher、Kubernetes等技術,主要提供從設計、開發、部署到運維的微服務容器化的生產環境整體解決方案。
第1章單體架構與微服務架構;
本章以一個電子商務訂單系統為切入點,首先介紹了該系統的相關背景,然後簡單介紹了單體架構和微服務架構的特點、優點與缺點,接著介紹了微服務的設計原則和拆分原則,最後介紹了微服務開發原則。作為一個新的軟體架構模型,微服務架構有其特定的設計原則和拆分原則。
第2章Spring Boot微服務開發;
本章主要介紹了微服務相關的概念、框架、開發與打包測試等內容。首先詳細介紹了Dubbo服務框架和 Spring Cloud微服務框架,並對兩個框架的概念、特點及技術棧進行了詳細的介紹及對比。然後給出了微服務開發與執行的技術棧全景圖,羅列了目前微服務相關的主流技術。
第3章搭建微服務執行環境;
本章主要介紹了微服務常用的3個環境搭建工作,包括開發環境、測試環境和生產環境。Spring Boot對應的配置檔案分為dev、test和 prod,三者的主要區別在於第三方服務IP地址、資料庫地址、中介軟體地址及日誌配置的不同。
第4章Rancher和Kubernetes離線部署;
本章主要介紹了微服務執行環境的安裝檔案如何下載,以及微服務執行環境Docker、Kubernetes和 Rancher的離線安裝。因為Docker和映象倉庫Harbor涉及CA證書,所以本章還介紹了CA證書的建立生成過程。
Docker離線安裝使用yum localinstall 命令安裝兩個rpm安裝包。Harbor作為流行的容器私有映象倉庫,其基於Docker Compose的安裝方式簡單、快捷,另外,安裝Harbor需要配置前面生成的CA證書。Harbor 安裝完成後,可以進行 Docker 的登入操作,以便於後續映象的推送和拉取操作。
Rancher和 Kubernetes的安裝部署過程如下:首先,安裝Rancher平臺,該平臺用於Kubernetes叢集的管理;其次,使用Rancher平臺建立和安裝 Kubernetes叢集,使新增Kubernetes叢集的Control、etcd 和 Worker節點變得輕鬆、簡單。經過本章的微服務執行環境的安裝部署,可以得到一個基於Kubernetes和 Rancher的容器化執行叢集。
第5章日誌採集;
本章介紹了微服務系統整體端到端的日誌採集,包括日誌輸出、日誌採集、日誌收集與處理、日誌儲存和日誌展示等環節。首先介紹了基於Filebeat和ELK的日誌採集模型,充分利用Elasticsearch 的全文檢索能力以及Kibana豐富的圖形化展示能力。其次介紹了微服務基於Spring Boot的日誌輸出配置,配置分為開發環境、測試環境和生產環境。最後按照日誌採集模型,分別介紹了日誌採集、日誌彙集與日誌展示。
日誌採集首先是容器的日誌目錄掛載,然後使用Filebeat進行日誌採集工作。日誌彙集就是日誌經過Filebeat採集後,輸出到Logstash元件集中進行日誌格式的轉換,然後彙集到Elasticsearch元件和磁碟日誌檔案中。日誌匯聚儲存在磁碟檔案中,供開發人員和維護人員使用Shell指令碼檢視日誌。日誌彙集儲存在Elasticsearch元件中,供Kibana進行圖形化查詢和展示,可以繪製組合出豐富的圖表和儀表板。
第6章呼叫鏈跟蹤;
本章首先介紹了呼叫鏈追蹤的概念,闡述了服務呼叫的Trace和 Span 的內涵。然後介紹了Spring Cloud呼叫鏈跟蹤模型中的Sleuth元件和Zipkin元件,同時介紹了SpringCloud呼叫鏈跟蹤模型。
最後介紹了Sleuth+Zipkin呼叫鏈追蹤技術,在開發環境、測試環境和生產環境中的配置,以及呼叫鏈資料儲存在Elasticsearch元件中,同時介紹瞭如何在Zipkin和Kibana中圖形化展示與檢索呼叫鏈資訊。
第7章熔斷器;
本章首先介紹了微服務中熔斷器的概念,然後介紹了Spring Cloud中熔斷器Hystrix的特點。最後介紹了熔斷器相關的Maven依賴配置、熔斷器的使用程式碼編寫和熔斷器的圖形化展示與監控。
第8章容器化與服務編排;
本章介紹了容器化、虛擬機器及服務編排等內容,重點介紹了生產環境中應用映象的構建過程。映象包括母映象、基礎映象和應用映象,同時介紹了應用映象的基礎構建方法。
服務編排方面主要介紹了基於Rancher 的Kubernetes容器服務編排平臺,結合生成實踐介紹如何使用Rancher進行微服務的建立、升級,以及目錄掛載如何操作、環境變數如何配置等。最後結合生產專案中使用Nginx做其他微服務的負載均衡的工作負載,介紹瞭如何建立Config Map,以及如何使用Config Map等。
第9章系統監控;
本章首先對系統監控進行了概述,包括主機監控、安全監控、中介軟體監控、業務監控、容器監控等。然後介紹了Kubernetes叢集常用的監控方案,通常選擇基於Node Exporter、Prometheus 和 Grafana的監控體系。
接下來依次對Node Exporter、Prometheus和 Grafana元件的部署檔案進行了說明,最後結合Grafana元件的圖形化儀表板介紹了Grafana 元件功能強大、型別豐富的圖形化展示能力。
第10章持續整合部署;
本章簡單介紹了持續整合和持續部署的概念,以及持續整合部署的模型,重點介紹了基於Kubernetes容器化平臺、Rancher容器編排平臺,以及Jenkins流水線的CICD的生產實踐。
大牛對本文的評價