微服务商城架构
2024-03-18 16:03:19 0 举报
AI智能生成
远程调用 服务注册 配置中心 服务熔断 API网关
作者其他创作
大纲/内容
消息队列
模式
点对点式
一个发布,一个接收
发布订阅式
一个发布,多个接收
实现
jms
java消息服务
jdbc
java
activemq
amqp
高级消息队列协议
跨语言
rabbitmq
rabbitmq
publisher生产者
message头+体
route-key 路由键
broker消息代理
exchange交换机
负责接收消息
direct
点对点
路由键和队列名完全匹配
fanout
广播
全部广播
topic
发布订阅
部分广播
# 0个或者多个单词
* 一个单词
Queue队列
存储消息
Consumer消费者
connection连接
一个连接多个信道channel
消息确认机制
分布式
远程调用
HTTP+JSON
feign
服务注册/发现&注册中心
nacos
配置中心
nacos
服务熔断&服务降级
当其中一个服务不可用时,有可能会造成雪崩效应
服务熔断
设置服务的超时,当被调用的服务经常失败到达某个阈值,我们可以开启断路保护机制,后来的请求不再去调用这个服务。本地直接返回默认的数据
服务降级
在运维期间,当系统处于高峰期,系统资源紧张,我们可以让非核心业务降级运行。降级:某些服务不处理,或者处理简单【抛异常、返回NULL、调用Mock数据、调用Fallback处理逻辑】
API网关
Nginx把请求转交给API网关
动态路由到指定服务
负载均衡到某个服务器
对服务进行熔断或降级
认证授权
限流(只放行部分到服务器)
gateway
redis集群
(分片+哨兵集群+主从架构)
持久化使用mysql
读写分离和分库分表
消息队列(RabbitMQ)
异步解耦,分布式事务的一致性
ElaticSearch
全文检索,检索商品信息
阿里云的对象存储服务OSS
日志
使用ELK对日志进行处理,使用LogStash收集业务里的各种日志,把日志存储到ES中,用Kibana可视化页面从ES中检索出相关信息
服务追踪
使用springcloud提供的Sleuth、Zipkin、Metrics,把每个服务的信息交给开源的Prometheus进行聚合分析,再由Grafana进行可视化展示,提供Prometheus提供的AlterManager实时得到服务的告警信息,以短信/邮件的方式告知服务开发人员
持续集成和持续部署
有了持续集成后开发人员可以将修改后的代码提交到github,运维人员可以通过自动化工具Jenkins Pipeline将github中获取的代码打包成docker镜像,最终是由k8s集成docker服务,将服务以docker容器的方式运行
问题
docker
逻辑删除
mybatis-plus 的内容,会在项目中配置一些内容,告诉此项目执行delete语句时并不删除,只是标志位
跨域问题
指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对js施加的安全限制。
协议,域名,端囗都要相同,其中有一个不同都会产生跨域
跨域请求的实现是通过预检请求实现的,先发送一个OPSTIONS探路,收到响应允许跨域后再发送真实请求
跨域是要请求的、新的端口那个服务器限制的,不是浏览器限制的。
解决方案
设置nginx包含admin和gateway。都先请求nginx,这样端口就统一了
让服务器告诉预检请求能跨域
在服务端配置允许跨域
https://blog.csdn.net/hancoder/article/details/106922139
JSR303校验
javax.validation.constraints
注解
@NotNull
注解禁止元素为null,能够接收任何类型
@NotEmpty
该注解修饰的字段不能为null或""
@NotBlank
该注解不能为null,并且至少包含一个非空格字符。接收字符序列
controller中加校验注解@Valid,开启校验
添加注解的时候,修改message
@NotBlank(message = "品牌名必须非空")
给校验的Bean后,紧跟一个BindResult,就可以获取到校验的结果。
统一异常处理 @ExceptionHandler
session
多系统单点登录
xxl-sso
token
0 条评论
下一页