看新闻很累?看技术新闻更累?试试 下载InfoQ手机客户端 ,每天上下班路上听新闻,有趣还有料!
云计算通常包括IaaS, SaaS和PaaS三个层面,相较于已成气候的IaaS和SaaS,最近几年云计算领域的集中发力点在PaaS层面。微软作为全球老牌IT巨头,也是PaaS供应商的领导者。微软的PaaS之路是怎么一步步发展起来的?对此我们专访了微软Azure资深架构师Steven,来了解微软Azure 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。
随着容器技术的快速发展,微软也提供了重要的容器服务。
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部署模版,添加需要的脚本,参数,组件等定制化配置,然后使用微软提供的命令行工具实现自动化的部署。
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容器编排的主要创始人之一。
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。
2016年底,微软正式发布了Azure Functions。Azure Functions为开发人员提供了一个事件驱动的无服务器计算平台,可以实现按需缩放,允许开发人员在不用接触与管理服务器的情况下,编写小型的处理程式以处理云端上的讯息或事件。
与传统的PaaS相比,使用Azure Functions无需关心运行时版本的问题。因为Serverless做发布的时候可以做定义或处理,能在非常短的时间内发布到云端,之后的事情都由后台进程来帮助做处理。
此外,serverless本身倾向于把服务封装成无状态的,其运行方式是按需运行,仅在设定的事件触发器上有事件产生时才运行,运行也是受调度平台的控制。
Azure Functions现在已经和微软的一些容器服务还有物联网的边缘计算相结合了。未来Azure Functions会应用在包括实时响应在内的更广泛的服务处理中,也将支持更多的开发语言。现在Azure Functions能支持Java,C#,Node.js,以后Python,Ruby等语言可能也会得到支持。
基于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等公司,并担任研发部门经理、云架构师等职位。