云计算
开篇:从"买服务器"到"租算力"
十年前想搭个网站,得先跑去机房买服务器、装系统、拉网线、找人 7x24 值班。现在呢?打开浏览器注册个账号,三分钟就能拥有一台云服务器。这背后的变革,就是云计算。
一句话总结:云计算就是把计算和存储当水电一样卖 -- 按需取用、按量付费。
什么是云计算
因为企业各自搭建服务器耗费巨大,于是有人想到:能不能把算力和存储集中起来,通过网络租给大家用?这就是"云"的由来 -- 远端提供的、可以弹性伸缩的基础设施。
"云"中的资源在用户看来可以无限扩展,随时获取、按需使用、按量付费。有了云计算之后,无论是企业还是个人,搭建网站或平台都不再需要自己的服务器,完全可以租用云资源。
云计算的核心优势
| 特性 | 说明 | 传统 IT 对比 |
|---|---|---|
| 弹性伸缩 | 流量高峰自动扩容,低谷自动缩容 | 提前采购,闲时浪费 |
| 按量付费 | 用多少花多少,不用不花钱 | 一次性投入,折旧成本高 |
| 高可用 | 多副本、跨机房容灾 | 自建容灾成本极高 |
| 免运维 | 硬件故障由云厂商处理 | 需要专人 7x24 值班 |
| 虚拟化 | 资源抽象隔离,灵活分配 | 物理机资源固定 |
| 高兼容 | 兼容不同厂商硬件,低配机器也能用 | 依赖特定硬件 |
云计算的服务类型
虽然都用云计算,但不同的用户需要的服务不一样。有些公司只需要租服务器,有些需要整套平台,有些个人用户只想直接用一个现成的软件。所以根据服务类型的不同,云计算分为三层:IaaS、PaaS 和 SaaS。
IaaS / PaaS / SaaS -- 租房子的三种方式
这三层是云计算最经典的服务模型,它们像一个"堆栈"一样层层叠加。用租房来类比最直观。
IaaS(Infrastructure as a Service)-- 共享厨房
商家提供厨房、锅具、煤气灶、烤箱、电饭煲等全套厨房用品。你需要自己买米、面、蔬菜、调味品,并进行加工制作。
映射到云计算:云厂商提供虚拟机、网络、存储等基础设施。你可以在上面部署和运行任何软件,包括操作系统和应用。你没有权限管理底层硬件(服务器、交换机、硬盘),但可以管理操作系统、安装应用、配置网络组件。
典型代表:AWS EC2、阿里云 ECS、Azure Virtual Machines。
PaaS(Platform as a Service)-- 共享厨房 + 预制菜
除了厨房和厨具,还提供洗好切好的蔬菜、调好味的肉、饺子皮和饺子馅。你只需要炒一炒、煮一煮就能吃,但不用做太多前期准备。
映射到云计算:云厂商提供运行时环境、数据库、消息队列等中间件。你不需要管理底层基础设施(网络、服务器、操作系统、存储),只需要控制应用程序和配置。
典型代表:Heroku、Google App Engine、阿里云函数计算。
SaaS(Software as a Service)-- 点外卖
直接提供做好的菜肴,还送外卖上门。你只需要付费就能享用各种不同类型的美食。
映射到云计算:直接使用现成的软件服务,通过浏览器或轻量客户端访问。你不需要管理或控制底层的任何东西,可能只有一些有限的用户配置选项。
典型代表:Gmail、Salesforce、钉钉、飞书。
三者对比
| 对比项 | IaaS | PaaS | SaaS |
|---|---|---|---|
| 你管什么 | 应用 + 中间件 + OS | 应用代码 + 配置 | 什么都不管 |
| 厂商管什么 | 硬件 + 虚拟化 + 网络 | 上面 + OS + 中间件 | 全都管 |
| 灵活性 | 最高 | 中等 | 最低 |
| 运维成本 | 高 | 中 | 几乎为零 |
| 学习成本 | 高 | 中 | 低 |
| 典型代表 | AWS EC2、阿里云 ECS | Heroku、GAE | Gmail、钉钉 |
公有云 / 私有云 / 混合云
继续用租房来类比:
公有云 = 合租公寓
公有云是第三方供应商为广大用户提供的云基础设施。所有硬件、软件和支持性基础设施均为云提供商拥有和管理。你与其他组织("租户")共享相同的硬件、存储和网络设备,各个房间通过虚拟化做隔离。费用相对低。
公有云适合计算需求有波动的企业或面向公众的应用(如 Dropbox、Netflix)。
优势:成本低,无需购买硬件;无需维护,由服务商提供;近乎无限的弹性伸缩。
私有云 = 整套独租
私有云为一个企业或组织提供专用的云环境。可以在组织内部的数据中心运行,也可以由第三方托管。服务和基础设施始终在私有网络上维护,硬件和软件专供组织使用。
私有云适合政府机构、金融机构以及对安全和控制有高要求的大型组织。
优势:灵活性高,可按需定制;安全性高,资源不共享;保持私有云的同时也有弹性。
混合云 = 整租 + 合租灵活切换
混合云通过 VPN 或专线连接公有云和私有云,允许在不同云环境之间共享数据和应用。私有云运行的应用遇到使用高峰时,可以自动"突发"到公有云获取额外容量("云爆发")。
混合云被认为是"两全其美",在安全性、灵活性和成本之间取得平衡。
三种云对比
| 类型 | 优势 | 劣势 | 适用场景 |
|---|---|---|---|
| 公有云 | 成本低、弹性大、免运维 | 安全性相对低、定制有限 | 中小企业、互联网应用 |
| 私有云 | 安全可控、高定制 | 成本高、维护复杂 | 金融、政府、大型企业 |
| 混合云 | 灵活平衡安全与成本 | 架构复杂、方案不够成熟 | 有合规要求的大型企业 |
Serverless -- 不用管服务器的架构
Serverless 是云计算的进一步演进。不是说没有服务器,而是你不用关心服务器。 就像用自来水 -- 你不用关心水厂在哪里、水管怎么铺设,拧开水龙头就有水。
Serverless 是一种云计算架构模式,核心思想是开发者可以通过第三方提供的服务直接构建和部署应用。在 Serverless 中,没有传统意义上的"应用程序"概念了,应用被分解为无状态的函数,由云平台统一管理。
开发者只需关注业务逻辑和函数编写,无需关注底层的服务器管理。云平台负责运行环境、自动伸缩、负载均衡、监控日志等所有运维工作。
核心特点
| 特点 | 说明 |
|---|---|
| 按需启动 | 没有请求时不占用任何资源,请求来了自动启动 |
| 按量计费 | 按实际调用次数和执行时长收费,精确到毫秒 |
| 自动伸缩 | 100 个并发和 10000 个并发,平台自动处理 |
| 无状态 | 每次函数调用独立,不依赖上一次的状态 |
| 免运维 | 开发者只关注业务逻辑 |
Serverless 已经广泛应用于 Web 应用、移动后端、数据处理、IoT 等领域。典型产品如阿里云函数计算 FC、AWS Lambda。
为什么说 Serverless 是无状态的
无状态的意思是:每次请求都是独立的,服务不会依赖之前的请求状态来处理当前请求。Serverless 中的函数在需要时被动态调用,调用完就销毁,下次再调用时重新启动。JVM 内存里的本地缓存、全局变量在两次调用之间都不保留。
但"无状态"不等于"不存数据"。数据照样存在 MySQL、Redis 这些有状态的存储里,只是函数本身不保持状态。最简单的理解:本地缓存这玩意,在 Serverless 中是没用的,因为 JVM 每次都要重新启动。
无状态设计的好处:
- 易于水平扩展:不需要考虑状态同步,直接加实例就行
- 简化部署和管理:不需要复杂的状态管理机制,不需要维护连接状态或会话状态
- 提高可靠性:请求之间没有依赖,一个失败不影响其他
为什么云原生对启动速度要求很高
这和 Serverless 直接相关,而且主要原因其实很直接 -- 钱!
在云环境中按使用量付费,应用能够快速启停意味着可以根据实际需求调整资源,从而优化成本。快速启动还能减少不需要时占用的资源,进一步降低运营成本。
另外,云原生应用通过微服务和容器化实现快速部署和更新,这依赖于短启动时间。高可用性也要求在应用出现问题时能快速回滚和重启。Serverless 函数按需启动,启动太慢就意味着用户等待太久,直接影响体验。
云存储 OSS
在分布式架构中,应用部署在多台服务器上。由于负载均衡,文件上传和下载可能落在不同机器上 -- 第一次上传文件的请求打到服务器 A,第二次获取文件的请求打到服务器 B,就会找不到文件。
这时候需要一个统一的文件存储服务。可以自建文件服务器,也可以用云存储。自建前期复杂且维护成本高,所以很多团队选择云存储。
OSS(Object Storage Service) 就是云厂商提供的对象存储,你可以理解为一个"无限大的网盘",通过 API 上传下载文件。附加能力丰富:图片编辑(裁剪、模糊、水印)、视频截图、音频转码、CDN 加速等。
OSS 与 CDN 结合,可以将源内容发布到边缘节点。大量用户重复访问同一文件时,直接从最近的边缘节点获取缓存数据,大幅提升访问速度。
OSS vs 自建对比
| 维度 | OSS | 自建文件服务器 |
|---|---|---|
| 可靠性 | 数据持久性 12 个 9(99.9999999999%) | 受限于硬件,磁盘坏道可能不可逆丢失 |
| 安全 | 加密、防盗链、IP 黑白名单、多用户隔离 | 需额外购买和实现安全机制 |
| 成本 | 多线 BGP,无带宽限制,上行免费,零运维 | 单线/双线接入,峰值需人工扩容,专人运维 |
Spring Boot 接入 OSS
三步搞定:
<!-- 1. 引入依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId>
</dependency># 2. 配置密钥和 Bucket
spring:
cloud:
alicloud:
access-key: your-access-key
secret-key: your-secret-key
oss:
endpoint: oss-cn-hangzhou.aliyuncs.com
bucket: your-bucket// 3. 注入使用
@Autowired
private OSS ossClient;
public String upload(MultipartFile file) throws IOException {
String key = UUID.randomUUID() + "_" + file.getOriginalFilename();
ossClient.putObject("your-bucket", key, file.getInputStream());
return "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/" + key;
}生产环境推荐"服务端签名直传":客户端先从后端获取签名,再直接上传到 OSS,文件不经过你的服务器,既安全又减轻服务器压力。
分布式文件系统 FastDFS
FastDFS 是开源的轻量级分布式文件系统,对文件进行管理(存储、同步、上传、下载),解决了大容量存储和负载均衡的问题。适用于相册网站、视频网站等场景。
和 OSS 相比,FastDFS 是自己部署维护的方案,不依赖云厂商。
三个核心角色
| 角色 | 职责 | 特点 |
|---|---|---|
| Client | 通过专有接口,使用 TCP/IP 与 Tracker 和 Storage 交互 | 发起上传下载请求 |
| Tracker | 负载均衡和调度,上传时根据策略找到目标 Storage | 无状态,可部署多个 |
| Storage | 实际存储文件,利用操作系统文件系统管理 | 可随时增删节点不影响服务 |
FastDFS 特色
- 和 Nginx 无缝衔接,已提供 apache 和 nginx 扩展模块
- 文件 ID 由 FastDFS 生成,作为文件访问凭证,不需要传统的 name server
- 分组存储,灵活简洁、对等结构,不存在单点
- 文件不分块存储,上传的文件和 OS 文件系统中的文件一一对应
- 支持相同内容只保存一份,节约磁盘空间
- 下载支持多线程和断点续传
- 支持在线扩容
主流分布式文件系统对比
| 指标 | FastDFS | HDFS | Ceph | MogileFS |
|---|---|---|---|---|
| 适合类型 | 4KB~500MB | 大文件 | 全类型 | 海量小图片 |
| 文件分布 | 小文件合并,不分片 | 大文件分片分块 | OSD 一主多从 | 不分片 |
| 复杂度 | 简单 | 简单 | 复杂 | 复杂 |
| 备份机制 | 组内冗余 | 多副本 | 多副本 | 动态冗余 |
| POSIX | 不支持 | 支持 | 支持 | 不支持 |
| 社区 | 国内用户群 | 活跃 | 较少 | 文档少 |
| 开发语言 | C | Java | C++ | Perl |
面试高频问答
Q1: 什么是云计算?IaaS / PaaS / SaaS 的区别?
关键词:按需取用、按量付费、三种服务模型
云计算的本质是把计算和存储作为商品出售,按需取用、按量付费。IaaS 给你毛坯房(虚拟机和网络),你自己装修和布置;PaaS 给你精装房(运行平台 + 中间件),你搬家具就能住;SaaS 给你酒店房间(成品软件),拎包入住。管得越多灵活性越低,但使用越简单。选择哪一层取决于你愿意管多少事。
Q2: 什么是 Serverless?为什么说它是无状态的?
关键词:按需启动、按量计费、函数粒度、无状态
Serverless 是一种云计算架构,将应用分解为无状态函数,由云平台统一管理运行环境。开发者只关注业务逻辑,不关心服务器。"无状态"是指函数实例随用随建、用完即毁,两次调用之间不共享内存(本地缓存无效),但数据仍然持久化在外部存储(MySQL、Redis)中。对启动速度要求极高,因为函数按需冷启动,启动太慢直接影响响应延迟和成本。
Q3: 公有云、私有云、混合云怎么选?
关键词:成本 vs 安全、合租 vs 整租
公有云成本低、弹性大、免运维,适合中小企业和互联网应用(合租公寓)。私有云安全可控、可定制,适合金融、政府等有合规要求的场景(整套独租)。混合云兼顾两者,敏感数据放私有云,弹性负载走公有云,是大型企业的主流选择。关键是看你对安全和成本的优先级。
小结
云计算的核心思想就一个字:"租"。IaaS / PaaS / SaaS 是租的三个层次,越往上越省心但越不灵活。公有云 / 私有云 / 混合云是部署的三种模式,根据安全和成本需求选择。Serverless 把"租"推到极致 -- 连服务器都不用管,只关注业务逻辑。存储方面,OSS 适合省心省力的场景,FastDFS 适合有自建需求的团队。理解了"租"这个核心思想,云计算的所有概念就能串起来。