微服務SpringCloud+Docker入門到高階實戰(教程詳情)
第一章 課程介紹和學習路線
1、微服務架構SpringCloud課程介紹 簡介:課程介紹和課程大綱講解,講課風格和重點內容理解技巧
2、技術選型和學後水平 簡介:課程所需基礎和技術選型講解,學完課程可以到達怎樣的程度, 1、IDEA JDK8 Maven SpringBoot基礎 Linux
2、理解掌握並開發SpringCloud裡面主流架構和元件的基礎使用,還有部分原始碼原理的理解
3、掌握學習的技巧和解決問題的思路
第二章 架構演進和分散式系統基礎知識
1、傳統架構演進到分散式架構 簡介:講解單機應用和分散式應用架構演進基礎知識 (畫圖)
高可用 LVS+keepalive
1、單體應用: 開發速度慢 啟動時間長 依賴龐大 等等
2、微服務 易開發、理解和維護 獨立的部署和啟動 等
不足: 分散式系統-》分散式事務問題 需要管理多個服務-》服務治理
2、微服務核心基礎講解 簡介:講解微服務核心知識 :閘道器、服務發現註冊、配置中心、鏈路追蹤、負載均衡器、熔斷 1、閘道器:路由轉發 + 過濾器 /api/v1/pruduct/ 商品服務 /api/v1/order/ 訂單服務 /api/v1/user/ 使用者服務
2、服務註冊發現:呼叫和被呼叫方的資訊維護
3、配置中心:管理配置,動態更新 application.properties 4、鏈路追蹤:分析呼叫鏈路耗時 例子:下單-》查詢商品服務獲取商品價格-》查詢使用者資訊-》儲存資料庫 5、負載均衡器:分發負載 6、熔斷:保護自己和被呼叫方
3、常見的微服務框架 簡介:講解常用的微服務框架
consumer: 呼叫方 provider: 被呼叫方 一個介面一般都會充當兩個角色(不是同時充當) 1、dubbo: zookeeper + dubbo + springmvc/springboot 官方地址:http://dubbo.apache.org/#!/?lang=zh-cn 配套 通訊方式:rpc 註冊中心:zookeper/redis 配置中心:diamond
2、springcloud: 全家桶+輕鬆嵌入第三方元件(Netflix 奈飛) 官網:http://projects.spring.io/spring-cloud/ 配套 通訊方式:http restful 註冊中心:eruka/consul 配置中心:config 斷路器:hystrix 閘道器:zuul 分散式追蹤系統:sleuth+zipkin
學習資料:https://blog.csdn.net/zhangweiwei2020/article/details/78646252
4、微服務下電商專案基礎模組設計 簡介:微服務下電商專案基礎模組設計 分離幾個模組,課程圍繞這個基礎專案進行學習 小而精的方式學習微服務
1、使用者服務 1)使用者資訊介面 2)登入介面
2、商品服務 1)商品列表 2)商品詳情
3、訂單服務 1)我的訂單 2)下單介面
第三章 SpringCloud核心元件註冊中心
1、什麼是微服務的註冊中心 簡介:講解什麼是註冊中心,常用的註冊中心有哪些 (畫圖) 理解註冊中心:服務管理,核心是有個服務登錄檔,心跳機制動態維護
服務提供者provider: 啟動的時候向註冊中心上報自己的網路資訊 服務消費者consumer: 啟動的時候向註冊中心上報自己的網路資訊,拉取provider的相關網路資訊
為什麼要用: 微服務應用和機器越來越多,呼叫方需要知道介面的網路地址,如果靠配置檔案的方式去控制網路地址,對於動態新增機器,維護帶來很大問題
主流的註冊中心: zookeeper、Eureka、consul、etcd 等
2、分散式應用知識CAP理論知識 簡介:講解分散式核心知識CAP理論
CAP定理: 指的是在一個分散式系統中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分割槽容錯性),三者不可同時獲得。
一致性(C):在分散式系統中的所有資料備份,在同一時刻是否同樣的值。(所有節點在同一時間的資料完全一致,越多節點,資料同步越耗時)
可用性(A):負載過大後,叢集整體是否還能響應客戶端的讀寫請求。(服務一直可用,而且是正常響應時間)
分割槽容錯性(P):分割槽容忍性,就是高可用性,一個節點崩了,並不影響其它的節點(100個節點,掛了幾個,不影響服務,越多機器越好)
CAP理論就是說在分散式儲存系統中,最多隻能實現上面的兩點。而由於當前的網路硬體肯定會出現延遲丟包等問題,所以分割槽容忍性是我們必須需要實現的。所以我們只能在一致性和可用性之間進行權衡
3、分散式系統CAP原理常見面試題和註冊中心選擇 簡介:講解CAP原則在面試中回答和註冊中心選擇
C A 滿足的情況下,P不能滿足的原因: 資料同步(C)需要時間,也要正常的時間內響應(A),那麼機器數量就要少,所以P就不滿足 CP 滿足的情況下,A不能滿足的原因: 資料同步(C)需要時間, 機器數量也多(P),但是同步資料需要時間,所以不能再正常時間內響應,所以A就不滿足
AP 滿足的情況下,C不能滿足的原因: 機器數量也多(P),正常的時間內響應(A),那麼資料就不能及時同步到其他節點,所以C不滿足
註冊中心選擇: Zookeeper:CP設計,保證了一致性,叢集搭建的時候,某個節點失效,則會進行選舉行的leader,或者半數以上節點不可用,則無法提供服務,因此可用性沒法滿足
Eureka:AP原則,無主從節點,一個節點掛了,自動切換其他節點可以使用,去中心化
結論:分散式系統中P,肯定要滿足,所以只能在CA中二選一 沒有最好的選擇,最好的選擇是根據業務場景來進行架構設計
如果要求一致性,則選擇zookeeper,如金融行業 如果要去可用性,則Eureka,如電商系統
4、SpringCloud微服務核心元件Eureka介紹和閉源後影響 簡介: SpringCloud體系介紹 官方地址:http://projects.spring.io/spring-cloud/
Eureka的基礎知識-->畫圖講解互動流程,服務提供者<-->服務消費者 ;
Eureka 2.x閉源後選擇 參考:https://www.jianshu.com/p/d32ae141f680 https://blog.csdn.net/zjcjava/article/details/78608892
5、服務註冊和發現Eureka Server搭建實戰 簡介:使用IDEA搭建Eureka服務中心Server端並啟動,專案基本骨架介紹 官方文件:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server
第一步:建立專案 第二步: 添加註解 @EnableEurekaServer 第三步:增加配置application.yml server: port: 8761
eureka: instance: hostname: localhost client: #宣告自己是個服務端 registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
第四步:訪問註冊中心頁面
maven地址: https://www.cnblogs.com/sword-successful/p/6408281.html
6、服務註冊和發現之Eureka Client搭建商品服務實戰 簡介:搭建用商品服務,並將服務註冊到註冊中心
1、建立一個SpirngBoot應用,增加服務註冊和發現依賴 2、模擬商品資訊,儲存在記憶體中
3、開發商品列表介面,商品詳情介面 4、配置檔案加入註冊中心地址 使用eureka客戶端 官方文件:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#netflix-eureka-client-starter
7、Eureka服務註冊中心配置控制檯問題處理 簡介:講解服務註冊中心管理後臺,(後續還會細講)
問題:eureka管理後臺出現一串紅色字型:是警告,說明有服務上線率低
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
關閉檢查方法:eureka服務端配置檔案加入 server: enable-self-preservation: false 注意:自我保護模式禁止關閉,預設是開啟狀態true
問題二:為什麼只加一個註冊中心地址,就可以註冊 By having spring-cloud-starter-netflix-eureka-client on the classpath, your application automatically registers with the Eureka Server. Configuration is required to locate the Eureka server, as shown in the following example:
第四章 服務消費者ribbon和feign實戰和註冊中心高可用
1、常用的服務間呼叫方式講解 簡介:講解常用的服務間的呼叫方式
RPC: 遠端過程呼叫,像呼叫本地服務(方法)一樣呼叫伺服器的服務 支援同步、非同步呼叫 客戶端和伺服器之間建立TCP連線,可以一次建立一個,也可以多個呼叫複用一次連結
PRC資料包小 protobuf thrift rpc:編解碼,序列化,連結,丟包,協議
Rest(Http): http請求,支援多種協議和功能 開發方便成本低
http資料包大
java開發:HttpClient,URLConnection
2、微服務呼叫方式之ribbon實戰 訂單呼叫商品服務 簡介:實戰電商專案 訂單服務 呼叫商品服務獲取商品資訊 1、建立order_service專案 2、開發偽下單介面 3、使用ribbon. (類似httpClient,URLConnection)
啟動類增加註解 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } 4、根據名稱進行呼叫商品,獲取商品詳情
3、高階篇幅之Ribbon負載均衡原始碼分析實戰 簡介: 講解ribbon服務間呼叫負載均衡原始碼分析 1、完善下單介面 2、分析@LoadBalanced 1)首先從註冊中心獲取provider的列表 2)通過一定的策略選擇其中一個節點 3)再返回給restTemplate呼叫
4、高階篇幅之服務間呼叫之負載均衡策略調整實戰 簡介:實戰調整預設負載均衡策略實戰
自定義負載均衡策略:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#_customizing_the_ribbon_client_by_setting_properties
在配置檔案yml裡面,自定義負載均衡策略 #自定義負載均衡策略 product-service: ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
策略選擇: 1、如果每個機器配置一樣,則建議不修改策略 (推薦) 2、如果部分機器配置強,則可以改為 WeightedResponseTimeRule
5、微服務呼叫方式之feign 實戰 訂單呼叫商品服務 簡介:改造電商專案 訂單服務 呼叫商品服務獲取商品資訊 Feign: 偽RPC客戶端(本質還是用http) 官方文件: https://cloud.spring.io/spring-cloud-openfeign/
1、使用feign步驟講解(新舊版本依賴名稱不一樣) 加入依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 啟動類增加@EnableFeignClients 增加一個介面 並@FeignClient(name="product-service")
2、編碼實戰
3、注意點: 1、路徑 2、Http方法必須對應 3、使用requestBody,應該使用@PostMapping 4、多個引數的時候,通過@RequestParam("id") int id)方式呼叫
6、Feign核心原始碼解讀和服務呼叫方式ribbon和Feign選擇 簡介: 講解Feign核心原始碼解讀和 服務間的呼叫方式ribbon、feign選擇 1、ribbon和feign兩個的區別和選擇 選擇feign 預設集成了ribbon 寫起來更加思路清晰和方便 採用註解方式進行配置,配置熔斷等方式方便
2、超時配置 預設optons readtimeout是60,但是由於hystrix預設是1秒超時
#修改呼叫超時時間 feign: client: config: default: connectTimeout: 2000 readTimeout: 2000
模擬介面響應慢,執行緒睡眠新的方式 try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
第五章 網際網路架構服務降級熔斷 Hystrix 實戰
1、分散式核心知識之熔斷、降級講解 簡介:系統負載過高,突發流量或者網路等各種異常情況介紹,常用的解決方案
1、熔斷: 保險絲,熔斷服務,為了防止整個系統故障,包含子和下游服務
下單服務 -》商品服務 -》使用者服務 (出現異常-》熔斷)
2、降級: 拋棄一些非核心的介面和資料
旅行箱的例子:只帶核心的物品,拋棄非核心的,等有條件的時候再去攜帶這些物品
3、熔斷和降級互相交集 相同點: 1)從可用性和可靠性觸發,為了防止系統崩潰 2)最終讓使用者體驗到的是某些功能暫時不能用
不同點 1)服務熔斷一般是下游服務故障導致的,而服務降級一般是從整體系統負荷考慮,由呼叫方控制
2、Netflix開源元件斷路器Hystrix介紹 簡介:介紹Hystrix基礎知識和使用場景 文件地址: https://github.com/Netflix/Hystrix https://github.com/Netflix/Hystrix/wiki
1、什麼是Hystrix? 1)hystrix對應的中文名字是“豪豬” 2)hystrix 英[hɪst'rɪks] 美[hɪst'rɪks]
2、為什麼要用? 在一個分散式系統裡,一個服務依賴多個服務,可能存在某個服務呼叫失敗, 比如超時、異常等,如何能夠保證在一個依賴出問題的情況下,不會導致整體服務失敗, 通過Hystrix就可以解決
http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#_circuit_breaker_hystrix_clients
3、提供了熔斷、隔離、Fallback、cache、監控等功能
4、熔斷後怎麼處理? 出現錯誤之後可以 fallback 錯誤的處理資訊
兜底資料
3、Feign結合Hystrix斷路器開發實戰《上》 簡介:講解SpringCloud整合斷路器的使用,使用者服務異常情況
1、加入依賴 注意:網上新舊版本問題,所以要以官網為主,不然部分註解會丟失 最新版本 2.0
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
2、增加註解 啟動類裡面增加註解 @EnableCircuitBreaker
註解越來越多-》 SpringCloudApplication註解
3、API介面編碼實戰 熔斷-》降級
1)最外層api使用,好比異常處理(網路異常,引數或者內部呼叫問題) api方法上增加 @HystrixCommand(fallbackMethod = "saveOrderFail") 編寫fallback方法實現,方法簽名一定要和api方法簽名一致(注意點!!!)
補充: 修改maven倉庫地址 pom.xml中修改
<repositories> <repository> <id>nexus-aliyun</id> <name>Nexus aliyun</name> <layout>default</layout> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <snapshots> <enabled>false</enabled> </snapshots> <releases> <enabled>true</enabled> </releases> </repository> </repositories>
4、Feign結合Hystrix斷路器開發實戰《下》 簡介:講解SpringCloud整合斷路器的使用,使用者服務異常情況 1、feign結合Hystrix 1)開啟feign支援hystrix (注意,一定要開啟,舊版本預設支援,新版本預設關閉) feign: hystrix: enabled: true
2)FeignClient(name="xxx", fallback=xxx.class ), class需要繼承當前FeignClient的類
5、熔斷降級服務異常報警通知實戰 簡介:完善服務熔斷處理,報警機制完善
1、加入redis依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、配置redis連結資訊 redis: database: 0 host: 127.0.0.1 port: 6379 timeout: 2000
3、使用
//監控報警 String saveOrderKye = "save-order"; String sendValue = redisTemplate.opsForValue().get(saveOrderKye); final String ip = request.getRemoteAddr(); new Thread( ()->{ if (StringUtils.isBlank(sendValue)) { System.out.println("緊急簡訊,使用者下單失敗,請離開查詢原因,ip地址是="+ip); //傳送一個http請求,呼叫簡訊服務 TODO redisTemplate.opsForValue().set(saveOrderKye, "save-order-fail", 20, TimeUnit.SECONDS); }else{ System.out.println("已經發送過簡訊,20秒內不重複傳送"); } }).start();
6、高階篇幅之深入原始碼剖析Hystrix降級策略和調整 簡介:原始碼分析Hystrix降級策略和調整
1、檢視預設講解策略 HystrixCommandProperties 1)execution.isolation.strategy 隔離策略 THREAD 執行緒池隔離 (預設) SEMAPHORE 訊號量 訊號量適用於介面併發量高的情況,如每秒數千次呼叫的情況,導致的執行緒開銷過高,通常只適用於非網路呼叫,執行速度快
2)execution.isolation.thread.timeoutInMilliseconds 超時時間 預設 1000毫秒
3)execution.timeout.enabled 是否開啟超時限制 (一定不要禁用)
4)execution.isolation.semaphore.maxConcurrentRequests 隔離策略為 訊號量的時候,如果達到最大併發數時,後續請求會被拒絕,預設是10
官方文件: https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.strategy
2、調整策略 超時時間調整
hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 4000
7、斷路器Dashboard監控儀表盤實戰 簡介:講解斷路器Dashboard基礎使用和檢視 1、加入依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、啟動類增加註解 @EnableHystrixDashboard
3、配置檔案增加endpoint management: endpoints: web: exposure: include: "*"
4、訪問入口 http://localhost:8781/hystrix
Hystrix Dashboard輸入: http://localhost:8781/actuator/hystrix.stream
參考資料 預設開啟監控配置 https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-security-actuator
配置檔案類: spring-configuration-metadata.json
8、斷路器監控儀表引數講解和模擬熔斷 簡介:講解 斷路器監控儀表盤引數和模擬熔斷
1、sse server-send-event推送到前端
資料:https://github.com/Netflix/Hystrix/wiki/Dashboard
第六章 微服務閘道器zuul開發實戰
1、微服務閘道器介紹和使用場景 簡介:講解閘道器的作用和使用場景 (畫圖) 1)什麼是閘道器 API Gateway,是系統的唯一對外的入口,介於客戶端和伺服器端之間的中間層,處理非業務功能 提供路由請求、鑑權、監控、快取、限流等功能
統一接入 智慧路由 AB測試、灰度測試 負載均衡、容災處理 日誌埋點(類似Nignx日誌)
流量監控 限流處理 服務降級
安全防護 鑑權處理 監控 機器網路隔離
2)主流的閘道器 zuul:是Netflix開源的微服務閘道器,和Eureka,Ribbon,Hystrix等元件配合使用,Zuul 2.0比1.0的效能提高很多 kong: 由Mashape公司開源的,基於Nginx的API gateway nginx+lua:是一個高效能的HTTP和反向代理伺服器,lua是指令碼語言,讓Nginx執行Lua指令碼,並且高併發、非阻塞的處理各種請求
2、SpringCloud的閘道器元件zuul基本使用 簡介:講解zuul閘道器基本使用
1、加入依賴
2、啟動類加入註解 @EnableZuulProxy 預設整合斷路器 @EnableCircuitBreaker
預設訪問規則 http://gateway:port/service-id/**
例子:預設 /order-service/api/v1/order/save?user_id=2&product_id=1 自定義 /xdclass_order/api/v1/order/save?user_id=2&product_id=1
自定義路由轉發: zuul: routes: order-service: /apigateway/**
環境隔離配置: 需求 :不想讓預設的服務對外暴露介面 /order-service/api/v1/order/save
配置: zuul: ignored-patterns: - /*-service/api/v1/order/save
3、高階篇幅之Zuul常用問題分析和閘道器過濾器原理分析
簡介:講解Zuul閘道器原理和過濾器生命週期, 1、路由名稱定義問題 路由對映重複覆蓋問題 2、Http請求頭過濾問題
3、過濾器執行順序問題 ,過濾器的order值越小,越先執行
4、共享RequestContext,上下文物件
4、自定義Zuul過濾器實現登入鑑權實戰 簡介:自定義Zuul過濾器實現登入鑑權實戰
1、新建一個filter包
2、新建一個類,實現ZuulFilter,重寫裡面的方法
3、在類頂部加註解,@Component,讓Spring掃描
5、高階篇幅之高併發情況下介面限流特技 簡介:谷歌guava框架介紹,閘道器限流使用
1、nginx層限流
2、閘道器層限流
6、Zuul微服務閘道器叢集搭建 簡介:微服務閘道器Zull叢集搭建
1、nginx+lvs+keepalive https://www.cnblogs.com/liuyisai/p/5990645.html
第七章 分散式鏈路追蹤系統Sleuth和ZipKin實戰
1、微服務下的鏈路追蹤講解和重要性 簡介:講解什麼是分散式鏈路追蹤系統,及使用好處
2、SpringCloud的鏈路追蹤元件Sleuth實戰 簡介:講解分散式鏈路追蹤元件Sleuth實戰
1、官方文件 http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#sleuth-adding-project
2、什麼是Sleuth 一個元件,專門用於記錄鏈路資料的開源元件
[order-service,96f95a0dd81fe3ab,852ef4cfcdecabf3,false]
1、第一個值,spring.application.name的值 2、第二個值,96f95a0dd81fe3ab ,sleuth生成的一個ID,叫Trace ID,用來標識一條請求鏈路,一條請求鏈路中包含一個Trace ID,多個Span ID 3、第三個值,852ef4cfcdecabf3、spanid 基本的工作單元,獲取元資料,如傳送一個http
4、第四個值:false,是否要將該資訊輸出到zipkin服務中來收集和展示。
3、新增依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
3、SpringCloud的鏈路追蹤元件Sleuth常見問題說明 簡介:講解分散式鏈路追蹤元件Sleuth常見問題說明
4、視覺化鏈路追蹤系統Zipkin部署 簡介:講解Zipkin的介紹和部署 1、什麼是zipkin 官網:https://zipkin.io/ 大規模分散式系統的APM工具(Application Performance Management),基於Google Dapper的基礎實現,和sleuth結合可以提供視覺化web介面分析呼叫鏈路耗時情況 2、同類產品 鷹眼(EagleEye) CAT twitter開源zipkin,結合sleuth Pinpoint,運用JavaAgent位元組碼增強技術 StackDriver Trace (Google)
3、開始使用 https://github.com/openzipkin/zipkin https://zipkin.io/pages/quickstart.html
zipkin組成:Collector、Storage、Restful API、Web UI組成
4、知識拓展:OpenTracing OpenTracing 已進入 CNCF,正在為全球的分散式追蹤,提供統一的概念和資料標準。 通過提供平臺無關、廠商無關的 API,使得開發人員能夠方便的新增(或更換)追蹤系統的實現。
推薦閱讀: http://blog.daocloud.io/cncf-3/ https://www.zhihu.com/question/27994350 https://yq.aliyun.com/articles/514488?utm_content=m_43347
5、高階篇幅之鏈路追蹤元件Zipkin+Sleuth實戰 簡介:使用Zipkin+Sleuth業務分析呼叫鏈路分析實戰 1、文件 http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#_sleuth_with_zipkin_via_http sleuth收集跟蹤資訊通過http請求傳送給zipkin server,zipkinserver進行跟蹤資訊的儲存以及提供Rest API即可,Zipkin UI呼叫其API介面進行資料展示
預設儲存是記憶體,可也用mysql、或者elasticsearch等儲存
2、加入依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
裡面包含 spring-cloud-starter-sleuth、spring-cloud-sleuth-zipkin
3、文件說明:http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#_features_2
4、配置zipkin.base-url
5、配置取樣百分閉spring.sleuth.sampler
推薦資料: https://blog.csdn.net/jrn1012/article/details/77837710
第八章 微服務核心知識分散式配置中心Config實戰 1、微服務下的分散式配置中心 簡介:講解什麼是配置中心及使用前後的好處 (畫圖) 什麼是配置中心: 一句話:統一管理配置, 快速切換各個環境的配置 相關產品: 百度的disconf 地址:https://github.com/knightliao/disconf 阿里的diamand 地址:https://github.com/takeseem/diamond
springcloud的configs-server: 地址:http://cloud.spring.io/spring-cloud-config/
推薦乾貨文章:http://jm.taobao.org/2016/09/28/an-article-about-config-center/
2、SpringCloud的配置中心元件config-server實戰 簡介:講解SpringCloud配置中心config-server實戰 1、新建專案,建立config-server 2、啟動類增加註解 @EnableConfigServer
3、使用git伺服器結合Config搭建分散式配置中心 簡介:講解使用git伺服器結合Config搭建分散式配置中心
1、預設使用git儲存配置中心 使用git伺服器,可以自己搭建gitlab伺服器 或者使用github、開源中國git、阿里雲git
[email protected] xdclass.net123
https://gitee.com/waitforxy/config_cloud.git
2、配置檔案新增配置 spring: application: name: config-server #git配置 cloud: config: server: git: uri: https://gitee.com/waitforxy/config_cloud username: [email protected] password: xdclass.net123 #超時時間 timeout: 5 #分支 default-label: master
3、訪問方式(一定要注意語法,如果有問題,會出錯) 多種訪問路徑,可以通過啟動日誌去檢視 例子 http://localhost:9100/product-service.yml
/{name}-{profiles}.properties /{name}-{profiles}.yml /{name}-{profiles}.json /{label}/{name}-{profiles}.yml
name 伺服器名稱 profile 環境名稱,開發、測試、生產 lable 倉庫分支、預設master分支
4、分散式配置中心客戶端使用實戰 簡介:微服務裡面客戶端接入配置中心實戰 官方文件:http://cloud.spring.io/spring-cloud-config/single/spring-cloud-config.html#_spring_cloud_config_client 1、加入依賴 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency>
2、修改對應服務的配置檔案,把application.yml 改為 bootstrap.yml #指定註冊中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
#服務的名稱 spring: application: name: product-service #指定從哪個配置中心讀取 cloud: config: discovery: service-id: CONFIG-SERVER enabled: true profile: test #建議用lable去區分環境,預設是lable是master分支 #label: test
注意點: 1.配置檔案要用bootstrap.yml 2.預設讀取檔名是 服務名稱
第九章 微服務訊息匯流排Bus結合訊息佇列RabbitMQ實戰
1、訊息匯流排Bus介紹和使用場景 簡介:講解訊息匯流排Bus介紹和使用場景 1、什麼是訊息 一個事件,需要廣播或者單獨傳遞給某個介面
2、為什麼使用這個 配置更新了,但是其他系統不知道是否更新
2、訊息佇列和RabbitMQ基礎介紹 簡介:訊息佇列和RabbitMQ基礎介紹 1、訊息佇列介紹 參考:https://www.cnblogs.com/linjiqin/p/5720865.html
2、同類產品 ActiveMQ RocketMQ Kafka 等
3、SpringCloud預設推薦使用RabbitMQ
4、RabbitMQ介紹 官方文件:http://www.rabbitmq.com/getstarted.html 中文文件:http://rabbitmq.mr-ping.com/
3、實戰系列使用Docker搭建RabbitMQ3.7 簡介:使用Docker安裝RabbitMQ
1、如果對Docker沒基礎,課程後續有講解Docker,可以先跳轉過去學習Docker 2、安裝步驟 1)拉取映象:docker pull rabbitmq:management 2)檢視當前映象列表:docker images 3)刪除指定映象:docker rmi IMAGE_ID (如果需要強制刪除加 -f) 4)建立容器 docker run -d --name="myrabbitmq" -p 5671:5671 -p 15672:15672 rabbitmq:management
引數講解: run: 建立一個新的容器並執行一個命令 -d: 後臺執行容器,並返回容器ID -p: 埠對映,格式為:主機(宿主)埠:容器埠 --name="rabbitmq": 為容器指定一個名稱
3、RabbitMQ預設建立了一個 guest 使用者,密碼也是 guest, 如果訪問不了記得檢視防火牆,埠或者雲伺服器的安全組 管理後臺:http://127.0.0.1:15672
其他安裝方式: Linux安裝:https://blog.csdn.net/qq_34021712/article/details/72567786 windows安裝:http://www.rabbitmq.com/install-windows.html
https://blog.csdn.net/liyuejin/article/details/78410586
4、高階篇幅訊息匯流排整合配置中心架構流程圖 簡介:講解訊息匯流排Bus結合config元件搭建配置中心專案架構圖和操作流程 啟動 rabbitmq: docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management rabbitmq預設是5672,所以改為5672埠 1、config-client加入依賴 <!--配置中心結合訊息佇列--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
官方文件:http://cloud.spring.io/spring-cloud-bus/single/spring-cloud-bus.html#_bus_refresh_endpoint 文件裡面 暴露端點 management.endpoints.web.exposure.include=bus-refresh
2、在配置檔案中增加關於RabbitMQ的連線(如果是本機,則可以直接啟動,採用預設連線配置) spring: rabbitmq: host: localhost port: 5672 username: guest password: guest #暴露全部的監控資訊 management: endpoints: web: exposure: include: "*"
3、需要重新整理配置的地方,增加註解 @RefreshScope
4、訪問驗證 post方式: http://localhost:8773/actuator/bus-refresh
5、動態重新整理配置: 在開發和測試環境使用,儘量少在生產環境使用
5、微服務相關專案改造配置中心 簡介:把課程專案改造成配置中心講解
1、git裡面新增對應專案的配置檔案,都要新增下面的配置 #服務的名稱 spring: rabbitmq: host: localhost port: 5672 username: guest password: guest
#暴露全部的監控資訊 management: endpoints: web: exposure: include: "*"
2、專案裡面新增maven依賴
<!--配置中心客戶端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency>
<!--config server-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
3、修改application.properties為bootstrap.yml 並拷貝配置檔案 #指定註冊中心地址 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
#服務的名稱 spring: application: name: order-service #指定從哪個配置中心讀取 cloud: config: discovery: service-id: CONFIG-SERVER enabled: true profile: test
4、各個專案啟動順序 1)註冊中心 2)配置中心 3)對應的服務:商品服務、訂單服務。。。 4)啟動閘道器
第十章、SpringCloud課程內容上半部分總結
1、微服務核心知識內容回顧
簡介:回顧SpringCloud前面10章的基礎內容 1)介紹微服務的基礎知識,核心元件,CAP原理
2)SpringCloud註冊中心 Eureka
3)product-service / order-service
4) 偽RPC Ribbon / feign
5) hystrix熔斷
6) 服務閘道器介紹,zuul
7)配置中心config-server
2、微服務下半部分知識 雲伺服器和Docker容器 簡介:講解雲伺服器和容器知識
第十一章 阿里雲ECS伺服器介紹和網路知識講解
1、雲伺服器介紹和阿里雲伺服器ECS伺服器選購 簡介:什麼是雲伺服器及目前主要的幾個廠商介紹 1、阿里雲、騰訊雲、亞馬遜雲 阿里雲:https://www.aliyun.com/ 騰訊雲:https://cloud.tencent.com/ 亞馬遜雲:https://aws.amazon.com/ 2、阿里雲伺服器遠端登入和常用工具 簡介:講解阿里雲伺服器登入使用和常見終端工具 1、windows工具 putty,xshell, security 參考資料: https://jingyan.baidu.com/article/e75057f210c6dcebc91a89dd.html https://www.jb51.net/softjc/88235.html
2、蘋果系統MAC: 通過終端登入 ssh [email protected] 回車後輸入密碼 ssh [email protected]
3、可以嘗試自己通過百度進行找文件, 安裝mysql jdk nginx maven git redis elk
3、網際網路架構知識之網站部署上線基礎準備 簡介:講解應用部署到可以公網訪問需要步驟
1、一個http請求的故事
2、什麼是cname和a記錄 A記錄和CNAME只可以同時生效一個,A記錄優先 3、域名和ip的關係,DNS作用
參考資料: https://blog.csdn.net/benbenzhuhwp/article/details/44704319
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&ch=1&tn=98050039_dg&wd=%E4%B8%80%E4%B8%AAhttp%E8%AF%B7%E6%B1%82%E7%9A%84%E8%AF%A6%E7%BB%86%E8%BF%87%E7%A8%8B&rsv_pq=80a65c5f00005961&rsv_t=a5fcWreuJzILdSwr4gI8pFqlO7HSu5BlhjwalyVzPiV9w2L%2BKEj78pPi1Qn6Vx4wXxI&rqlang=cn&rsv_enter=1&rsv_sug3=8&rsv_sug1=8&rsv_sug7=100&sug=%25E4%25B8%2580%25E4%25B8%25AAhttp%25E8%25AF%25B7%25E6%25B1%2582%25E7%259A%2584%25E8%25AF%25A6%25E7%25BB%2586%25E8%25BF%2587%25E7%25A8%258B&rsv_n=1
4、域名購買和配置解析實戰 簡介:域名購買和配置解析實戰
1、購買域名,備案 阿里雲 備案地址:https://beian.aliyun.com/
2、購買伺服器,阿里雲,騰訊雲,亞馬遜雲aws
3、配置域名解析到伺服器
第十二章 微服務必備技能Docker容器基礎篇幅 1、微服務下的Docker介紹和使用場景 簡介:Docker介紹和使用場景
1、什麼是Dokcer 百科:一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面;
使用go語言編寫,在LCX(linux容器)基礎上進行的封裝
簡單來說: 1)就是可以快速部署啟動應用 2)實現虛擬化,完整資源隔離 3)一次編寫,四處執行(有一定的限制,比如Docker是基於Linux 64bit的,無法在32bit的linux/Windows/unix環境下使用)
2、為什麼要用 1、提供一次性的環境,假如需要安裝Mysql,則需要安裝很多依賴庫、版本等,如果使用Docker則通過映象就可以直接啟動執行
2、快速動態擴容,使用docker部署了一個應用,可以製作成映象,然後通過Dokcer快速啟動
3、組建微服務架構,可以在一個機器上模擬出多個微服務,啟動多個應用
4、更好的資源隔離和共享
一句話:開箱即用,快速部署,可移植性強,環境隔離
2、Linux雲伺服器Centos7安裝Docker實戰 簡介:講解阿里雲ECS服務安裝Docker實戰 Linux Standard Base的縮寫,lsb_release命令用來顯示LSB和特定版本的相關資訊 命令: lsb_release -a
阿里雲安裝手冊: https://help.aliyun.com/document_detail/51853.html?spm=a2c4g.11186623.6.820.RaToNY 常見問題: https://blog.csdn.net/daluguishou/article/details/52080250
3、Docker倉庫、映象、容器核心知識講解 簡介:快速掌握Dokcer基礎知識,
1、概念: Docker 映象 - Docker images: 容器執行時的只讀模板,作業系統+軟體執行環境+使用者程式 class User{ private String userName; private int age; }
Docker 容器 - Docker containers: 容器包含了某個應用執行所需要的全部環境 User user = new User()
Docker 倉庫 - Docker registeries: 用來儲存映象,有公有和私有倉庫,好比Maven的中央倉庫和本地私服 映象倉庫: (參考)配置國內映象倉庫:https://blog.csdn.net/zzy1078689276/article/details/77371782
對比面向物件的方式 Dokcer 裡面的映象 : Java裡面的類 Class Docker 裡面的容器 : Java裡面的物件 Object 通過類建立物件,通過映象建立容器
4、Docker容器常見命令實戰 簡介:講解Docker在雲服務上的實際應用 1、 常用命令(安裝部署好Dokcer後,執行的命令是docker開頭),xxx是映象名稱
搜尋映象:docker search xxx 列出當前系統存在的映象:docker images 拉取映象:docker pull xxx xxx是具體某個映象名稱(格式 REPOSITORY:TAG) REPOSITORY:表示映象的倉庫源,TAG:映象的標籤
執行一個容器:docker run -d --name "xdclass_mq" -p 5672:5672 -p 15672:15672 rabbitmq:management docker run - 執行一個容器 -d 後臺執行 -p 埠對映 rabbitmq:management (格式 REPOSITORY:TAG),如果不指定tag,預設使用最新的 --name "xxx" 列舉當前執行的容器:docker ps
檢查容器內部資訊:docker inspect 容器名稱
刪除映象:docker rmi IMAGE_NAME 強制移除映象不管是否有容器使用該映象 增加 -f 引數,
停止某個容器:docker stop 容器名稱
啟動某個容器:docker start 容器名稱
移除某個容器: docker rm 容器名稱 (容器必須是停止狀態)
文件: https://blog.csdn.net/permike/article/details/51879578
5、實戰應用之使用Docker部署Nginx伺服器 簡介:講解使用Docker部署Nginx伺服器實戰 1、獲取映象 docker run (首先會從本地找映象,如果有則直接啟動,沒有的話,從映象倉庫拉起,再啟動)
docker search nignx 2、列舉 docker images 3、拉取 docker pull nignx 3、啟動 docker run -d --name "xdclass_nginx" -p 8088:80 nginx docker run -d --name "xdclass_nginx2" -p 8089:80 nginx docker run -d --name "xdclass_nginx3" -p 8090:80 nginx 4、訪問 如果是阿里雲服務,記得配置安全組,騰訊雲也需要配置,這個就是一個防火牆
6、公司中Docker映象倉庫使用講解 簡介:講解一般公司中映象倉庫在的使用 1、為啥要用映象倉庫
2、官方公共映象倉庫和私有映象倉庫 公共映象倉庫: 官方:https://hub.docker.com/,基於各個軟體開發或者有軟體提供商開發的 非官方:其他組織或者公司開發的映象,供大家免費試用
私有映象倉庫: 用於存放公司內部的映象,不提供給外部試用;
SpringCloud 開發了一個支付系統 -》做成一個映象 (作業系統+軟體執行環境+使用者程式)
7、高階篇幅之構建自己的映象倉庫 簡介:使用阿里雲搭建自己的映象倉庫 1、阿里雲映象倉庫:https://dev.aliyun.com/search.html
點選管理控制檯-》初次使用會提示開通,然後設定密碼 xdclass.net123
2、使用阿里雲私有映象倉庫 1)登入: docker login [email protected] registry.cn-shenzhen.aliyuncs.com 2) 推送本地映象: docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:[映象版本號] 例子: docker tag 2f415b0e9a6e registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:xd_rabbitmq-v1.0.2
docker push registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:xd_rabbitmq-v1.0.2
3)拉取映象 線上伺服器拉取映象: docker login [email protected] registry.cn-shenzhen.aliyuncs.com
docker pull registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:xd_rabbitmq-v1.0.2
啟動容器: docker run -d --name "xdclass_mq" -p 5672:5672 -p 15672:15672 2f415b0e9a6e
第十三章 微服務高階篇幅SpringCloud和Docker整合部署 第1課 高階篇幅之構建SpringBoot應用docker映象上集
簡介:使用Docker的maven外掛,構建springboot應用 官方文件:https://spring.io/guides/gs/spring-boot-docker/
1、步驟:maven裡面新增配置pom.xml <properties> <docker.image.prefix>xdclass</docker.image.prefix> </properties>
<build> <finalName>docker-demo</finalName> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <repository>${docker.image.prefix}/${project.artifactId}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build>
配置講解 Spotify 的 docker-maven-plugin 外掛是用maven外掛方式構建docker映象的。 ${project.build.finalName} 產出物名稱,預設為${project.artifactId}-${project.version}
第2課 高階篇幅之構建SpringBoot應用docker映象下集
簡介:打包SpringCloud映象並上傳私有倉庫並部署
1、建立Dockerfile,預設是根目錄,(可以修改為src/main/docker/Dockerfile,如果修則需要制定路徑) 什麼是Dockerfile : 由一系列命令和引數構成的指令碼,這些命令應用於基礎映象, 最終建立一個新的映象
FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
引數講解: FROM <image>:<tag> 需要一個基礎映象,可以是公共的或者是私有的, 後續構建會基於此映象,如果同一個Dockerfile中建立多個映象時,可以使用多個FROM指令 VOLUME 配置一個具有持久化功能的目錄,主機 /var/lib/docker 目錄下建立了一個臨時檔案,並連結到容器的/tmp。改步驟是可選的,如果涉及到檔案系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 資料資料夾,因為 Spring Boot 使用的內嵌 Tomcat 容器預設使用/tmp作為工作目錄
ARG 設定編譯映象時加入的引數, ENV 是設定容器的環境變數 COPY : 只支援將本地檔案複製到容器 ,還有個ADD更強大但複雜點 ENTRYPOINT 容器啟動時執行的命令 EXPOSE 8080 暴露映象埠 2、構建映象 mvn install dockerfile:build 打標籤 docker tag a1b9fc71720d registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:docker-demo-v201808 推送到映象倉庫 docker push registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:docker-demo-v201808
應用伺服器拉取映象 docker pull registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:docker-demo-v201808
docker run -d --name xdclass_docker_demo1 -p 8099:8080 a1b9fc71720d
3、檢視啟動日誌 docker logs -f containerid 文件:https://yeasy.gitbooks.io/docker_practice/image/dockerfile/
第3課 實戰系列之註冊中心打包Docker映象 簡介:講解使用Docker打包註冊中心,上傳私有映象倉庫並部署
1、新增maven外掛 <properties> <docker.image.prefix>xdclass</docker.image.prefix> </properties>
<build> <finalName>docker-demo</finalName> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.3.6</version> <configuration> <repository>${docker.image.prefix}/${project.artifactId}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin> </plugins> </build>
2、新建Dockerfile FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
3、打包: mvn install dockerfile:build
4、推送阿里雲映象倉庫
阿里雲映象倉庫:https://dev.aliyun.com/search.html
docker tag 062d2ddf272a registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:eureka-v20180825 docker push registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:eureka-v20180825 docker pull registry.cn-shenzhen.aliyuncs.com/xdclass/xdclass_images:eureka-v20180825
5、檢視日誌 docker logs -f containerid
第4課 實戰系列之部署RabbitMQ和配置中心打包Docker映象 簡介:講解使用Docker打