穀粒商城--分佈式基礎篇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.實現效果