fedorthinks

速成课 · No. 25

「cloud」听起来很抽象,但它不过是租用别人的电脑、而不是自己掏钱买——并且只为你实际用到的部分付费,按需要随时扩大或缩小。serverless 走得更远:你彻底不再去想那些机器,只管运行你的代码。学会这些词,cloud 就不再是个时髦词,而变成在便利、控制与成本之间一组清晰的取舍。

19 个概念 · 每个都配一幅图 · 结尾附速查表

§ 01

剥去神秘的外衣,cloud 不过是个简单的生意点子:使用你并不拥有的电脑。其余的一切,都只是关于这台电脑的主人替你做了多少活的细节。

地图:六组共 19 个概念

一张地铁线路图:先看到整套线路,再一站一站地坐过去。

这门课里的每个概念都属于六组之一。每一组回答各自的问题:cloud 到底是什么,供应商替你做了多少,容量和账单怎样增长,你的代码实际跑在哪里,哪些部件可以整个交给供应商,以及怎样运行代码而不必操心服务器。

Rented computersCloud computingCapEx → OpExOn-demandService modelsService modelsIaaSPaaSSaaSElastic & meteredElasticityPay-as-you-goBill shockWhere it runsRegionAvailability zoneHigh availabilityManaged servicesManaged serviceUndiff. heavy liftingVendor lock-inServerlessServerless / FaaSScale to zeroCold startUsing it well → match the model · watch the bill · stay portable
六组概念——第 1–6 章依次讲这六组。第 7 章讲怎样把它们一起用好。

怎么读这门课

一本护照:每个人的栏目都一样,所以容易比较。

每个概念都用同样的方式来讲:它的英文名称(记住它——它就是 AWS、Google Cloud 和 Azure 文档里用的术语)、一幅来自日常生活的画面、一张图,以及一张带有这些栏目的卡片:是什么、例子、代价,和关联概念。这门课的核心想法:每个 cloud 时髦词,都是「别人替你做了多少」这条刻度上的一个点——以及你为此付出的代价。

Cloud Computing——cloud 就是别人的电脑

打车,而不是买车:车是真的,行程也是真的,但你不去拥有它、停放它、给它上保险、保养它——你只在需要的时候用它。

cloud computing 就是放在别人数据中心里的电脑,你通过互联网租用它,而不是自己掏钱买来、自己运维。当你的应用「在 cloud 里」运行时,它跑在真实的、实实在在的机器上——只不过这些机器属于像 Amazon、Google 或 Microsoft 这样的供应商,由他们来操心机房、供电和硬件。你把计算力当作一种服务来获取,就像你用电那样,而无需拥有发电厂。

Your appyour codeProvider's data centreServersreal machinesStoragedisksNetworkcables · routersPower & buildingrent overthe internetAWS · Google Cloud · Microsoft Azure — they own it, you use it
你的应用跑在供应商的机器上:服务器、磁盘、网络和机房都是他们的事。
ConceptCloud Computing· 云,the cloud
是什么
通过互联网租用别人的电脑,而不是自己买。
例子

一个网站跑在 AWS 的服务器上:Amazon 负责机房、供电和硬件;你负责自己的代码。

代价
服务器并没有消失——只是归别人所有。你用所有权换来了对供应商的依赖。
关联
整门课的基础;供应商替你做多少,由 IaaS / PaaS / SaaS 决定。

CapEx → OpEx——租,而不是买

你不会为了给家里供电而自建一座发电站——你接入电网,按用量付费。把整座电厂都买下来,只有在规模极其庞大时才说得通。

自己拥有服务器,意味着要预先购置昂贵的硬件、猜测自己将来会需要多少、并且不管用不用都得养着一屋子机器。这就是资本支出(CapEx)。租用把这一切反了过来:没有巨额的前期开销、没有闲置的硬件,而且有别人替你操心硬件那一面——这就是运营支出(OpEx)。对几乎所有人来说,正是这笔交易——把一大笔前期采购换成一份 pay-as-you-go 的账单——让 cloud 赢了下来。你是在使用资源的同时才花钱,而不是在用到它之前好几年就花钱。

Own hardware · CapExBig upfront purchaseyears before useGuess the capacitybuy for the peakIdle machinespaid for, unusedRent the cloud · OpExNo upfront coststart tinyBill tracks usagepay as you goProvider runs hardwarenot your problem
左:先买硬件,再去猜容量。右:租用,用多少付多少。
ConceptCapEx → OpEx· 租而不买
是什么
把一大笔前期硬件采购(CapEx)换成按用量持续支付的账单(OpEx)。
例子

创业公司不会为了以防万一而买下一整个机架的服务器——客户少的时候,只付几台 cloud 机器的钱。

代价
在规模极大且稳定的情况下,自己的硬件可能反而更便宜——就像自己的发电厂。
关联
由 On-demand 和 Pay-as-you-go 实现。

On-demand——几秒钟拿到资源

拧开水龙头,水立刻就流出来——不用等几周的送货,也不用搞一场水管工程。你一开口,供应就在那里。

它的决定性特征是资源是 on-demand(按需)的:你只需点几下鼠标或写一行代码,就能在几秒钟内启动一台新服务器、一个数据库,甚至一整套环境,关掉的时候同样迅速。对比一下下单、等待、再安装实体硬件的过程。这种即时的自助获取,让 cloud 不像是在买机器,而更像是在拧水龙头——你要多少容量,随时就有。

own hardware: weeksOrderWait weeksInstallReadycloud: secondsOne API callor a few clicksReadyin secondsShut down just as faststop paying
自有硬件:从下单到跑起来要几周。cloud:一次 API 调用,几秒钟就绪。
ConceptOn-demand· 自助,self-service
是什么
自己在几秒钟内启动或停止一项资源——不用提工单,也不用等送货。
例子
需要一个只用一天的测试环境——早上用一行代码把它拉起来,晚上删掉。
代价
拉起来容易,忘掉也同样容易——于是账单上就会出现惊喜(Bill shock)。
关联
Elasticity 和 Serverless 的基础。

cloud 就是 on-demand 地租用别人的电脑,而不是自己买。你把一大笔前期采购变成了 pay-as-you-go,并在几秒钟内拿到容量。

§ 02

cloud 服务是分层的,区别只在一件事:供应商管多少,你自己做多少。三个缩写,就是这条刻度上的三个主要节点。

Cloud Service Models——「别人替你运维多少」的刻度

吃一顿饭:租一间厨房,从头到尾自己做;或者拿到备好料的厨房;或者干脆点一份做好的菜送上门。同一顿晚饭,费的力气天差地别。

cloud 服务模型位于一条刻度上,一头是「几乎所有东西都要你管」,另一头是「几乎什么都不用你管」。一端你租的是裸机,其余的自己来;另一端你只是使用成品软件。最有名的记法是 「pizza as a service」——从头自己做、买回家自己烤、或者让人送上门。这三个有名字的层——IaaS、PaaS、SaaS——就是这条线上的几个点。

On-premIaaSPaaSSaaSYour data & settingsyouyouyouyouApplicationyouyouyouproviderRuntime & scalingyouyouproviderproviderOS & patchingyouyouproviderproviderVirtual machinesyouproviderproviderproviderHardware & buildingyouproviderproviderproviderleft → right: the provider runs more, you run less
从左到右,供应商承担的层越来越多。你自己的数据和设置,在哪里都还是你的。
ConceptCloud Service Models· pizza as a service
是什么
一条刻度:从硬件到应用,供应商运行多少层,你自己运行多少层。
例子
自己的机房 → IaaS → PaaS → SaaS:每走一步,你要负责的部分就少一些。
代价
他们替你做得越多,你的控制就越少——便利从来都不是免费的。
关联
刻度上的点:IaaS、PaaS、SaaS;最远的一端——Serverless。

IaaS 与 PaaS——裸机,还是现成的平台

租一间空车间,所有工具都得自己装(IaaS);或者租一间设备齐全的车间,你只管带着项目进去开工(PaaS)。

**IaaS(Infrastructure as a Service)**租给你的是原始的积木——虚拟机、存储、网络——上面的一切都由你自己安装和管理:控制最大,活也最多。**PaaS(Platform as a Service)**则给你一个现成的环境,你只需部署代码,下面的服务器、扩缩容和打补丁都由供应商负责:控制少一些,活也少得多。你的选择,在于你想自己掌管多少「水管」。

IaaS — raw machinesYour codeRuntime & scalingOS & patchingVirtual machinesmax control · max workPaaS — ready platformYour codeRuntime & scalingOS & patchingVirtual machinesless control · far less workhighlighted = run by the provider
IaaS:供应商只给你虚拟机。PaaS:除了你的代码,供应商全包。
ModelIaaS· Infrastructure as a Service
是什么
租用虚拟机、磁盘和网络;操作系统、运行时和应用都是你的。
例子
AWS EC2 上的一台虚拟机:软件由你安装,系统由你配置,更新也由你自己负责。
代价
控制最大 = 活最多:打补丁和扩缩容都落在你身上。
何时使用
当你需要完全掌控一切的搭建方式时。
关联
Cloud Service Models 的底部;它之上是 PaaS。
ModelPaaS· Platform as a Service
是什么
一个现成的平台:你带来代码,供应商运行服务器、扩缩容和打补丁。
例子
推送到 Heroku 或类似平台——应用就跑起来了,不用配置任何服务器。
代价
控制更少:你得按平台的规则办事,并依赖它所支持的东西。
何时使用
当你只想部署代码、不想去想机器的时候。
关联
位于 IaaS 与 SaaS 之间;与 Managed Service 是近亲。

SaaS——开箱即用的成品软件

在咖啡馆吃一份三明治,你不用自己种小麦、烤面包——点单、吃就行。在它送到你面前之前,每一步都有别人做好了。

**SaaS(Software as a Service)**是最远的一端:你通过互联网直接使用的成品软件,供应商运行一切——Gmail、Slack、你的 CRM。除了你自己的数据和设置,你什么都不用管。你日常用的大多数软件都是 SaaS。作为开发者,那些你不想自己造的部分,你就使用 SaaS;那些属于你自己产品的部分,你就在 IaaS 或 PaaS 上构建。知道自己处在哪一层,就知道谁负责什么。

Consume · SaaSGmailSlackCRMBuild · IaaS / PaaSYour productwhat you actually sellusesSaaS for what isn't your product · build what is
邮件、聊天和 CRM 直接拿现成的(SaaS);你自己的产品则建在 IaaS 或 PaaS 上。
ModelSaaS· Software as a Service
是什么
通过互联网提供的成品应用;你只管自己的数据和设置。
例子
Gmail、Slack、CRM——无需安装,也无需维护。
代价
几乎没有控制权:软件怎么运作,由供应商说了算。
何时使用
用于一切不属于你产品的部分。
关联
Cloud Service Models 的顶部;与 IaaS 正相反。

cloud 的各层,区别在于供应商替你运行多少:IaaS 是你自己管理的裸机,PaaS 是为你的代码准备好的平台,SaaS 是直接使用的成品软件。

§ 03

cloud 的超能力在于容量不是固定的。它随你的需要增长和收缩,你只为用到的部分付费——这是一份礼物,但如果粗心,也是一个陷阱。

Elasticity——高峰时往上,过后往下

一座音乐厅,能在重头戏那天晚上加一千个座位,第二天早上再撤掉——容量与人群相匹配,绝不浪费在空荡荡的大厅里。

Elasticity(弹性)是 cloud 在需求飙升时增加资源、需求回落时撤掉资源的能力。一场促销、一次爆红、一个繁忙的钟点——cloud 会拉起更多服务器来应付,之后再缩回去,这样你就不用为不需要的容量付钱。用自有硬件的话,你得按最忙的那一刻去买,其余时间让它闲着。Elasticity 让你运行的东西与你真正需要的东西一分钟一分钟地匹配起来。自动完成这件事的机制叫做 autoscaling(自动扩缩容)。

loadtime →owned hardware: bought for the peak, idle the restsale spikeelastic capacitydemand
容量随需求上下起伏。红线是自有硬件:按峰值购买,其余时间闲置。
ConceptElasticity· autoscaling
是什么
需求飙升时容量增长,需求过去后容量收缩。
例子
促销期间商店用十台服务器,夜里只用两台。
代价
没有上限的扩容,自己就可能把账单撑爆(Bill shock)。
关联

需要 On-demand;通过 Pay-as-you-go 付费;它的极端形态是 Scale to Zero。

Pay-as-you-go——是计量表,不是一次购买

一张水电账单:你付的是这个月实际用掉的电,而不是拥有电网的固定费用。用得多,付得多;不用,就不付。

cloud 像公用事业一样计费:pay-as-you-go,按你实际消耗的计算、存储和流量收费。没有前期采购,不为闲置的容量付钱——计量表只在你使用资源的时候才转。这正是 cloud 平易近人的原因:你可以从很小、很便宜的规模起步,成本随着用量一起增长,而不是在你还没有任何客户之前就押下的一笔巨额赌注。账单与现实同步。

ComputeStorageTrafficMeterruns only while usedMonthly bill= what you useduse more → pay more · use nothing → pay nothing
计算、存储和流量都要过一遍计量表;月底,账单就等于你的用量。
ConceptPay-as-you-go· 按用量计费,usage-based billing
是什么
为你实际消耗的计算、存储和流量付费。
例子
一个小项目在用户少的时候只花几分钱;流量涨了,账单也涨。
代价
「只为用到的付费」=「用到的每一样都要付费」。
关联
CapEx → OpEx 和 Elasticity 在金钱上的那一面。

Bill Shock——计量表是双刃剑

出租车计价器在短途上很公平,但如果你忘了它已经跑了好几个小时,就很吓人——同样的按次计价,既能帮你省钱,也能悄悄积出一笔巨款。

Pay-as-you-go 是把双刃剑。同样的计量方式,在用量低时帮你省钱,但一旦有什么东西失控——一个一直开着的进程、一次失控的扩容、一个陷入循环的错误——就可能产生一张吓人的账单。这种意外就叫 bill shock(账单休克)。它之所以常见,正是因为拉起东西太容易,忘掉它们也太容易。于是有了这条规矩:你得盯着计量表——比如设置一个 budget alert(预算告警),在花费越过某个上限时触发。

days →costbudget alertprocess left on · runaway scale-up · a bug that loopsnormal usage
平常的日子,花费平稳。然后有东西失控,成本攀升;预算告警及早把它抓住。
PitfallBill Shock· 意外账单,surprise bill
是什么
因为有东西失控,cloud 账单意外地高得离谱。
例子
一台测试服务器开了一个月忘了关;代码里的一个循环不停地调用某个收费服务。
如何避免
像监控性能一样监控花费;设置预算告警和扩容上限。
关联
Pay-as-you-go、On-demand 和 Elasticity 的另一面。

Elasticity 在高峰时扩容、过后缩容;pay-as-you-go 只对你用到的部分收费。同一块计量表,既能省钱,也能攒出一张吓人的账单——所以要盯着它。

§ 04

cloud 不是一个地方——它是分布在世界各地的数据中心。你的东西跑在哪里,既影响它用起来有多快,也影响它在故障面前能撑多好。

Region——让算力靠近用户

一家在每个大洲都有仓库的快递公司,从最近的仓库给每位客户发货——比从单一枢纽寄出所有包裹,对每个人都更快。

供应商在全球各地的 region(区域)里运营数据中心。应用跑在哪里由你来选,而把它放在离用户近的 region,就能降低 latency(延迟)——数据要走的路更短,应用就显得更快。一个欧洲的应用,从欧洲 region 提供服务,要比从大洋彼岸提供服务好得多。选择 region 就是地理这根杠杆:把你的算力和数据放在离使用者近的地方。

US regiondata centresEU regiondata centresAsia regiondata centresUsers in Europeshort trip · low latencyfar region · slower
欧洲的用户访问欧洲 region——路程很短。region 太远,就意味着要跨越大洋走很长的路。
ConceptRegion· 延迟,latency
是什么
供应商位于世界某一区域的一组数据中心,由你为自己的代码挑选。
例子
面向欧洲人的应用,部署在欧洲的 region。
代价
一个 region 就是一个地方:地球另一端的用户会觉得更慢。
关联

一个 region 内含多个 Availability Zone;它们合起来提供 High Availability。

Availability Zone——扛得住一栋楼出故障

一家银行把记录的副本存放在几栋彼此分开的楼里——一栋被水淹了,其他的照常运转,什么也不会丢。

一个 region 内有多个 availability zone(可用区)——在物理上相互分离的数据中心。你同时在多个 zone 里运行系统的副本。如果某个 zone 断电或出故障,其他 zone 继续提供服务,你的应用仍然在线。

One regionZone AApp copyservingseparate data centreZone B · ✗ power lostApp copydownseparate data centreZone CApp copyservingseparate data centreone zone fails → the other two keep serving
三个 zone,三座独立的数据中心。zone B 断电了,但 A 和 C 里的副本仍在响应。
ConceptAvailability Zone· AZ
是什么
一个 region 内部、在物理上相互分离的数据中心。
例子
应用的副本放在三个 zone:一个断电了——另外两个继续工作。
代价
只有当你真的在多个 zone 里运行副本,它才能保护你免于一栋楼出故障。
关联
Region 的一部分;Redundancy / High Availability 的构件。

Redundancy 与 High Availability——靠近用户,又扛得住故障

一家在每座城市都有分店的商店,而且每家分店都有附近的另一家做后备——既贴近顾客,又不怕任何一个地点熄火。

Redundancy(冗余)意味着没有哪一栋楼、哪一台机器、哪一个 zone 会成为致命的单点故障。由此换来的是 high availability(高可用)——在足以让单一地点瘫痪的故障面前依然在线。这两个想法合在一起,构成 cloud 架构的核心:为了速度,把算力放在靠近用户的 region 里;为了韧性,把它分散到多个 zone 里。一个全球服务在每个地方都像本地的一样快,又扛得住某处必然会发生的硬件故障。你不再把整个产品押在某栋楼里的某台机器上——你是按设计分散开的,而这就是「cloud 很可靠」绝大部分的真正含义。

Region: EUZone Aapp copyZone Bapp copyEU usersnearestRegion: USZone Aapp copyZone Bapp copyUS usersnearestregions near users for speed · zones for resilience · no single point of failure
两个 region,分别靠近两群用户;每个 region 里,副本分布在两个 zone。没有单点故障。
ConceptHigh Availability· 冗余,redundancy
是什么
系统在故障面前依然在线,因为每个部分在别处都有一份副本。
例子

一个全球服务:欧洲一个 region、美国一个 region,每个 region 里的副本分布在两个 zone。

代价
副本要花钱,还会增加复杂度——每一份副本都记在账单上。
关联
由 Region(速度)和 Availability Zone(韧性)构成。

region 把你的算力放在靠近用户的地方以降低延迟;availability zone 把它分散到相互独立的数据中心以获得冗余——既贴近用户,又扛得住任何一处故障。

§ 05

除了租机器,cloud 还会替你运行整块整块的基础设施——数据库、队列、缓存——让你直接使用而不必运维。这份便利是一笔真实的取舍。

Managed Service——让供应商去做那些难的部分

一间配套服务的公寓,水管、供暖和维修都有别人负责——你只管住进去,而不用自己去当楼管。

managed service(托管服务)是 cloud 供应商替你运行的基础设施——托管数据库、消息队列或缓存——由他们负责搭建、扩缩容、备份、打补丁和 failover(故障切换)。你通过一个接口来使用它,永远不用碰下面的机器。你不必成为在大规模下可靠地运维数据库的专家,而是把这份专业能力租了过来。

Self-run databaseManaged databaseYour app & queriesyouyouSetupyouproviderScalingyouproviderBackupsyouproviderPatchingyouproviderFailoveryouprovider
自己运维的数据库:一切都落在你身上。托管数据库:只有你的应用和查询是你的;其余都归供应商。
ConceptManaged Service· 托管数据库、队列、缓存
是什么
由供应商替你搭建、扩缩容、备份和打补丁的数据库、队列或缓存。
例子
使用托管的 Postgres(例如 AWS RDS),而不是在虚拟机上自己搭一个数据库。
代价
控制更少,并且被绑定在供应商上(Vendor Lock-in)。
关联
消除 Undifferentiated Heavy Lifting;再往下一步是 Serverless。

Undifferentiated Heavy Lifting——少一点运维,多一点产品

一位餐车老板向面包店买面包,而不是自己磨面粉——他专注于真正属于自己生意的餐食,而不是再去兼做面包师。

managed service 的要义是专注。可靠地运维基础设施——备份、扩缩容、安全补丁、凌晨三点的故障——是艰难而专门的工作,对大多数团队来说,那并不是他们的价值所在。这类工作被称为 undifferentiated heavy lifting(无差别的繁重工作)——那些繁重、却不能让你与竞争对手拉开差距的活儿。每一个不用来维持数据库存活的小时,都是花在真正属于你的产品上的一小时。把它卸出去,能让一个小团队发挥出远超自身规模的战斗力,去做功能,而不是去照看服务器。这正是现代产品能以小团队快速上线的一大原因。

ConceptUndifferentiated Heavy Lifting· 无法让你与众不同的运维
是什么
人人都需要,但不会让你的产品变得特别的艰难运维工作。
例子
备份、安全补丁和凌晨三点的数据库故障——占去了本该做功能的时间。
代价
如果运维本身就是你的价值,把它交出去就是个错误。
关联
选择 Managed Service 和 Serverless 的理由。

Vendor Lock-in——便利与控制之间的取舍

一份配好的食材包方便得很——直到你想换掉其中一样食材,才发现食谱是由这个包说了算。便利,是用控制来买的。

这笔取舍是真实的:managed service 让出了一部分控制,并把你绑在那家供应商做事的方式上。你越深地采用他们特有的服务,离开就越难、越贵。这就是 vendor lock-in(供应商锁定)。你是在拿眼前的便利和速度,去换日后的灵活与独立。很多时候这是正确的选择——但要做得明明白白,把真正关键的部分保持可替换。这和在托管 API 与自己部署之间做选择,是同样的判断。

Provider AYour appManaged DBManaged queueTheir unique APIsProvider Bleave?the deeper you wire in, the harder and costlier it is to leave
应用依赖于某一家供应商的数据库、队列和独有的 API——想换到另一家就变得很贵。
PitfallVendor Lock-in· 供应商锁定,provider lock-in
是什么
你陷进一家供应商的服务越深,离开就越贵。
例子
应用与供应商独有的 API 绑在一起——迁移就意味着重写。
如何与之共处
明明白白地接受锁定;让真正关键的部分保持可移植。
关联
Managed Service 和 Serverless 所付的代价。

managed service 让供应商去运行数据库、队列或缓存,这样你就能专注于产品而不是运维。代价是控制更少,并带有一定程度的 vendor lock-in。

§ 06

「不用管机器」走到最远的一步就是 serverless:你只提供自己的代码,cloud 按需运行它,按请求扩缩容和计费。对于合适形态的工作,它很强大。

Serverless——只有你的代码,没有服务器要操心

一间按半小时预订的会议室:你不拥有它,不用给它供暖,也不用打扫——你只管来、用,离开的那一刻它就从你脑子里消失了。

Serverless 让你运行代码,而完全不用管理任何服务器。你把一个函数——一小段代码——交给供应商,每当有事件触发它时,它就运行这个函数:一个请求、一次文件上传、一个定时计划。所有的机器、扩缩容和容量,都在你看不见的地方处理好了。这种形态也叫做 FaaS(Function as a Service)。当然,服务器依然存在;只是你从不去想它们。这是 cloud 之旅在逻辑上的终点:从拥有机器,到租用机器,再到根本意识不到机器的存在。

HTTP requestFile uploadScheduleProvider runs itYour functiona small piece of codeServers · scaling · capacityhidden from you
一个事件(请求、文件、定时计划)触发你的函数;服务器和扩缩容都藏在供应商那一侧。
ConceptServerless· FaaS,Function as a Service
是什么
你交出一个函数;供应商在每次事件发生时运行它,并管理所有机器。
例子
用户每上传一张图片,一个 AWS Lambda 函数就压缩一次。
代价
Cold Start、不适合长时间的稳定工作,以及被绑定在供应商上。
何时使用
短小的事件驱动任务、突发性的负载。
关联
Cloud Service Models 的最远一端;它会缩容到零(Scale to Zero)。

Scale to Zero——零请求,零成本

一盏人体感应灯:房间没人时熄着,不花一分钱;有人一进门就立刻亮起。你只在它真正亮着的时候才为这盏灯付钱。

Serverless 会缩容到零:没人用你的函数时,什么都不运行,你一分钱不付;请求涌进来时,它会自动拉起需要的任意多个副本。你是按请求、按计算的每一小段秒数计费,而不是为一台闲等着的服务器付钱。这对于忽高忽低、偶尔才用到或难以预测的工作来说是理想的——你轻松获得扩缩容,在清闲时一分钱不花,这是一台一直开着的服务器比不了的。

requestsinstances0000000no requests → 0 instances → $0 · a rush → as many copies as needed
上:请求;下:函数副本。没有请求——零个副本,账单上也是零;请求涌来——需要多少副本就有多少。
ConceptScale to Zero· 按请求计费,per-request billing
是什么
没有请求时什么都不运行,账单为零;请求涌来时,副本自己启动。
例子
一份每天只被调用几次的内部报表,几乎不花钱。
代价
清闲一阵之后,第一个请求要等待启动(Cold Start)。
关联
Elasticity 和 Pay-as-you-go 的极端形态。

Cold Start——什么都不运行所要付的代价

那盏人体感应灯在亮起时有一丝微小的延迟——走廊里无所谓,但如果你需要的是即时、恒定的亮度,就会很烦人。

Serverless 也并非没有取舍。一个闲置过的函数会有 cold start(冷启动)——供应商把它拉起来时的短暂延迟——这会伤害对延迟敏感的工作。它更适合短小的事件驱动任务,而不是长时间运行或流量大且稳定的任务,后者用一台一直开着的服务器可能更简单、更便宜。而且它依赖供应商特有的服务,所以锁定问题同样存在。Serverless 是针对合适工作的一把利器——突发性的、事件驱动的、缩容到零的工作——而不是一个万能的默认选项。

coldSpin upcold start delayRun codeResponsewarmRun codeResponseidle function → the first request waits · warm function → answers right away
冷的函数先要启动,之后才响应;热的函数立刻就响应。
PitfallCold Start· 启动延迟,startup delay
是什么
供应商唤醒一个闲置函数时,第一个请求所遭遇的延迟。
例子
一个很少被用到的函数,响应第一个请求时,明显比响应后面的慢。
如何与之共处
对延迟敏感的工作或稳定的流量,使用一台一直开着的服务器。
关联
Serverless 中 Scale to Zero 所付的代价。

serverless 只运行你的代码,缩容到零并按请求计费——非常适合突发性的、事件驱动的工作。留意冷启动和锁定;它是一把利器,而不是默认选项。

§ 07

cloud 是一个装满取舍的工具箱,而不是唯一的正确答案。用好它,就是让每个部件匹配上适合它的模型,并留意两件会咬人的事:账单和锁定。

让模型匹配需求

你不会用送货卡车去接送孩子上学,也不会用自行车去搬家——你挑的是适合这趟行程的车,而不是一个包打天下的默认选项。

不存在唯一正确的层。对不属于你产品的能力用 SaaS,用 managed service 卸掉 undifferentiated heavy lifting,对突发性的事件驱动工作用 serverless,需要完全控制时用裸机(IaaS)。真正的功夫,是让系统的每个部分匹配上适合其需要的模型——重要的地方要控制,不重要的地方要便利。一个好的 cloud 架构通常是有意为之的组合,而不是把同一个模型用在所有地方。

Not your productemail · chat · CRMSaaSUndifferentiated heavy liftingdatabase · queue · cacheManaged serviceBursty, event-driven workspikes, then quietServerlessNeed full controlcustom setupIaaS · raw machinesa good cloud architecture is a deliberate mix, not one model everywhere
每一种工作各有各的模型:SaaS、managed service、serverless,或裸机。

盯紧账单,提防锁定

租房很自在——直到你不再看账单;而最舒服的出租屋,往往是被设计成让你永远搬不出去的那一间。

有两件事总是在咬 cloud 的用户。第一是账单:按需就能拿到资源这么容易,意味着成本可能在不知不觉中悄悄爬升或骤然飙升(bill shock),所以你要像监控性能一样监控花费。第二是锁定:你与某一家供应商独有的服务绑得越深,离开就越难、越贵。这两件事都不是叫你避开 cloud——而是叫你睁大眼睛去用它:盯着计量表,别让你真正关键、本该可移植的部分,永久地焊死在某一家供应商身上。

这一切是怎样连起来的

一幅拼图:每一块单独看意义不大;拼在一起,才成了一幅画。

这门课里的概念是一个整体。cloud computing 就是租,而不是拥有。从它长出三条分支。第一条是钱:on-demand 使 elasticity 成为可能,elasticity 通过 pay-as-you-go 来付费,而计量表有它黑暗的一面——bill shock。第二条是替你做了多少:IaaS → PaaS → SaaS、managed service,以及 serverless——它会缩容到零,代价是冷启动和 vendor lock-in。第三条是东西跑在哪里:region、availability zone,以及它们合起来的——high availability。

Cloud computingrent, don't ownOn-demandElasticityPay-as-you-goBill shockIaaS → PaaS → SaaSManaged serviceServerlessscales to zeroCold startRegionAvailability zoneHigh availabilityVendor lock-in
cloud 分成三条分支:钱、供应商做多少,以及部署位置。红色标出每条分支各自的陷阱。
在 cloud 上动手搭建之前
  • 租还是买——on-demand、pay-as-you-go 是否比买硬件更合适?
  • 每个部件用哪种模型——IaaS、PaaS、SaaS、serverless——取决于你需要的控制程度。
  • 能否扩缩——随需求弹性伸缩,高峰时向上、过后向下?
  • region 与 zone——算力靠近用户,并分散部署以获得韧性?
  • 托管还是自己运维——运维这一部分真的是你的价值所在吗?
  • 账单与锁定——我是否在监控花费,并让关键部分保持可移植?
你用好了 cloud 的迹象
  • 你 on-demand 地租用,按用量付费,而不是按最忙的那一小时去买。
  • 每个部件都用合适的模型——从裸机到 serverless。
  • 你的系统弹性伸缩,跑在靠近用户的 region 里,并分散在多个 zone 上。
  • 你把无差别的工作卸给 managed service,把精力集中在自己的产品上。
  • 你盯着账单,并让关键部分保持可移植,以防锁定。

速查表:全部 19 个概念

租来的电脑

Cloud Computing云,the cloud

通过互联网租用别人的电脑,而不是自己买。

CapEx → OpEx租而不买

一大笔前期硬件采购,变成一份 pay-as-you-go 的账单。

On-demand自助,self-service

自己在几秒钟内启动或停止一项资源。

服务模型

Cloud Service Modelspizza as a service

一条刻度:供应商运行多少层,你自己运行多少层。

IaaSInfrastructure as a Service

原始的虚拟机、磁盘和网络;上面的一切都是你的。

PaaSPlatform as a Service

一个现成的平台:你带来代码,供应商运行服务器。

SaaSSoftware as a Service

成品软件;你只管自己的数据和设置。

Elasticity 与金钱

Elasticityautoscaling

容量在高峰时增长,过后收缩。

Pay-as-you-go按用量计费,usage-based billing

你为实际消耗的计算、存储和流量付费。

Bill Shock意外账单,surprise bill

有东西失控时,账单意外地高得离谱。靠监控花费来化解。

跑在哪里

Region延迟,latency

位于世界某一区域的数据中心;离用户越近,延迟越低。

Availability ZoneAZ

一个 region 内独立的数据中心;跨 zone 的副本能扛住故障。

High Availability冗余,redundancy

没有单点故障:系统在故障面前依然在线。

托管服务

Managed Service托管数据库、队列、缓存

由供应商替你运行的数据库、队列或缓存。

Undifferentiated Heavy Lifting无法让你与众不同的运维

不会让你的产品变得特别的艰难运维——值得交出去。

Vendor Lock-in供应商锁定,provider lock-in

你陷进一家供应商的服务越深,离开就越贵。

Serverless

ServerlessFaaS

只有你的代码;供应商在每次事件发生时运行它。

Scale to Zero按请求计费,per-request billing

没有请求——什么都不运行,也不计费。

Cold Start启动延迟,startup delay

函数闲置后启动时,第一个请求所遭遇的延迟。

cloud 就是 on-demand 地租用算力,分层从裸机一直到 serverless。用好它的办法,是让每个部件匹配上合适的模型——并盯紧账单和锁定。

速成课结束 · 7 章 · 19 个概念

接下来是实践:拿一个小应用,把它部署到一个 cloud 平台上——挑一个 PaaS 或 serverless 选项,这样你只管推代码,再看着它按用量扩缩容、按用量计费。然后加上一项 managed service,比如一个数据库,而不是自己运维一个。当你感受到自己几乎不必去运维多少、又注意到计量表在嘀嗒作响的那一刻,这些取舍就变得具体起来。但有一个想法要高高举在其余之上:cloud 不过是别人的电脑,on-demand 地租来。每一个时髦词,都是「别人替你运维多少」这条刻度上的一个落点——而用好它,就是一个部件一个部件地去选,拿多少便利去换多少控制。