在云原生时代,国内外众多云厂商释放出强大的技术红利,如何利用稳定、高效且性价比高的云设施是当下的主要命题。
当下,伴随容器技术的出现,特别是Docker和Kubernetes出现,让DevOps概念火了一把,也在实践中开始快速落地和普及。
众所周知,容器能够封装微服务整个运行时环境的特性,天然就适用于微服务构建、发布和运行,让原本缓慢前进的DevOps得到飞速发展,开源社区也涌现了很多优秀的开源产品,大家通过这些开源产品能够快速搭建自己应用的持续集成环境,因此市场上也如雨后春笋般冒出许多DevOps相关的产品。
现阶段的DevOps产品通过Docker和K8s确实帮助用户解决了资源管理、微服务环境构建和持续集成的复杂、效率低等问题,但是伴随公有云等Infra基础设施持续高速发展,人们对于应用研发的效率追求也会有更高的要求,对于DevOps产品也不会满足停留在当前阶段,那么如何在DevOps现阶段的版本基础上进一步提高研发效率和质量呢?
当下,DevOps面临的痛点
们首先需要了解,DevOps是依靠云原生、工作流程、人员组织的整合,以协作、自动化、精益、度量、共享、文化为指引,旨在建立一种可以快速交付价值,并且具有持续改进能力的现代化IT组织。
如今,几乎每家企业都说自己在做DevOps,但只有少数人获得了期望中的业务价值。这背后的原因在于,他们清楚地知道要让DevOps模式在组织中正确推行下去需要重点关注哪些地方,同时他们也知道业务价值是DevOps的终极目标。
但不可否认的是,DevOps现阶段还需要面临很多问题:
1. 多云资源如何统一管理,解绑云厂商?
在公有云、私有云等多元化的云环境下,大家手头往往都有两套或者多套云资源,如何让这些割裂的云资源统一进行管理?如何基于一个平台让应用快速进行跨云迁移、发布?比如:开发在私有云,生产在公有云等这些问题伴随资源环境多元化问题会越来越突出。
2. 复杂微服务组合如何快速进行环境构建、持续集成?
当前DevOps对于单个微服务的环境构建和持续集成问题已经基本解决。但对于企业级软件研发交付团队来说,错综复杂的微服务组合而成的项目如何进行统一的环境构建、部署和交付,目前仍解决得不太彻底,只能让各应用的研发成员都参与到构建、部署的整个阶段。以上复杂的过程容易引起问题不说,效率成本上也是个大问题。
3. 研发效能如何进一步提升?
在当前主流的DevOps产品中,代码、构建、部署全流程自动化触发执行的特性基本都是得到了比较好的解决,但是随着研发管理的深度、精细度要求越来越高,需要研发维护的数据也随之不断增多,管理维护项目数据的项目管理工作量也在不断增大,效率和成本也产生了矛盾。
云原生时代下DevOps如何破局
面对上述三大痛点,新一代DevOps也在寻找破局之道。
首先,DevOps针对于多云管理并不是简单指通过K8s集群来实现资源的调度管理,如果仅仅是统一资源调度那本身是K8s集群的特性。
其次,通过应用部署环境配置去关联集群,确实可以实现环境之间的隔离、环境之间快速迁移的能力。开发测试在本地私有云环境,生产者可以通过同一套代码能够快速发布到公有云;还有就是业务在一个集群,数据处理可以在另外一个集群,实现业务和数据分离,两者互不影响,这些都可以通过集群管理来实现。
另外,对单应用的持续构建部署,DevOps产品基本都是达成共识的,对于单个微服务应用构建部署的自动化完善程度较好。
但对于企业级项目研发过程,我们看到,单应用内不同任务需要拉多分支来进行开发,受开发环境资源的限制,不同任务开发人员要不断进行线下沟通合并代码发布开发环境进行测试,过程中可能存在谁的代码分支有问题导致整个环境不可用的现象。
项目级的联调部署就更复杂了,首先需要配置项目环境,其中包含了项目级的参数配置以及大家公用的项目级中间件准备部署;其次是复杂的微服务编排信息维护,这些烦琐的项目级维护管理动作,往往会导致项目部署过程中出现各种阻塞,比如项目共同的中间件准备阻塞,上游服务的部署和健康度也会影响或阻塞下游服务部署和测试等,这些问题会让项目部署更加困难化。
由此可见,在DevOps实践中,选择正确的工具对于测试自动化至关重要。利用共享工具帮助明确和简化协作流程,以便对整个软件交付流程有共同的了解。因此,它们能够促进一致性和自动化,帮助DevOps从业者提高交付速度,并避免在部署或生产故障恢复期间为临时的救急处理花费时间。
写在最后
DevOps这一概念虽然比容器、微服务出现得早,却是随着他们的出现才得以快速地发展。实际上DevOps不单是一个实现自动化的工具链,更是通过构建企业文化的方式促进开发与运维之间的协作。