架构图
解析
客户通过任意客户端(app/Web)向服务器发送请求,
请求首先来到Nginx集群,Nginx将请求转交给Api网关(SpringCloud Gateway),
Api网关:
- 可以根据当前请求,动态路由到指定的服务
- 假如请求对应的服务过多,例如是查询商品,而商品在3个服务里面都有,网关可以通过Ribbon负载均衡的调用服务。
- 如果服务出现问题,也可以在网关这个级别通过Sentinel做熔断降级
- 还可以对请求进行认证授权, 请求过来以后,看是否合法,合法了以后再放行
- 还可以通过Sentinel对请求进行限流,比如当前有100W个请求,我们害怕同时放进来之后,把后台服务压垮,可以在网关处进行限流控制,只放行1W个过去,让后台业务集群很容易的处理完这些请求。
SpringBoot:实现了微服务
Feign:实现了微服务之间的调用
OAuth2.0认证中心:实现了登录之后才能处理的请求、以及社交登录
Spring Securitiy:实现了整个应用的安全以及权限控制
缓存:使用Redis实现了分片集群以及哨兵集群
持久化:使用MySQL集群实现了读写分离、分库分表
消息队列:使用Rabbit MQ集群,实现微服务之间的异步解耦,包括完成分布式事务的最终一致性
全文检索:使用Elastic Search实现
对象存储:使用阿里云的OOS存储服务
日志存储:使用ELK对日志进行相关处理,使用LogStash收集业务里面的各种日志,然后把它存储到ES里,然后ELK使用Kibana可视化插件从ES中检索出相关的日志信息,帮我们快速定位线上问题的所在。
Nacos注册中心:实现服务之间的注册与发现
Nacos配置中心:实现统一管理配置,实现改一处服务的配置,其它服务都自动修改,所有的服务都可以通过配置中心,动态获取它的配置
Sleuth+Zipkin:实现服务的可视化追踪 ,然后将所有追踪到的信息,交给Prometheus进行聚合分析,再有Grafana进行可视化展示,通过prometheus提供的Alertmanager可以实时的得到一些服务的告警信息,把这些告警信息以邮件或者短信的形式,通知开发以及运维人员
持续集成:开发人员将修改后的代码,提交到Github,运维人员可以通过自动化工具Jenkins Pipeline,从Github中获取到代码,将它打包成Docker镜像,最终使用K8S,集成整个Docker服务,我们将服务以Docker容器的方式去运行。
分布式事务:使用Seata
微服务划分图
版本说明
组件版本关系