谷粒商城--分布式基础篇P1~P27
谷粒商城--分布式基础篇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.实现效果
我曾七次鄙视自己的灵魂:
第一次,当它本可进取时,却故作谦卑;
第二次,当它在空虚时,用爱欲来填充;
第三次,在困难和容易之间,它选择了容易;
第四次,它犯了错,却借由别人也会犯错来宽慰自己;
第五次,它自由软弱,却把它认为是生命的坚韧;
第六次,当它鄙夷一张丑恶的嘴脸时,却不知那正是自己面具中的一副;
第七次,它侧身于生活的污泥中,虽不甘心,却又畏首畏尾。