从架构的层面思考

我们如果要系统的理解和认识,整个后端系统的架构领域的知识

我们应该从那些角度和维度去理解

我们对架构先有一个全景式的理解,对整个结构

我们了解一下

nginx软件,需要的服务器的配置,短时间可以派发多少html静态资源

数据处理层

gateway网关

jar包

微服务如何划分,处理

缓存层

redis

中间件

mq层

存储层:

mysql

搜索层

es

我们想一下,我们需要对这些层,以及里面部署在linux上的软件

我们需要做哪些操作和准备

能力层:

让这些可以短时间接收大量的数据

运维监控层

使用普罗米修斯监控

我们从架构的领域,知道可以对这些东西,做什么处理

如何根据业务场景去选择。

这个在架构层面,做一个系统性的梳理和选择

一、理解后端架构的四个核心维度

  1. 分层与治理维度(你已列出)

    • 接入层:Nginx。负责请求入口、限流、SSL卸载。
    • 网关层:Gateway。负责路由、认证授权、日志、熔断。
    • 业务层:微服务(jar包)。承载核心逻辑,如何划分、调用、治理。
    • 支撑层:缓存(Redis)、消息(MQ)、搜索(ES)。
    • 存储层:MySQL(及其分库分表、读写分离)。
    • 运维观测层:Prometheus(监控)、日志、链路追踪。
  2. 非功能性需求维度(架构的灵魂)

    • 性能:延迟(Latency)与吞吐(Throughput)。例如Nginx能派发多少静态资源。
    • 可用性:SLA(99.9%/99.99%)、故障转移、降级、熔断。
    • 可扩展性:水平扩容(加机器)vs 垂直扩容(换更强大的机器)。
    • 数据一致性:强一致(金融)vs 最终一致(社交)。这决定了MQ和缓存的用法。
  3. 数据流与生命周期维度(追踪一个请求)

    • 用户请求 Nginx Gateway 业务服务(查Redis/ES) 写MQ异步处理 最终落MySQL。
    • 理解每一层数据的读写比例、热度分布、持久化要求
  4. 运维与容量规划维度

    • 如何部署(容器化/物理机)、如何扩缩容、如何应对流量尖峰(秒杀)。
    • 你提到的"短时间接收大量数据"对应削峰填谷 (MQ)、缓存穿透/击穿(Redis)等技术。

二、针对你列出的各个组件:需要做的操作和准备

以一个高并发内容社区(比如知乎)为例,说明每个组件在Linux上的关键操作和准备。

组件 核心作用 部署前准备 (Linux) 短时间高吞吐能力 关键配置/操作
Nginx 静态资源、反向代理、负载均衡 调整 ulimit -n (文件句柄数)、优化内核参数 (net.core.somaxconn)、使用 epoll 模型 QPS:3-5万/秒 (纯静态HTML)。动态请求受后端限制。 worker_processes auto; worker_connections 10240; 开启 sendfile; 配置缓存。
Gateway (如Spring Cloud Gateway) 统一入口、鉴权、路由、限流 JVM堆内存设置 (-Xmx)、GC算法选择 (G1GC)、CPUSet绑定 QPS约1-3万/秒 (取决于鉴权逻辑)。瓶颈常在IO和GC 配置线程池大小、使用非阻塞编程模型 (WebFlux)。
微服务 (jar包) 业务逻辑 同样需JVM调优、健康检查端点、优雅停机配置 取决于业务复杂度。简单服务单实例QPS几千,复杂计算可能仅几百。 服务划分原则:高内聚低耦合,按业务能力 (如订单、用户、商品) 或 DDD限界上下文划分。避免分布式事务。
Redis 缓存、分布式锁、计数器 关闭THP、设置 maxmemory 和淘汰策略 (如 allkeys-lru)、禁用危险命令 (keys, flushall) 单实例10万+/秒 (纯内存操作)。瓶颈在网卡。 主从+哨兵或Cluster集群。开启AOF+RDB混合持久化。
MQ (如Kafka/RocketMQ) 异步解耦、削峰填谷 调整磁盘类型 (NVMe SSD)、设置 文件句柄数内存映射参数 Kafka单机写入可达10万+/秒 (持久化)。 刷盘策略 (异步)、批量发送、分区数设置。核心:削峰------把瞬间10万请求平缓成下游能处理的速率。
MySQL 持久化、事务、强一致性 调整 innodb_buffer_pool_size (70%内存)、innodb_log_file_size、慢查询日志开启 单实例写入QPS约数千 (刷盘限制)。读通过从库扩容。 分库分表 (ShardingSphere/Proxy)、读写分离。主从半同步复制保证不丢数据。
ES 全文检索、日志分析、聚合 调整 heap size (不要超32G)、禁用交换分区、bootstrap.memory_lock 写入QPS数千至数万 (近实时)。查询延迟毫秒级。 索引生命周期管理、分片数规划 (1-2TB一个分片)。
Prometheus 指标监控、告警 本地存储采用SSD,或使用远程存储 (如Thanos/Cortex) 单个Prometheus可处理百万级活跃时序。 配置服务发现 (file_sd/consul)、定义合理采集间隔、告警规则。

"短时间接收大量数据"的能力层 :这本质是流量治理 。不靠单个组件,而是靠全链路协同

  • Nginx 限流(漏桶/令牌桶)
  • Gateway 熔断降级(Sentinel/Hystrix)
  • MQ 削峰填谷(积压在队列里)
  • Redis 缓存热点数据(挡住大部分读请求)
  • MySQL 分库分表 + 写缓冲(如批量提交)

三、如何根据业务场景选择架构?

架构是取舍的艺术。没有最优,只有最合适。下表展示了不同业务场景的典型侧重:

业务场景 核心诉求 技术选型/配置重点 可以弱化或牺牲什么
电商秒杀 超高并发、防超卖 - MQ 做缓冲削峰 - Redis 库存扣减 (Lua脚本) - Nginx 挡在最前限流 - 网关层快速拒绝服务 强一致性 (最终一致即可)、实时复杂查询
金融支付 强一致性、事务、审计 - MySQL 同步复制 + 分布式事务 (Seata/TCC) - MQ 用RocketMQ的事务消息 - 少用缓存,多用数据库锁 绝对高吞吐 (几百TPS可以接受)、响应延迟稍高
社交Feed流 高写 (发帖) + 高读 (刷首页) - 推拉结合模式 :发帖写MQ,粉丝从Redis读收件箱 - ES 用于搜索历史帖子 - CDN存储图片/视频 强一致性 (帖子稍晚出现可以接受)、复杂Join
内容社区 (你举的例子) 读多写少、搜索质量高 - Redis 缓存热门文章 (提前预热) - ES 替代MySQL的LIKE查询 - Gateway 聚合多个微服务数据 (BFF模式) 写入实时性 (刚发布的文章需几秒才可搜到)

决策的一般流程

  1. 估算量级:预期DAU、峰值QPS、数据总量 (日增/月增)。
  2. 明确约束:预算、团队技术栈、延迟要求 (p99 < 100ms?)、可用性 (两个9还是四个9?)。
  3. 识别瓶颈:是读 (加缓存/从库)、写 (分库分表/MQ)、还是计算 (异步/提前预计算)?
  4. 由简到繁 :单体应用 → 数据库读写分离 → 加缓存 → 拆分微服务 → 引入MQ/ES。不要过度设计

相关推荐
小小王app小程序开发1 小时前
盲盒抽赏小程序开发玩法深度分析:核心逻辑、技术实现与合规方案
架构
AI科技星1 小时前
国家重点研发计划项目申报书
人工智能·线性代数·架构·概率论·学习方法
wb043072011 小时前
从接单到出餐——从阿明的“手写菜单“到自动化流水线,看 CI/CD 与 DevOps 的完整旅程
ci/cd·架构·自动化·devops
互联网推荐官1 小时前
上海物联网应用开发技术路径深度解析:协议选型、架构取舍与落地约束
物联网·架构·开发经验·上海
柏舟飞流1 小时前
大数据与 AI 融合:高阶架构与实践
大数据·人工智能·架构
咖啡星人k2 小时前
长亭百智云:全新一代AI基础服务平台深度解读
大数据·人工智能·架构·rag·mcp·百智云
弗锐土豆2 小时前
AI-基于RAG架构的分层AI物资编码治理方案
人工智能·ai·架构·物资编码
_codemonster12 小时前
30分钟快速搭建 Spring Cloud Alibaba 微服务实战(一)
微服务·架构·毕业设计·课程设计
Cosolar13 小时前
从零写一个 Attention Is All You Need
人工智能·面试·架构