<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>架构 on IT 运维小秋</title>
        <link>/tags/%E6%9E%B6%E6%9E%84.html</link>
        <description>Recent content in 架构 on IT 运维小秋</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>chenwx716@139.com</managingEditor>
        <webMaster>chenwx716@139.com</webMaster>
        <lastBuildDate>Sun, 15 Mar 2026 12:53:32 +0800</lastBuildDate><atom:link href="/tags/%E6%9E%B6%E6%9E%84/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>软件系统架构设计</title>
        <link>/p/soft-base-standardization.html</link>
        <pubDate>Sun, 15 Mar 2026 12:53:32 +0800</pubDate>
        <author>chenwx716@139.com</author>
        <guid>/p/soft-base-standardization.html</guid>
        <description>&lt;h2 id=&#34;基本公式---三板斧&#34;&gt;基本公式 - 三板斧&lt;/h2&gt;
&lt;p&gt;性能优化&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;缓存&lt;/li&gt;
&lt;li&gt;异步&lt;/li&gt;
&lt;li&gt;并行&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;一致性&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;raft 多数节点投票&lt;/li&gt;
&lt;li&gt;双写: 附加一致性校验 or 版本控制&lt;/li&gt;
&lt;li&gt;分布式事务 / 最终一致性&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;安全&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;隔离&lt;/li&gt;
&lt;li&gt;升级&lt;/li&gt;
&lt;li&gt;权限&lt;/li&gt;
&lt;li&gt;审计&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;高并发&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;队列&lt;/li&gt;
&lt;li&gt;分流&lt;/li&gt;
&lt;li&gt;熔断 / 降级&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;秒杀&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;限流&lt;/li&gt;
&lt;li&gt;队列&lt;/li&gt;
&lt;li&gt;锁: 避免超售&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;高可用&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;多副本&lt;/li&gt;
&lt;li&gt;自动故障转移&lt;/li&gt;
&lt;li&gt;自愈&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;高可用架构设计---基础设施&#34;&gt;高可用架构设计 - 基础设施&lt;/h2&gt;
&lt;h3 id=&#34;cap-定理&#34;&gt;CAP 定理&lt;/h3&gt;
&lt;p&gt;分布式环境中有一个不可能的三角 CAP 定理: 一致性, 可用性, 分区容错性;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C(Consistency)一致性: 所有节点在同一时刻看到相同的数据;&lt;/li&gt;
&lt;li&gt;A(Availability)可用性: 每个请求都能收到(非错误)响应, 但不保证数据是最新的;&lt;/li&gt;
&lt;li&gt;P(Partition tolerance)分区容错性: 系统在网络分区(节点间消息丢失或延迟)时仍能继续运行;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在分布式系统中, 当发生网络分区(P 必须满足)时, 无法同时保证 C 和 A, 只能在 C 和 A 之间做取舍;&lt;/p&gt;
&lt;p&gt;典型选择:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CP 系统: 放弃 A, 保证强一致性(如 Zookeeper, Etcd, HBase); 分区时可能拒绝服务;&lt;/li&gt;
&lt;li&gt;AP 系统: 放弃 C, 保证最终一致性(如 Cassandra, CouchDB, Eureka); 分区时允许读到旧数据;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;大部分互联网业务(如商品库存, 用户信息)倾向于 AP + 最终一致性, 配合消息队列, 对账修复来弱化不一致窗口;&lt;br /&gt;
金融, 分布式锁等场景必须用 CP(如 Raft), 允许在分区时短暂不可用;&lt;/p&gt;
&lt;h3 id=&#34;多副本&#34;&gt;多副本&lt;/h3&gt;
&lt;p&gt;双中心&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;同城主备&lt;/li&gt;
&lt;li&gt;同城双活&lt;/li&gt;
&lt;li&gt;异地备份&lt;/li&gt;
&lt;li&gt;异地双活&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;两地三中心:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;同城双中心&lt;/li&gt;
&lt;li&gt;异地灾备中心&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;云环境&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;多 AZ&lt;/li&gt;
&lt;li&gt;混合云&lt;/li&gt;
&lt;li&gt;多 AZ + IDC 同城双活&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;延迟同步:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;核心数据可以附加延迟备份, 避免类似 DDL 语句造成全量数据影响;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相关有状态组件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;数据库&lt;/li&gt;
&lt;li&gt;缓存&lt;/li&gt;
&lt;li&gt;MQ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;多副本的核心问题&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一致性: 数据如何同步, 冲突如何解决&lt;/li&gt;
&lt;li&gt;流量如何选择入口&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;用户入口问题&#34;&gt;用户入口问题&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;DNS/CDN
&lt;ul&gt;
&lt;li&gt;DNS 配置多个地址, 随机取一条访问&lt;/li&gt;
&lt;li&gt;智能 DNS, 就近路由, 故障转移&lt;/li&gt;
&lt;li&gt;CDN 回源时, 按策略进入指定区域&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;网关重定向: 智能 DNS 解析到 任意区域网关服务, 由网关服务根据条件将用户请求重定向到合适区域&lt;/li&gt;
&lt;li&gt;前置: 客户端内置多个路径, 根据算法选择路径&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;多中心数据一致性&#34;&gt;多中心数据一致性&lt;/h4&gt;
&lt;p&gt;根据 CAP 和需求进行取舍;&lt;/p&gt;
&lt;p&gt;数据冲突&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;同时只有 1 个数据中心可写, 将冲突问题改为同步问题&lt;/li&gt;
&lt;li&gt;细化的全局锁, 获得锁的中心才能写数据, 同步完成才解锁&lt;/li&gt;
&lt;li&gt;raft 协议, leader 节点可写;&lt;/li&gt;
&lt;li&gt;数据拆分, 设计成不同中心写的数据完全不会冲突; 例如 uid 单双数进入不同中心;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;数据同步&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;异步复制; 网络分区时, 暂时使用旧数据, 后续进行数据补偿和修复;&lt;/li&gt;
&lt;li&gt;强同步, 只有对方机房同步成功, 本端才能成功;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;灾备设计&#34;&gt;灾备设计&lt;/h3&gt;
&lt;p&gt;传统的灾备只是单向同步数据, 日常没有流量; 导致在关键时刻没人有信心敢立即切流量过去;&lt;/p&gt;
&lt;p&gt;通常启用灾备中心并切换流量后, 都会伴随较多的人工操作和各种大小问题;&lt;/p&gt;
&lt;p&gt;所以正确的灾备中心设计, 不应该只做备, 而是日常就要有全业务的小比例流量, 才能保障在关键时刻能顶上;&lt;/p&gt;
&lt;p&gt;灾备设计重点&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入口流量怎么过来&lt;/li&gt;
&lt;li&gt;数据一致性; 包括数据库, 中间件, 缓存等所有有状态数据节点的数据;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;自愈&#34;&gt;自愈&lt;/h3&gt;
&lt;p&gt;发生故障时的自我恢复能力, 应用程序有内部自愈和外部自愈两类;&lt;/p&gt;
&lt;p&gt;内部自愈: 核心是防止自己死了;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;例如当调用数据库不通时, 不再接收新业务请求, 等通了再接收新连接, 避免自己死掉&lt;/li&gt;
&lt;li&gt;自我监控内存信息, 当无可用内存时, 主动释放资源&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;外部自愈: 死了后能被拉起来&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;脚本循环检测, 发现死了重新拉起来, 并且重写加入集群;&lt;/li&gt;
&lt;li&gt;更多逻辑判断, 处理故障后再拉起来&lt;/li&gt;
&lt;li&gt;在程序故障之前提前进行处理, 如通过监控发现程序可能出现内存泄漏, 主动重启或告警&lt;/li&gt;
&lt;li&gt;参考 k8s 的 operator 模式, 由一个管理控制器来运维;&lt;/li&gt;
&lt;li&gt;可回滚, 例如新版本刚发布的场景, 能自动回滚;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;自动故障转移&#34;&gt;自动故障转移&lt;/h3&gt;
&lt;p&gt;一般来说特指将发往故障节点的流量, 转发到正确节点上去;&lt;/p&gt;
&lt;p&gt;相关策略&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;例如 keepalived 的故障检测和 VIP 漂移&lt;/li&gt;
&lt;li&gt;对于网关服务, 参考 nginx 应该对上游有故障检测和屏蔽机制;&lt;/li&gt;
&lt;li&gt;微服务体系种, 故障检测和屏蔽能力 转移到了注册中心上去;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;高可用架构设计---应用服务&#34;&gt;高可用架构设计 - 应用服务&lt;/h2&gt;
&lt;p&gt;核心是避免外部流量冲垮自己&lt;/p&gt;
&lt;h3 id=&#34;服务降级&#34;&gt;服务降级&lt;/h3&gt;
&lt;p&gt;在高压力或某一块业务故障后, 进行服务降级; 屏蔽非核心业务, 以保障核心基础服务的可用;&lt;/p&gt;
&lt;p&gt;相关策略&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;降级开关集中化: 例如将开关放置在 nacos 配置内拉取, 或由运维平台内通过接口推送;&lt;/li&gt;
&lt;li&gt;开关前置化: 例如在网关层(nginx or gateway)配置降级策略, 直接响应某接口的请求, 或转移流量;&lt;/li&gt;
&lt;li&gt;次要功能可由同步改为延迟异步策略&lt;/li&gt;
&lt;li&gt;降低一致性需求, 比如点赞数, 可以降级为暂时只使用本地缓存, 不读数据库或 redis;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;限流&#34;&gt;限流&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;应对恶意流量&lt;/li&gt;
&lt;li&gt;应对突增的超出业务处理能力的流量&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;相关策略&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;网关层就进行限流拦截&lt;/li&gt;
&lt;li&gt;恶意请求: 使用 Nginx Deny 策略或者 iptables 或 waf 联动&lt;/li&gt;
&lt;li&gt;对于能穿透到数据库的核心请求做 limit 处理&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>网关</title>
        <link>/p/gateway.html</link>
        <pubDate>Tue, 11 Jul 2023 12:53:32 +0800</pubDate>
        <author>chenwx716@139.com</author>
        <guid>/p/gateway.html</guid>
        <description>&lt;h2 id=&#34;基础概念&#34;&gt;基础概念&lt;/h2&gt;
&lt;p&gt;一个物理或逻辑区域的入口或出口&lt;/p&gt;
&lt;h2 id=&#34;网关分类&#34;&gt;网关分类&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;网络层网关: 重点是网络数据包转发和访问控制&lt;/li&gt;
&lt;li&gt;API 网关: 属于业务网关, 主要附带身份认证、流控、安全等业务功能&lt;/li&gt;
&lt;li&gt;数据网关; 缓存, 数据库, 存储, 数据仓库&lt;/li&gt;
&lt;li&gt;安全网关: 隔离，鉴权&lt;/li&gt;
&lt;li&gt;管理网关&lt;/li&gt;
&lt;li&gt;边界网关: 逻辑概念, 区分不同区域&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&#34;api-网关&#34;&gt;API 网关&lt;/h2&gt;
&lt;p&gt;将统一业务入口, 流控, 负载均衡, 鉴权, 安全等功能进行前置&lt;br /&gt;
黑白名单, 协议适配(tcp/udp/http), 容错可用能力&lt;/p&gt;
&lt;h3 id=&#34;主要用途&#34;&gt;主要用途&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;隔离: 作为企业系统边界, 隔离外网系统与内网系统, 隐藏内部细节&lt;/li&gt;
&lt;li&gt;解耦: 使得各业务系统之间 或 微服务系统 之间能够独立, 自由, 高效, 灵活地调整;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;常用方式&#34;&gt;常用方式&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;nginx+lua&lt;/li&gt;
&lt;li&gt;traefix&lt;/li&gt;
&lt;li&gt;Spring Cloud Gateway&lt;/li&gt;
&lt;li&gt;业务自建&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;通用api网关设计要点&#34;&gt;通用api网关设计要点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;高性能&lt;/li&gt;
&lt;li&gt;安全性: 身份认证、权限认证&lt;/li&gt;
&lt;li&gt;高可用: 无状态设计原则&lt;/li&gt;
&lt;li&gt;可扩展: 支持插件, 脚本 等扩展功能&lt;/li&gt;
&lt;li&gt;运维友好&lt;/li&gt;
&lt;li&gt;隔离性：某个类型的后端服务异常时不影响其它类型服务&lt;/li&gt;
&lt;li&gt;动态变更: 负载规则变更时，不影响其它服务&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;api-网关设计要点&#34;&gt;API 网关设计要点&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;API标准化: 无标准不平台&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;支持 API接口测试: 即可以方便地对接口进行测试, 或者方便区分或隔离测试流量和生产流量&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;全生命周期管理&lt;br /&gt;
覆盖 API 的定义、测试、发布的整个生命周期管理，&lt;br /&gt;
便捷的日常管理、版本管理，支持热升级和快速回滚&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;协议主流化&lt;br /&gt;
http, https, xml, json, grpc&lt;br /&gt;
提供 java php python 等SDK&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;业务-api-网关设计&#34;&gt;业务 API 网关设计&lt;/h1&gt;
&lt;h2 id=&#34;接口命名&#34;&gt;接口命名&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;风格统一 (都为英文小写)&lt;/li&gt;
&lt;li&gt;模式固定 (xx.xx.xx.xx)&lt;/li&gt;
&lt;li&gt;简洁明了&lt;/li&gt;
&lt;li&gt;有扩展性&lt;/li&gt;
&lt;li&gt;分类与分层&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;举例：suning.custom.order.get&lt;/p&gt;
&lt;p&gt;格式：suning. 业务分类. 模块简称. 操作符&lt;/p&gt;
&lt;h2 id=&#34;文档规范化&#34;&gt;文档规范化&lt;/h2&gt;
&lt;p&gt;API文档组成&lt;br /&gt;
简介、接口描述、公共参数、请求参数、响应参数、请求示例&lt;br /&gt;
业务异常码、公共异常码、响应示例、FAQ、异常示例、API工具&lt;/p&gt;
&lt;h2 id=&#34;异常码标准化&#34;&gt;异常码标准化&lt;/h2&gt;
&lt;p&gt;统一风格，分类，唯一性，有利于监控、告警、问题排查&lt;br /&gt;
有条件的情况，除返回异常码外，还要有中文描述&lt;/p&gt;
&lt;h2 id=&#34;api管理&#34;&gt;API管理&lt;/h2&gt;
&lt;p&gt;可以开关、流量控制和限流&lt;br /&gt;
安全管理、&lt;br /&gt;
接口分流: 不同的分类对应不同的后端服务&lt;br /&gt;
服务降级: 进行快速错误&lt;/p&gt;
&lt;h2 id=&#34;api监控&#34;&gt;API监控&lt;/h2&gt;
&lt;p&gt;日志&lt;br /&gt;
接口统计&lt;br /&gt;
告警&lt;br /&gt;
存储监控数据&lt;/p&gt;
&lt;hr /&gt;
</description>
        </item>
        
    </channel>
</rss>
