一、PaaS平台概述:从概念到实战

大家好,我是你们的老朋友。今天咱们来聊聊PaaS平台。说实话,我接触PaaS也有七八年了,从最早的Cloud Foundry到后来的OpenShift,再到现在的Kubernetes生态,一路踩坑无数。今天就把这些经验掰开了揉碎了讲给你听。

1.1 什么是PaaS?

PaaS,全称Platform as a Service,平台即服务。说白了,就是给你一个现成的“运行环境”,你只管把代码扔上去,剩下的——服务器、操作系统、中间件、运行时——平台全包了。

我经常跟团队里的小伙伴说:PaaS就是“应用托管服务”。你不需要关心底层基础设施,只需要关心你的业务代码。举个例子,你写了个Java Web应用,传统方式你得买服务器、装JDK、配Tomcat、搞负载均衡……而在PaaS上,你只需要把WAR包传上去,点个部署按钮,完事。

核心特征:

  • 提供应用运行环境(语言运行时、中间件、数据库)
  • 自动扩缩容、负载均衡、健康检查
  • 内置日志、监控、告警能力
  • 支持多租户隔离

1.2 PaaS的发展历程与演进趋势

PaaS的发展,我把它分成三个阶段:

第一阶段:传统PaaS(2008-2014)

代表产品是Heroku和Cloud Foundry。那时候的PaaS很“霸道”——你必须在它规定的框架里写代码。我记得2012年第一次用Cloud Foundry,它要求应用必须绑定一个“服务”(比如数据库),而且代码结构必须符合它的规范。好处是简单,坏处是——你想想看——一旦想迁移,基本等于重写。

第二阶段:容器化PaaS(2014-2018)

Docker的出现彻底改变了游戏规则。OpenShift 3.0开始基于Docker和Kubernetes,把PaaS的灵活度提升了一大截。这时候的PaaS不再强制你用什么框架,你只需要把应用打成镜像,平台负责调度和运行。

我在2016年帮一家金融客户迁移到OpenShift,当时最大的感受是:终于不用被平台绑架了。镜像走到哪都能跑,这才是云原生的精髓。

第三阶段:Kubernetes原生PaaS(2018至今)

现在的主流趋势是“Kubernetes即PaaS”。很多团队直接基于K8s搭建自己的PaaS平台,比如KubeSphere、Rancher。为什么?因为K8s本身已经提供了调度、服务发现、负载均衡等PaaS核心能力,你只需要在上面封装一层开发者体验。

演进趋势:

  • 从“平台绑定”到“开放生态”
  • 从“虚拟机”到“容器”再到“Serverless”
  • 从“手动运维”到“声明式自动化”

1.3 PaaS与IaaS/SaaS的区别与联系

这三个概念经常被搞混。我画个简单的分层图帮你理解:

层次 你管什么 平台管什么 典型产品
IaaS 应用、数据、运行时、中间件、OS 虚拟化、服务器、存储、网络 AWS EC2、阿里云ECS
PaaS 应用、数据 运行时、中间件、OS、虚拟化、基础设施 Cloud Foundry、OpenShift
SaaS 使用 全部 Salesforce、Office 365

嗯,这里要注意:PaaS不是IaaS的替代品,而是它的上层抽象。我见过很多团队在IaaS上自己搭PaaS,结果运维成本比直接用云厂商的PaaS还高。说白了,如果你团队不大(比如不到20人),直接用现成的PaaS更划算。

1.4 主流PaaS平台对比

我挑三个最有代表性的平台聊聊:Cloud Foundry、OpenShift、Kubernetes原生PaaS。

Cloud Foundry

老牌PaaS,由Pivotal(现VMware)主导。它的核心理念是“cf push”——一条命令部署应用。我2014年第一次用的时候,确实被惊艳到了:

cf push my-app -p target/my-app.jar

就这么一行,应用就跑起来了。但它的缺点也很明显:对基础设施的抽象太强,导致排错困难。有一次我的应用启动失败,日志里只显示“Staging failed”,具体原因得去翻Diego Cell的日志,折腾了大半天。

避坑指南:我曾经在Cloud Foundry上部署过有状态应用(比如Redis),结果发现它根本不支持。后来才知道,Cloud Foundry的设计哲学就是“无状态优先”。如果你有状态服务,要么用外部服务,要么别用CF。

OpenShift

Red Hat的产品,基于Kubernetes但做了大量增强。它的核心优势是:企业级安全性和多租户能力。我2017年帮一家银行做PaaS选型,最终选了OpenShift,原因就是它的RBAC和网络策略做得最成熟。

OpenShift的部署方式有两种:

  • Source-to-Image (S2I):把源码直接构建成镜像,适合Java、Node.js等语言
  • Dockerfile:直接用Dockerfile构建,更灵活

我个人更推荐S2I,因为它自动处理了基础镜像的安全补丁。你想想看,如果每个开发都自己写Dockerfile,安全漏洞谁来管?

Kubernetes原生PaaS

这是目前最火的趋势。很多团队直接用K8s + Helm + Istio搭建PaaS。好处是:完全掌控,没有厂商锁定。坏处是:需要自己拼装组件

举个例子,一个最小化的K8s原生PaaS需要:

  • Kubernetes集群(调度、服务发现)
  • Helm(应用打包)
  • Istio或Linkerd(服务网格)
  • Prometheus + Grafana(监控)
  • ELK或Loki(日志)

我去年帮一家创业公司搭了这套东西,前后花了两周。但说实话,如果团队没有K8s专家,我建议还是用OpenShift或Rancher这种商业发行版——省下的时间足够你多写几个业务功能了

1.5 如何选择?

最后给点个人建议:

  • 小团队(<10人):直接用云厂商的PaaS(比如Heroku、阿里云SAE),别折腾
  • 中型团队(10-50人):OpenShift或Rancher,平衡灵活性和运维成本
  • 大型团队(>50人):Kubernetes原生PaaS,但要有专门的平台团队

记住一句话:没有最好的平台,只有最适合你的平台。我在项目中见过太多人为了“技术先进性”选K8s,结果运维团队根本Hold不住,最后又退回传统PaaS。嗯,选型这事,务实比炫技重要得多。

下一章,咱们深入Cloud Foundry的架构,聊聊它的核心组件和部署原理。到时候见!