WebSocket
WebSocketWebSocket
WebSocket Protocol一种新的HTML5协议,实现了浏览器与服务器(B/S架构)全双工通信,一开始的握手(建立连接,长连接)需要借助HTTP请求完成。
全双工通信: 同时双向传输数据(A->B,B->A),瞬时同步
WebSocket: 真正实现全双工通信的服务器向客户端推的互联网技术。原理类似广播播音
WebSocket协议使用较少的开销来维持连接,相对于传统的Socket,它不需要频繁地建立和关闭连接,减少了服务器的负担
@OnOpen 成功建立连接调用
GateWay-网关
GateWay什么是GateWay
基于Spring 5.0 、SpringBoot 2.0和Project Reactor开发的高性能API网关组件
API网关
API网关是一个中间层,集中管理、保护和优化API请求与响的通信。
API 网关提供了安全、流控、过滤、缓存、计费以及监控等 API 管理功能,使得系统更易于管理、更安全、更高效,并提供了更好的可视化和分析能力。
GateWay的主要概念
Route(路由) : 由一个 ID、一个目标 URI、一组断言(Predicate)和一组过滤器(Filter)组成
1.地址映射转发:
http://网关ip:网关端口/服务名映射/xxxx?xxx=x
2.服务名映射/xxxx?xxx=x 转换成对应的微服务的请求地址,再把请求发出
Predicate(断言): 对 HTTP 请求进行匹配 -> 判读用哪一条路由
Filter(过滤器): 对请求进行拦截和修改 -> 插件机制 ,责任链模式组装,aop增强机制
GateWay开始GateWay的搭建 ...
服务哨兵-sentinel
服务雪崩什么是服务雪崩?
服务雪崩是一种因”服务提供者的不可用”导致”服务调用者不可用”,并将不可用逐渐放大的现象
雪崩的原因及三个阶段
阶段一: 服务不可用
– 硬件故障
– 程序BUG
– 缓存击穿 -> 例如一个程序是通过id号查询其详细信息,我们利用redis缓存保存一些热点信息,当一个查询的id不在缓存内时,会转向数据库查询这些数据,每次访问这些数据都会直接去查询数据库里面的信息
– 用户的大量请求
阶段二: 调用端的重试加大流量(例: openfeign的底层使用了重试器,当用户发送请求时,发生了网络抖动,导致请求无法在规定的时间的时间内拿到数据,这时重试器会再次发送这个请求,再次对数据进行拉去)
– 用户重试
– 代码逻辑重试
阶段三: 服务调用者不可用 ->同步等待造成的资源耗尽
解决方案:
流控限流
缓存预加载
服务降级(保留重要的服务关闭不重要的服务;降低一致性)
服务熔断
舱壁模式 规定每个业务的最大线程数
服务熔断-断路器模式
最开始处于closed状态, ...
配置中心-nacos
配置中心nacos配置文件在项目中出现的问题
我们一般把配置文件以yml或properties的形式放在项目中,修改了配置文件之后,只有重启服务后,配置文件才能生效
配置中心优点
1.动态更新配置文件
2.统一配置管理
配置文件分级管理
与服务器状态保持一致
文件管理
问题(配置中心>命令行>配置文件)
发布配置文件到配置中心1.新建命名空间
2.在配置列表中新建配置
DataId配置规范
${prefix}-${spring.profiles.active}.${file-extension}
${prefix}: 前缀 - 服务名
${spring.profiles.active}: 环境名
${file-extension}: 文件后缀名
将配置格式改为yaml,然后将将本地的项目的application配置文件复制到配置中,并注释掉本地配置(避免启动项目时两者发生冲突)
3.导入依赖
因为要在微服务启动时就要访问到nacos配置中心,所以需要导入依赖开启nacos配置中心支持
因为本地application.yml文件放入nacos中后无法访问到配置中心的 ...
设计模式
builder构造器设计模式。。。
观察者模式
Observer Observable
reactor
webflux.
。。。
SpringCloud
单体应用与分布式应用什么是单体应用?
单体应用是指将一个应用程序的所有功能模块集中在一个单一的执行单元中,通常打包为一个单独的可执行文件或软件包。这个单体可以是一个WAR包,也可以是一个JAR包、一个EXE文件、一个容器镜像等。
单体应用的优缺点
优点:
整个项目是一个web工程,运行在一个JVM中,整合性较好,开发便捷,容易管理
缺点:
1.项目越大,代码量越大,造成编译、打包 费时,越来越影响效率
2.业务增多时会造成代码冗余重复,代码复用度不高,造成浪费
前后台两个项目 -> 前端: http://localhost:9999
后端: http://b:9999/adminLogin.html
例: 两个项目实体类重复
3.可伸缩性差,单体应用中的功能模块的使用场景,并发量,消耗的资源类型各有不同,对于资源的利用又互相影响,这样使我们对各个业务模块的系统容量很难给出较准确的评估
当项目只在一个规定的时间上线一个新功能时,且对并发要求度高,只能对该项目的对应的硬件升级或流量进行扩充,无法对其进行分配,对于一个单体应用来说造成了资源空间的浪费
4. ...