穀粒商城--分散式基礎篇P1~P27
去年3月份穀粒商城分散式基礎、進階、高階剛出的時候就開始學了,但是中途因為一些事就中斷了,結果一直到現在才有時間重新開始學,看到現在網上這麼多人都學完了,確實感覺到很慚愧,重新整理學習筆記吧,後續不斷更新。
【穀粒商城--分散式基礎篇P1~P27】: https://blog.csdn.net/Empire_ing/article/details/118860147
1.分散式基本概念
1.微服務
將一個大型單體應用,拆分成各個獨立部署執行的單個微服務
2.分散式&叢集&節點
- 分散式:京東不同業務分佈在不同地方(指的是一種實現方式)
- 叢集:每個業務由多臺伺服器來實現完成(指的是具體的物理形態)
- 節點:叢集中的一個伺服器
3.遠端呼叫&負載均衡
- 遠端呼叫:各個微服務之間互相呼叫(springcloud中採用HTTP+JSON方式)
- 負載均衡:在上述呼叫或者使用者訪問的時候採用將請求均衡分配給A,B,C等其他機器來實現,不要讓任何一臺機器太忙,也不要讓任何一臺機器太閒(基於各種負載均衡演算法:輪詢、最小連線、雜湊)
4.註冊中心&配置中心
- 註冊中心:各個微服務在註冊中心中註冊,這樣哪些服務掛了都能知道,方便統一管理
- 配置中心:上面說了,每個微服務是由多臺伺服器來實現,所以修改每個微服務相關配置需要由配置中心統一管理。
5.服務熔斷&服務降級
- 服務熔斷:微服務A呼叫微服務B時,若B掛了,則A的頻繁訪問需要啟用斷路保護機制,返回一個預設資料,避免耗時等待和浪費請求資源
- 服務降級:系統高峰期,系統資源緊張,讓非核心業務降級執行,去處理其他業務。比如淘寶在天貓雙十一,就無法訪問退單的微服務,這裡就是將退單的服務降級、讓服務掛掉,不讓你訪問,或者報錯等等。
6.API閘道器
- API GateWay閘道器:攔截使用者請求,包含了上面負載均衡、熔斷、認證、限流等功能。相當於大門保安
2.專案架構
1.架構流程
2.專案技術
3.分散式專案啟動相關報錯
node環境:node.js--版本v10.20.0 (下面命令一定要以管理員身份啟動)
注:很多情況下npm會報錯,但是使用cnpm就能正常下載啟動
1.npm install 失敗
- 沒有package.json解決辦法:https://blog.csdn.net/weixin_40161974/article/details/99441501
- 找不到淘寶的庫:用
cnpm install
管理員身份啟動
所以我整體啟動流程是:
#管理員身份切換到renren-fast-vue下(node.js-v10.20.0)
npm config set registry http://registry.npm.taobao.org/
cnpm install
npm run dev
2.renren-fast-vue啟動頁面報錯 :<% if (process.env.NODE_ENV === ‘production‘) { %> <% }else { %> <% } %>
cnpm rebuild node-sass --save-dev
npm uninstall node-sass
cnpm install [email protected]
npm run dev
3.renren-fast專案啟動失敗
啟動專案時報錯--定時任務無法注入
解決辦法:https://blog.csdn.net/shenlf_bk/article/details/104306739
4.Nacos啟動失敗:
無法啟動tomcat:
4.分散式專案內容
在上述前後端基本環境配置好後,每次專案啟動都需要提前準備的環境:nacos啟動、renren-fast啟動。然後就可以啟動專案編寫程式碼了。
1.Nacos註冊中心、配置中心
所有微服務(包括GateWay閘道器)註冊到註冊中心中,可以統一管理配置各個微服務配置檔案。匯入主要流程分如下幾步
匯入dependency配置
啟動類加入
@EnableDiscoveryClient
自動配置配置檔案匯入nacos的發現
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
(當然也有namespace、group、extension-configs可以配置)
2.OpenFeign遠端呼叫
微服務A想呼叫微服務B中的介面。匯入主要流程分如下幾步
匯入dependency配置
啟動類加入``@EnableFeignClients(basePackages = "com.empirefree.gulimall.member.feign")`自動配置、
編寫Feignservice檔案
package com.empirefree.gulimall.member.feign;
import com.empirefree.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R membercoupones();
}
- 注入使用介面即可(Feignservice是從nacos註冊中心中找到被呼叫的服務介面,然後就可以再呼叫者中進行呼叫,所以必須先啟動nacos)
@Autowired
private CouponFeignService couponFeignService;
3.GateWay閘道器
這裡先從簡,只配置nacos註冊中心與gateway路由,後面做大了再改。
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
spring:
cloud:
gateway:
routes:
- id: product_route
uri: lb://gulimall-product
predicates:
- Path=/api/product/**
filters:
4.實現效果