26、DevOps实践中的左移策略及教育探讨

DevOps实践中的左移策略及教育探讨

1. Amelia的扩展机制与自动化部署执行

1.1 Amelia的扩展机制

Amelia支持两种基于Java的扩展机制:
- 创建新命令 :通过实例化 CommandDescriptor (Java运行时库中定义的Java类)来创建新命令。
- 增强命令行为 :允许通过扩展命令的行为来增强命令。例如, fetch (如清单1.1中的第42行)是一个扩展,它隐式导入一个返回新命令的静态方法,即一个 CommandDescriptor 实例包装另一个 CommandDescriptor 。扩展可以链式组合。

1.2 自动化部署执行

执行各种架构配置和变体的部署是一项艰巨的任务,即使使用自动化工具也是如此。Amelia通过允许使用参数化和可重用的模块及过程来指定不同的配置实例化,解决了这个问题。每个规范包括部署和执行每个软件组件所需的部署和配置操作。
- 子系统 :在Amelia中,这些规范是子系统,它们定义了明确的实例化参数和基于部署操作的清晰接口。
- 系统部署执行 :每个执行周期可能包括从配置和部署到测量收集和指标存储。实际上,当先前的实例已经呈现出更好的指标时,可以停止新的部署。Amelia的部署策略通过提供对部署开始和结束的精细控制、与Java编程语言的紧密集成以及对一流部署概念(如子系统及其参数)的控制来实现这一点。

2. 评估

2.1 定性分析

在从开发到运营的正向方向上,对Amelia语言在指定ANSPE软件系统不同架构配置部署方面的有效性进行了定性评估。
- 评估过程 :设计了一个评估协议,由六名硕士学生(其中一些是Carvajal工程人员)应用。他们根据代表ANSPE架构配置变体的UML部署图开发了几个Amelia规范。这些变体是两种设计模式(生产者/消费者和反应器)的变体,所有变体都使用RMI作为通信协议并在相同的中间件上执行。
- 评估结果 :使用FQAD(一种用于DSL定性评估的框架)评估语言的有效性,评估的质量特征包括功能适用性、可用性、可靠性、生产率和表达性。Amelia在所有这些特征上都被评估为具有“完全支持”或“强烈支持”。

2.2 定量分析

定量评估Amelia作为实现DevOps应用左移(即反向方向)的工具。

2.2.1 实验设计

实验设计采用四步方法:
1. 选择设计模式 :选择一组适合提高性能的特定领域设计模式。
2. 定义架构配置 :定义几种架构配置、变体和相应的实例化,这些是将所选设计模式纳入ANSPE参考架构的结果,并完成相应的Amelia部署脚本。
3. 准备硬件基础设施 :准备尽可能接近组织的硬件基础设施,并在受控条件下执行实验。
4. 比较性能指标 :比较性能指标以确定最佳架构配置。

实验的可控输入因素包括:
- 用于更新家庭普查和人口统计状态的具有CRUD操作的XML文件集。
- 与分布式处理相关的设计模式(如生产者/消费者和反应器)。
- 使用的通信协议。
- 每个从处理节点上部署的工作组件数量。

不可控输入因素包括处理节点之间的时钟同步问题和不可缺少的操作系统进程。

以下是实验设计中部分因素的实例化表格:
| 设计模式 | 通信协议 | 消费者/控制器数量 |
| — | — | — |
| P/C | RMI | 12 |
| P/C | RMI | 48 |
| P/C | RMI | 96 |
| P/C | Ice | 12 |
| P/C | Ice | 96 |
| Reactor | RMI | 12 |
| Reactor | Ice | 12 |

2.2.2 实验执行

实验在配备22台计算机的基础设施上执行,这些计算机配置有一个Intel i7四核CPU和16GB RAM,运行Linux Fedora 25。在执行实验之前,停止所有无用和非关键的操作系统服务。每个架构配置实例化的部署和执行至少重复三次,并对性能指标进行平均。

2.2.3 结果分析

参考吞吐量基线为每32秒处理1个XML文件(即每分钟1.87个XML文件)。实验结果如下表所示:
| 实验配置 | 吞吐量 |
| — | — |
| P/C, RMI, 12 components | 1 file/11.35 s |
| P/C, RMI, 48 components | 1 file/6.9 s |
| P/C, RMI, 96 components | 1 file/6.7 s |
| P/C, Ice, 12 components | 1 file/11.51 s |
| P/C, Ice, 96 components | 1 file/6.1 s |
| Reactor, RMI, 12 components | 1 file/21.95 s |
| Reactor, Ice, 12 components | 1 file/20.51 s |

根据这些结果,最佳架构配置是使用生产者/消费者设计模式,以Ice作为通信协议,在12个处理节点上分布96个消费者,吞吐量为每6.1秒处理1个文件,比参考基线大约好五倍。此外,生产者/消费者模式在吞吐量方面始终明显优于反应器模式,虽然Ice通常比RMI好,但差异并不显著。

3. DevOps教育面板

3.1 组织

为了讨论DevOps作为大学课程的一部分,组织了一个教育会议和讨论小组。小组成员包括Alfredo Capozucca、Christopher Jones、Manuel Mazzara和Sebastien Mosser,还邀请了图卢兹大学的Benoit Combemale教授。小组由Jean - Michel Bruel主持。

3.2 预期结果

主持人准备了几个问题,以启动讨论并吸引与会者提出更多问题:
- Q1 :如何定义DevOps?期望的答案不是典型的书本定义,而是小组成员向学生解释的定义。
- Q2 :能否分享一些教授DevOps的技巧?小组成员被要求分享一些教学经验,无论是好的还是坏的。
- Q3 :对于学习DevOps的先决技能有什么看法?

3.3 Benoit Combemale的特邀演讲

Benoit Combemale强调他之前是软件工程教授,并且他的经验更多在开发(Dev)方面而非运营(Ops)方面。他认为DevOps主要是对以前手动完成的构建、部署、测试、监控等操作的自动化,即主要是关于自动化方法的工具。

他将DevOps实践分为两部分:
- 文献调查 :课程的前半部分是定期的文献调查,让学生通过查看网络上的实际文章,了解现实世界环境中所需的可扩展性。
- 代码开发 :后半部分通过实际的代码开发项目来进行。

以下是DevOps实践流程的mermaid流程图:

graph LR
    A[文献调查] --> B[代码开发]

综上所述,Amelia在自动化部署方面表现出了良好的效果,通过定性和定量评估证明了其有效性。同时,在DevOps教育方面,也有了一些有益的讨论和实践方法。

4. 讨论小组围绕问题的讨论

4.1 对DevOps定义的讨论

小组成员们对DevOps的定义各抒己见。有的成员认为DevOps是一种文化,它打破了开发和运维之间的壁垒,促进两个团队之间的紧密合作与沟通,让软件的开发、部署和维护过程更加流畅和高效。例如,在传统的开发模式中,开发团队完成代码编写后将其交给运维团队部署,两者之间可能存在沟通不畅、对需求理解不一致等问题,而DevOps强调双方共同参与整个软件生命周期,从一开始就共同规划和设计,避免后期出现的各种问题。

另一些成员则从技术角度出发,认为DevOps是一系列工具和自动化流程的集合。通过自动化构建、部署和测试等环节,可以减少人为错误,提高软件交付的速度和质量。比如,利用持续集成工具(如Jenkins)可以在代码提交后自动进行编译和测试,及时发现代码中的问题;使用容器化技术(如Docker)可以将应用程序及其依赖项打包成一个独立的容器,方便在不同环境中部署。

4.2 教授DevOps的技巧分享

小组成员分享了许多宝贵的教学经验:
- 项目驱动教学 :通过实际项目让学生亲身体验DevOps的整个流程。例如,布置一个小型的Web应用开发项目,要求学生从代码编写开始,运用所学的DevOps工具和技术进行自动化构建、部署和测试。在这个过程中,学生可以更深刻地理解各个环节之间的关系和作用。
- 案例分析 :引入实际的工业案例进行分析,让学生了解DevOps在不同场景下的应用和效果。比如,分析一些知名科技公司(如谷歌、亚马逊)如何通过DevOps实现快速的软件迭代和高效的运维管理,从中学习他们的成功经验和解决问题的方法。
- 小组合作学习 :组织学生进行小组合作,共同完成一个项目。在小组中,学生可以模拟开发和运维团队的角色,加强团队协作和沟通能力。同时,不同学生的思维方式和技能可以相互补充,提高项目的完成质量。

4.3 学习DevOps的先决技能探讨

对于学习DevOps所需的先决技能,小组成员达成了一些共识:
- 编程基础 :学生需要具备一定的编程能力,如Python、Java等。因为在DevOps中,很多工具和脚本的编写都需要编程知识。例如,使用Python编写自动化脚本可以完成一些重复性的任务,提高工作效率。
- 操作系统知识 :了解常见的操作系统(如Linux)的基本操作和管理。因为大多数的服务器和开发环境都运行在Linux系统上,掌握Linux系统的文件管理、用户权限设置、服务启动和停止等操作是必不可少的。
- 网络知识 :掌握基本的网络原理和协议,如TCP/IP、HTTP等。在DevOps中,应用程序的部署和运行涉及到网络通信,了解网络知识可以帮助学生更好地理解和解决网络相关的问题。

以下是学习DevOps先决技能的表格总结:
| 先决技能 | 具体内容 |
| — | — |
| 编程基础 | Python、Java等编程语言 |
| 操作系统知识 | Linux系统基本操作和管理 |
| 网络知识 | TCP/IP、HTTP等网络协议 |

5. 结论

通过对Amelia在自动化部署方面的研究以及DevOps教育的讨论,我们可以得出以下结论:
- 自动化部署的重要性 :自动化部署在DevOps中起着至关重要的作用。像Amelia这样的工具可以帮助我们更高效地进行实验,通过对不同架构配置的部署和测试,收集性能指标,从而为架构设计提供有力的依据。例如,在ANSPE软件系统的实验中,通过Amelia部署324种架构配置和变体,最终将系统的吞吐量提高了五倍。
- DevOps教育的必要性 :随着DevOps在行业中的广泛应用,大学课程中引入DevOps教育是非常必要的。通过合理的教学方法和课程设置,可以让学生掌握DevOps的理念、工具和技术,为他们未来的职业发展打下坚实的基础。
- 设计模式的选择 :在性能方面,生产者/消费者设计模式通常优于反应器模式。这一结论可以为软件架构师在选择设计模式时提供参考,帮助他们设计出性能更优的系统。

以下是整个研究和讨论过程的mermaid流程图:

graph LR
    A[Amelia自动化部署研究] --> B[定性评估]
    A --> C[定量评估]
    D[DevOps教育讨论] --> E[定义探讨]
    D --> F[教学技巧分享]
    D --> G[先决技能探讨]
    B --> H[得出评估结果]
    C --> H
    E --> I[形成对DevOps的理解]
    F --> I
    G --> I
    H --> J[为架构设计提供依据]
    I --> K[培养学生DevOps能力]
    J --> L[设计高性能系统]
    K --> L

总之,无论是在技术实践还是教育领域,DevOps都有着广阔的发展前景和重要的应用价值。我们应该不断探索和研究,以更好地应用DevOps来提高软件的开发和运维效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值