LabHub
学习 学习路径 课程

云的基本功

交给托管时,一并交出去的东西

在 LabHub 中继续学习

一句话总结

IaaS、PaaS、SaaS 不是技术分类,而是衡量要把多少工作交给别人的刻度。越往上越省事,同时也会失去同等程度的控制权。

概念图: 要把多少工作交给别人 · 我们可以放弃什么 · 没有 · 无法访问 OS

为什么需要了解这一点

“用 RDS,还是自己在 EC2 上安装?”几乎每个项目都会至少问一次。答案不取决于“哪个更好”,而取决于我们可以放弃什么

IaaS(自行部署在 EC2) PaaS(RDS)
版本选择 任意版本 仅限提供商支持的版本
扩展 可安装任何扩展 仅限允许列表中的扩展
OS 访问 以 root 执行任何操作 没有——不存在 Shell
补丁 由我们规划 提供商在维护窗口执行
故障调查 可自由查看日志与性能分析 仅能使用公开的指标和日志
运维人员 需要 几乎不需要
成本 通常较低 通常较高

无法访问 OS 是实务中最令人痛苦的一项限制。确实有团队因为无法使用某个 PostgreSQL 扩展,或不能修改内核参数,而放弃托管服务。因此在决策前,最好先列出“我们现在在服务器上实际做了哪些事”。

工作原理

容器位于哪里

IaaS ─ VM ─ 컨테이너(직접 운영) ─ 관리형 K8s ─ 컨테이너 서버리스 ─ PaaS ─ SaaS
                                  (EKS/AKS/GKE)   (Fargate/Cloud Run)

托管 Kubernetes 只托管控制平面。工作节点的 OS、kubelet 和 CNI 往往仍由我们负责。不了解这一点,就会问出“明明是托管服务,为什么节点补丁还要我们来做?”

Serverless 交换了什么

以函数为单位运行的服务(如 Lambda)几乎消除了运维负担,但也附带限制。

当流量波动很大且任务很短时,它具有压倒性优势;若负载稳定、任务耗时长,反而可能更昂贵。

用数值衡量锁定(lock-in)

采用托管服务会绑定到相应提供商。若试图完全避免绑定,就什么也无法使用;但若不知道绑定的代价,日后迁移成本会爆炸。判断标准如下。

比起“绝不被绑定”,“知道以绑定为代价换来了什么” 是更实用的态度。

实际工作中的表现

用文字明确责任边界

比选择哪种模型更容易引发事故的,是对边界的误解。“既然是托管服务,应该会自动处理吧”这种模糊认识中,很多项目其实仍是我们的责任。因此,每次引入服务时,最好逐项写清以下内容由谁负责。

项目 谁负责
物理设备与虚拟机监控器 始终由提供商负责
客户机 OS 补丁 IaaS 由我们负责,PaaS 由提供商负责;托管 K8s 节点通常仍由我们负责
应用漏洞 始终由我们负责
访问权限配置 始终由我们负责
是否启用数据加密 通常由我们开启
备份保留期与恢复测试 即使提供商生成备份,恢复测试仍由我们负责
可用区部署 由我们决定

表中最常令人失望的是备份这一行。 人们因为托管数据库每天生成备份就感到安心,但这些备份能否真正恢复、保留期是否满足需求,以及账号本身出现问题时备份是否仍然存在,都必须由我们确认。有备份和能够恢复,是两个不同的事实。

权限也是如此。云事故中相当一部分源于“配置错误”,无论选择哪种模型,这一领域都仍由我们负责。越往上减少的是运维负担,而不是责任。 托管程度越高,我们能控制的手段往往只剩配置,因此每项配置的分量反而更重。迁移到托管服务后,应把节省下来的操作时间投入配置评审和恢复测试;若不预留这段时间,省下的运维时间就会原样转化为风险。

接下来将了解什么

理解托管服务的价值来自哪里——不是从价目表,而是从运维时间的角度来看。