华为云核心组件架构逻辑拆解:计算、存储、网络、安全、数据库是怎么拧成一股绳的
做云上业务这几年,我最大的感受是:大部分人对云平台的理解停留在“开台机器、挂个硬盘、配个IP”的层面,真到系统出问题、性能上不去、安全被突破的时候,才发现自己根本不了解底层那套组件是怎么协作的。华为云这类的公有云平台,表面上是一堆控制台按钮和API,背后其实是计算、存储、网络、安全、数据库五大模块在支撑。这篇文章我想把华为云核心组件的架构逻辑完整捋一遍,从设计思路到模块拆解,再到实际排查经验,一次性讲透。
不管你是刚接触云计算的运维新人,还是准备考华为ICT大赛云赛道、想系统理解云架构的开发者,又或是已经在云上跑业务但总被各种诡异问题折磨的工程师,这篇文章都值得你花二十分钟认真读一遍。我不会只贴功能清单,我重点讲架构逻辑——也就是华为云为什么这样设计、模块之间怎么协同、遇到问题该从哪个层面去排查。
1. 先建立整体认知:华为云五大模块的架构定位与协作关系
很多人一上来就钻进某个模块的细节里,比如纠结安全组规则怎么写、块存储和对象存储有什么区别,结果越学越乱。我建议先退一步,从全局视角看这五个模块在云平台里各扮演什么角色。
1.1 五大模块的职能边界
华为云的核心组件可以粗分为五条线,每条线解决一类根本问题:
| 模块 | 核心职责 | 解决的根本问题 | 典型产品 |
|---|---|---|---|
| 计算 | 提供可弹性伸缩的算力资源 | CPU和内存从哪来、怎么分配 | ECS弹性云服务器、BMS裸金属、Auto Scaling |
| 存储 | 提供持久化、高可用的数据存放能力 | 数据放哪里、怎么保证不丢 | EVS云硬盘、OBS对象存储、SFS文件存储 |
| 网络 | 构建隔离、互通、可控的虚拟网络环境 | 资源之间怎么通信、怎么对外暴露 | VPC虚拟私有云、ELB弹性负载均衡、NAT网关 |
| 安全 | 提供身份、边界、数据、应用层面的防护 | 谁可以进来、进来能干什么、数据怎么保护 | IAM、安全组、WAF、DDoS高防、KMS |
| 数据库 | 将数据库能力服务化,屏蔽运维复杂度 | 数据怎么组织、怎么高效读写 | RDS、GaussDB、DDS文档数据库 |
这里有个关键点:这五个模块不是相互独立的,而是层层嵌套、彼此依赖的。计算实例要跑起来,必须有存储给它提供系统盘和数据盘,必须通过网络模块分配虚拟网卡和IP,必须经过安全模块的认证和访问控制,而业务数据最终落在数据库里。任何一个模块出问题,表现都可能在其他模块上。
1.2 控制平面与数据平面的分离逻辑
华为云架构里最核心的设计思想,是控制平面和数据平面的分离。这个概念我解释得通俗一点:控制平面负责“做决策”,数据平面负责“干实事”。就像快递公司,调度中心决定包裹怎么走、派给哪个快递员(控制平面),快递员真正把包裹送到你手上(数据平面)。
在云平台里,你每次在控制台点“创建云服务器”,这个请求走的其实是控制平面——API网关、认证服务、调度器、网络控制器、存储控制器协同工作,最终把任务下发到物理主机上的代理程序。真正承载你业务的虚拟机、虚拟网络转发、磁盘读写,这些发生在数据平面上。
这个分离带来的好处非常明显:
- 管理操作和业务流量互不干扰。你频繁创建、删除云资源,不会影响已运行实例的转发性能和数据读写。
- 控制平面可以集中式管理、分布式部署。所有租户的创建请求统一经过调度器,但实际资源分布在不同物理机上。
- 故障域隔离。控制平面的某个服务挂了,正在运行的业务不会立即中断,只是暂时无法做变更操作。
我见过不少人在排查网络问题时,习惯性地登录到每一台ECS上看路由表,其实很多网络问题根源在控制平面的配置下发了——比如安全组规则改了但没生效,多半是控制平面和后端的数据面同步有延迟或异常。理解了控制面和数据面的关系,排查思路会清晰很多。
1.3 租户隔离与资源池化:多租户架构的根基
华为云作为公有云,所有组件都是多租户共享的,但租户之间必须严格隔离。这个隔离是怎么做到的?核心是两层:资源池化和隔离边界。
资源池化指的是,物理服务器、物理硬盘、物理交换机这些硬件被打散成统一的资源池,按需分配给不同租户。比如一台物理服务器上跑着十几个租户的虚拟机,一块物理硬盘被逻辑切分为多个云硬盘卷,一台物理交换机通过 VLAN 或 VXLAN 分割出成百上千个虚拟网络。
隔离边界则分为三层:
- 计算隔离:虚拟机通过Hypervisor(华为云自研的QingTian架构里有对应的虚拟化层)实现CPU、内存的隔离,每个虚拟机只能看到分配给自己的虚拟CPU和内存。
- 网络隔离:每个租户的VPC是逻辑隔离的网络空间,通过VXLAN等隧道技术封装报文,租户之间的包互不可见,即使物理上跑在同一台交换机上。
- 存储隔离:每个云硬盘在逻辑上是独立的卷,通过LUN映射或分布式存储的卷隔离机制,确保租户A不能读取租户B的数据。
Pool化之后,资源利用率大幅提高,但这也带来了一个副作用——性能问题的排查变复杂了。你很难直接感知到宿主机上还跑着哪些“邻居”,而邻居的突发负载可能影响你的磁盘IOPS或网络延迟。这个问题在云上不可避免,但理解了这个逻辑,你就能明白为什么华为云控制台会提供“专属主机”这类产品——那就是把资源池化的粒度放大到物理机级别,给你独占的物理资源。
2. 计算模块的架构逻辑:从虚拟化到弹性调度的完整链路
计算是云平台的门面,也是绝大多数用户每天打交道的模块。但你有没有想过,点击“购买ECS”之后,背后的架构链路是怎么走的?
2.1 虚拟化层:CPU、内存、网络、磁盘怎么被“虚拟”出来
华为云ECS底层的虚拟化方案,早期基于开源KVM,现在已经是自研的QingTian架构(擎天)。QingTian不是一个单点技术,而是一套软硬协同的虚拟化架构,核心思路是把虚拟化的开销从CPU卸载到专用硬件上。
具体来说,传统的虚拟化方案里,虚拟机的网络IO、存储IO都要经过宿主机的CPU和内核协议栈,这会消耗不少CPU资源,而且延迟不可控。QingTian的做法是:
- 网络虚拟化卸载:虚拟交换机的转发逻辑从CPU卸载到智能网卡上,虚拟机发出的报文直接经过硬件加速转发,不再消耗宿主机CPU。
- 存储虚拟化卸载:虚拟磁盘的读写请求也通过智能硬件转发到分布式存储集群,减少宿主机内核的开销。
- 虚拟化层极简化:宿主机上的虚拟化管理组件被压缩成一个轻量级Agent,大部分管理工作交给独立的控制平面完成。
这套架构的收益非常实际:虚拟机性能逼近物理机,网络延迟和抖动显著降低,而且宿主机本身消耗的资源更少,能跑更多的虚拟机,成本也摊薄了。
我们在使用ECS时,其实可以通过一些细节感知到这种架构差异。比如在同一规格下,华为云的ECS网络PPS(每秒包转发数)通常比其他基于纯软件虚拟化的平台要高;再比如你创建裸金属服务器时,实际上也是通过同一套控制平面管理的,只是虚拟化层完全移除。
2.2 实例规格与资源调度的设计逻辑
华为云ECS的规格命名有一套自己的逻辑,比如c6.xlarge.2、m6.large.4、s6.medium.1这样。很多初学者看得很懵,其实拆开就明白了:
- 前缀字母代表机型族,
c是计算密集型,m是通用型,s是标准型,r是内存优化型,g是GPU加速型。 - 数字代表代际,比如
6是第六代,代际提升通常意味着CPU平台升级(从Cascade Lake到Ice Lake再到Sapphire Rapids)。 - 规格后缀的最后一个数字代表vCPU与内存的比例,
.2就是1:2,.4就是1:4,.1就是1:1。
这个命名本身就是资源调度的逻辑体现。你选择什么规格,本质上是在告诉调度器:我需要多大比例的CPU和内存组合。调度器收到请求后,会在资源池里寻找满足以下条件的物理机:
- 剩余的CPU核数足够。
- 剩余的内存容量足够。
- 与虚拟机的性能需求匹配(比如高网络性能需求会优先选择网络卸载能力强的宿主机)。
- 满足高可用策略(比如开启了跨可用区部署的,会优先分散到不同可用区)。
这里有个经验:别为了省钱把规格卡得太死。比如你的业务平时CPU使用率只有20%,但偶尔有秒杀类流量尖峰,这种情况下应该考虑用“突发性能实例”或者配置CPU弹性伸缩,而不是买个大规格硬扛。华为云的弹性伸缩服务(Auto Scaling)会监控CPU、内存、磁盘IO等指标,自动增加或减少ECS实例数量,这个能力要善用。
2.3 计算模块的扩展能力:弹性伸缩与裸金属的取舍
弹性伸缩是云计算的灵魂功能之一,它背后的架构逻辑是监控-决策-执行三环联动:
- 监控环:云监控服务(Cloud Eye)持续采集ECS的CPU利用率、内存使用率、网络流入流出速率等指标。
- 决策环:伸缩策略根据预设的阈值规则判断当前是否需要扩容或缩容。比如“CPU使用率超过70%持续5分钟,则增加2台实例”。
- 执行环:伸缩组调用ECS的创建/删除API,自动完成实例的生命周期管理,新实例会自动加入负载均衡的后端服务器组。
我在生产环境里常用的做法是:先用固定实例承载稳态流量,再用弹性策略扛峰值。比如Web服务器集群平时5台,弹性策略设置为CPU超70%自动扩展到10台,并且给扩出来的实例打不同的标签,方便后面排查问题。
再说裸金属服务器。为什么有了虚拟机还需要裸金属?因为有些场景虚拟机满足不了:比如对延迟极度敏感的数据库集群、需要直通特定硬件设备的AI训练节点、或者有合规审计要求不允许任何虚拟化层存在的业务。裸金属服务器本质上就是把物理服务器直接租给你,但管理面仍然通过云平台统一运维,这也是QingTian架构的一个典型场景——同一套控制平面,同时管理虚机和裸机。
3. 存储模块的架构逻辑:三类存储适用场景深度对比
存储可能是云上最容易“用错”的模块。很多人分不清EVS和OBS的区别,结果把数据库数据放到对象存储上跑,性能惨不忍睹。这块我要重点讲清楚。
3.1 EVS块存储:为虚拟机提供“本地硬盘”的架构实现
EVS(Elastic Volume Service)云硬盘,架构逻辑上就是“虚拟机的块设备”。它在底层是一套分布式存储系统,但对外暴露的是标准的SCSI块设备接口,虚拟机里看到的是一块完整的磁盘,可以分区、格式化、挂载文件系统。
EVS的关键架构特性有三个:
- 多副本冗余:数据默认在三台物理服务器上各存一份,任何一台宕机都不会丢数据。这背后的原理是分布式存储的副本机制——写入数据时同时写入三个节点,读取时从任意一个健康的副本读取。
- 快照与备份:云硬盘快照是基于存储层的一致性快照,秒级创建,底层用的是写时复制(COW)技术。创建快照时并不拷贝全部数据,只是记录一个时间点的状态,后续有新数据写入时才复制原数据块。
- 性能分级:EVS提供普通IO、高IO、超高IO、极速IO等不同性能档位,核心差异在于底层存储介质——SATA盘、SAS盘、SSD、NVMe SSD。你买的性能档位决定了IOPS和吞吐量的上限。
这里要特别提醒一个坑:云硬盘的IOPS上限和容量大小、性能档位强相关。同样是超高IO,100GB的云硬盘和500GB的云硬盘,单盘IOPS上限是不同的。如果你发现数据库磁盘IOPS经常打满,先检查是不是单盘性能上限不够,而不是盲目加缓存。
3.2 OBS对象存储:海量非结构化数据的设计哲学
OBS(Object Storage Service)对象存储,和EVS完全不是一个物种。它的设计目标非常明确:海量、低成本、高可靠地存放非结构化数据,比如图片、视频、日志文件、备份文件、静态网站资源。
OBS的架构逻辑可以概括为“桶-对象”两层模型:
- 桶(Bucket):对象的容器,是权限管理和计费的边界。桶名全局唯一,创建后可以设置区域、存储类别、访问权限。
- 对象(Object):数据本体,由Key(对象的唯一标识)、Data(数据内容)、Metadata(元数据)三部分组成。
OBS底层是分布式对象存储系统,数据分布在全国甚至全球的多个数据中心,通过纠删码(Erasure Coding)技术来保证可靠性。多副本是“存好几份完整的”,纠删码则是“把数据切成碎片再加校验码”,同等可靠性下纠删码的存储利用率更高,这也是OBS能做到低成本的原因之一。
OBS的存储类别也值得仔细选:
| 存储类别 | 适用场景 | 特点 |
|---|---|---|
| 标准存储 | 热数据、频繁访问 | 高吞吐、低延迟,价格最高 |
| 低频访问存储 | 月访问1-2次的备份数据 | 存储单价较低,但访问时额外收取数据取回费 |
| 归档存储 | 半年以上不访问的合规归档 | 存储单价极低,但读取需要先解冻,等待约15分钟 |
我见过的最典型误用是把数据库备份直接存标准存储,成本高不说,备份策略也很粗糙。正确的姿势是:数据库备份先存EVS快照,再定期把快照导出为镜像文件放到低频或归档存储里,成本能降一个数量级。
3.3 SFS文件存储:多节点共享读写的协议实现
SFS(Scalable File Service)文件存储解决的是EVS和OBS都搞不定的场景:多个云服务器同时挂载同一份数据,并通过文件协议读写。典型场景包括:共享目录、CI/CD的构建缓存、云上文件共享、容器集群的共享配置。
SFS底层实现是基于分布式文件系统,对外提供NFS(网络文件系统)协议。它的架构里有几个关键点:
- 协议转换层:把文件系统调用(如open、read、write)翻译成分布式存储的内部读取请求。
- 元数据服务:管理文件目录结构、文件属性等元数据。文件系统里单独跑一个元数据服务,所有节点共享一份元数据视图,才能实现多节点同时读写同一个文件。
- 数据节点:真正存储文件内容数据块的地方,同样有多副本机制。
使用SFS时最常见的坑是小文件性能差。SFS设计时主要面向大文件吞吐,对海量小文件(比如几KB的配置文件、日志碎片)的元数据操作压力非常大,性能会掉得很厉害。如果业务是大量小文件场景,建议在应用层做合并,或者用EVS做单机缓存层来缓冲SFS的压力。
4. 网络模块的架构逻辑:VPC、SDN与访问外网的全链路拆解
网络是云上最容易让人头疼的模块。它的架构逻辑本质是对物理网络的池化和隔离再分配,但实现起来远比计算和存储复杂,因为网络是连通的——牵一发动全身。
4.1 VPC虚拟私有云:软件定义网络的落地
VPC(Virtual Private Cloud)是华为云网络的基石,它的架构本质是**软件定义网络(SDN)**的一个租户级封装。你在控制台上创建的每一个VPC,底层都对应着一张逻辑隔离的二层网络。
VPC内部的核心组件包括:
- 子网:VPC内的IP地址段划分,一个子网对应一个网段(CIDR)。子网创建后,里面所有的云资源都会从该网段分配私网IP。
- 虚拟路由器:每个VPC内置一台逻辑路由器,负责子网之间的路由转发,以及VPC到外部网络的路由。
- 路由表:定义了流量从子网出发后怎么走。默认路由指向本VPC内部,你可以手动添加路由指向其他子网、对端VPC或云专线。
- 安全组:分布式防火墙,基于实例级别控制进出流量。
- 网络ACL:子网级别的防火墙,基于整个子网控制进出流量。
VPC底层用到的关键技术是VXLAN(Virtual Extensible Network Layer)。详细的讲就是:物理交换机上跑着VXLAN隧道,每个租户的VPC被分配一个VNI(VXLAN Network Identifier),报文在物理网络中传输时会被封装上VNI标识,从而保证不同租户的二层网络完全隔离,同时突破了传统VLAN只有4096个可用ID的限制。
从使用者的角度看,VPC设计中最重要的一个经验是:创建VPC之前就想好网段规划。VPC的CIDR一旦创建,不能直接修改,只能删除重建。如果你一开始规划的网段过小,后面业务扩容时IP不够用,只能再建VPC做对等连接,架构上就不优雅了。我踩过的最大的坑就是刚开始图省事配了个/24(只有256个IP),结果业务一扩展立刻捉襟见肘。
4.2 安全组与网络ACL:两级过滤的防护逻辑
安全组和网络ACL是云上网络安全的双保险,但两者机制差别很大:
| 对比项 | 安全组 | 网络ACL |
|---|---|---|
| 作用范围 | 实例级别(绑定到ECS网卡) | 子网级别(绑定到整个子网) |
| 默认策略 | 允许所有出站流量,入站流量需显式放通 | 默认拒绝所有流量(需显式放通) |
| 规则类型 | 仅支持“允许”规则 | 既支持“允许”也支持“拒绝” |
| 状态性 | 有状态(响应流量自动放通) | 无状态(响应流量需单独放行) |
| 评估顺序 | 规则逐条匹配 | 按优先级从高到低匹配 |
这两个组件的架构逻辑是“纵深防御”:网络ACL先在子网边缘过滤一层,安全组再在实例门口过滤一层。实际使用中,我建议的规范是:
- 网络ACL做粗粒度管控:在子网级别禁止高风险流量,比如从公网直接访问数据库端口(3306、5432等)。
- 安全组做细粒度管控:只允许特定IP或特定安全组访问特定端口。比如Web服务器的安全组只放通80/443端口,并限定源地址为负载均衡器的安全组。
这里有个容易忽略的坑:安全组是有状态的,你允许入站SSH(22端口),那么从服务器主动发起的回包(出站方向)会自动放行,不需要单独配置出站规则。但网络ACL是无状态的,如果子网入站方向放通了22端口,出站方向必须另外放通回包所需的临时端口(通常是1024-65535),否则连接会断开。这是我见过的最常见的ACL配置事故。
4.3 公网访问与负载均衡的架构路径
云上资源要对外提供服务,绕不开两个组件:EIP(弹性公网IP)和ELB(弹性负载均衡)。它们本质上是同一条链路的不同节点。
- EIP:绑定到ECS或NAT网关实例上,走的是“公网IP + 网关NAT转换”的架构。EIP流量进来后,网络网关会把公网IP转换成后端ECS的私网IP,然后通过VPC内部路由转发到目标实例。
- ELB:负载均衡器本身是一个多实例组成的集群,它接收公网流量,然后按负载均衡策略分发到后端的ECS实例池。ELB和ECS通常不在同一子网,而是通过VPC内部网络打通。
ELB的架构里有几个关键配置值得注意:
- 监听器(Listener):监听的协议和端口,比如HTTPS/443。
- 后端服务器组(Backend Server Group):承载流量的ECS集合,这里要配置健康检查——ELB会定期发送探测请求到后端实例,探测失败就把实例从转发列表里摘掉,避免把请求发给不健康的节点。
- 转发策略:支持按域名、按URL路径转发到不同的后端服务器组,这样可以在一个ELB后面同时跑多个业务。
负载均衡算法也值得多聊几句。华为云ELB支持加权轮询、加权最少连接、源IP哈希三种算法。比如长连接服务适合源IP哈希(同一客户端固定到同一后端节点),短请求高并发场景适合加权轮询。我遇到过最典型的性能问题就是:后端实例规格不一样却用了等权轮询,导致小规格实例被大流量打爆。正确做法是用加权轮询,按实例的规格系数设置权重。
5. 安全模块的架构逻辑:纵深防御的五个层
安全不是某一个产品能做好的,而是需要一套从上到下的防护体系。华为云安全模块的架构逻辑可以总结为“纵深防御”五个层。
5.1 身份与访问控制层:IAM与权限模型
IAM(Identity and Access Management)是整个云平台的“大门”。它的架构核心是:
- 用户(User):一个真实的操作者(人或程序),有控制台登录密码或API密钥。
- 用户组(User Group):用户的集合,方便批量授权。
- 策略(Policy):权限的载体,定义了“能干什么”,比如“允许创建ECS”“允许查看OBS桶”。策略本质是一段JSON格式的权限描述。
- 委托(Agency):允许某个云服务代表你访问另一个云服务。比如ECS实例里的应用程序要访问OBS,你可以创建一个委托,给ECS实例绑定委托身份,然后实例内通过元数据服务获取临时密钥。
这里有个容易被忽视的安全隐患:很多人为了方便,直接给IAM用户绑定了“管理员权限”(Admin)。一旦这个用户的访问密钥泄漏,攻击者可以全权控制你的云资源——删数据、开矿机、释放所有实例,后果不可收拾。正确的习惯是“最小权限原则”:只给用户分配它职责所需的权限。哪怕麻烦一点,也一定不要图省事。
另外要强调:API访问密钥(AK/SK)是明文存储在代码或配置文件里的,如果被提交到Git仓库,等于把云账号拱手送人。建议所有使用AK/SK的代码,都通过华为云的凭据管理服务(如云凭据管理CSMS)来动态获取,或者至少使用IAM委托方式。
5.2 网络安全层:DDoS防护与WAF的联动
网络安全层解决的是“流量攻击”问题,主要包括:
- DDoS高防:当流量攻击超过云平台基础防护阈值时,DDoS高防会把流量牵引到清洗节点,过滤掉攻击报文后把干净流量回注到源站。架构逻辑是“代理转发”,所以域名或IP的DNS解析需要改到高防IP上。
- WAF(Web应用防火墙):防护应用层的攻击,比如SQL注入、XSS跨站脚本、CC攻击(高频访问耗尽资源)。WAF的架构也是反向代理模式,流量先经过WAF节点过滤,再转发到后端源站。
这两个服务的使用上有两个经验:
- DDoS高防的转发配置里,必须设置“源站保护”。也就是只允许高防的回源IP访问你的源站服务器,否则攻击者可以绕过DDoS高防直接打源站,防护形同虚设。
- WAF的规则引擎有检测模式和拦截模式,建议先开启检测模式观察一段时间的误报情况,确认正常请求不会被误伤后再切换到拦截模式。我见过于激进的团队第一天就开拦截模式,把公司办公网段的正常请求全拦截了,运营直接炸锅。
5.3 数据安全层:KMS密钥管理与数据加密体系
数据加密的架构逻辑是:加密算法是公开的,安全的核心在于密钥管理。华为云KMS(Key Management Service)负责密钥的全生命周期管理——生成、存储、轮换、销毁。
KMS背后的设计有三层密钥体系:
- 用户主密钥(CMK):用户创建的根密钥,由KMS的硬件安全模块(HSM)保管,理论上密钥明文永远不离开HSM。
- 数据加密密钥(DEK):实际加密业务数据的密钥。因为DEK会频繁使用,如果也放在HSM里性能不够,所以由CMK在HSM里加密DEK,加密后的DEK(称信封加密)可以安全地保存到业务侧。
- 业务数据:用DEK加密,DEK本身用CMK加密,这就是“信封加密”架构——双层加密,兼顾安全和性能。
这个架构唯一要记牢的点是:KMS的密钥一旦禁用或删除,所有用它加密的数据都将无法解密。我在几个项目里见过因为清理资源的工程师手动把KMS密钥删了,导致整个数据库备份解不开的惨案。密钥的删除必须走严格的审批流程,而且华为云也提供密钥托管和轮换机制,能用托管就尽量用托管。
6. 数据库模块的架构逻辑:RDS服务化与GaussDB分布式演进
数据库是大部分业务系统的核心,云数据库的架构逻辑是“把数据库运维的复杂度吸收进平台,让用户只关心数据本身”。
6.1 RDS服务化的架构拆解:高可用、备份、读写分离
RDS(Relational Database Service)托管的是MySQL、PostgreSQL、SQL Server等开源数据库引擎,它的架构逻辑是“数据库+云化能力”两层:
- 数据库层:RDS实际运行的仍然是MySQL或PostgreSQL数据库进程,但部署方式从单机变成了主备/集群。
- 云化能力层:华为云在数据库外面包了一层管控服务,负责自动备份、监控告警、参数模板、故障切换等。
RDS的高可用架构值得仔细说说。华为云RDS默认是“主备实例”模式:
- 主节点:对外提供读写服务,应用连接的是主节点的域名和端口。
- 备节点:通过数据库的复制技术(MySQL的半同步复制或异步复制)持续从主节点同步数据。主节点故障时,管控层自动触发主备切换,把备节点提升为主节点,整个过程通常在几十秒内完成。
- 数据一致性:主节点每写一笔事务,必须至少收到一个备节点的确认(半同步模式),才会给应用返回成功。这能保证主备切换时不丢数据,代价是写入延迟略高。对一致性要求极高的金融类业务,必须用半同步。
备份机制的设计逻辑是“物理备份+日志备份”组合:
- 自动备份:每天定时做一次全量物理备份,备份文件存储在OBS里。
- 日志备份:持续采集数据库的binlog或WAL日志,也是存储到OBS。当需要恢复到某个时间点(比如误删数据前10分钟),RDS会用最近的全量备份恢复,再回放该时间点之前的日志。
使用RDS时,我建议把参数模板用起来。华为云RDS提供参数模板功能,你可以把已经调优的数据库参数(比如innodb_buffer_pool_size、max_connections)保存成模板,然后用模板一键应用到新实例。上线新环境时不要再手动一个个参数去配,一个是效率,另一个是容易漏。
6.2 GaussDB分布式架构:从单机到分布式的事务处理
GaussDB是华为云自研的分布式数据库,架构上和RDS有本质区别。RDS仍是单机架构(最多主备),而GaussDB是真正的分布式架构,数据被分片存储在多台计算节点上。
GaussDB的架构要点:
- 计算节点(CN):接收应用的SQL请求,解析后分发到底层的数据节点执行,再把结果汇总返回。
- 数据节点(DN):真正存储数据分片并执行计算任务的地方。
- 全局事务管理器(GTM):负责分配全局事务ID,协调跨节点的分布式事务,保证强一致性。
- 存储层:可选本地存储或共享存储,数据按分布键(Sharding Key)哈希分片到不同DN。
这个架构的收益是水平扩展:数据量大了以后,加数据节点就能线性提升容量和性能。但代价是架构变得复杂——跨节点查询比单机慢,分布式事务的协调也有额外开销,应用需要按分布键设计表结构。
选择GaussDB还是RDS,我的判断标准很简单:
- 数据量在单机可承受范围内(比如几TB以内),优先RDS,运维简单、生态成熟。
- 数据量会持续增长、需要复杂查询和强一致事务,才考虑GaussDB。
- GaussDB的存算分离架构里还有一类Serverless模式,适合业务量波动大、难以预估的场景,按实际使用的计算和存储计费,省心但单价高。
6.3 数据库连接的管理逻辑:连接池与代理的作用
数据库连接的管理是架构中容易被忽视、但实际问题最多的环节。应用直接连数据库,会出现几个问题:
- 每次新建连接开销大(TCP握手、认证、数据库会话创建)。
- 连接数一多,数据库自身连接线程压力剧增,性能下降甚至拒绝服务。
- 主备切换时,应用连接全部断开,需要重连逻辑。
解决方案就是连接池。连接池在应用和数据库之间维护一批现成的连接,应用需要时从池里取,用完归还,不必每次都新建。华为云上的连接池方案可以根据技术栈选择:
- Java应用用HikariCP(性能最好,Spring Boot默认),配置时可以控制最小连接数、最大连接数、连接超时时间。
- Python应用用SQLAlchemy的连接池,注意设置
pool_pre_ping,在连接取出时先做一次轻量探测,避免拿到失效连接。 - 需要跨多个应用统一管理连接时,可以用数据库代理(如ProxySQL)做中间层,集中管理连接路由和读写分离。
连接池参数设置有一个常见误区:最大连接数不是越大越好。每个连接都会占用数据库端的内存和执行线程,连接过多反而降低单连接性能。我的经验是一个数据库实例的连接池总大小控制在“数据库max_connections的70%以内”,应用侧的连接池上限要留出余量。
7. 实操中的常见问题与排查经验
前面讲了架构逻辑,这一章分享几个我在实际项目里踩过的坑和排查方法,都是拿时间和事故换来的经验。
7.1 云服务器网络不通的排查顺序
网络不通是最常见的故障,很多人一上来就重启服务器或重装系统,其实大部分问题不需要这么粗暴。我的排查顺序是:
- 查看安全组:确认源IP、端口、协议是否在放通列表中。安全组规则是实时的,改了立刻生效,但要注意“安全组也是可以嵌套引用的”——如果你放通的是“某个安全组”,要确认那个安全组对应的实例IP是否发生了变化。
- 查看网络ACL:确认子网级别的入站/出站规则是否放通。特别注意出站方向的临时端口范围。
- 查看路由表:确认目标网段是否有正确的路由条目。比如你加了新的子网,却忘了配置子网间的路由,那跨子网通信必然失败。
- 查看弹性网卡:确认网卡是否绑定了正确的VPC和子网。有些场景下ECS绑定了多个网卡,主网卡路由没有问题,但流量可能走了备用网卡。
- 登录实例检查:确认实例内部防火墙(如iptables或firewalld)没有拦截流量,检查网卡是否UP、IP配置是否正确。
这套顺序走完,90%以上的网络问题都能定位。而且这个顺序本身就是按云平台架构分层来的:外部网络(安全组/ACL)→内部路由(路由表)→操作系统(实例内配置),逐层缩小范围。
7.2 云硬盘性能不达标的排查思路
如果数据库或应用反馈磁盘读写慢,排查思路是:
- 先确认是否达到单盘性能上限。登录控制台查看EVS的监控指标(IOPS、吞吐量、时延)。如果IOPS长期顶到上限,要么升性能档位,要么扩大容量(容量大了IOPS上限也上去了)。
- 再看应用侧是否有大数据量扫描或全表查询,把磁盘IO打满。这种问题要优化SQL,而不是盲目升磁盘。
- 最后看是否存在“冷读”问题。云硬盘第一次读取冷数据时速度较慢,后续会缓存到操作系统页缓存里。如果业务是启动时大量读文件,第一次打开时慢是正常的,可以预热之后再切流量。
另外要注意:EVS的性能是所有挂载该硬盘的实例共享的。如果你把同一块EVS同时挂到多台ECS(仅共享盘支持),IOPS是所有实例加起来的。不要指望共享盘能提供线性叠加的性能。
7.3 数据库高可用切换的影响与应对
RDS主备切换这种情况,在正常运维下不常发生,但一旦发生,对应用的影响很直接:连接会断,正在执行的事务会回滚。应对措施有三个层次:
- 应用层:配置数据库连接重试机制,让应用在连接断开后自动重连。像Java的HikariCP自带重试能力,只需设置
connection-timeout和validation-timeout。 - 中间层:如果用了数据库代理,代理本身会感知主备切换并自动重新路由连接,应用完全不感知。
- 数据层:确认数据库账号权限充足,主备切换后不会因账号权限问题导致新主库不可用(主备节点的权限默认一致,但要注意自建账号的同步)。
我之前还遇到过一个特殊情况:主备切换完成后,应用日志显示“SSL证书校验失败”。原因正是旧主库的证书没有及时同步到新主库。这个问题的排查方式是查看RDS的证书有效期和主备时间点差,解决方案是提前轮换证书或改用RDS自动签发的证书。
7.4 对象存储访问慢的根因分析
OBS访问慢,很多时候不是OBS本身问题,而是链路问题。几个经典原因:
- 客户端和OBS桶不在同一区域,跨地域访问,网络延迟高。解决办法是:把应用和OBS桶放在同一Region,或者用华为云的CDN加速分发。
- 请求并发过高触发OBS的流控。OBS对每秒请求数(QPS)有限制,超过后返回403或503。应对方案是客户端做指数退避重试,同时优化请求模式,比如合并小对象成批量接口。
- 文件过大或过小。小文件数量多时,每个文件都有元数据开销,整体访问效率低。大文件单次下载时间过长,如果中断就要重头再来。建议大文件使用分段上传/断点续传,小文件场景考虑先打包再上传。
我实际用下来的体会是:OBS的性能问题,多半要靠应用设计的合理性来解决,而不是靠反复调优OBS配置。比如日志类数据,用日志服务直接对接OBS桥接导出,而不是让应用一条条调用OBS接口写。提前把写入模式设计成批量,比事后优化省事得多。
8. 一些实用的架构选型建议
最后聊一聊在华为云上做架构决策时的一些个人经验,这些判断标准帮我在多个项目里避免了“事后返工”的麻烦。
计算规格,我现在的原则是“先小后大、留弹性余地”。新业务上线时选中等规格(比如c6.xlarge),跑几天看真实的资源使用曲线,再决定升配还是降配。不要一开始就按最高流量预估买大规格,云上扩容到处都有,没必要提前花钱买闲置。当然,核心数据库这类稳定性优先的系统另说,可以稍微冗余一些。
存储方案,按数据生命周期分清楚层次:
- 热数据(数据库、缓存、频繁读写)→ EVS超高IO
- 温数据(报表、一次生产多次读取)→ EVS高IO + 定期快照
- 冷数据(历史日志、备份、合规归档)→ OBS低频或归档存储
- 多机共享数据(配置文件、上传附件)→ SFS
这个分层逻辑能让存储成本降低30%到50%,而且是纯配置层面的优化,不涉及改造。
网络和安全,我的建议是:VPC规划花半天时间想清楚,后面一年都省心。网段规划要预留扩容空间,一个业务一个子网,不同环境(生产/测试/开发)用不同VPC甚至不同账号隔离。安全组规则写清楚用途注释,每条规则都要能回答“为什么放通这个源IP”。云上环境多变,规则一多就乱,注释和命名规范是第一生产力。
数据库,除非有明确的分布式需求,否则先选RDS。PostgreSQL优先于MySQL的场景包括:复杂查询、地理位置数据(PostGIS)、JSON文档混合存储。MySQL优先的场景包括:生态工具丰富、业务简单、团队更熟。GaussDB这种分布式数据库,除非预估单库容量或查询性能撑不住,否则不建议作为第一选择——分布式带来的收益和代价是并存的。
9. 华为云架构的学习路径建议
这一节是专门给刚入门、想系统掌握华为云架构的朋友写的学习路线。零基础直接啃架构文档容易一头雾水,我的建议是从点到面、从使用到原理、从单服务到组合方案,分四个阶段来推进。
第一阶段:先学会“用”。注册华为云账号,开通免费套餐,实际创建一台ECS、买一块EVS、建一个VPC、配一个安全组。不用管架构细节,先把流程跑通,知道每个模块的入口和基本操作。这个阶段的目标是建立“云上资源长什么样”的直观感受。
第二阶段:搞懂“怎么配”。深入学习VPC的子网、路由表、安全组、网络ACL的配置逻辑;掌握EVS的快照、备份、扩容操作;学会RDS的创建、连接、备份恢复;了解IAM用户和权限策略的写法。这个阶段的目标是把每个模块的常用操作做得滚瓜烂熟。
第三阶段:理解“为什么这么设计”。回到架构层面,理解控制平面和数据平面分离、资源池化和租户隔离、SDN的网络虚拟化、分布式存储的多副本机制。这个阶段需要配合华为云的官方架构文档和开发者社区内容,把前两个阶段的“操作”上升到“原理”。
第四阶段:组合使用。把一个真实业务系统拆解成计算、存储、网络、安全、数据库的组合方案,比如搭建一个完整的Web应用——ELB做入口、ECS跑应用、RDS存业务数据、OBS存静态资源、WAF+DDoS高防做安全防护、Auto Scaling做弹性伸缩。这个阶段的目标是融会贯通,形成全局架构视角。
如果学习的过程中有实战机会,推荐参加华为ICT大赛的云赛道,赛题通常会给出一个业务场景,要求选手在限定预算内设计并部署一套完整架构。这种实战演练比单纯看文档效果强十倍,我就是通过类似的比赛和项目,对华为云架构的理解从“会用”提升到了“会设计”。如果暂时没有参赛条件,也可以自己在云上模拟一套小型电商架构,把每个模块都实操一遍,再尝试制造故障、排查故障,经历一次完整的问题闭环,云架构的很多逻辑自然就通透了。