首页 / 资讯中心 / 文章详情

云上四件套SLB、ECS、OSS、RDS:一张系统迁移的架构地图

云上四件套SLB、ECS、OSS、RDS:一张系统迁移的架构地图 ★ FEATURED ARTICLE
简介《阿里云SLB-ECS-OSS-RDS与系统数据迁移》是一份面向云计算运维、架构设计及数据迁移实施人员的专题文档。资源以阿里云四大核心服务为主线系统讲解 OSS 对象存储、RDS 关系数据库、SLB 负载均衡的功能定位与配合方式并结合 ECS 云服务器场景梳理在系统迁移中存储分层、数据库切换、流量分发等关键问题的处理思路。文档覆盖各服务的基础概念、管理方法、常用功能与应用说明尤其对 SLB 的架构、高可用、健康检查等做了多维度展开适合需要搭建或迁移阿里云业务系统的读者作为案头参考。包体为单个 docx 文件压缩包大小 1.78MB内容按章节组织包含概念解析、操作要点与目录导航便于按需查阅。该文档已有 778 人学习下载内容来自作者的实际整理与总结既可用于初学者快速建立云服务认知也可作为迁移方案设计时的细化参考。1. 云上四件套到底是什么一场搬家公司的比喻打开一份系统迁移文档第一眼看到的往往是四个缩写SLB、ECS、OSS、RDS。念起来像绕口令每个字母都似懂非懂。其实这四个词放在一起讲的是同一件事怎么把一套原本挤在一台服务器上的系统拆成几个各司其职的角色再搬到云上重新过日子。用一个搬家的比喻公司要换办公室物品得放进大仓库OSS办公电脑重新配ECS账本交给专业财务团队保管RDS前台接待员负责把访客分给手头空闲的同事SLB。这四个角色分别对应存储、计算、数据库和流量入口是云上最常一起出现的组合。这篇文章不教你敲命令而是把「它们是什么、为什么总是绑定出现、彼此怎么区分、什么时候用什么时候别用」讲透。读完这串缩写对你来说不再是密码而是一张清晰的架构地图。2. OSS把静态文件全部扔进云端仓库OSS 是对象存储服务Object Storage Service的缩写一句最直白的定义是海量、安全、低成本、高可靠的云存储服务适合存放任意类型的文件。它离普通人最近的使用场景是图片、视频、文档这类非结构化数据。在系统迁移里OSS 扮演的角色就是那个「什么都敢往里放」的仓库把原先塞在服务器本地磁盘里的图片、附件、静态资源全部接管过去。2.1 OSS 的三个关键词Bucket、Object、Key第一次接触 OSS 的人最容易卡在三个英文词上Bucket、Object、Key。用仓库来类比它们的关系最直观Bucket 是仓库里被划分出来的区域叫存储空间Object 是存放在这个区域里的箱子也就是对象或文件Key 是箱子上贴的标签也就是对象在 Bucket 内的名字。Bucket 有几个硬性特征值得记住。第一它是所有 Object 的容器没有 Bucket 就无处放文件。第二Bucket 内部是扁平的不像电脑里的文件夹一层套一层所有对象都直接挂在 Bucket 下面。第三Bucket 名称在某云平台的整个存储范围内必须是全局唯一的创建之后不能改。命名规则是只能包含小写字母、数字和短横线必须以小写字母或数字开头和结尾长度 3 到 63 字节。Object 的命名则灵活得多使用 UTF-8 编码长度 1 到 1023 字节不能以/或\开头而且大小写敏感。除了这三样还有两个概念会一直出现在 OSS 文档里Endpoint 和 AccessKey。Endpoint 是访问 OSS 的域名不同地域对应不同域名内网访问和外网访问同一个地域的域名也不同。AccessKey 简称 AK分为 AccessKeyId 和 AccessKeySecret 两部分一个负责标识身份一个负责加密校验Secret 必须保密泄露了等于把仓库钥匙交出去。2.2 为什么非要用 OSS三个文件系统做不到的事很多人会有疑问我自己的服务器有磁盘也有文件系统为什么还要额外用一个 OSS因为普通文件系统在云上的场景里有三个短板。第一单台服务器的磁盘性能有上限一旦图片资源被大量并发访问磁盘 I/O 很容易成为瓶颈而 OSS 是分布式架构能支撑海量用户同时读写。第二自建文件系统需要自己考虑数据安全硬盘坏了要换、备份要自己排计划而 OSS 自带数据冗余机制每个对象的冗余数据会分散存在同一个区域内多个设施的多台设备上设计持久性不低于 99.9999999999%也就是常说的 12 个 9即使两个存储设施并发损坏数据也不丢。第三普通文件系统没有「冷热分层」的意识所有数据都是一个待遇而 OSS 提供了标准、低频访问、归档三种存储类型冷门数据可以放更便宜的仓库里。OSS 还强调一种很强的一致性。用大白话讲你收到一个「上传成功」的响应这个文件立刻就能被读取不存在传了一半的中间状态删除也是一样删除成功的瞬间这个文件就不存在了。这种「要么做成要么不做成」的特性在工程上称为原子性和强一致性避免了很多让人抓狂的玄学问题。2.3 一次上传看懂 OSS 的 Key 与强一致性为了理解 Key 的含义看一个往 OSS 上传文件的动作。假设要上传一张图片用命令行工具是这么做的curl -X PUT \ -H Content-Type: image/jpeg \ --upload-file ./photo.jpg \ https://bucket.oss-cn-example.example.com/uploads/2024/photo.jpg这段命令的核心是最后那个 URL。bucket是存储空间的名字域名中间的一段是地域标识而 URL 里/uploads/2024/photo.jpg这一整串就是上传后的 Object Key。注意这个 Key 里虽然带着斜杠但它并不代表 OSS 内部真的建立了uploads目录更不代表 2024 是一个文件夹。对 OSS 来说/uploads/2024/photo.jpg和photo.jpg本质上没有区别都只是一个字符串形式的唯一标识。这个特性也带来了一个容易忽略的限制OSS 里的对象不支持像本地文件那样随意修改。如果你只想改一个字节也得把整个对象重新上传一遍通过覆盖同名 Key 来实现。追加上传是个例外但通过追加上传生成的对象与普通上传的对象在类型上也有差别。所以在设计系统时不要把 OSS 当成一块可以挂载的磁盘它更适合做「只写新文件、只读旧文件、必要时整体删除」的存储层。文件系统里重命名目录是秒级操作在 OSS 里重命名目录意味着把所有以某个前缀开头的对象全部复制成新的 Key成本非常高。这也是迁移后最容易踩的坑之一。2.4 存储类型怎么选迁移时怎么落地OSS 提供了三种存储类型迁移静态资源前要先想清楚数据是热是冷。存储类型适用场景特点标准存储移动应用、大型网站、图片分享、热点音视频高可靠、高可用、高性能支持频繁访问单价最高低频访问存储长期保存但不经常访问的数据平均每月访问 1 到 2 次存储单价低于标准访问时要额外收流量费归档存储建议保存半年以上的归档数据三种类型里单价最低适合冷数据备份迁移时怎么选线上正在被用户频繁访问的图片、页面静态资源、头像这类数据用标准存储历史订单里的附件、几个月前的日志文件用低频访问需要按合规要求留存但几乎不会再看的数据用归档。另外OSS 的删除操作是立即生效且不可恢复的除非提前开启版本控制。版本控制开启后覆盖和删除都会以历史版本的形式保存下来相当于给误删买了份后悔药。迁移完成后建议顺手做三件事给 OSS 绑定自定义域名让资源 URL 看起来更正式按业务需求设置 Bucket 权限不公开的内容别设成公共读如果资源下载量大再把 CDN 挂在前面让边缘节点帮忙扛流量。这样整套静态资源才算真正从服务器里「搬干净」。3. ECS 与 RDS计算和数据的双人舞如果说 OSS 管的是仓库那 ECS 和 RDS 就是整个系统真正运转起来的两个核心角色。ECS 是云服务器负责跑程序RDS 是关系数据库服务负责存结构化数据。迁移里最常见的动作之一就是把应用服务和数据库从一台孤零零的自建服务器上分别挪到这两个云资源上。3.1 ECS一台可以随时扩容的云服务器ECS 的完整名称是 Elastic Compute Service翻译过来是弹性计算服务。你可以把它理解成一台永不关机的虚拟机但它和传统物理服务器最大的区别在于弹性CPU、内存、磁盘可以按需调整几分钟内创建一台新机器不用再经历买硬件、上架、插网线的漫长流程。在实际迁移里ECS 上要装的东西往往比想象中多。一套典型的系统应用服务至少包括 JDK、Nginx、Redis、Apache有时还要装 webp 这类图片处理依赖最后再把 Web 后台服务和 APP 移动端服务部署上去。这些组件全部跑在一台 ECS 上相当于把原来物理机里的整个运行环境搬进一台虚拟计算机里。部署 ECS 时有几条血泪经验值得记住。第一先装基础运行时再装中间件最后部署应用顺序反了会遇到各种诡异的依赖报错第二JDK 版本要和线上保持一致小版本不一致都可能让应用启动失败第三Redis 这类缓存中间件要单独记得安装并配置密码漏掉它应用启动时不会报错但等流量一上来才暴露缓存缺失的问题。如果把系统迁移比作搬家ECS 就是那个新办公室墙要重新刷、电要重新拉、家具要按顺序摆。3.2 RDS把数据库交给专业团队代管RDS 是关系数据库服务Relational Database Service的缩写常见的数据库引擎都能在这上面找到包括 MySQL、PostgreSQL、SQL Server。它跟 ECS 上自己装的 MySQL 最大的不同是「托管」两个字。自己维护数据库是什么体验要自己装数据库软件、自己写备份脚本、自己配置主从复制、自己处理磁盘满了的报警。而 RDS 把这些运维工作全部打包成服务备份可以自动执行主备切换能自动完成性能监控、慢查询日志、参数优化都有人帮你盯着。你可以把自建数据库比作在家做饭从买菜、洗菜、炒菜到刷碗全包RDS 则像请了一个专业厨房团队你只需要点菜后厨怎么运转不用操心。RDS 有三个基础概念实例、数据库、账号。实例是最小的计费和运维单位相当于一套独立的数据库运行环境实例内部可以建多个逻辑数据库账号用来管理和控制访问权限。日常使用中应用连接的是实例地址而不是某一台物理机。比如连接 MySQL 类型的 RDS 实例命令大概是这样的mysql -h rds.internal.example.com -u app_user -p -D app_db-h后面填 RDS 提供的内网连接地址-u是数据库账号-p表示需要密码-D指定默认连接的库名。关键点是如果应用跑在 ECS 上且 ECS 与 RDS 在同一个地域一定要用内网地址连接不要走公网。内网连接延迟更低、也更安全公网地址通常只在本地排查问题时才临时使用。3.3 为什么迁移时 ECS 和 RDS 总是成对出现因为应用和数据紧紧耦合。程序跑在 ECS 上数据存在 RDS 里应用通过连接串访问 RDS这套结构的好处是把「计算」和「存储」分开。计算资源是容易波动的流量上涨就加 ECS流量回落就减配数据资源则不同它要求稳定、可靠、不能因为服务器重启就丢数据这正是 RDS 的强项。从自建 MySQL 迁移到 RDS最容易犯的错是「打包拷目录」。很多人以为把/var/lib/mysql压缩一下传到 RDS 上解压就能用但 RDS 是托管实例你根本没有操作文件系统的权限。正确思路是用专门的数据迁移工具走全量迁移加增量同步的路线。迁移的大致流程是先在源数据库和目标数据库都准备好有足够权限的账号然后做一次全量迁移把历史数据整体导入 RDS迁移过程中源库里可能还在不断写入新数据所以还要开启增量数据迁移让工具持续同步源库的变更等两边数据追平再停掉线上写入切换应用连接串到 RDS 地址最后做数据校验确认数量、关键字段一致才算是真正完成。这也是为什么数据库迁移不是一个「复制粘贴」的动作而是一个需要排演时间窗口的工程步骤。3.4 应用服务迁移到 ECS 的环境顺序回到 ECS 这边的部署。一套应用服务迁过来安装顺序强烈建议按依赖关系走先装 JDK因为 Java 程序没有它跑不起来再装 Nginx 和 Apache负责处理 HTTP 请求然后装 Redis提供缓存能力接着装 webp 依赖环境否则图片处理接口会直接 500最后才是应用本身包括 Web 后台和移动端接口服务。这套顺序背后的逻辑是越底层的组件越先就位越上层的服务越后启动。很多人翻车都翻在「先启动应用后补依赖」上结果报错日志里全是ClassNotFoundException或者缺少动态库的提示看着像代码问题实际上是环境没装全。迁移完成后一定要做一次完整的冒烟测试前台页面能不能打开、图片能不能正常访问、登录接口能不能拿到数据、后台任务能不能跑完。每一个环节都过了才轮到下一步的负载均衡接入。4. SLB不让任何一台服务器累倒的流量调度员系统上了多台 ECS 之后一个新的问题出现了用户到底该访问哪一台如果把每台服务器的公网 IP 都发给用户既不安全也不负责。SLB 就是为这个问题而生的。SLB 是负载均衡服务Server Load Balancer的缩写作用是把到达入口的流量按规则分发到多台后端服务器。它就像一个餐厅门口的叫号员客人来了先由叫号员统一接待再按哪张桌子空、哪个服务员手头闲的原则分配。对用户来说他们只记得一个入口完全不需要知道背后到底是三台机器还是三十台机器。4.1 从一台机器扛不住说起在没有负载均衡的年代一个网站只有一台服务器访问量小时一切正常。随着用户增多CPU 飙高、连接数打满、响应开始变慢这时候最简单的办法是再加一台服务器可加完以后问题就来了用户登录的是 A 机器刷新一下可能就切到了 B 机器登录状态到底是算 A 的还是 B 的这也是 SLB 存在的第二个理由它不仅分发流量还能做会话保持尽量把同一个用户都送到同一台后端机器上避免一次请求一台服务器导致会话状态无处安放。SLB 的高可用能力也来自它的集群架构。它本身不是一个单点进程而是由多台设备组成的高可用集群单台设备故障时流量能自动切换。正因为如此它才能放心地站在整个系统的最前面替用户挡住后端机器的路由细节。4.2 SLB 的三块拼图Listener、Backend Server、健康检查理解 SLB 只要理解三件事监听器、后端服务器组、健康检查。监听器决定「听什么口、分发的方式、会话保持规则」。比如创建一个监听 80 端口的 HTTP 监听器所有来自 80 端口的外部请求都会进入这个监听器如果做 HTTPS还要额外挂载证书来解密请求。监听器可以工作在四层 TCP 或七层 HTTP/HTTPS四层只管传输层七层则能看懂 URL、Header 这些应用层信息。后端服务器组则是「谁来干活」的名单。把两台 ECS 加入后端组每台还可以设置权重权重高的机器多分一些请求。健康检查是 SLB 的自动巡检机制它会定期用指定的路径去探测后端服务比如请求/health路径如果返回正常状态码就把这台机器留在组里如果连续失败就暂时把它摘除等恢复后再自动加回来。这套机制是 SLB 区别于普通 DNS 分发的最核心功能也是它能替运维人员省下大量半夜值班时间的「后悔药」。4.3 一次请求在 SLB 里经历了什么理清一个请求的完整路径就能把前面这些概念串起来。用户输入域名后DNS 解析拿到 SLB 的公网 IP请求到达 SLB监听器根据端口和协议判断该交给哪个后端组SLB 再按负载均衡算法从中选出一台健康的 ECS把请求转发过去后端处理完业务把响应原路返回给 SLB再由 SLB 回给用户。这个过程看起来多跳了一步但这步带来了巨大的灵活性。后端机器可以随时增减而不需要通知用户某台 ECS 出故障时健康检查会自动把它从候选名单里剔除用户几乎没有感知。对比之下如果直接暴露多台 ECS 的公网 IPDNS 轮询虽然也能把流量分散到不同 IP但 DNS 本身不会主动感知后端有没有挂。比如把同一个域名解析到三个 IP其中一个 IP 对应的服务器宕机了用户仍然可能被分配到那个失效 IP刷新多少次都进不去。这种差异在系统真正出故障的那天才会体现出价值。4.4 配置 SLB 时最容易踩的坑创建 SLB 实例后最常见的三个坑都藏在细节里。第一个坑是安全组没放行。SLB 转发流量到 ECS 时ECS 的安全组如果只放行了公网来源而没放行 SLB 的探测来源健康检查就会失败后端机器会被判定为不健康流量全被丢掉。第二个坑是健康检查路径配错。默认检查路径如果返回的是 404 而不是预期的状态码后端就算正常运行也会被反复摘除。第三个坑是会话保持超时设置太短短到用户多次请求之间的间隔超过超时时间就会被分配到不同后端导致登录态或者购物车信息「跳来跳去」。这些问题的共性是它们都不是代码 bug而是配置层面的边界错误一旦理解 SLB 的转发和健康检查模型排查起来会快很多。创建和配置 SLB 的完整路径也反映了一套标准步骤先创建负载均衡实例再配置监听器把 ECS 加入后端服务器组设置健康检查与会话保持最后把域名解析指向 SLB。要删除实例时也要记得先把监听器和后端服务器摘掉否则在线连接可能会被强断引起不必要的抖动。配合监控报警和日志管理QPS、后端响应延迟、连接数这类指标都能成为排查问题时的第一手线索。4.5 SLB 与 ECS、RDS、OSS 是怎么连成一条线的把四件套拼在一起一张完整的迁移架构图就出来了。用户在浏览器输入域名域名解析到 SLB 的入口SLB 把请求分发到多台 ECS这些 ECS 上跑着应用服务应用服务需要图片或附件时从 OSS 读取需要业务数据时连接 RDS。每个角色各管一件事互不越权。这也解释了为什么迁移顺序很重要先迁 OSS让静态文件有了着落再迁 RDS让数据层稳定下来然后迁应用服务到 ECS把运行环境搭好最后才上 SLB把所有入口统一起来。顺序乱了要么应用启动后连不上数据库要么流量直接打到还没就绪的服务上整个迁移都会变成一场在线事故。5. 常见误区与易混概念分不清这四件事迁移必踩坑四件套的概念单看都不难但它们之间有一些非常相似的表象初学者很容易一头撞进去。以下是我见过最多的四组混淆。5.1 OSS 不是文件系统斜杠只是假目录第一个高频误区是把 OSS 当文件系统用。原因也很自然OSS 控制台里有「文件夹」的展示形式上传文件后 URL 里带着斜杠看起来和文件系统里的目录几乎一样。但 OSS 内部的数据模型是扁平的 Key-Valuetest1/test.jpg只是一个字符串形式的 Key而不是真的存在test1这个目录。 之所以展示成目录只是控制台为了人眼友好做的模拟。这个误解会带来实打实的成本。在文件系统里重命名一个目录是瞬间完成的事在 OSS 里重命名目录却要把所有以test1/开头的对象重新复制成以test2/开头的对象文件一多资源消耗非常夸张。所以判断的依据很简单如果接下来要做移动、改名、修改文件内容这类操作OSS 不是合适的选择如果只是新增文件、读取文件、删除文件才是 OSS 的主场。把 OSS 挂载成本地磁盘长期使用是迁移后最常见也最昂贵的翻车姿势。5.2 ECS 上装的 MySQL 不等于 RDS第二个误区是「我已经在 ECS 上装了 MySQL为什么还要用 RDS」确实两者都能通过 mysql 命令连接也都能执行 SQL但本质差别在于「谁负责运维」。ECS 上自建 MySQL 意味着备份要自己写脚本、主从要自己搭、磁盘满了要自己扩容、版本升级要自己踩坑RDS 把这些全部托管了自动备份、主备切换、监控告警、参数优化都是平台能力你只需要把连接地址从自己的机器改成 RDS 实例地址。区分方法也很简单问一句话——这台数据库挂了谁来把它拉起来如果你需要自己登录服务器处理恢复那就是自建如果只需要提工单让平台处理或者平台会自动切换主备那就是 RDS。换句话说数据库迁移到 RDS 之后你可以把更多精力放在应用层的业务逻辑上而不是半夜爬起来救数据库这一点对中小团队尤其友好。5.3 SLB 不等于 DNS 轮询第三种混淆是以为只要把域名解析到多台服务器的 IP 上就已经实现了负载均衡。DNS 轮询确实能把不同用户分散到不同的 IP但它不具备任何健康检查能力。假设解析里有三个 IP其中一台后端已经宕机DNS 不会知道这件事用户依然可能被分配到那个失效的 IP访问就会失败。更麻烦的是即使你手动删掉故障 IPDNS 的 TTL 生效也需要时间这段窗口期里故障访问会持续存在。SLB 则完全不同。它通过健康检查主动感知后端状态故障机器会被自动摘除恢复以后又能自动加回来它还能做会话保持让同一个用户尽量落在同一台后端。所以判断标准是如果流量分发逻辑里有「主动探测后端健康状态」这一环才是真正的负载均衡。只看是不是解析到多个 IP很容易误判。5.4 迁移不等于复制粘贴最后一个误区是把三类不同数据的迁移都当成「拷贝」。静态文件迁移适合用批量上传工具把本地图片、附件同步到 OSS数据库迁移则要用专门的迁移工具完成全量加增量同步而不是打包压缩数据库目录应用服务迁移更是要按依赖顺序重装环境。为什么不能统一处理因为三类数据的状态不同静态文件是死的拷过去就能用数据库是活的迁移期间线上可能还在写入新数据应用服务是可执行的代码依赖缺失就跑不起来。区分这三者迁移的路才不会走偏。用一个清晰的方式记忆图片、视频、文档这样的非结构化数据找 OSS结构化业务数据找 RDS需要部署代码和环境的机器找 ECS流量入口要统一收口时找 SLB。四者之间不是竞争关系而是一条完整链路里的四个岗位。6. 什么时候用、什么时候别用一次迁移的边界账本四件套不是越多越好也不是任何系统都非要拆得这么干净。我见过最理想的场景是这样的一个系统用户量持续增长单台服务器负载已经很高磁盘空间被图片和附件占去大半数据库每天还要靠人工备份。这种时候把静态资源迁到 OSS数据库迁到 RDS应用拆到多台 ECS入口统一交给 SLB整套系统的健康度会上一个大台阶。但也有明显不适合硬上四件套的情况。比如只是一个内部演示系统每天访问量两位数一台 ECS 同时跑应用和数据库完全够用这时候再引入 RDS 和 SLB不仅多出费用还多了配置和排查的复杂度。再比如数据有明确合规要求、必须保存在本地机房的场景也不能为了上云而上云。技术选型的判断标准始终是当前有没有真实痛点需要这四个角色来解决。没有痛点却硬拆只会把简单系统变成复杂系统。我印象最深的教训来自一次迁移踩坑。当时系统访问量刚到峰值单台服务器已经撑不住某天中午磁盘又被日志写满图片资源全部 404。那次迁移结束后我复盘发现自己最大的问题是把「上云」当成了一次性动作结果顺序乱了、依赖漏了、域名切过去之后才发现图片还在本地。从那以后我每次做迁移都强制自己先回答三个问题静态资源能不能放 OSS、数据库能不能托管、流量入口需不需要负载均衡。想清楚边界再动手翻车的概率会小很多。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站