对于期望获得云原生能力的企业,在IaaS提供的云计算弹性与开发云原生应用之间,还有一个很大的空白地带:如何用云计算为软件交付的过程服务。Docker和Kubernetes等工具提供了容器化和容器编排的能力,但是企业需要解决“为了承载我(期望)的开发流程,我需要怎样的容器和编排”的问题。这就给云原生平台(Cloud Native Platforms)创造了市场空间。
总体介绍
为分布式云应用提供支撑的平台从2015年开始受到广泛的关注,围绕着Docker、容器编排等技术,开始出现各种商业模式。云原生平台可以视为下一代中间件,其用途是交付企业级分布式应用所需的各种支撑能力。以容器和容器编排为基础,云原生平台提供了日志、审计、安全、合规、权限管理、容器镜像仓、基础设施抽象、团队成员启动等支撑功能。
测试和开发环境的随需可得不仅仅有助于优化基础设施资源,而且有助于统一实践和流程,能促进团队采用敏捷和DevOps的最佳实践。把抽象层次提高一点,云原生平台要支撑云原生应用所需的5项能力:
云平台自动化。不仅提供基础设施开通与配置的自动化,而且内嵌测试、版本控制、文档、软件生命周期管理等方面的最佳实践,使整个开发-测试-部署的过程工作量最小化。
无状态函数。将软件以小型、目的单一的函数形式部署,通过事件驱动服务,从而避免维护运行时环境。
微服务架构模式。每个服务提供单一的业务能力,能够独立开发、测试和部署。
DevOps流程和文化。自动化整个软件交付流水线,打破开发与运维的间隔,以全功能团队形式工作。
云可靠性工程。提高运维工作的自动化程度,把运维重心放在平台工程,从而提高系统可靠性。
云原生平台可以大致分为“非结构化的/不带意见的”(unstructured/unopinionated)和“结构化的/带意见的”(structured/opinionated)两类。Pivotal声称Cloud Foundry作为一个“结构化的/带意见的”云原生平台,提供了下列能力:服务作为比基础设施更高层级的抽象。Cloud Foundry提供按需部署应用的机制。
容器。所有应用程序都以容器形式运行。
敏捷和自动化。Cloud Foundry可以作为CI/CD的一部分,用于随需开通环境和服务。
微服务支撑。为松散耦合的服务架构提供集成和协作机制。
云原生应用支撑。对应用程序的约束使其效率更高、更易管理、更可靠。
从技术角度,云原生平台有5个重要的考量因素:如何加速应用开发的速度?
如何推动新技术趋势(移动、社交、实时、数据核心、IoT)的应用?
如何充分利用开源技术和社区?
如何提升运维响应变化的能力?
如何在平台中嵌入安全性?
部分产品分析
Apcera的定位是“支持云原生应用和遗留应用的容器管理平台”。主要的解决方案是“遗留应用现代化”,号称能在7天内把遗留系统迁移上云。
Apprenda是基于Kubernetes的面向开发团队的云平台,既能支持云原生应用、也能支持传统应用的开发。通过集中的云政策和监管、共享的应用服务、基于微服务的架构标准化,Apprenda把开发组织变成成熟的软件工厂。
HashiCorp Atlas在Vagrant的基础上规定了一个“开发-构建-产物管理-部署-上线”的标准流程。适用于以游戏账号购买平台技术为核心、重视DevOps流程与文化的组织。
Cloud Foundry是重视部署与运维的云原生平台。强调的卖点是(1)部署的速度;(2)云应用的伸缩能力;(3)缺省的安全性。
OpenShift是基于Docker和Kubernetes的容器应用平台,支撑容器的开发、部署和管理。主要功能有(1)容器编排;(2)容器存储;(3)支持多种编程语言和框架;(4)自动化应用程序构建、部署、伸缩和健康管理;(5)基于项目的管理界面;(6)自服务平台。
CodeEnvy在Docker基础上为开发团队提供云上的工作区。CodeEnvy提供.NET、Android、C++、Java、Go等技术栈,用Eclipse Che作为开发环境。主要卖点有(1)一键式Docker环境;(2)团队成员启动和协作;(3)DevOps工作区平台。
Wercker是基于Docker的CI/CD自动化平台(类似于SnapCI),用Kubernetes提供容器编排,支持微服务部署,缺省支持GoLang、NodeJS、Ruby、Python。支持自定义的CI/CD流水线,通过流水线的级联和触发配置出复杂的工作流,支持并行测试。
DaoCloud基于容器技术从交付件、运行环境、环境配置、权限协作等多个方面定义企业交付流程标准,通过标准化提升跨部门协作的沟通效率,推动软件在不同阶段的自动化高效流转。高度灵活的交付流程定义引擎,支持可视化定义企业完整的端到端交付流程。通过云平台的弹性,支撑企业交付流程中不同阶段对环境运行时的需求。
数人云基于Mesos和docker,提供企业级持续集成和持续交付解决方案,从快速搭建持续集成环境,到改进和融合企业的开发、测试及持续发布流程,助力企业提升产品发布效率,规范产品开发流程。可以继承企业现有的版本控制工具,通过Jenkins实现自动构建和测试。