>**微服務與Spring Cloud**
### 1. 什么是微服務
在介紹微服務時,首先得先理解什么是微服務,顧名思義,微服務得從兩個方面去理解,什么是"微"、什么是"服務",微,狹義來講就是體積小, 而所謂服務,一定要區別于系統,服務一個或者一組相對較小且獨立的功能單元,是用戶可以感知最小功能集。
### 2. 微服務由來
微服務最早由Martin Fowler與James Lewis于2014年共同提出,微服務架構風格是一種使用一套小服務來開發單個應用的方式途徑,每個服務運行在自己的進程中,并使用輕量級機制通信,通常是HTTP API,這些服務基于業務能力構建,并能夠通過自動化部署機制來獨立部署,這些服務使用不同的編程語言實現,以及不同數據存儲技術,并保持最低限度的集中式管理。
### 3. 關于Netflix的貢獻
在微服務的架構中,Martin Flower 的文章中肯定了Netflix的貢獻,接下來我們了解一下Netflix
* [ ] Netflix OSS
Netflix(Nasdaq NFLX) 成立于1997年,是一家在線影片[租賃](https://baike.baidu.com/item/%E7%A7%9F%E8%B5%81/633715)提供商,主要提供Netflix超大數量的DVD并免費遞送,總部位于[美國加利福尼亞州](https://baike.baidu.com/item/%E7%BE%8E%E5%9B%BD%E5%8A%A0%E5%88%A9%E7%A6%8F%E5%B0%BC%E4%BA%9A%E5%B7%9E/12759534)洛斯蓋圖
Netflix OSS 指的是 "Netflix Open Source Software"
這里我們關注的是 OSS 中的`cloud platform`, 也就是 "Common Runtime Services & Libraries",包括為微服務提供支持的運行時容器,類庫和服務。
Netflix OSS 是一組開源的框架和組件庫,是Netflix公司開發出來解決分布式系統的一些有趣的可擴展類庫。對于Java開發者來說,它們是在云端環境中開發微服務的非常棒的工具代名詞。在服務發現,負載均衡,容錯等模式方面,都給出了非常重要的概念,并帶來了漂亮的解決方案。
### 4.Sring Cloud 與 Netflix
Spring Cloud 并不是一個具體的框架,而是一個統一的框架集,可以理解為一個工具箱,提供了各種工具,可以幫助我們快速構建分布式系統
Spring Cloud 項目的構建基于Spring Boot,不了解Spring Boot的可以先熟悉一下Spring Boot。Spring Cloud 團隊講Netflix的多個框架進行封裝并不斷迭代,通過自動配置的方式將這些框架綁定到Spring的環境中。從而簡化了框架的使用。使得我們在使用Spring Cloud時很容易將Netflix各個框架包含在項目中。下面介紹下封裝了Netflix的那些內容:
* Eureka:Spring Cloud微服務的注冊中心,主要用于服務管理(雖說)
目前Eureka官方已經不再維護,但也不影響我們使用,Spring Cloud 切換到Consul、Zookeeper也含簡單,進階部分會說到。
* Hystrix:自我保護框架,通過限流、熔斷控制分布式系統建的交流
* Feign:一個基于REST的客戶端,目的為了簡化Web Service客戶端的開發
* Ribbon:負載均衡框架,支持按照權重、隨機、輪詢等
* Zuul:Spring Cloud 微服務網關,為微服務提供代理、過濾、路由等功能
### 5.Spring Cloud 其它重要模塊
* Spring Cloud Stream
* Spring Cloud Bus
* Spring Cloud Config
* 等
后續入門和進階都是提到
SpringCloud官方:[https://spring.io/projects/spring-cloud](https://spring.io/projects/spring-cloud)
- 前言
- 導讀
- 架構演進
- 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-信用卡額度實例