### 1微服務概述
微服務:獨立運行于自己的進程;一系列獨立微服務構成系統;每個服務獨立開發;服務之間輕量級通信;使用不同的語言和數據存儲技術;全自動部署;
優點:易于開發維護;單個服務啟動快;技術棧不受限制;按需伸縮;
缺點:運維成本高;分布式固有復雜性;接口調整成本高;重復勞動;
### 2開始spring cloud
spring initializr快速構建項目;
YAML:Yet Another Markup Language或YAML Ain't a Markup Language
web項目pom:spring-boot-starter-web
監控端點pom:spring-boot-starter-actuator/執行機構/,需要配置management.security.enabled=false才可以全部顯示內容
### 3微服務注冊與發現Eureka/我發現了/
Eureka server pom: spring-cloud-starter-eureka-server,啟動類上面加@EnableEurekaServer
Eureka Server client pom: spring-cloud-starter-eureka,啟動類上面加@EnableDiscoveryClient或者@EnableEurekaClient
Eureka Server HA: server搭建成為集群,互相備份;client注冊到集群上;
Eureka Sever認證pom:spring-boot-starter-security,security.user.name/password設置用戶名密碼;客戶端在eureka.client.serviceUrl.defaultZone: http://user:pass@ip:port/eureka/設置;
可以使用curl或者PostMan進行Eureka服務的注冊或者刪除;
### 4客戶端負載均衡Ribbon/綬帶/
Ribbon pom:spring-cloud-starter-ribbon,spring-cloud-starter-eureka包含了這個ribbon,有了eureka就不用寫ribbon了;在RestTemplate上面添加@LoadBalanced;代碼中請求地址修改為http://microservice-provider-user/;
可以修改Ribbon的負載策略,自己寫java或者配置方式;
可以脫離Eureka使用Ribbon,只pom:spring-cloud-starter-ribbon, 在yml中配置microservice-provider-user.ribbon.listOfServers:ip:port1, ip:port2;
### 5聲明式Rest調用Feign/裝作/
聲明式、模版化的HTTP客戶端,Feign pom:spring-cloud-starter-feign, 創建一個接口,使用@FeignClient注解,啟動類增加@EnableFeignClients;
多參數GET請求,方法1:URL有幾個參數,Feign接口中就有幾個參數,用@RequestParam注解裝飾;方法2:使用Map作為參數;
多參數POST請求,@RequestBody User user;
### 6容錯Hystrix/猬/
基礎服務故障導致級聯故障的現象稱為雪崩效應。hystrix pom: spring-cloud-starter-hystrix, 啟動類增加@EnableCircuitBreaker或者@EnableHystrix, 在方法上面添加@HystrixCommand(fallbackMethod="methodFallback");執行回退不代表斷路器已經打開,短時多次訪問之后,使用actuator可以查看斷路器狀態為打開;
hystrix監控:在/hystrix.stream可以監控狀態;
hystrix dashboard pom: spring-cloud-starter-hystrix-dashboard,在啟動后的界面輸入需要監控的http://ip:port/hystrix.stream, 圖形化查看狀態;
turbine 聚合監控數據,turbine pom: spring-cloud-starter-turbine, 啟動類添加@EnableTurbine;
使用RabbitMQ進行消息收集,搭建RabbitMQ環境,rabbitmq-plugins enable rabbitmq management 可以圖形化界面管理;微服務端pom:spring-cloud-netflix-hystrix-stream, spring-cloud-starter-stream-rabbit; turbine 端pom: spring-cloud-starter-turbine-stream, spring-cloud-starter-stream-rabbit;
### 7網關Zuul/祖魯/
@EnableZuulProxy,spring-cloud-starter-zuul,已經包含了spring-boot-starter-actuator,在application.yml中進行management.security.enable=false,可以查看routes/配置;
### 11Docker
Docker是一個開源的容器引擎。將基礎設施當做程序一樣進行管理。
Docker Daemon, Docker Client, Docker Image, Docker Container, Registry.
Docker是在Ubuntu下面開發的,兼容性最好;