失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 分布式秒杀电商-微服务架构图 上帝视角分析

分布式秒杀电商-微服务架构图 上帝视角分析

时间:2022-12-25 05:09:04

相关推荐

分布式秒杀电商-微服务架构图 上帝视角分析

整个项目采用前后端分离开发,外网部署前台项目、内网部署后台项目。本文以客户使用客户端访问网站,向后台发送请求这一条线索对上图进行分析。

文章目录

一、Nginx集群→API网关二、API网关→服务模块1.Ribbon实现负载均衡2.Sentinel进行熔断降级三、服务模块对请求进行处理四、数据存储解决方案1.存储数据2.消息队列3.全文检索4.OSS云存储五、日志管理六、注册中心&配置中心七、服务追踪八、持续集成&持续部署

一、Nginx集群→API网关

请求首先到达Nginx集群,并由Nginx将请求转交给API网关

项目中使用SpringCloud Gateway技术作为API网关。

二、API网关→服务模块

第二步,API网关拿到请求后进行认证授权,如果认证合法,就由API网关将请求动态路由到指定的业务模块

动态路由:因为这条请求可能是调用商品服务、购物车服务、搜索服务、等众多服务中的一种,所以需要动态路由。

认证授权:由网关进行。

1.Ribbon实现负载均衡

API网关将请求动态路由到指定的业务模块时,如果该业务模块存在多个,就需要在业务集群中使用负载均衡技术进行统筹管理。

业务集群中使用Ribbon组件实现负载均衡。

2.Sentinel进行熔断降级

API网关将请求动态路由到指定的业务模块时,如果某些服务出现问题,就需要在API网关中使用熔断降级进行管理。

API网关中使用Sentinel组件进行熔断降级。(该技术由 Spring Cloud Alibaba提供)

注:Sentinel组件在本项目中还实现了令牌限流的功能。

三、服务模块对请求进行处理

请求路由到服务模块后,服务模块对请求进行处理。

SpringBoot:每个微服务模块都是使用SpringBoot技术进行编写。

远程调用:使用SpringCloud 的Feign组件进行远程调用。(服务之间可能会有互相调用,如订单服务调用商品服务查询商品信息。)

OAuth2.0认证中心:除了一般的登录,还使用OAuth2.0整合了社交登录。(额外判断了某些请求是否需要登陆后才能进行处理)

SpringSecurity:使用SpringSecurity进行安全与权限控制。

四、数据存储解决方案

1.存储数据

服务处理请求时,免不了要使用数据库与缓存进行数据的存储

Redis集群:使用Sentinel分片集群+Shard哨兵集群进行缓存处理。

MySQL集群:持久化数据使用MySQL集群,可以使用 读写分离 也可以使用 分库分表。

2.消息队列

模块集群中,服务模块与服务模块之间的通信,需要使用消息队列进行异步解耦,和分布式事务的最终一致性。

RabbitMQ集群:使用RabbitMQ集群做消息对立,完成服务与服务之间的 异步解耦 、分布式事务的最终一致性。

3.全文检索

有些服务模块需要进行检索,如对商品信息进行检索。

ElasticSearch:使用ElasticSearch进行检索。

4.OSS云存储

有些服务需要存储图片,视频等大文件,可以使用阿里云的对象存储服务OSS。

OSS:使用阿里云的对象存储服务OSS进行图片、视频的云存储。

五、日志管理

项目上线以后,为了快速定位项目中可能出现的问题,需要进行日志管理。

ELK:使用ELK对日志进行处理。

LogStash:使用LogStash搜集业务中的各种日志,将他们放入ES中。再使用Kibana可视化界面,从ES中检索出相关的日志信息。快速定位项目中的问题。

六、注册中心&配置中心

分布式系统中,由于每一个服务都可能部署在很多台机器,服务与服务之间要互相调用,这就需要指导彼此都在哪里。推荐将所有服务注册到注册中心,这样服务之间就可以从注册中心发现彼此。

每一个服务的配置众多,为了集中管理这些配置,也需要使用Nacos作为配置中心,这样,所有的服务都可以从配置中心中动态的获取其配置。

Nacos注册中心:使用Nacos作为服务的注册中心。(该技术由 Spring Cloud Alibaba提供)

Nacos配置中心:同样使用Nacos作为服务的配置中心。(该技术由 Spring Cloud Alibaba提供)

七、服务追踪

服务在调用期间,可能会出现问题。比如:...→订单服务→商品服务→库存服务→...,可能某一个链路出现了问题,就需要对整个服务调用链进行追踪,查看哪里出现了问题,这就需要使用服务追踪。

使用Sleuth+Zipkin+Metrics进行服务追踪,将每一个服务的信息交给开源的Prometheus进行聚合分析后,由Grafana进行可视化展示。再通过Prometheus提供的Altermanager实时得到服务的告警信息,以邮件或者短信的方式通知开发或运维人员。

八、持续集成&持续部署

项目发布时,由于微服务众多,每一个都打包部署到服务器上过于麻烦,使用持续集成与持续部署可以简化这些流程。

持续集成CI/持续部署CD:开发人员可以将修改后的代码提交给Github,运维人员通过自动化工具Jenkins从Github中获取代码,将其打包成Docker镜像。最终使用k8s集成整个Docker服务。以服务Docker容器的方式来运行。

如果觉得《分布式秒杀电商-微服务架构图 上帝视角分析》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。