穀粒商城--分佈式基礎篇(P1~P27)

穀粒商城--分佈式基礎篇P1~P27

去年3月份穀粒商城分佈式基礎、進階、高級剛出的時候就開始學了,但是中途因爲一些事就中斷了,結果一直到現在纔有時間重新開始學,看到現在網上這麼多人都學完了,確實感覺到很慚愧,重新整理學習筆記吧,後續不斷更新。


csdn csdn csdn csdn csdn


【穀粒商城--分佈式基礎篇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.架構流程

img


2.項目技術

img



🔥3.分佈式項目啓動相關報錯

node環境:node.js--版本v10.20.0 (下面命令一定要以管理員身份啓動

注:很多情況下npm會報錯,但是使用cnpm就能正常下載啓動

1.npm 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項目啓動失敗
4.Nacos啓動失敗:



🔥4.分佈式項目內容

​ 在上述前後端基本環境配置好後,每次項目啓動都需要提前準備的環境:nacos啓動、renren-fast啓動。然後就可以啓動項目編寫代碼了。

1.Nacos註冊中心、配置中心

​ 所有微服務(包括GateWay網關)註冊到註冊中心中,可以統一管理配置各個微服務配置文件。導入主要流程分如下幾步

  1. 導入dependency配置
    在這裏插入圖片描述

  2. 啓動類加入@EnableDiscoveryClient自動配置

  3. 配置文件導入nacos的發現spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 (當然也有namespace、group、extension-configs可以配置)


2.OpenFeign遠程調用

​ 微服務A想調用微服務B中的接口。導入主要流程分如下幾步

  1. 導入dependency配置
    在這裏插入圖片描述

  2. 啓動類加入``@EnableFeignClients(basePackages = "com.empirefree.gulimall.member.feign")`自動配置、

  3. 編寫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();
}

  1. 注入使用接口即可(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.實現效果

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章