讨论下当前生产项目的服务集群架构

接着始皇的说 揭秘 LINUX DO 网站服务器架构

讨论下当前负责的生产项目的集群架构

架构图

graph TD
    A["👤 用户访问"] --> B["☁️ Cloud CDN"];
    B --> C["⚖️ Cloud Load Balancing"];
    C --> D["☸️ K8s 集群 (API & Worker)<br>(2主3从)"];

    subgraph "后端内部服务"
        direction LR

        subgraph "后台工作服务 (K8s Pods)"
            I["🔥 缓存预热服务"];
            J["✍️ 异步写入服务"];
        end
        
        %% Internal Data Stores & MQ
        E["📦 Memorystore for Redis"];
        F["🐘 Cloud SQL for PostgreSQL"];
        H["📨 NSQ 服务"];

        %% Main API Synchronous Flows
        D -- "同步读 (高频)" --> E;
        D -- "同步读/写 (低频)" --> F;
        D -- "发布消息 (高频写)" --> H;
        
        %% Asynchronous Message Consumption
        H -- "消费消息" --> J; 
        
        %% Cache Warming for internal DB
        F -.-> I;
        I -. "预加载数据" .-> E;
        
        %% Async Write for internal DB
        J -. "异步写入" .-> F;
        J -. "更新缓存" .-> E;
    end

    %% External Services & Gateways
    G["🍃 MongoDB Atlas"];
    K["🌐 Cloud NAT"];
    L["🌍 互联网 (其他服务)"];
    
    %% VPC Peering Connection for MongoDB Atlas
    D -- "VPC Peering (内网连接)" --> G;

    %% NAT for all other internet-bound traffic
    D -- "出站流量" --> K;
    K -- "访问" --> L;

    %% Logical data flows via VPC Peering
    G -. "数据源 (经VPC Peering)" .-> I;
    J -. "异步写入 (经VPC Peering)" .-> G;

    %% Advanced Styling
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px,font-size:14px;
    classDef user fill:#e0e7ff,stroke:#5b21b6,stroke-width:2px,color:#312e81;
    classDef gcp fill:#dcfce7,stroke:#16a34a,stroke-width:2px,color:#14532d;
    classDef k8s fill:#fee2e2,stroke:#dc2626,stroke-width:2px,color:#7f1d1d;
    classDef db fill:#fef9c3,stroke:#ca8a04,stroke-width:2px,color:#713f12;
    classDef mq fill:#f3e8ff,stroke:#9333ea,stroke-width:2px,color:#581c87;
    classDef worker fill:#e5e7eb,stroke:#4b5563,stroke-width:2px,color:#1f2937;
    classDef internet fill:#f0f9ff,stroke:#0ea5e9,stroke-width:2px,color:#0c4a6e;

    class A user;
    class B,C,K gcp;
    class D k8s;
    class E,F,G db;
    class H mq;
    class I,J worker;
    class L internet;

    linkStyle 7 stroke:#2563eb,stroke-width:2px,stroke-dasharray: 2 3;

(gemini画的架构图真不咋的)

个人总结: 通过读写分离异步处理多层缓存来最大化系统的吞吐量和响应速 度,同时考虑到成本和运维复杂度 选择自建集群和使用云数据服务

  • 大量使用google cloud中间件服务
  • k8s集群为自建
  • 内部服务为api+rpc 每个服务按负载动态调整pod数量
  • 使用Cloud Nat 作为流量出口
  • 目前月消大概2w+
20 个赞

受始皇和多位佬友的影响 今天坛子里好些个架构讨论帖了。
佬这个算是很高端的缓存架构拉

学习啦~

讨论一下 吸取下大家的建议 以及给其他佬友提供点灵感

好强的说!

2 个赞

出口ip呢,不整个出口ip,就没有和始皇的模板保持一致啊。

太强了,大佬

写漏了 现在加上

强的,生产项目架构

收藏学习了,这是佬个人项目还是公司生产项目啊

生产项目了

佬,要不关联一下始皇的帖子

佬,缓存预热这部分细唆下?

k8s集群搞了5套吗?一套集群多pods也能做到高可用吧

redis + mongodb + postgresql 数据一致性问题。

简单讲下
缓存预热目前主要是两部分构成

  • 静态预设(整个项目在日常使用中经常会触发的请求以及在数据库查询时无法被索引命中的特殊请求 会提前预设规则进行预缓存)
  • 动态调整(结合日志分析服务 定时统计时间范围内高频读请求以及耗时较长读请求进行预热规则的补充)
1 个赞

没有5套 就是一个k8s集群 2个master节点 3个node节点构成 避免因为个别宿主机宕机 导致整体服务瘫痪

明白了 架构太复杂了。需要简化! :rofl:

一致性问题这个 目前异步处理的数据 基本都属于一些只需要最终一致性的就行
异步消费更新数据库 然后失效缓存 新增缓存

有强一致性需求的还是使用的分布式事务

哈哈哈哈 开个玩笑