SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

本地化部署和云原生

一个把系统搬进了客户的机房,一个把系统从底层就设计成只在云上活得最好。选本地化部署不等于跟云原生对着干,但把本地化部署的系统硬当成云原生的来运维,账单和故障率会一起往上走。

寓言

搬进院子里的机器和长在院子里的大树

老魏的企业软件公司接到一个大客户,要求全部系统部署在客户自己的机房内,数据不能出内网。老魏把公司云上的产品打了一个离线安装包,派了三个工程师出差一周,在客户的服务器上一项一项装好、配通、跑起验收脚本。客户签了验收单,项目交付。

两个月后,客户的运维主管打来电话:系统隔三差五报错,日志显示多个微服务因为依赖的下游服务不可用而崩溃。老魏查了配置:客户机房里的服务器规格不一,有些节点的内存不够,Kubernetes 调度器自动把多个 Pod 挤到了少数几台高配机器上,低配机器反而空着。这套调度逻辑在公有云上运行良好,因为云上所有节点的规格是统一的。

老魏意识到一个本质问题。他们的产品是为云环境设计的——依赖弹性负载均衡、自动伸缩组、托管数据库、统一的节点规格。这些云原生的基础设施能力在客户机房内不存在。他们把一棵云上长大的树连根拔起,硬塞进了客户的院子土里,树还在按云上的方式长,但土壤、水分、风力全变了。

老魏跟团队做了一个艰苦的决定:不回滚到云上,而是把产品在客户机房内重新适配。他们把微服务的健康检查超时从五秒调到二十秒,因为内网延迟比云上高。把自动伸缩关掉,改成固定实例数,因为没有弹性伸缩组。把数据库的高可用方案从云托管切换到了手动主从切换。

适配之后系统稳定了,但运维模式跟云上版本完全不同。云上的运维看的是自动伸缩日志和托管服务的 SLA 面板;本地化版本的运维靠的是人工巡检、手动扩容、硬件故障报修。两个版本的功能一模一样,但运维成本差了将近三倍。

老魏在客户复盘会上画了一张对比表:一行是云原生产品的运维成本组成,一行是本地化部署后的运维成本组成。两个版本的功能相同,但运维成本里多出来的部分,全是「云环境替你做的事现在要你自己做」——硬件监控、网络排错、数据备份策略、灾备演练。

后来公司在售前阶段加了一个标准动作:先问客户部署在云上还是本地,然后给出两个版本的运维成本估算。对选择本地化部署的客户,合同里明确列出需要客户自行承担的基础设施运维项。老魏把这叫做「不让客户把云上的体验当成本地化部署的默认配置」。

年底技术分享会上,老魏总结说:云原生是一套生长环境——土壤、气候、灌溉系统都是云厂商配好的。本地化部署是把同一棵树移栽到客户的院子里,树可以活,但养护方式全变了。如果移栽的时候不重新配土、不调整浇水量、不搭防风支架,树活不下来。

本地化部署

将软件系统安装和运行在客户自己的物理服务器、私有数据中心或指定基础设施上,数据不出客户控制范围。运维责任(硬件、网络、备份、灾备)由客户自行承担或与服务商协商分担。

云原生

一种从设计阶段就假定运行环境为云平台的应用架构范式,核心特征包括容器化、微服务、声明式 API、弹性伸缩和依赖云托管服务。它在云上运行效率最高,迁移到非云环境需要大量的架构适配。

故事对应

  • 云上统一的节点规格在客户机房不存在:云原生的调度策略依赖云环境的基础设施假设。
  • 健康检查超时从五秒调到二十秒:本地化部署需要重新适配所有云原生预设参数。
  • 自动伸缩关掉改成固定实例数:云原生依赖的弹性基础设施在本地化环境中不存在。
  • 运维成本对比表:云环境替你做的事在本地化部署中全部变成了人工运维成本。
  • 移栽大树需重新配土、调整浇水:云原生产品搬到本地化部署并非搬家,关键在于移栽。

落到项目里

售前阶段把「部署方式」和「运维模式」分成两个独立评估维度。部署方式决定数据在哪、谁管硬件;运维模式决定日常巡检、扩容、故障恢复由谁执行、按什么 SLA 运行。云原生产品做本地化部署时,合同里附一份「云环境替代方案清单」,逐条列出云原来自动做的事情在本地化部署中如何实现、谁负责。这张清单比单纯标注「支持本地部署」有效得多。