0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

是否有了这个工具链就是DevOps?

华为开发者社区 来源:华为云社区 作者:华为云社区 2021-01-13 15:23 次阅读

在古代,带兵作战的将领,不仅要能善于用兵,而且要能保障粮食的充足。正所谓兵马未动,粮草先行。粮草永远摆在第一位,因为在冷**时代,战争中的将士都是在拼力气,吃饱才有力气打仗。

在今天互联网的“战争”环境中,我们为了能更快应对市场变化,一直以来不断调整作战的方针和打法,也从传统的开发方式转变为了敏捷开发,由敏捷开发又过渡了到DevOps。在2019年的中国DevOps行业报告中指出:“尽管受访企业期望 DevOps 能够带来更高效的交付效率,提升客户满意度,创造更多的商业价值,但成功实践 DevOps 依然是一个难题 。”

其中,28.22% 被调查者认为自己组织的 DevOps 实践是不成功的, 41.13%的被调查者不清楚如何衡量自己组织的 DevOps 实践是否成功。如果以一个更加直观的数据来展示,就是在接受调查的企业中有69.35%是没有能很好的了解和实践DevOps的。

也许,在实践DevOps的这几年来,并没有多少公司是真正知道什么是DevOps的。DevOps只是从字面上理解的打破部门墙的一键发布的工具链吗,是否有了这个工具链就是DevOps?答案是否定的。

那么,DevOps是什么?

DevOps 是集文化理念、实践和工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助组织更快地发展和改进产品。这种速度使组织能够更好地服务其客户,并在市场上更高效地参与竞争。

——AWS

从AWS给出的定义来看,好像也还是比较的抽象。那如果简单的来说,DevOps就是让软件过程既“快”又“稳”。何为快和稳,这个快和稳体现在,部署频率、交付周期、平均修复时长、变更失败比例这4个维度上。

在2018年的DevOps调查报告中基于上述4个维度,由于仅有6%达到了所规定的高性能指标,为了避免特殊原因造成数据过低,所以放宽的条件,并给出了准高性能DevOps指标。

4c855eba-45dd-11eb-8b86-12bb97331649.png

从达成这一准高性能DevOps指标的团队分析来看,其具体体现在三个方面:一方面是自动化、标准化、质量保证、敏捷方法的实践活动上;一方面是DevOps各个阶段的对应工具上。除此以外就是,团队正在开发应用的架构上。 架构的选择对于DevOps的实践是至关重要的,从某种程度上来说,架构就是DevOps这场战役的粮草,它是支撑着DevOps成功落地的重要前提。受访的准高性能DevOps指标的团队将“使用微服务框架”作为团队正在开发应用的架构上的Top1。

4cceedb4-45dd-11eb-8b86-12bb97331649.jpg

什么是微服务

是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通信

微服务的起源是由 Peter Rodgers 博士于 2005 年度云计算博览会提出的微 Web 服务 (Micro-Web-Service) 开始,Juval Löwy 则是与他有类似的前导想法,将类别变成细粒服务 (granular services),以作为Microsoft下一阶段的软件架构,其核心想法是让服务是由类似 Unix 管道的访问方式使用,而且复杂的服务背后是使用简单URI来开放接口,任何服务,任何细粒都能被开放 (exposed)。这个设计在 HP 的实验室被实现,具有改变复杂软件系统的强大力量。

2014年,Martin Fowler与James Lewis共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 (例如Docker) 能力,服务可以用不同的编程语言与数据库等组件实现。

微服务的特点

根据Martin Fowler的分析,微服务架构有以下的一些通用特性,但并非所有微服务架构应用都必须具备所有这些特性:

1.通过服务实现应用的组件化(Componentizationvia Services):微服务架构中将组件定义为可被独立替换和升级的软件单元,在应用架构设计中通过将整体应用切分成可独立部署及升级的微服务方式进行组件化设计。

2.围绕业务能力组织服务(Organizedaround Business Capabilities):微服务架构采取以业务能力为出发点组织服务的策略,因此微服务团队的组织结构必须是跨功能的(如:既管应用,也管数据库)、强搭配的DevOps开发运维一体化团队,通常这些团队不会太大(如:亚马逊的“Two pizza team”- 不超过12人)。

3.产品而非项目模式(Productsnot Projects):传统的应用模式是一个团队以项目模式开发完整的应用,开发完成后就交付给运维团队负责维护;微服务架构则倡导一个团队应该如开发产品般负责一个“微服务”完整的生命周期,倡导“谁开发,谁运营”的开发运维一体化方法。

4.智能端点与管道扁平化(Smartendpoints and dumb pipes):微服务架构主张将组件间通讯的相关业务逻辑/智能放在组件端点侧而非放在通讯组件中,通讯机制或组件应该尽量简单及松耦合。RESTful HTTP协议和仅提供消息路由功能的轻量级异步机制是微服务架构中最常用的通讯机制。

5.“去中心化”治理(DecentralizedGovernance):整体式应用往往倾向于采用单一技术平台,微服务架构则鼓励使用合适的工具完成各自的任务,每个微服务可以考虑选用最佳工具完成(如不同的编程语言)。微服务的技术标准倾向于寻找其他开发者已成功验证解决类似问题的技术。

6.“去中心化”数据管理(DecentralizedData Management):微服务架构倡导采用多样性持久化(PolyglotPersistence)的方法,让每个微服务管理其自有数据库,并允许不同微服务采用不同的数据持久化技术。

7.基础设施自动化(InfrastructureAutomation):云化及自动化部署等技术极大地降低了微服务构建、部署和运维的难度,通过应用持续集成和持续交付等方法有助于达到加速推出市场的目的。

8.故障处理设计(Designfor failure):微服务架构所带来的一个后果是必须考虑每个服务的失败容错机制。因此,微服务非常重视建立架构及业务相关指标的实时监控和日志机制。

9.演进式的设计(EvolutionaryDesign):微服务应用更注重快速更新,因此系统的设计会随时间不断变化及演进。微服务的设计受业务功能的生命周期等因素影响。如某应用是整体式应用,但逐渐朝微应用架构方向演进,整体式应用仍是核心,但新功能将使用应用所提供的API构建。再如在某微服务应用中,可替代性模块化设计的基本原则,在实施后发现某两个微服务经常必须同时更新,则这很可能意味着应将其合并为一个微服务。

微服务适用的场景

基于微服务的优势,我们可以看到,微服务比较实用于以下场景:

对于业务流程较为复杂,且业务会变得逐渐复杂的项目,可以考虑使用微服务架构

项目存在多个团队(公司)多种开发语言时

核心业务和非核心业务变得泾渭分明

需要平滑升级时(服务无中断、客户无感知)

想对系统进行细粒度监控时 (bug调查困难或性能等问题)

既然微服务有其使用的场景,那么也一定有其优缺点。

既然微服务有其使用的场景,那么也一定有其优缺点。

微服务的优势

微服务的诞生正是在互联网高速发展,技术日新月异变化以及传统架构无法适应快速变化等多种因素共同推动下的必然产物。从一个网站的演变可以看到使用微服务后带来了很多优点,总结如下:

逻辑清晰:

这个特点是由微服务的单一职责的要求所带来的。逻辑清晰带来的是微服务的可维护性,在我们对一个微服务进行修改时,能够更容易分析到这个修改到底会产生什么影响,从而通过完备的测试保证修改质量。

简化部署:

微服务则可以只对一个微服务单独进行部署,不影响其他功能的同时,在效率上也得到了提升,从而快速的发布新的功能。

可扩展性强:

在分布式系统中,采用微服务的系统相对单块系统具备更好的可扩展性。 灵活组合减少浪费:在微服务架构中,可以通过组合已有的微服务以达到功能重用的目的,减少了重复浪费。

技术异构:

微服务间松耦合,不同的微服务可以选择不同的技术栈进行开发。

微服务的缺点

以往单体应用,排查问题通常是看一下日志,研究错误信息和调用堆栈。而微服务架构整个应用分散成多个服务,定位故障点非常困难。在微服务架构中,一个服务故障可能会产生雪崩效用,导致整个系统故障。微服务架构虽然逻辑设计上看是完美的,但就像积木搭建的华丽宫殿一样,经不起风吹草动。

微服务架构虽然解决了旧问题,也引入了新的问题:提高了系统的复杂度,此外还有:

服务的注册与发现问题;

服务之间的分布式事务问题;

数据隔离再来的报表处理问题;

服务之间的分布式一致性问题;

服务管理的复杂性,服务的编排;

不同服务实例的管理。

微服务在使用上是一把“双刃剑”,这就像粮草如果在搬运的过程中被敌方夺取,那可能会是毁灭性的。所以DevOps团队在微服务的架构上需要非常的重视,一个成熟度高的微服务框架才是实现其DevOps的重要前提,反之亦然。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 模块化
    +关注

    关注

    0

    文章

    332

    浏览量

    21370
  • 应用程序
    +关注

    关注

    37

    文章

    3279

    浏览量

    57741
  • devops
    +关注

    关注

    0

    文章

    115

    浏览量

    12028

原文标题:没有它你的DevOps是玩不转的,你信不信?

文章出处:【微信号:Huawei_Developer,微信公众号:华为开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    汽车软件DevOps解决方案

    经纬恒润汽车软件DevOps解决方案是专为现代汽车行业设计的一套集成化需求、开发、测试、部署、OTA与监控,旨在加速软件开发流程,提高软件质量和安全性,同时确保整个生命周期的高效性和灵活性。
    的头像 发表于 12-16 10:33 1156次阅读
    汽车软件<b class='flag-5'>DevOps</b>解决方案

    devops使用最广泛的集成工具盘点

    devops使用最广泛的集成工具包括GitLab(全栈DevOps平台)、Jenkins(CI/CD自动化服务器)、Docker(容器化技术)、Kubernetes(容器编排平台)、Ansible
    的头像 发表于 11-26 13:48 182次阅读

    RISC-V 工具简介

    性能是硬件+工具的综合能力体现,单比较硬件频率指标没有实际意义。调试高效性直接影响了开发者分析解决问题效率,也是决定处理器能否开发者接受、是否可以被广泛应用。 三、RISC-V
    发表于 10-25 22:59

    Devops工具集成的意义及基本原理

    Devops工具集成的意义在于实现开发(Development)与运维(Operations)之间的紧密协作,通过自动化流程提高软件交付的速度、质量和稳定性。其基本原理是通过一系列相互连接的
    的头像 发表于 10-14 10:32 207次阅读

    常用的devops工具集成方法

    常用的devops工具集成方法涵盖了软件开发和运维的各个方面,从版本控制到自动化构建、测试、部署和监控。这些工具的有效集成可以帮助团队提高协作效率,减少沟通障碍,实现快速、高质量的软件交付。
    的头像 发表于 10-09 11:21 265次阅读

    上手体验 | 无障碍使用ZCC工具编译SDK例程

    各位关注先楫的小伙伴们可能已经发现,先楫SDK1.6已经支持ZCC工具。大家可能会好奇ZCC工具是什么新事物,好不好上手。关于ZCC工具
    的头像 发表于 07-13 08:17 457次阅读
    上手体验 | 无障碍使用ZCC<b class='flag-5'>工具</b><b class='flag-5'>链</b>编译SDK例程

    esp32-lyrat接DuerOS对话功能之后,是否还可以进行录音?

    想问一下,esp32-lyrat 接入 DuerOS 对话功能之后,还是否可以进行录音? 也就是,想要问一下,加入DuerOS是否会将e
    发表于 06-28 16:30

    opensuse linux安装好了交叉工具并且设置 IDF_PATH,make all的时候会报错为什么?

    opensuse linux,已经安装好了交叉工具(官网下载的)并且设置 IDF_PATH。可以make menuconfig,但是make all的时候会报错。我的编译器是装好的, 可以查看到编译器信息
    发表于 06-26 06:57

    这个调试工具咋卖39.9?分析原理后,我悟

    工程名称:立创DAPLINK调试工具前言今天,讲透这个嵌入式产品的设计原理。如图所示,这是一个基于立创·GD32F407天空星开发板设计的DAPLINK调试工具。是本次的学习案例。下文会围绕其
    的头像 发表于 06-21 08:04 180次阅读
    <b class='flag-5'>这个</b>调试<b class='flag-5'>工具</b>咋卖39.9?分析<b class='flag-5'>了</b>原理后,我悟<b class='flag-5'>了</b>

    搭建ESP-idf环境时,如何自主选择工具的版本?

    一般搭建ESP-idf环境时,工具的版本是跟随脚本设置好的,但是如果我想使用其他版本的工具该怎么做呢?我看到这里一些说明:https:
    发表于 06-06 07:14

    存内生态构建重要一环- 存内计算工具

    本篇文章重点讲述存内计算相关工具,我们将从工具定义出发,依次讲述工具研究背景及现有
    的头像 发表于 05-16 14:37 1142次阅读
    存内生态构建重要一环- 存内计算<b class='flag-5'>工具</b><b class='flag-5'>链</b>

    工具工具——映射与调度、模拟与验证、开发与测试工具

    本篇文章将重点介绍工具工具相关知识,我们将从工具的基本概念出发,重点介绍工具
    的头像 发表于 05-16 14:30 2996次阅读
    <b class='flag-5'>工具</b><b class='flag-5'>链</b><b class='flag-5'>工具</b>——映射与调度、模拟与验证、开发与测试<b class='flag-5'>工具</b>

    存内计算技术工具——量化篇

    本篇文章将重点讲述存内计算技术工具之“量化”,我们将从面向存内计算芯片的深度学习编译工具、神经网络中的量化(包括训练后量化与量化感知训练)、基于存内计算芯片硬件特性的量化
    的头像 发表于 05-16 12:35 1264次阅读
    存内计算技术<b class='flag-5'>工具</b><b class='flag-5'>链</b>——量化篇

    如何在DevOps环境中实施测试用例管理

    由于DevOps 工作流程使用CI/CD 方法进行软件开发,因此您的测试管理工具还应该能够与GitLab 和Jenkins 等CI/CD 工具集成。
    的头像 发表于 01-29 09:30 1538次阅读
    如何在<b class='flag-5'>DevOps</b>环境中实施测试用例管理

    什么是DevOps中的持续测试?持续测试如何融入DevOps

    持续测试(CT) 是在整个软件开发生命周期(SDLC) 中自动测试软件应用程序和组件的实践。在 DevOps 中,持续测试是在整个DevOps 管道中集成测试活动的实践。
    的头像 发表于 01-09 09:10 573次阅读
    什么是<b class='flag-5'>DevOps</b>中的持续测试?持续测试如何融入<b class='flag-5'>DevOps</b>?