谷粒商城笔记-04-项目微服务架构图简介


这一节的内容是介绍项目的架构图,这是从上帝视角看整个项目,非常重要、非常关键。

这一节应该不止看一遍,在学习的过程中经常回过头来温习一遍,看看自己当前学习的是架构图中的哪部分,做到胸中有数。

这是一个结构非常完整的微服务架构图,基本上所有的微服务都类似,掌握其中精髓,万变不离其宗,无论是以后架构新的项目还是重构旧的项目,都可以参考这个架构。

谷粒商城-微服务架构图原图如下。

在这里插入图片描述

根据各部分作用的不同,我将这个架构图分为7个部分,接下来逐一介绍。

在这里插入图片描述

一,网络

虽然网络主要是运维同事负责,作为开发人员也应该了解项目的网络部署,在排查线上问题时,可能会起到关键作用。

从图中可以看出,整个项目的网络部署有内外网之分,绝大部分都部署在内网,极少数部署在外网。

内网无法通过公网直接访问,这是出于安全考虑,包括网络安全、数据安全等等。

前端项目一般部署在外网,因为前端是整个系统的入口,是开放给公网用户访问的。

后端服务包括所有的商城服务、数据存储、日志、数据治理服务、K8S等等,全部都部署在内网,与外网隔离,拒绝外网直接访问。

二,网关

网关相当于商城系统的后台门户,是极其重要的一部分。

商城页面上所有的后台请求都要经过网关,网关担负的主要职责如下:

  • 认证鉴权
  • 动态路由
  • 限流
  • 负载均衡
  • 熔断降级

1,网关选型

这个项目选用SpringCloud Gateway作为网关。

2,认证鉴权

商城的有些操作是需要客户登录后操作的,比方说加购物车、下单、付款,这些操作都需要鉴权,判断用户是否登录。

再比如后台管理系统,涉及到库存、商品的管理,所有的操作都有对应的权限,库存管理员只能管理库存,商品管理员只能管理商品。类似这种权限控制都在网关进行。

3,动态路由

大多数服务都是集群部署,分布在多台机器上。

比如商品服务,可能部署在10台服务器上,当前端发出一个商品服务请求时,只需要一台服务器接收请求,从多台服务器中选取一台服务器接收响应,称之为路由

网关具备路由的能力,可以配置多种路由策略,比如随机路由、轮询、最小连接数、Hash等等。

4,限流

限流是指在高峰期或者发现黑客攻击,就要对请求进行流量控制,或者让请求排队等候处理,或者直接拒绝请求,避免整个系统瘫痪失去响应。

限流有很多种方式,常见的有令牌限流、漏桶限流。

  • 令牌限流。系统生成固定数量的令牌,给每个请求发放令牌,只有得到令牌的请求才能进入系统,没有令牌的请求将被拒绝。
  • 漏桶限流。漏桶相当于一个缓存,请求先进入漏桶等待,后端服务以恒定速率从漏桶中取出、处理请求,超出桶容量的请求会被丢弃。

5,负载均衡

因为网关是后台服务的门户,有动态路由的能力,所以也可以实现负载均衡,将请求均匀的分发到后台服务器上。

6,熔断降级

网关可以收集后台服务的响应情况,在满足某种规则的情况下,拦截熔断请求,避免后台服务资源耗尽。

三,微服务

这是业务核心,包括商品服务、订单服务、库存服务、描述服务、搜索服务等等,这些服务在启动后,会将自身信息包括服务名称和IP注册到注册中心。

这些服务之间也需要相互调用,这个项目使用feign完成内部服务间的相互调用。

四,存储层

这个项目中,存储层选用多个中间件。

  • 持久化存储选用了MySQL,搭建了MySQL集群,采用读写分离的策略。
  • 缓存选用了Redis,搭建了Redis集群。
  • 消息中间件选用了RabbitMQ。
  • 日志存储选用了Elasticsearch。
  • 商品搜索存储选用了Elasticsearch。
  • 图片存储使用阿里云的OSS。

五,服务治理

  • 注册中心Nacos
  • 配置中心Nacos
  • 链路追踪Sleuth、Zipkin
  • 降级熔断限流Sentinal

六,日志系统

日志记录了系统运行过程中的各种信息,是排查线上问题的必备资料。

这个项目使用ELK作为日志采集、管理、查询系统。

  • Logstash收集日志
  • 存储到Elasticsearch中
  • 用可视化工具Kibana作为前端工具搜索、展示日志

七,自动化部署

  • K8S提供容器管理功能
  • Jenkins实现从Git代码仓库拉取代码,自动打包,生成Docker容器
  • KubeSphere提供简单易用的容器编排功能

流水线作业的原理和流程示例:

  • 源代码变更:

    • 开发者提交代码到版本控制系统,触发 Jenkins pipeline。
  • 构建和测试:

    • Jenkins 根据 pipeline 规则拉取最新代码,构建 Docker 镜像,并运行测试。
    • 如果测试通过,Jenkins 将构建的镜像推送到私有或公共的 Docker Registry,如 Harbor 或 Docker Hub。
  • 部署到 Kubernetes:

    • Jenkins 使用 Kubernetes 的 API 或 CLI (kubectl) 将更新后的镜像部署到目标环境(如开发、测试或生产环境)。
    • 这一步可能涉及更新 Kubernetes 的 Deployment、StatefulSet 或其他资源。
  • 监控和反馈:

    • 部署完成后,Jenkins 可以通知相关人员,同时 KubeSphere 提供监控和日志功能,便于跟踪应用状态和问题排查。

通过这种方式,Jenkins、Kubernetes 和 KubeSphere 形成一个紧密合作的体系,实现了从代码变更到应用部署的自动化流程,大大提高了开发效率和运维的灵活性。

  • 34
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值