容器和Serverless要怎么结合,AWS/Azure/GCP都给出了方案

要Serverless应用还是要容器化应用?
大家在用AWS Lambda的时候 , 通常只需要上传代码就行 , 无需关注服务器配置 , 但是当用户还想用容器技术的时候 , 就发现它跟Lambda还是很不一样 。
AWS上个月介绍了一项关于Lambda的更新 , 允许用户将Lambda函数打包成容器镜像 , 最大镜像能达到10GB 。此次更新意味着用户可以创建和部署有许多依赖包的大型工作负载 , 比如机器学习这类负载 。
与把函数打包成ZIP包一样 , 把函数打包成容器镜像同样能享受到Lambda一样的体验 , 包括简便的操作性、自动伸缩性、高可用性等优势 。
Serverles能使用户在瞬间运行业务代码 , 它摆脱了设置复杂基础设施的麻烦 , 并且能轻松在生产环境中提供可伸缩性能力 。
但是Serverless也有其局限性 , 比如 , 有些编程语言是不支持的 , 有些库是不支持的 。AWS Lambda通过允许用户自己添加库和外部代码 , 这一特性叫做“Lambda layers” 。
类似地 , Azure提供了绑定扩展(Binding Extensions)特性 , 用于构建新类型的绑定 , 这些绑定可以引入到Azure Functions里 。
把Serverless和容器的能力进行结合的做法并不新鲜 , Serverless优势虽然非常明显 , 它提供的计算范式非常有吸引力 , 但正因为如此 , 随着用户增多 , 其灵活性和使用限制方面的问题也越来越突出 。
云厂商为了解决用户既想要Serverless , 也想用容器化的需求 , 推出了一系列方案:
比如 , AWS有EC2容器实例 , AWS Lambda , AWS Fargate , EKS , ECS , ECR , 还有刚发布的AWS Lambda layers等 。
Azure和谷歌云GCP也提供了类似的服务 , 比如Azure Container Registry(ACR) , Azure Container Instance(ACI) , Azure Bingding Extesions特性 , 谷歌云GCP的GKE和Google Cloud Run等等 。
云计算厂商提供多种计算服务 , 除了Serverless上的改良方案 , 云厂商也在推行CaaS容器即服务方案 , 我们看看几家云巨头提供的CaaS服务 。
介于IaaS和FaaS之间的计算范式:CaaS云计算的优势在于极大降低了管理硬件的繁重工作 , 随着云计算的发展 , 用户需要操作的部分越来越少 , 更多工作将由云服务商来完成 , IaaS是基础阶段 , CaaS是高级阶段 , 而FaaS所代表的功能(函数)即服务则是终极阶段 。

容器和Serverless要怎么结合,AWS/Azure/GCP都给出了方案


从发展演化的路线来看 , FaaS的追随者将越来越多 , 不过 , 随着云厂商管理的抽象层的增多 , 用户虽然承担的管理负担越来越少 , 但是会牺牲灵活性 , 会受到越来越多的操作限制 。
例如 , AWS的EC 2实例是典型的IaaS , 用户可以选择各种配置 , 配置网络防火墙规则和监视内容等 , 看起来挺麻烦 。
又比如 , 在容器编排方面 , 最主要的问题还在于自动伸缩 , 在容器级别定义伸缩规则其实非常困难 , 这部分如果用户来操作其实也非常麻烦 。
虽然麻烦 , 但能换来极大的灵活性 。
这些操作意味着可以以任何方式进行配置 , 可以选择任何你喜欢的运行环境 , 还可以自己定义最适合业务需要自动伸缩规则 。

推荐阅读