架构师杂谈:角色、能力与日常

视频讲解:架构模式讲解《架构师杂谈:角色、能力与日常》:

https://www.bilibili.com/video/BV12dfBBvExe/?spm_id_from=333.1387.homepage.video_card.click&vd_source=a70e2c0cb9eb9efc930f60fc953984ca

问题

1)、架构师和初中高级开发有哪些区别?

2)、架构师应具备哪些能力?

3)、如何做一个系统的架构设计?

4)、架构师日常都会做哪些事情?

5)、架构师面试都会问哪些问题?

1、架构师的感官理解。

核心区别总结

|--------|-------------|-------------|--------------|--------------------------------------|
| 维度 | 初级开发 | 中级开发 | 高级开发 | 架构师 |
| 关注点颗粒度 | 功能实现,函数/类 | 模块/接口 | 子系统 | 全局把控整个业务线甚至整个公司的系统 |
| 典型任务 | 实现指定函数、修bug | 设计数据库、写接口文档 | 选框架、拆服务、性能压测 | 选技术栈、写架构文档、选设计模式、定好开发规范、拆团队、控风险 |
| 交付物 | 一个小需求的代码 | 可运行模块+文档 | 高可用子系统 | 一个业务线、或者一个公司的系统的稳定性、高可用、高扩展 |
| 出错影响 | 一个bug单 | 一个模块返工 | 一个子系统重构 | 整个公司系统三天两头崩溃,耗费大量时间和人力去填坑,造成严重的经济损失。 |
| 技术深度 | 会用框架 | 理解原理 | 能调优/扩展 | 能设计/选型/权衡 |
| 决策范围 | 自己代码 | 团队模块 | 技术方案 | 整体技术路线 |

总结:"用全局视角,做能支撑业务长期发展的技术决策"

架构师也分为基础架构师和业务架构师

业务架构师

  • 把业务 "翻译" 成可落地的技术语言

  • 业务架构师不懂业务就等于失去核心价值,核心工作是 "向上对齐战略,向下拆解需求",解决 "业务是什么、业务该怎么做、业务模块怎么拆" 的问题,避免技术开发偏离业务目标,也避免不同业务模块重复建设。

  • 核心工作内容

    • 对接业务方,梳理企业整体业务战略,拆解为可落地的业务目标;

    • 分析核心业务场景(如电商的 "下单 - 支付 - 发货""),绘制端到端的业务流程,消除流程冗余和部门壁垒;

    • 对业务进行领域建模(如 DDD 领域驱动设计),拆分业务域 / 子域,定义各业务模块的边界和交互规则;

    • 输出标准化的业务架构文档,作为应用架构师、开发团队的开发依据,确保技术实现和业务需求一致;

    • 跟进业务迭代,优化业务架构,支撑新业务的快速落地。

基础架构师

搭建所有业务都能复用的 "技术高速公路" 基础架构师聚焦技术底层的通用性和稳定性,核心工作是 "造轮子、搭平台、定标准",解决 "技术底座怎么建、怎么让所有业务系统跑得稳、跑得快、开发省成本" 的问题,避免各业务团队重复开发底层功能,同时保障系统的全局稳定性。

  • 搭建企业通用技术基础设施:如云平台(阿里云 / 自建)、容器化(K8s)、分布式存储 / 数据库、消息中间件(RocketMQ/Kafka)等;
  • 开发通用技术组件 / 平台:如统一认证平台、日志监控平台、接口网关、部署流水线(CI/CD)、配置中心等,让各业务团队直接复用;
  • 制定企业技术规范和标准:如代码规范、数据库设计规范、接口规范、部署规范,确保各业务系统技术实现统一;
  • 做技术底座的性能优化和容灾设计:如服务器集群部署、数据库主从同步、异地多活、限流熔断,保障系统高可用(如秒杀、车险高峰期不宕机);

从职责重心看

  • 普通开发者:接收任务 → 开发 → 测试 → 上线,任务闭环即可。

  • 架构师:从需求诞生到系统退役,全程关注------

    上线前考虑扩展性,上线中监控指标,上线后复盘故障,还要主动挖掘技术债、推动架构演进。

生活场景比喻

建筑行业的建筑师类似于系统架构师

场景:你要盖一栋大楼。

  • 普通程序员 ≈ 工人(砌砖、装电线、刷墙)

  • 项目经理 ≈ 工地包工头(安排工期、协调资源)

  • 系统架构师 ≈ 建筑师(画蓝图、决定结构、选材料、考虑承重、通风、逃生通道等)

架构师不亲自搬砖,但他决定了整栋楼能不能安全、高效、舒适地使用几十年。如果一开始设计错了,后期再怎么努力也很难补救。

观音菩萨类似于系统架构师

以电影里的角色为例:

观音菩萨属于架构师,产品经理是唐僧,猪八戒、沙僧是普通开发,孙悟空是属于资深开发。

2、架构师应具备哪些能力

  • 有部分企业拿架构师来做普通开发的事情,比如要架构师去完成一个业务系统代码的编写,完成一个用户中心系统的编写;

  • 有部分企业分工比较明确,架构师就做架构设计的工作,不写代码,就写文档,这个还真的有;

  • 有部分企业需要架构师,但是架构师的工作也不是很多,所以也会去做一些核心开发的工作。

总得来说,架构师技术要全面、要深入,去解决日常非常棘手的问题,或者去写代码,你都需要做好,要不然有可能你会试用期都过不了,或者代码写得不好、疑难杂症解决不了,也会被非架构岗位的开发人员鄙视。

2.1、核心技术能力(Java 及相关生态)

1. 扎实的 Java 基础

  • 深入理解 JVM(内存模型、GC 算法、类加载机制、JIT)

  • 多线程与并发编程(线程池、锁优化、CAS、AQS、并发工具类)

  • Java 性能调优(CPU、内存、IO 瓶颈分析与优化)

2. 主流框架与中间件深度掌握

  • Spring 全家桶(Spring Framework、Spring Boot、Spring Cloud)

  • 微服务治理(服务注册发现、配置中心、熔断限流、链路追踪)

  • 消息中间件(Kafka、RocketMQ、RabbitMQ 的选型与高可用设计)

  • 缓存系统(Redis 集群、缓存穿透/雪崩/击穿应对、多级缓存)

  • 数据库与 ORM(MySQL 高可用、分库分表、MyBatis/Hibernate 优化)

3. 分布式系统设计能力

  • 分布式理论(CAP、BASE、一致性算法 Paxos/Raft)

  • 分布式事务(Seata、TCC、最终一致性方案)

  • 服务拆分与边界划分(DDD 领域驱动设计实践)

4. 高并发与高性能架构

  • 负载均衡策略(LVS/Nginx/网关层)

  • 异步化与削峰填谷(消息队列、延迟任务)

  • 读写分离、缓存预热、热点数据处理

  • 压测与性能建模(JMeter、Arthas、SkyWalking)

5. 高可用与容灾能力

  • 故障转移与自动恢复(集群、主从切换)

  • 限流降级熔断(Sentinel、Hystrix)

  • 多活/异地多活架构设计

  • 监控告警体系(Prometheus + Grafana + ELK)

2.2、系统架构设计能力

1. 架构方法论

  • 分层架构、微服务架构、各种架构模式。

  • 架构演进路径(单体 → SOA → 微服务 → 云原生)

  • 技术选型评估(成本、成熟度、社区、团队匹配度)

  • 架构模式都有哪一些

2. 可扩展性与可维护性设计

  • 模块解耦、接口契约、插件化设计

  • 技术债管理与重构策略

  • 自动化部署与 DevOps 流水线(CI/CD)

3. 安全性设计

  • 认证授权(OAuth2、JWT、RBAC/ABAC)

  • 数据安全(加密、脱敏、防泄漏)

  • 防攻击能力(SQL 注入、XSS、CSRF、DDoS 防护)

2.3、工程与运维能力

1. 云原生与基础设施

  • 容器化(Docker、Podman)

  • 编排系统(Kubernetes)

  • 云平台使用(AWS/Aliyun/Tencent Cloud 的 PaaS/SaaS 服务)

2. 可观测性

  • 日志(ELK)

  • 链路追踪(Tracing)

  • 健康检查

2.4、软技能与综合素养

1. 业务理解与抽象能力

  • 能将业务需求转化为技术方案

  • 识别核心域与支撑域(结合 DDD)

  • 平衡"快"与"稳"------短期交付 vs 长期架构健康

2. 沟通与影响力

  • 向上管理:向技术总监/CTO 清晰表达架构决策

  • 向下赋能:指导开发团队落地架构规范

  • 跨部门协作:与产品、测试、运维高效协同

3. 技术前瞻性与学习能力

  • 关注行业趋势(如 AI 工程化、低代码、WASM)

  • 评估新技术是否值得引入(避免"为了新而新")

4. 风险控制与决策能力

  • 识别架构中的单点故障

  • 制定回滚与应急预案

  • 在不确定条件下做出合理技术决策

2.5、宽广的视野

  • 技术的深度和广度

  • 具备技术战略规划能力(3~5 年技术路线图)

  • 其他知识的综合能力。

3、如何做一个系统的架构设计

3.1 先理解架构模式都有哪一些

|-------------|-----------------|------------------------------------------|-------------------------------------------|--------------------------------|-------------------------------|
| 分类维度 | 架构模式名称 | 别名 / 相关术语 | 核心思想 | 典型应用场景 | 备注 |
| 1. 控制与拓扑结构 | 中心化架构 | Centralized | 所有关键逻辑/状态由中心节点控制 | 传统 ERP、单点登录(SSO) | 易成性能瓶颈 |
| | 去中心化架构 | Decentralized | 节点对等,无单一控制点 | 区块链、P2P 文件共享 | 强调自治与容错 |
| | 客户端-服务器架构 | Client-Server | 客户端发起请求,服务器响应处理 | Web 应用、邮件系统 | 最基础的网络架构 |
| | 主从架构 | Master-Slave, Primary-Replica | 主节点负责写,从节点负责读或备份 | MySQL 主从、Redis 哨兵 | 区别于"主备"(Standby 不服务流量) |
| | P2P 架构 | Peer-to-Peer | 每个节点既是客户端又是服务器 | BitTorrent、区块链节点 | 原文"点对点模式" |
| | 混合架构 | Hybrid | 中心控制 + 边缘自治协同 | IoT、CDN、云边协同 | 现实中最常见形态 |
| | 多条带架构 | Multi-Stripe, 单元化多活, LDC | 按业务维度切分为多个独立"条带",每条带自包含 | 支付宝、银行核心系统 | 高可用高级实践 |
| | 烟囱式架构(反模式) | Silo Architecture | 各系统独立建设,数据孤岛 | 遗留部门级系统 | 需通过中台/微服务重构 |
| 2. 部署与服务形态 | 单体架构 | Monolith | 所有功能打包为一个可部署单元 | 初创项目、内部工具 | 开发简单,扩展困难 |
| | 微服务架构 | Microservices | 拆分为独立部署、松耦合的服务 | 电商、SaaS 平台 | 需配套注册中心、网关、链路追踪 |
| | Serverless 架构 | FaaS / BaaS | 按需执行函数,无需管理服务器 | 事件处理、轻量 API | 成本按调用计费 |
| | 服务网格架构 | Service Mesh | 通过 Sidecar 代理管理服务通信 | Istio、Linkerd 场景 | 数据面与控制面分离 |
| | 插件化架构 | Plugin / Modular | 核心引擎 + 动态加载插件 | VS Code、浏览器扩展 | 支持热插拔与生态扩展 |
| 3. 数据与事件模型 | 事件驱动架构 | EDA | 组件通过异步事件通信 | 实时通知、订单履约 | 高解耦、最终一致性 |
| | CQRS | Command Query Responsibility Segregation | 读模型与写模型分离 | 高并发读写系统 | 常配合事件溯源 |
| | 事件溯源 | Event Sourcing | 状态由事件日志重建 | 金融交易、审计系统 | 可回溯任意历史状态 |
| | 流处理架构 | Stream Processing | 数据以连续流形式处理 | 实时风控、IoT 监控 | Kafka + Flink/Spark Streaming |
| | 数据网格 | Data Mesh | 数据作为产品,由领域团队自治 | 大型企业数据平台 | 新兴范式,打破中心化数仓 |
| 4. 领域与代码组织 | 分层架构 | n-Tier, Layered | 表现层 - 业务层 - 数据层分离 | 传统企业应用 | 原文"分层模式",易跨层耦合 |
| | MVC 架构 | Model-View-Controller | 模型、视图、控制器分离 | Web 框架(Spring MVC、Rails) | 原文"MVC 模式" |
| | MVP / MVVM | Model-View-Presenter / ViewModel | 更强 UI 解耦 | Android(MVP)、Vue/Angular(MVVM) | 前端常用 |
| | 六边形架构 | Ports and Adapters | 核心业务与外部依赖解耦 | DDD 实践项目 | 适配器隔离数据库/UI/第三方 |
| | 洋葱架构 | Onion Architecture | 依赖由外向内,内层不依赖外层 | 复杂业务系统 | 与六边形思想相近 |
| | Clean 架构 | Clean Architecture | Entities → Use Cases → Interface Adapters | Robert C. Martin 推荐 | 强调依赖规则 |
| | 领域驱动设计(DDD) | Bounded Context, Aggregate, Entity | 以业务领域为核心,通过限界上下文划分系统边界,聚焦核心复杂性 | 复杂业务系统(如金融、电商、ERP) | 通常与六边形/洋葱/Clean 架构结合使用 |
| 5. 中介与通信机制 | 代理架构 | Broker, Mediator | 通过中介协调组件通信 | Kafka、RabbitMQ、服务注册中心 | 原文"代理模式" |
| | 事件总线 | Event Bus | 通过中央总线发布/订阅事件 | Android、GUI 框架、微服务 | 原文"事件总线模式" |
| | 管道-过滤器架构 | Pipes and Filters | 数据流经多个处理阶段 | 编译器、ETL、音视频处理 | 原文"管道-过滤器模式" |
| 6. 高可用与容灾 | 主备架构 | Active-Standby | 主节点服务,备节点待命切换 | 数据库高可用 | RTO 较高 |
| | 多活架构 | Active-Active, Multi-Region | 多节点同时提供读写服务 | 全球化 SaaS、支付系统 | 需解决数据冲突 |
| | 单元化架构 | Cell-Based, Sharding | 按用户/地域分片,每单元完整 | 超大规模系统 | 支撑"多条带"部署 |
| | 异地多活 | Geo-Redundant Multi-Active | 跨城市/国家多活部署 | 金融级核心系统 | 网络延迟是主要挑战 |
| 7. 前后端协作 | BFF | Backend For Frontend | 为不同前端定制专属后端 | App/Web/小程序共存 | 避免通用 API 无法满足多端 |
| | SSR / SSG / ISR | 服务端/静态/增量渲染 | 优化首屏加载与 SEO | Next.js、Nuxt.js 应用 | 现代前端架构演进 |
| 8. 租户与隔离模型 | 单租户架构 | Single-Tenant | 一套系统服务一个客户 | 定制化企业软件 | 成本高,隔离强 |
| | 多租户架构 | Multi-Tenancy | 一套系统服务多个客户 | Salesforce、钉钉、SaaS | 可按 DB/Schema/TenantId 隔离 |
| 9. AI 与专用系统 | 黑板架构 | Blackboard System | 多知识源协作求解问题 | 语音识别、医疗诊断 | 原文"黑板模式",AI/专家系统专用 |
| | 解释器架构 | Interpreter System | 解析并执行专用语言(DSL) | SQL 引擎、规则引擎、脚本系统 | 原文"解释器模式",非 GoF 设计模式 |
| 10. 网络流量方向 | 南北向架构 | North-South Traffic | 用户 ↔ 系统边界(入口/出口) | API 网关、防火墙、WAF | 关注外部安全与接入 |
| | 东西向架构 | East-West Traffic | 服务 ↔ 服务内部通信 | 微服务调用、Service Mesh | 关注内部治理与可观测性 |

3.1.1、模拟一个企业:好生活集团

三个业务线:

  • 外卖配送平台 ------ "快送达"

    • 用户通过 App 下单点餐(如黄焖鸡、奶茶、烧烤)

    • 餐厅接单 → 骑手取餐 → 送到用户手中

    • 核心功能:下单、支付、骑手调度、订单跟踪

  • 社区团购平台 ------ "邻里购"

    • 居民在微信群或小程序拼团买菜、水果、日用品

    • 第二天到小区自提点取货

    • 核心功能:开团、参团、库存管理、团长分佣

  • 家政服务平台 ------ "安心帮"

    • 用户预约保洁、维修、老人陪护等上门服务

    • 平台派单给认证服务人员

    • 核心功能:预约、服务人员匹配、评价、结算

3.1.2、中心化架构

3.1.3、烟囱式架构

3.1.4、CQRS架构

CQRS 核心思想
  • 命令(Command):处理写操作(如下单、支付)

  • 查询(Query):处理读操作(如查看订单状态、骑手位置)

  • 事件驱动:通过 Event 消息队列解耦系统组件

关键模块说明

|------|----------------------------------------------|
| 模块 | 职责 |
| 命令侧 | 执行所有变更操作,保证事务一致性,使用 MySQL 作为主数据源 |
| 查询侧 | 提供高性能读接口,基于缓存(Redis)和搜索引擎(ES)优化体验 |
| 事件总线 | 使用 RabbitMQ 或 RocketMQ 实现异步通知,确保最终一致性 |
| 数据同步 | 订单创建后 → 发布 OrderCreated 事件 → 查询侧监听并更新缓存/ES |

典型流程示例(以"用户下单"为例)
  1. 用户在 App 中点击"下单"

  2. 请求经 API 网关 → 到达命令侧的 OrderCmd

  3. OrderCmd 创建订单(写入 MySQL),状态为 PENDING

  4. 触发事件:publish("OrderCreated", orderId)

  5. 查询侧监听到事件:

    • 更新 Redis 缓存中的订单状态

    • 写入 ES 用于搜索

  6. 用户立即看到"订单已提交",无需等待数据库同步

  7. 支付成功后,触发 PaymentSuccess 事件 → 更新订单状态为 PAID

伪代码
  1. 定义 Command 和 Query 对象

    复制代码
    // CreateOrderCommand.java
    public record CreateOrderCommand(
        String userId,
        String addressId,
        List<OrderItem> items,
        String bizType // "FOOD", "GROUP", "SERVICE"
    ) {}
    
    // GetOrderListQuery.java
    public record GetOrderListQuery(
        String userId,
        int page,
        int size
    ) {}
  2. 定义 Handler 接口

    复制代码
    // CommandHandler.java
    public interface CommandHandler<C, R> {
        R handle(C command);
    }
    
    // QueryHandler.java
    public interface QueryHandler<Q, R> {
        R handle(Q query);
    }
  3. 实现具体 Handler

创建订单命令处理器

复制代码
// CreateOrderHandler.java
@Service
public class CreateOrderHandler implements CommandHandler<CreateOrderCommand, String> {

    @Autowired private OrderDomainService orderDomainService;
    @Autowired private UserClient userClient;
    @Autowired private PaymentClient paymentClient;
    @Autowired private ApplicationEventPublisher eventPublisher;

    @Override
    @Transactional
    public String handle(CreateOrderCommand cmd) {
        // 1. 获取用户地址
        Address addr = userClient.getAddress(cmd.userId(), cmd.addressId());

        // 2. 冻结金额
        boolean frozen = paymentClient.freezeAmount(cmd.userId(), calculateTotal(cmd.items()));
        if (!frozen) throw new PaymentException("余额不足");

        // 3. 创建订单(领域模型)
        Order order = Order.create(
            cmd.userId(),
            addr,
            cmd.items(),
            OrderStatus.PENDING,
            BizType.valueOf(cmd.bizType())
        );

        // 4. 持久化到写库
        orderRepository.save(order);

        // 5. 发布事件(供读模型同步)
        eventPublisher.publishEvent(new OrderCreatedEvent(order.getOrderId()));

        return order.getOrderId(); // 返回订单ID
    }
}

查询订单列表处理器

复制代码
// GetOrderListHandler.java
@Service
public class GetOrderListHandler implements QueryHandler<GetOrderListQuery, PageResult<OrderView>> {

    @Autowired private OrderReadRepository orderReadRepository; // 读库 Repository

    @Override
    public PageResult<OrderView> handle(GetOrderListQuery query) {
        // 直接从 Redis 或 ES 查询视图模型
        return orderReadRepository.findOrdersByUserId(
            query.userId(),
            query.page(),
            query.size()
        );
    }
}

控制器(Controller)

复制代码
@RestController
@RequestMapping("/api/write/")
public class OrderWriteController {

    @Autowired private CommandBus commandBus;   // 命令总线
    @Autowired private QueryBus queryBus;       // 查询总线

    // 写操作 → 走 Command
    @PostMapping("/orders")
    public ResponseEntity<String> createOrder(@RequestBody CreateOrderRequest req) {
        CreateOrderCommand cmd = new CreateOrderCommand(
            req.getUserId(),
            req.getAddressId(),
            req.getItems(),
            req.getBizType()
        );
        String orderId = commandBus.send(cmd); // 内部调用 CreateOrderHandler
        return ResponseEntity.ok(orderId);
    }
}

@RestController
@RequestMapping("/api/read/")
public class OrderReadController {

    @Autowired private CommandBus commandBus;   // 命令总线
    @Autowired private QueryBus queryBus;       // 查询总线

    // 读操作 → 走 Query
    @GetMapping("/orders")
    public PageResult<OrderView> getOrderList(
        @RequestParam String userId,
        @RequestParam(defaultValue = "0") int page,
        @RequestParam(defaultValue = "10") int size
    ) {
        GetOrderListQuery query = new GetOrderListQuery(userId, page, size);
        return queryBus.send(query); // 内部调用 GetOrderListHandler
    }
}

实现简易 CommandBus / QueryBus

复制代码
@Component
public class SimpleCommandBus {
    private final Map<Class<?>, CommandHandler<?, ?>> handlers = new HashMap<>();

    public <C, R> R send(C command) {
        CommandHandler<C, R> handler = (CommandHandler<C, R>) handlers.get(command.getClass());
        if (handler == null) throw new IllegalArgumentException("No handler for " + command.getClass());
        return handler.handle(command);
    }

    // 在 Spring 启动时注册所有 Handler
    @PostConstruct
    public void init() {
        // 自动扫描所有 CommandHandler Bean 并注册
    }
}

关键设计原则总结

|------|-------------------------------------------------------|
| 原则 | 说明 |
| 单一职责 | 每个 Handler 只处理一个 Command/Query |
| 无状态 | Handler 是无状态的服务类,可被 Spring 管理 |
| 事务边界 | Command Handler 通常加 @Transactional,Query Handler 不加 |
| 读写分离 | 写入 MySQL,读取 Redis/ES |
| 事件驱动 | Command 成功后发布事件,更新读模型 |

技术选型建议

|--------|-------------------------------------|
| 组件 | 推荐技术 |
| 命令侧 | Spring Boot + JPA + MySQL |
| 查询侧 | Spring Data + Redis + Elasticsearch |
| 事件总线 | RabbitMQ / RocketMQ |
| API 网关 | Spring Cloud Gateway |
| 缓存 | Redis(热点数据) |
| 搜索 | Elasticsearch(订单搜索、商品推荐) |

与中心架构对比

|-------|-------------|-----------|
| 特性 | 中心化架构 | CQRS 架构 |
| 读写性能 | 一体,受限于单一数据库 | 分离,可独立扩展 |
| 扩展性 | 有限 | 高 |
| 一致性 | 强一致性 | 最终一致性 |
| 开发复杂度 | 低 | 中高(需事件驱动) |
| 适用场景 | 初期快速上线 | 高并发、复杂业务 |

3.1.5、单体架构

3.1.6、多条带架构Multi-Stripe

什么是"多条带架构"?
🔹 核心思想
  • 将整个系统按用户维度(如用户 ID、手机号、城市)水平切分为 N 个"条带"(Stripe)

  • 每个条带是完全自包含的单元:包含完整的应用 + 数据库 + 缓存 + MQ

  • 用户请求始终路由到其所属条带,实现数据隔离与故障隔离

🔹 优势

|---------|-----------------|
| 优势 | 说明 |
| 无限水平扩展 | 加机器 = 加条带 |
| 故障隔离 | 一个条带宕机,不影响其他用户 |
| 异地多活友好 | 每个条带可部署在不同城市 |
| 简化分布式事务 | 90% 以上操作在单条带内完成 |


生活集团的多条带划分策略

我们按 用户 ID 的哈希值 划分条带(也可按城市、手机号前缀等):

复制代码
条带 0: user_id % 4 == 0 → 条带 A
条带 1: user_id % 4 == 1 → 条带 B
条带 2: user_id % 4 == 2 → 条带 C
条带 3: user_id % 4 == 3 → 条带 D

每个条带内部包含:

  • 完整的业务服务(快送达、邻里购、安心帮)

  • 独立的 MySQL、Redis、RabbitMQ

  • 独立的 API 网关副本


多条带架构图
关键组件说明
  1. 全局流量调度器(Global Router)
  • 功能:根据 user_id 计算所属条带

  • 实现方式:

    • 前端 SDK:App 内置路由逻辑

    • 智能 DNS:返回对应条带的 VIP

    • 统一网关:如 Spring Cloud Gateway + 自定义路由规则

  1. 条带内自包含
  • 每个条带拥有:

    • 完整的业务逻辑(无需跨条带调用)

    • 独立数据库(避免跨库 JOIN)

    • 独立缓存(Redis 实例隔离)

    • 独立消息队列(避免消息堆积影响全局)

  1. 跨条带场景处理

|----------------|--------------------------------|
| 场景 | 解决方案 |
| 团长开团(用户来自不同条带) | 团长所在条带作为"主条带",其他用户请求代理到该条带 |
| 全局报表 | 通过 数据同步(Binlog + Flink)汇总到数据仓库 |
| 客服查单 | 运营后台走 全局只读视图,聚合各条带数据 |

部署架构

与中心化架构对比

|-------|----------|-----------|------------------|
| 维度 | 中心化架构 | 微服务架构 | 多条带架构 |
| 扩展性 | 有限(垂直扩展) | 中(服务级扩缩容) | 极高(条带级无限扩展) |
| 故障影响 | 全局崩溃 | 单服务故障 | 单条带故障,仅影响 25% 用户 |
| 数据一致性 | 强一致 | 最终一致 | 条带内强一致,跨条带最终一致 |
| 运维复杂度 | 低 | 中 | 高(需自动化调度) |
| 适用阶段 | 初创期 | 成长期 | 超大规模(千万级 DAU) |


说明:如果你现在要设计一个新的系统、或者要重构一个系统,你要考虑当前的架构、当前的痛点,解决方案是什么?架构模式是死的,不同的企业、不同的场景需要灵活使用,目的就是解决痛点,就比如说招式是死的,人是活的,能打败对手就是最好的武功。

我们要做的是把一件事情做得天衣无缝,当然,最终结果还是可能会出现一些问题的,只是我们做的时候要考虑周全。架构要匹配当前公司的业务情形,没有一个完美的架构模式可以适用于所有的系统。

3.2 架构设计文档的编写

很多人对"写文档"有天然抵触------觉得是形式主义、浪费时间。但是没有文档的架构,等于没有架构。

代码会变,人员会走,只有清晰的架构文档能沉淀系统的核心设计思想,成为团队共识的"锚点"。

架构设计文档在不同的企业有不同的格式,不过基本上都要包括以下内容:

https://blog.csdn.net/congzi1984/article/details/158321057?spm=1011.2415.3001.5331

1、背景、目的、概述

2、场景说明、需求说明

3、架构设计

3.1)、总体架构

3.2)、业务架构

3.3)、应用架构

企业级应用架构:

单个系统的应用架构:

3.4)、技术架构

3.5)、网络架构

3.6)、部署架构

4、微服务设计

4.1)、微服务功能边界

5、数据库设计

6、成本与收益估算

7、版本演进计划

4、架构师日常都会做哪些事情

以上的方法论、需要掌握的技术大家都懂,那么真正有一个项目交给你了,你作为一个架构师需要做哪些工作呢?

架构师一大半的时间都是在拉通会议、沟通各种事情。剩下的时间就是写文档和写代码了。

1)、架构设计和开发:需求分析、需求评审、部分或者完整的产品设计、架构设计、开发。比如:领导指出了现在业务上的一个痛点,那么接下来你就开始全方位调研这个痛点的背景、跟相关部门沟通这些痛点的场景,然后你就要开始思考这个痛点的解决方案;接下来你形成一个初步的技术可行性方案,有时还要做一个实现demo,然后你拿着这个方案,拉起会议,跟领导阐述这个方案,领导认可以后;接下来你就开始做这个方案的产品设计、系统架构设计。有些公司可能还需要做指导开发的系统设计、概要设计、详细设计。

2)、自我驱动:自己主动去发现问题,挖掘需求,不断提升系统稳定性。。。比如:你观察到系统的响应越来越慢了、观察到数据量指数增长,很快就会引起生产问题了,开发人员的代码质量越来越低了,等等。。各种各样的问题,发现问题了,你就要跟领导反馈,让领导知道这个问题,然后去解决这个问题。

3)、沟通:对上、对下、平级、跨部门的沟通能力

4)、项目的推动落地:比如:领导提出一个痛点,你需要拉通相关的业务部门沟通背景、需求,跟领导沟通增加人力,推动开发、测试、上线,以及上线后要推动业务部门去使用,不断迭代。

5)、文档:比如写需求分析文档、概要设计文档、详细设计文档、系统设计文档、架构设计文档、调研文档等等,都需要文档去说明清楚。

6)、运维:比如:K8S的运维、容器的操作、线上问题的查找,比如使用arthas查找哪些接口的响应时间过高,这些都需要运维知识。

7)、新技术调研:比如:MYSQL升级到分布式数据库、使用AI建立智能客服系统。

8)、管理团队:比如:团队中出现一些不好的风气、团队经常出现项目延期。

9)、解决各种疑难杂症、棘手问题:比如:网关在高峰期响应时间变长,架构问题导致大量的重复造轮子。

10)、线上系统稳定性关注与处理:比如:

5、架构师面试都会问哪些问题

不同公司有不同的要求,基础架构师与业务架构师有不同的问题倾向。

有些公司对于架构师和高级开发的界限划分的不是很明显,有些就比较明显。

一般架构师面试会有至少3轮面试,面试4、5轮的较多,比如1面是公司的架构师的初面,初面过了以后,下一面就是技术总监或者部门领导面试,三面可能还会有个跟这岗位的相关业务领导或者技术领导的面试,四面一般是会有个高层面试,这一面一般不会问技术相关问题,而是看眼缘,看你有没有气场,进来后能不能镇得住各种人,看你对公司的了解、认可度以及长期规划等。

5.1 你的技术深度与广度

就是针对公司的要求、面试官本身的理解,对技术深度和广度的提问,

比如问你工作中遇到哪些问题,你是怎么解决的。这是你就要挑一些有技术深度的场景来回答,比如一次OOM的排查过程、比如系统存在的一些架构问题你是如何解决的。

5.2 你的架构设计能力

比如要你设计一个什么什么样的系统,一般这个系统的背景是海量数据,要求高并发的。然后问你要如何设计,为什么这么设计。这时你就需要在极短时间内,大脑迅速思考。你的回答要清晰有条理。

5.3 你的沟通表达能力

这个从你全程的面试过程中就可以得出结论,说话吞吞吐吐,一堆废话,说不到重点,基本上不到一分钟就直接pass掉。

也可能会问你在遇到一些问题时,如何跟下级、平级、上级沟通。

5.4 你的团队管理能力

比如问你一个团队有一个经常性唱反调的同事,你应该需要怎么处理。

5.5 你的思维敏捷

这个通常是从你的面试过程中的沟通表达能力观察的,也会问你一个实际的场景,让你迅速给出解决方案,这时你要回答重点,不要说其他无关紧要的东西,比如你说解决方案有两种,方案1:第一步,第二步这样清晰的回答。

5.6 大型系统的设计开发经验

一般就是问你:你认为最有代表性的项目,然后基于这个项目深入的分析,比如在海量数据的背景下,怎么实现数据的快速查找,怎么实现系统的高并发的。

相关推荐
忙碌5442 小时前
实时流处理架构深度剖析:Apache Flink在实时数仓与风控系统的工程实践
架构·flink·apache
笨蛋不要掉眼泪2 小时前
从零构建微服务网关:Spring Cloud Gateway 核心原理与实战配置详解
java·微服务·云原生·架构
悠闲蜗牛�2 小时前
下一代API网关深度实践:基于Spring Cloud Gateway的云原生网关架构与治理平台
微服务·云原生·架构
笨蛋不要掉眼泪2 小时前
Spring Cloud Gateway 核心实战:断言(Predicate)的长短写法与自定义工厂详解
java·前端·微服务·架构
特立独行的猫a2 小时前
基于HarmonyOS ArkTS的MVVM架构最佳实践
华为·架构·harmonyos·mvvm·最佳实战
Max_uuc2 小时前
【架构心法】炸毁巨石阵:从单体巨兽到微内核 (Microkernel) 插件化架构的 Qt C++ 工业软件演进
c++·qt·架构
AC赳赳老秦2 小时前
2026云原生AI规模化趋势预测:DeepSeek在K8s集群中的部署与运维实战
运维·人工智能·云原生·架构·kubernetes·prometheus·deepseek
桂花很香,旭很美2 小时前
Anthropic Agent 工程实战笔记(五)评测与 Eval
笔记·架构·agent
lizhongxuan9 小时前
AI 系统架构
架构