微软 Azure PaaS 发展之路

  • 张婵

2018 年 4 月 18 日

话题:AzureDevOps

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

云计算通常包括 IaaS, SaaS 和 PaaS 三个层面,相较于已成气候的 IaaS 和 SaaS,最近几年云计算领域的集中发力点在 PaaS 层面。微软作为全球老牌 IT 巨头,也是 PaaS 供应商的领导者。微软的 PaaS 之路是怎么一步步发展起来的?对此我们专访了微软 Azure 资深架构师 Steven,来了解微软 Azure PaaS 的发展之路。

微软早期 PaaS 服务

Azure 是微软基于云计算的操作系统,自 2008 年开始发展,2010 年正式推出,主要目标是为开发者提供一个平台,帮助开发可运行在云服务器、数据中心、Web 和 PC 上的应用程序,使云计算的开发者能使用微软全球数据中心的储存、计算能力和网络基础服务。

Azure 平台上现已包括 30 余种服务,早期的 PaaS 服务包括:

  • Azure Cloud Service:提供了抽象化的运算资源给云端应用程序使用,开发人员可以部署云端应用程序到 Azure Cloud Service,以获取所需的执行环境与运算能力 ;

  • Azure Service Fabric:2016 年正式 GA 发布,是基于微软资源管理框架与基础建设发展出的新型服务,提供标准的操作系统映像,开发人员可使用 Azure Service Fabric SDK 开发微服务应用程序,可视为下一代的 Azure Cloud Service。

随着容器技术的快速发展,微软也提供了重要的容器服务。

ACS:微软云端容器服务

2016 年,微软推出了 Azure Container Service (ACS)。ACS 是一个容器托管环境,可用于容器的部署和管理,支持 Docker Swarm, kubernetes, DC/OS 等多种容器编排工具。虽然有了 ACS 全托管服务,但有些高级用户可能还希望做一些深度定制化的操作,获得完全的容器集群控制以保证足够的灵活性(比如自定义 master 上的组件服务等)。这时用户可以使用开源的 acs-engine 来创建和管理自己的集群。acs-engine 是 ACS 的核心部分,提供了部署和管理 Kubernetes,DC/OS 和 Docker Swarm 集群的命令行工具。它通过将容器集群描述文件转化为一组 ARM(Azure Resource Manager)模板来建立容器集群。

Steven 介绍道,如果用户想要深度定制化自己的集群,比如加上虚拟网络的支持或一些高级组件,参数调整等等,就可以使用微软提供的 acs-engine 创建和管理自己的 ARM 部署模版,添加需要的脚本,参数,组件等定制化配置,然后使用微软提供的命令行工具实现自动化的部署。

微软与 Kubernetes

2015 年 CNCF 基金会成立,微软加入其中成为其铂金会员,开始参与其中的项目向 Kubernetes 贡献代码。微软在 CNCF 里的贡献包括:

  • Draft,Azure 团队的第一款开源容器管理工具,工具简化了所有在 Kubernetes 集群上运行的应用程序的开发工作,使用户能快速地进行容器化。

  • Helm, 目前是 Kubernetes 服务编排领域的唯一开源子项目,做为 Kubernetes 应用的一个包管理工具,通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了 Kubernetes 应用部署和管理的复杂性。

  • 除此之外还有 OMS (Operations Management Suite) 等监控项目。OMS 是不开源的,可以用于监控 Kubernetes, 进行日志分析管理。

除了技术贡献,微软也对 Kubernetes 技术进行了人才投入,请了很多业界大牛来负责微软整个平台的容器产品,包括原 Deis 公司的创始人兼 CTO Gabe Monroy,以及谷歌的前首席架构师 Brendan Burns。Gabe Monroy 是 Docker 和 Kubernetes 的早期贡献者,在容器技术方面有着丰富的经验;而 Brendan Burns 则是 Kubernetes 的首席工程师,Kubernetes 容器编排的主要创始人之一。

AKS:主打 Kubernetes 的容器服务

2017 年是 Kubernetes 快速发展的一年,Kubernetes 作为开源容器编排标准正在日益崛起。微软也看到,每年基于 Azure 的部署 Kubernetes 的需求量差不多以 300% 的速度在增长,所以就在 Kubernetes 的基础上新出了一个独立于 ACS 的服务,在 2017 年初推出了 Azure Kubernetes Service (AKS)。

AKS 是一个托管的 Kubernetes 服务 (目前还在预览阶段),可进行健康监控和维护,支持自动升级和自动故障修复。AKS 消除了用户管理和维护 Kubernetes 集群的负担,使用 AKS 时集群管理本身是免费的,Azure 只收取容器底层的虚拟机费用。

另外,微软把 AKS 容器服务和自己的容器注册表服务(Azure Container Registry,私有容器镜像仓库,类似于 Docker Hub),还有其他的 PaaS 服务做了无缝整合,用户可以把自己构建的容器放在容器注册表里面,然后来做灰度测试和 CI/CD,做完之后通过命令行直接发布到生产环境。

Steven 说 AKS 使用起来非常简单。比如在 Mac 上,AKS 提供 Azure Command Line 的工具,只需三五行的命令就可以快速部署一个 Kubernetes 集群,并且在本机上进行管理。创建、伸缩、升级集群都可以在本机上进行,非常符合开发者的使用习惯。

Steven 介绍到,不管是 ACS 还是 AKS,微软在 Azure 平台上提供基于开源产品服务的一个最基本原则就是要保证这些服务和开源产品 100% 兼容。这也就意味着用户不需要重新学就可以把原来使用的工具,方法直接应用到微软提供的容器服务上面,微软只不过是把一些琐碎的工作做了自动化,在内部做了一些安全还有性能的优化,加固了整个容器平台。

随着技术的不断演进,Serverless(无服务器)架构现在被越来越多的提及。Serverless 与 PaaS 的概念在某些方面有很多相似的地方,但这两者之间有一些微妙的差别:PaaS 托管的是整个应用,而 Serverless 关注应用的某个碎片化的逻辑代码,从资源使用率和成本控制来说更具优势。针对 Serverless,微软 Azure 又推出了 Azure Functions。

Azure Functions:微软 Serverless 平台

2016 年底,微软正式发布了 Azure Functions。Azure Functions 为开发人员提供了一个事件驱动的无服务器计算平台,可以实现按需缩放,允许开发人员在不用接触与管理服务器的情况下,编写小型的处理程式以处理云端上的讯息或事件。

与传统的 PaaS 相比,使用 Azure Functions 无需关心运行时版本的问题。因为 Serverless 做发布的时候可以做定义或处理,能在非常短的时间内发布到云端,之后的事情都由后台进程来帮助做处理。

此外,serverless 本身倾向于把服务封装成无状态的,其运行方式是按需运行,仅在设定的事件触发器上有事件产生时才运行,运行也是受调度平台的控制。

Azure Functions 现在已经和微软的一些容器服务还有物联网的边缘计算相结合了。未来 Azure Functions 会应用在包括实时响应在内的更广泛的服务处理中,也将支持更多的开发语言。现在 Azure Functions 能支持 Java,C#,Node.js,以后 Python,Ruby 等语言可能也会得到支持。

Azure PaaS 服务的未来

基于 Kubernetes 的 PaaS 在 Azure 内部受到高度重视,有社区大牛的掌舵,我们相信 Azure 将打造一流的 PaaS 服务。在对未来的看法上,Steven 认为,容器化将是未来的主流,而微软的 Azure 将在 PaaS 的配套服务上投入更多精力。

Steven 说,你看过去几十年基础架构的演变,从大型机到小型机,到 X86 架构,然后是虚拟化,容器化到 Serverless 计算,成本越来越低,部署速度越来越快,scalability 也越来越强。现在很多大型企业的应用,包括 Azure 自身的一些服务,都已经转向了容器化,也就是 Docker+Kubernetes 组合,这是未来的一个大趋势,会用得越来越广泛。

“现在可能 70% 的应用还在 VM 上面,已经有约 30% 慢慢转向了容器化的方式在容器里面运行。随着时间的推移,慢慢这个数据可能会变成 70% 以上都是容器化的 Docker+Kubernetes 的方式,30% 是在 VM 里面。”Steven 说道。虽然现在也有物理机,但是现在 VM 已经变成了主流;在未来,VM 也会使用,但是容器化将是主流。

在转向容器化的过程中,Kubernetes 作为容器编排事实标准,未来在它之上做的更多的事情就是把现在它所涉及到的存储,网络,服务的交互,发现,架构等各个方面做到高效的统一,减少不同版本不同语言之间的异构化差异,让部署变得更容易。有了一整套规范之后,就可以开发更规范的插件,大家就能更容易地切入到这个方向上来。例如微软自己也为 Azure 上的容器服务开发了针对 Kubernetes 和 Docker Swarm 的网络插件,让用户在使用 Azure 容器服务时可以利用到 Azure SDN 功能简化容器网络管理。

当所有的规范都形成后,开发人员上手的难度降下来,就会如 Steven 上面所说,70% 以上的应用都会容器化。

在未来,微软会一直和开源产品保持一致,跟开源社区保持紧密合作,在 Azure 上面为这种趋势提供最好的技术架构平台。现在微软大部分的服务都已经转向了微服务的架构。微软选择 Kubernetes 作为长期的容器平台发展方式,构建了很多周边的项目,比如 ACR,Draft,Helm,FaaS,在 AKS 上提供这样的服务给用户使用,这样用户就不用担心被锁定,也不用担心灵活性和开放性。

嘉宾简介

连冠华(Steven Lian),现任微软 Azure 资深架构师,主要负责为制造业、汽车、金融及互联网等行业大客户提供大规模云应用、分布式计算、车联网、开源 DevOps、人工智能及大数据等架构设计和咨询服务。

作为国内最早的 Azure 架构师之一,连冠华拥有超过 15 年开源技术栈 Linux/Java/Python 研发经验,以及多年的云计算咨询、开发和实施经验。

连冠华在加入微软之前曾先后任职于惠普及 VMware 等公司,并担任研发部门经理、云架构师等职位。

AzureDevOps