谷粒商城-微服务架构图 上帝视角分析

在这里插入图片描述

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


一、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容器的方式来运行。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/113725349