微服务架构

目录

2.2 简略的微服务系统架构流程图

2.2.1 用户访问层

2.2.2 公网层(流量网关)

2.2.3 内网网关层

2.2.4 微服务层

2.2.5 数据层

2.2.6 安全与部署原则

2.3 GitEgg Spring Cloud 微服务系统架构

2.3.1 用户访问与公网防御层

2.3.2 内网网关层(Gateway 集群)

2.3.3 服务注册与微服务层

2.3.4 中间件层

2.3.5 数据持久化层

2.3.6 监控与 DevOps

2.3.7 安全与部署原则


2.2 简略的微服务系统架构流程图

接下来,以上面图片为例进行解释。

2.2.1 用户访问层

以用户访问www.baidu.com为例。
解析流程:用户→用户本地 host 缓存→浏览器缓存→DNS 服务器(DNS也有缓存,大概10分钟)→获取域名对应 IP(如baidu.com对应192.168.0.1、192.168.0.2)。
注:这里的ip是公网ip。即,公网可访问的 Nginx 集群的入口 IP,用来定位 “公网流量网关” 的位置。

2.2.2 公网层(流量网关)

图中的 “Nginx(流量网关)” 是一个集群(多台 Nginx 服务器组成),只对外暴露443端口(HTTPS 协议的默认端口)。用户的请求会先到达这个 Nginx 集群:
  • 它负责接收公网所有流量,是用户从互联网进入系统的 “第一道门”。
  • 作为 “流量网关”,它还会做负载均衡(把请求分摊到集群内的不同 Nginx 节点),防止单台服务器过载。
具体流程为:
DNS解析得到Nginx集群的公网IP → 请求发送到Nginx集群(公网443端口) → Nginx把流量转发到内网的后续服务。

2.2.3 内网网关层

  1. spring-cloud-gateway(业务网关):
功能:管控业务规则,如订单接口 QPS 限制(例:下单接口 QPS 设为 1 万,超 2 万时丢弃部分请求)。
  1. API 网关:
  • 功能:规范数据结构,组装后台微服务接口,自身无数据库。
  • 作用:避免前端直接调用微服务导致数据泄露(例:抖音用户详情接口若直接暴露手机号会引发严重事故);规范前后端参数交互(定义前端可传、后端可返的参数范围)。
  • API网关通过RPC调用微服务,在整合。
    • 例子:假设前端发来请求,要获取 “用户基本资料 + 粉丝数 + 作品列表”,这三个数据分别存在「用户服务」「粉丝服务」「作品服务」里。
API 网关会先接收前端的请求,然后通过 RPC 分别调用这三个微服务,拿到各自的数据后,剔除手机号、身份证号等敏感信息,再组装成一个统一的响应结果返回给前端。
API 网关是 “数据整合者”,而 RPC 是它和微服务之间的 “通信工具”。

2.2.4 微服务层

  1. 服务组成:订单服务、商品服务、用户服务等。
  2. 服务通信:通过 RPC 方式调用。
  3. 集群调用解决方案:
  • 内网搭建 DNS 解析服务器,服务启动时自动注册(调用接口向 DNS 服务器添加记录)。
  • DNS 服务器具备监控功能,实时检测服务状态,若服务挂掉则主动移除记录。
  • 服务调用时通过域名访问(而非硬编码 IP),适配多集群部署(例:订单服务调用商品服务时,用域名http://商品服务域名:18088/product/list发起请求)。
  1. 注:
  • 为什么内网需要搭建DNS服务器:
核心目的就是解决微服务集群(比如多实例的商品服务)的调用问题。
  1. 首先明确痛点
商品服务是集群(多个实例,IP 可能是 192.168.0.3、0.4、0.5…),如果用硬编码 IP 的方式调用,新增 / 减少实例时要改代码(比如从 3 个扩到 4 个,就得手动加 IP),又麻烦又容易出错,只适合极小系统。
  1. 内网 DNS 服务器的解决方案
用 “域名” 替代 “硬编码 IP”,让 DNS 服务器来管理集群实例的 IP。
  • 注册:商品服务每个实例启动时,会自动注册(即主动调用接口把自己的 IP、端口、服务名称等信息上报给内网 DNS);
  • 监控与移除:DNS 服务器会持续监控这些实例,挂掉的会自动移除,保证记录的都是可用的;
  • 调用时用域名:订单服务调用商品服务时,只需要用 “商品服务域名” 发起请求,DNS 会返回当前可用的实例 IP,不用管集群有多少个实例。
  1. 最终效果:不管商品服务集群扩到 10 个还是 20 个实例,订单服务的调用地址(域名)永远不变,彻底解决了集群调用的灵活性和维护性问题。

2.2.5 数据层

  1. MySQL(主备架构):
  • 部署:纯内网环境,避免端口暴露(防止勒索病毒、数据泄露等风险)。
  • 访问方式:通过域名(如mysql-server)访问,而非直接写 IP。其访问 URL 格式和 HTTP/HTTPS 类似,只是协议名称改为mysql(如mysql://mysql-server:3306/数据库名)。
  • 架构特点:支持主备切换,主数据库负责日常读写,备数据库同步主库数据,主库故障时备库可自动切换为主库,保障数据服务不中断。
  1. Redis:
  • 部署:纯内网环境,不暴露公网。
  • 作用:作为缓存组件,专门存储常用数据(如商品库存、用户登录状态),能快速读取数据,减少 MySQL 的查询压力,提升系统响应速度。
  1. ClickHouse:
  • 部署:纯内网环境,不暴露公网。
  • 作用:用于大数据量的存储和分析(比如统计商品销售趋势、用户行为数据等),适合处理海量数据的查询分析需求,和 MySQL 的 “日常业务读写” 功能互补。

2.2.6 安全与部署原则

  1. 端口暴露原则:能不暴露端口就不暴露端口,端口暴露能少则少(例:订单服务、商品服务等 100% 部署在内网,避免因接口漏洞引发重大事故)。
  2. 数据层安全:MySQL、Redis、ClickHouse 等数据组件均部署于纯内网,不直接暴露公网(防止勒索病毒、数据泄露)。
  3. 员工公网访问安全边界:
  • 核心逻辑:员工需通过VPN(虚拟专用网络) 接入内网,才能访问微服务、数据库等内部资源。
  • 作用:VPN 相当于 “加密通道”,能隔离公网的不安全环境,防止员工在外部网络(如家里、咖啡厅 WiFi)直接访问内网时,数据被窃取或篡改。
  • 本质:是 “技术组件 + 安全规范” 的结合 ——VPN 是实现工具,“必须通过 VPN 访问内网” 是强制规范,共同构成公网到内网的安全边界。
  1. 部署前提:需先捋清从用户侧到内网的全链路(域名解析、网关、微服务、数据层),再明确各环节部署方式。

2.3 GitEgg Spring Cloud 微服务系统架构

上面的2.2其实就是在说的是这个图,只是2.2比较简略。

2.3.1 用户访问与公网防御层

  1. 用户端:手机、电脑等终端发起请求。
  2. DDoS 防护与防火墙:抵御 DDoS 攻击(如 “肉鸡” 大规模恶意访问,类似黄牛占满网站资源导致正常用户无法访问)。
  3. VIP、主备 HAProxy+Keepalived:实现负载均衡与高可用,保障流量分发稳定。
  4. 高防服务器:互联网企业、政府官网必须部署,是公网流量的第一道安全屏障,避免 Nginx 直接暴露公网。这里的高防服务器指的不是单一的硬件。而是通过软件策略(DDoS 防护规则、防火墙策略) + 服务集群(HAProxy+Keepalived 的高可用架构),模拟出 “高防服务器” 的抗攻击、保稳定效果。这种设计在微服务架构中很常见,用组件组合替代单一硬件,更灵活也更易扩展。图中
这些内容共同组成了 “高防体系”,而不是说这些组件本身就是高防服务器。
  1. Nginx+Keepalived 负载均衡集群:承接公网流量,初步分发请求(与2.2架构图中公网 Nginx 集群逻辑一致)。
  2. CDN(内容分发网络):本质是遍布各地的高带宽文件服务器,只存文件、不做任何计算。专门放 HTML、CSS、JS、图片、视频等前端静态资源(这些资源不用实时运算,像普通文件一样)。把这些静态资源提前放到 CDN 的各地服务器上后,用户访问网站时,从离自己最近的 CDN 服务器拿资源,不用去远的源服务器,让页面加载更快,还能减轻源服务器的压力。

2.3.2 内网网关层(Gateway 集群)

  1. 功能:路由转发、流量限制(如秒杀时 QPS 超限则限流,出现 “当前服务过于火爆” 提示)、统一权限认证、请求过滤(与2.2架构图中 spring-cloud-gateway、API 网关的流量管控逻辑一致)。
  2. 关联组件:
  • Ribbon:客户端负载均衡,选择合适的服务实例调用。
  • Sentinel:实现限流、熔断、降级,保障服务稳定性。
  1. 注:
  • 熔断:可以理解为电路的保险丝,当某一服务频繁调用失败(比如连续多次超时、报错),就会 “熔断” 这个服务的调用链路,暂时不再向它发请求,避免一直消耗资源却得不到响应,等一段时间后再尝试恢复调用。
  • 降级:当系统压力过大时,把一些非核心功能的服务 “降级” 处理(比如返回默认数据、简化逻辑),优先保证核心功能(如订单支付)的正常运行,防止整个系统被拖垮。

2.3.3 服务注册与微服务层

  1. 服务注册中心(Nacos)
  • 所有微服务(如订单、商品服务)启动时,自动注册(向 Nacos上报 IP、端口、服务名称等信息注册),其他服务通过Nacos发现并调用目标服务(与2.2架构图中内网 DNS 服务器的服务注册与发现逻辑一致,解决集群调用问题)。
  • 这里的Nacos 在微服务架构中的作用,就相当于2.2里的的 “内网 DNS 服务器”—— 都是用来管理 “服务域名→可用 IP” 的映射,解决集群调用的问题。
  • 上图有多个nacos,这是 Nacos 的集群部署,多台 Nacos 实例一起工作,既提升了注册中心的可用性(一台故障,其他还能工作),又能分担访问压力,保障服务注册与发现的稳定性。
  • Nacos 主要负责服务注册 / 发现和配置管理,它不直接 “监控服务的健康状态、性能指标”;而服务监控是由 Spring Boot Admin 这类专门的监控工具来完成的。
  1. SpringBoot 服务集群:多个 Server 实例(如 Server-A、Server-B)组成集群,共同处理业务,提升并发与容错能力(与2.2架构图中微服务集群逻辑一致)。
  2. 服务通信:通过 RPC 方式调用(与2.2架构图中微服务通信逻辑一致)。
  3. Fegin:是 RPC 的具体实现工具(属于 Spring Cloud 生态),它让微服务间的 RPC 调用变得更简单 —— 你只需要写一个接口,Fegin 会自动帮你完成服务发现、请求发送、结果解析等操作,不用关心底层的 HTTP 通信细节。

2.3.4 中间件层

  1. Redis Cluster:分布式 Redis 集群,缓存热点数据(如商品库存),减轻数据库压力(与2.2架构图中 Redis 逻辑一致)。
  2. MongoDB Cluster:非关系型数据库,存储非结构化数据(如日志)。
  3. XXL-JOB 集群:分布式任务调度,执行定时任务(如每天凌晨执行数据统计)。
  4. 分布式文件存储(OSS、MinIO):存储用户头像、商品图片等文件资源。
  5. 消息中间件(RabbitMQ、RocketMQ、Kafka):实现服务间异步通信、解耦。

2.3.5 数据持久化层

关系型数据库(MySQL 主从架构):
  1. 主从复制与主备热切:主库处理读写请求,备库同步数据,主库故障时备库可切换为主库,保障数据服务不中断。(和2.2一致)
  2. MyCat 读写分离:实现数据库的读写分离,提升数据库的并发处理能力。
  3. JDBC、Druid/HikariCP:数据库连接池与驱动,优化数据库连接的管理。
  4. MyBatis、MyBatis-Plus:持久层框架,简化数据库操作。
  5. SEATA:分布式事务框架,保障分布式场景下数据的一致性。

2.3.6 监控与 DevOps

  1. Spring Boot Admin 监控:监控微服务健康状态与性能指标。
  2. Skywalking:分布式链路追踪,排查服务调用链路问题。
  3. 分布式日志管理平台(filebeat + es + kibana):采集、存储、分析应用日志,实现可视化查询。
  4. GitLab:代码仓库,进行版本管理与协作开发。
  5. Jenkins:一个功能强大的自动化服务器,它通过插件生态系统可以实现从代码构建、测试、打包(如 Docker 镜像)到部署的整个软件开发生命周期的自动化。它是持续集成(CI)和持续部署(CD)流程中不可或缺的核心工具。
  6. SonarQube:代码扫描工具,进行代码审计与漏洞检测。
  7. Harbor:私有镜像仓库,存储 Docker 镜像(比如从Jenkins生成的docker镜像),便于分发管理。像要下载docker镜像,就和从maven仓库里下载jar包一样,通过坐标下载。
  8. k8s(Kubernetes):容器编排平台,管理大规模容器化应用的部署与运维。

2.3.7 安全与部署原则

  1. 端口暴露原则:能不暴露端口就不暴露,微服务、数据库 100% 内网部署(与2.2架构图中安全原则一致)。
  2. 员工公网访问:需通过 VPN 接入内网,保障数据安全(与2.2架构图中安全原则一致)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值