谷粒商城--分布式基礎篇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 node-sass@4.14
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.實現效果







