>**架構演進**
## 1. 單體架構
以前的系統大多是各個業務系統集中在一個單體的代碼包中,包括現在也有部分傳統公司也使用單體式的架構。比如訂單、支付、商品、登錄等模塊全部寫在一個代碼包中。很多企業都是打包成war包部署到tomcat中。如下圖:

### 1.1單體的優缺點
- 優點:單體系統部署簡單,只要達成一個包丟到web服務器即可
- 缺點:代碼耦合性較高、任一業務出問題都會導致其他模塊不可用
## 2.SOA架構
服務導向式架構(SOA)是集成多個較大組件(一般是應用)的一種機制,它們將整體構成一個彼此協作的套件。一般來說,每個組件會從始至終執行一塊完整的業務邏輯,通常包括完成整體大action所需的各種具體任務與功能。組件一般都是松耦合的,SOA嘗試將應用集成,一般采用中央管理模式來確保各應用能夠交互運作。如下圖:

上圖實現的構架是對單體的演進,各個系統拆分開來,每個模塊對應自己的數據庫(mysql、oracle、MongoDB、redis等不限制)。服務之間的調度依賴總線
### 2.1 SOA的優缺點
- 優點:
1. 易維護
業務服務提供者和業務服務使用者的松散耦合關系及對開放標準的采用確保了該特性的實現。建立在以 SOA基礎上的信息系統,當需求發生變化的時候,不需要修改提供業務服務的,只需要調整業務服務流程或者修改操作即可,整個應用系統維護也簡單了。
2. 可用性高
服務提供者和服務使用者的松散耦合關系上得以發揮與體現。使用者無須了解提供者的具休實現細節
3. 伸縮性提高
服務提供者可以互相彼此獨立地進行調整,以滿足新的服務需求
- 缺點:
1. 過于依賴總線控制,存在單點問題
2. 涉及不同系統事務一致性問題(分布式相關后續會專門來說)
3. 系統之間交互需要使用遠程通信,接口開發增加工作量
## 3.微服務架構
微服務,關鍵其實不僅僅是微服務本身,而是系統要提供一套基礎的架構,這種架構使得微服務可以獨立的部署、運行、升級,不僅如此,這個系統架構還讓微服務與微服務之間在結構上“松耦合”,而在功能上則表現為一個統一的整體。
微服務提倡的理念團隊間應該是 inter-operate, not integrate 。inter-operate是定義好系統的邊界和接口,在一個團隊內全棧,讓團隊自治,原因就是因為如果團隊按照這樣的方式組建,將溝通的成本維持在系統內部,每個子系統就會更加內聚,彼此的依賴耦合能變弱,跨系統的溝通成本也就能降低。如下圖:

微服務之前的通信不像SOA架構模式中依賴dubbo、ebs等總線控制,系統之前可以點對點的互相負載均衡調用(平級關系),服務之前只需要了解對應的名稱,不需要知道ip,應用支持水平拓展,通過網關控制系統訪問和限流。具體如何實現的呢?請看后續的介紹。
## 4.云原生架構
所謂云原生,這里引用CNCF 給出的特增
NCF給出了云原生應用的三大特征:
* 容器化封裝:以容器為基礎,提高整體開發水平,形成代碼和組件重用,簡化云原生應用程序的維護。在容器中運行應用程序和進程,并作為應用程序部署的獨立單元,實現高水平資源隔離。
* 動態管理:通過集中式的編排調度系統來動態的管理和調度。
* 面向微服務:明確服務間的依賴,互相解耦。
由此可見,云原生是包含微服務的,具體展示的架構圖和微服務的類似,主要區別是研發主要關注業務實現,底層的監控、基礎設施等云服務廠商均已提供相應的服務,當然也可自己部署,云原生目前還是依賴Kubernetes編排,Kubernetes出身于互聯網行業的巨頭Google公司,Kubernetes站在平臺的角度考慮讓問題消失
- 前言
- 導讀
- 架構演進
- Spring Cloud介紹
- 準備工作
- 微服務入門
- SpringBoot
- SpringBoot入門
- 多profile
- 國際化
- 注冊中心Eureka
- Eureka介紹
- Eureka服務端搭建
- Eureka集群搭建
- Eureka服務端常用配置
- Eureka客戶端搭建
- Eureka 密碼訪問
- Eureka服務健康檢查
- Eureka客戶端常用配置
- Eureka 小結
- 負載均衡Ribbon
- Ribbon介紹
- Ribbon服務提供者
- Ribbon客戶端
- Ribbon自定義操作
- Ribbon 修改請求策略
- Ribbon 自定義請求策略
- Ribbon 不再Eureka環境下運行
- Ribbon小結
- 客戶端Feign
- Feign介紹
- Feign 入門
- Feign 自定義操作
- Feign 自定義日志
- Feign Basic認證
- Feign 超時配置
- Feign 配置重試
- Feign 配置壓縮
- Feign 客戶端組件替換
- Feign 文件上傳
- Feign 原生配置
- Feign小結
- 自我保護Hystrix
- HyStrix 介紹
- Hystrix 入門
- Hystrix 簡單使用
- Hystrix 回退
- Hystrix 信號量隔離
- Hystrix 線程隔離
- Hystrix 結果緩存
- Hystrix 清除緩存
- Hystrix 斷路器開啟
- Hystrix 斷路器關閉
- Hystrix 合并請求
- Hystrix 小結
- Hystrix Spring Cloud
- Hystrix Ribbon
- Hystrix 緩存注解
- Hystrix 合并請求注解
- Hystrix Feign
- Hystrix Dashboard
- Hystrix Turbine
- Hystrix 小結
- 網關Zuul
- Zuul 介紹
- Zuul 簡單應用
- Zuul 路由配置
- Zuul 簡單路由
- Zuul 路由前綴
- Zuul 指定路由
- Zuul 路由跳轉
- Zuul 過濾器
- Zuul 過濾器攔截順序
- Zuul 數據傳遞
- Zuul 禁用過濾器
- Zuul 異常處理
- Zuul 重試機制
- Zuul FallBack
- Zuul 小結
- 配置中心
- config 介紹
- config 服務端
- config GitHub模式
- config 本地模式
- config 客戶端
- config 屬性覆蓋
- config 加密
- config AES 加密
- config RSA 加密
- config 小結
- 微服務進階
- 消息總線Bus
- 總線介紹
- RabbitMQ介紹
- RabbitMQ安裝
- RabbitMQ使用
- Cloud Config改造(RabbitMQ)
- Kafka 介紹
- Kafka 安裝
- Kafka 使用
- Cloud Config改造(Kafka)
- 總線總結
- 網關拓展
- Zuul 拓展
- Zuul 限流
- 網關Gateway
- Gateway 介紹
- Gateway 簡單使用
- 謂詞
- 謂詞 After
- 謂詞 Before
- 謂詞 Between
- 謂詞 Cookie
- 謂詞 Header
- 謂詞 Host
- 謂詞 Method
- 謂詞 Path
- 謂詞 Query
- 謂詞 Weight
- 過濾器
- 過濾器 MapRequestHeader
- 過濾器 StripPrefix
- 過濾器 Prefix
- 過濾器 PreserveHostHeader
- 過濾器 RedirectTo
- 過濾器 RemoveRequestHeader
- 過濾器 RemoveResponseHeader
- 過濾器 RemoveRequestParameter
- 過濾器 RewritePath
- 過濾器 RewriteLocationResponseHeader
- 過濾器 SetPath
- 過濾器 SetRequestHeader
- 過濾器 SetStatus
- 過濾器 RequestSize
- 過濾器 Default
- 過濾器 Java Bean
- Gateway 路由配置
- Gateway 禁用過濾器
- Gateway 路由前綴
- Gateway 路由跳轉
- Gateway 限流
- Gateway 重試
- Gateway FallBack
- Gateway 異常處理
- Gateway 總結
- 注冊中心拓展
- 注冊中心 Zookeeper
- Zookeeper 介紹
- Zookeeper 安裝(Windows)
- Zookeeper 替換Eureka
- 注冊中心 Consul
- Consul 介紹
- Consul 安裝(Windows)
- Consul 替換Eureka
- 注冊中心 Nacos
- Nacos 介紹
- Nacos 安裝(Windows)
- Nacos 集群部署
- Nacos 替換Eureka
- 注冊中心總結
- 配置中心拓展
- 配置中心Apollo
- Apollo 介紹
- Apollo Namespace
- Apollo 部署
- Apollo 分布式部署
- Apollo 客戶端使用
- Apollo 準備工作
- Apollo Java客戶端
- 配置中心Nacos
- Nacos 客戶端使用
- 配置中心總結
- 微服務高級
- 應用監控
- SpringBootAdmin
- SpringBootAdmin-Eureka
- ELK
- Elasticsearch 介紹
- Kibana 介紹
- Logstash 介紹
- ELK 接收日志
- ELK 總結
- Prometheus 監控
- Prometheus 簡介
- Prometheus 可視化
- Prometheus 使用
- 服務跟蹤
- Zipkin
- Zipkin 介紹
- Zipkin 使用
- Skywalking
- Skywalking 介紹
- Skywalking 使用(Windows)
- 緩存
- 緩存介紹
- Guava緩存
- Redis
- Redis 介紹
- Redis 緩存
- 緩存總結
- 分布式鎖
- 分布式鎖介紹
- 數據庫方式
- Redis方式
- Zookeeper方式
- 分庫分表
- Sharding-JDBC
- Sharding-JDBC 介紹
- Sharding-JDBC 讀寫分離
- Sharding-JDBC 分庫分表
- Sharding-JDBC 分庫分表Config
- Sharding-JDBC 分庫分表讀寫分離
- Sharding-JDBC 同庫分表
- Sharding-JDBC 同庫分表讀寫分離
- Sharding-JDBC 數據脫敏
- Sharding-JDBC 多租戶實戰
- Sharding-JDBC 總結
- 分布式事務
- 傳統事務介紹
- 分布式事務介紹
- 分布式事務常用方案
- 分布式事務實戰篇
- 公共底層封裝
- 基于TX-LCN
- TX-LCN介紹
- LCN模式
- LCN-TCC模式
- LCN-TXC模式
- 基于SEATA
- SEATA介紹
- SEATA Server部署
- SEATA-AT模式
- SEATA-TCC模式
- 基于RocketMQ
- RocketMQ 介紹
- RocketMQ 環境安裝
- RocketMQ 分布式事務實踐
- 容器化
- docker
- docker介紹
- docker安裝
- docker 基本操作
- docker compose安裝
- docker打包Springboot
- 錯誤記錄
- docker 使用
- docker部署mysql
- docker部署Redis
- docker部署Nacos
- docker部署consul
- docker部署jenkins
- docker部署鏡像倉庫Harbor
- docker部署Portainer搭建可視化界面
- docker-compose 使用
- docker-compose搭建Prometheus+Grafana監控系統
- docker-compose搭建ELK
- docker-compose搭建Skywalking
- docker-compose搭建Apollo
- docker-compose搭建Nacos
- Kubernetes
- Kubernetes 介紹
- Kubernetes 環境搭建
- Mac 安裝 Kubernetes
- Windows 安裝Kubernetes
- Linux
- 基本操作
- Centos7 安裝iptables防火墻
- Centos7 安裝redis
- Centos7 安裝Zookeeper
- Centos7 安裝Kafka
- Centos7 安裝RocketMQ
- 拓展功能
- 規則引擎Drools
- Drools介紹
- Docker 部署Workbench
- Drools-信用卡額度實例