DepOvs简介

DevOps简介

DevOps 是软件开发人员和 IT 运营之间的合作,目标是自动执行软件交付和基础架构更改流程。它创造了一种文化和环境,可在其中快速、频繁且更可靠地构建、测试和发布软件。

参考资源:https://developer.aliyun.com/article/746500

1.软件交付的挑战

  • 瀑布模型和实物交互

    20世纪90年代,软件交互以实物交互,如软盘、硬盘或者光盘。因此SDLC(软件生命周期)长。

    瀑布模型下一阶段回不到上一阶段

  • 敏捷模型和电子交互

    互联网广泛接受,软件交付从实物转为电子交互,如在线下载

    开发者只需要编写很少的逻辑和模块,然后交给QA(质量保证工程师),接着开发者继续新增模块,最后将其交付给QA,当所有的模块准备就绪时 发布。

  • 云端的软件交付

    智能手机和无线技术被广泛接受,软件从二进制转为在线服务,网络浏览器是应用程序软件的交互界面。客户不在需要安装应用程序,另一方面,基础设施转为动态的,因此应用程序的需求不断变化,并且容量也需要持续增长。

​ 虚拟机化技术和软件定义网络(SDN)使服务器更加动态化,云厂商可以轻松创建和管理动态基础设施。

​ 现在基础设施被纳入软件开发交互周期的范围,因为应用程序被安装并运行在服务器而不是客户端pc上。

  • 持续集成(CI)

    CI包含一系列工具的组合,例如版本控制系统(VCS 如git)、构建服务器和自动化测试工具。

    VCS–>构建服务器–>自动化测试(调用单元测试)

  • 持续交互

    CI加上自动化部署是服务器上的应用程序向用户提供服务的理想过程,但是因为基础设施包含网络和服务器,而这些在每个阶段都有所差别。

    持续交互 是一种可以实现的最佳实践,包含CI工具、配置管理工具和编排工具的组合

  • 基础设施即代码

    配置管理工具不仅支持操作系统或者虚拟机,还支持云基础设施。

    配置管理工具可以通过配置文件自动设置云基础设施。

  • 编排管理工具的一种,但是在配置和分配云资源时,它更加的动态和智能。

总而言之,SDLC已经发展为通过若干流程、工具和方法实现快速交付。最终,软件(服务)交付只需要几个小时。

2.微服务趋势

​ 基于目标环境和应用程序的大小。软件架构和设计也在不断发展。

  • 模块化编程

    应用程序拆分为若干个模块,每个模块独立可重用

  • 包管理

    maven、pip、npm等

  • mvc设计模式

  • 单体架构应用程序

  • 远程过程调用

    sun 公司引入sun RPC(远程过程调用),允许远程使用模块。NFS(网络文件系统)是RPC的实现。因为基于sun RPC,NFS客户端与NFS服务器之间的cpu和操作系统的版本是相互独立的。常见的RPC框架 如thrift(Facebook)、Dubbo(阿里)、java中的JMI等

  • RESTful设计

    • 使用HTTP和SSL/TLS作为传输标准
    • 使用HTTP方法进行创建、加载、上传、删除操作,例如GET/POST/PUT/DELETE;
    • 使用URI作为资源标识符;例如:user ID123表示为/user/123;
    • 使用Json作为标准的数据表示

    RESTful支持任何语言,因为它是基于HTTP的,因此RESTful服务器端可以使Java语言开发的,而客户端使用Pthon。

    可以使用多个RESTful应用程序构建分布式模块化设计,这种应用程序成为微服务

3.微服务

​ 微服务设计关注以下主题。

  • 无状态:不将用户会话存储到系统中,这样更容易扩展。

  • 无共享数据存储:微服务拥有自己的数据存储如数据库。它不以其他应用程序共享。这样有助于封装后端数据库,方便代码重构,并在单个微服务中更新数据库模式。

  • 版本控制和兼容性:微服务可能会经常更改和更新API,定义版本,并且应具有向后兼容性。这有助于与其他微服务和应用程序解耦。

  • 集成CI/CD:微服务应采用CI和CD流程来消除和管理工作。

    有一些框架可以帮助构建微服务应用程序,如spring boot和Flask。也有很多基于HTTP的框架,因此开发人员可以锐意尝试和选择框架,甚至是编程语言。这就是微服务设计的巧妙之处。

    虽然持续集成和持续交付自动化流程有助于开发和部署多个微服务,但是资源和复杂性(如虚拟机、操作系统、库、磁盘卷和网络)在数量上服务与单体架构应用程序进行比较。因此出现了一些工具和角色支持云上的大型自动化环境。

####4.自动化工具

(1)持续集成工具

​ Git是一款流行的VCS(版本控制系统)工具。Github和Bitbucket提供Git托管服务,它允许创建和保存Git仓库。

​ 构建服务器也有多种,如Jenkins是一个成熟的应用程序,与TeamCity相同,除了自建的构建 服务器之外,还有托管服务,软件即服务(Saas)如Codeship和Travis CI。

​ 构建服务可以调用外部命令,例如单元测试程序。因此,构建服务器是CI流水线中的关键。 Codeship可以从GitHub中检出代码并调用Maven进行构建(mvn compile)和单元测试(mvn test)。

(2)持续交付工具

​ 配置管理工具有多种,如Puppet、Chef和Ansible,它们是最受欢迎的配置管理工具。

​ AWS OpsWorks提供托管Chef平台。

​ AWS CodeDeploy也是一种有用的自动化工具。它主要聚集在软件部署,允许用户自定义。如定义去哪里下载软件和安装、如何停止应用、如何安装应用程序、安装后如何启动和配置应用程序。配置文件采用YAML格式。

(3)监控和日志工具

​ 如果使用云基础设施管理微服务,那么一些监控工具可以帮助管理服务器。

​ Amazon CloudWatch是AWS的内置监控工具,帮助DevOps实现可视化。Amazon CloudWatch还提供应用日志的收集。

​ ELK是一种流行的堆栈组合,是Elasticsearch、Logstash和Kibana三个应用的缩写组合。Logstash采集应用日志并转换为JSON格式,然后发送到Elasticsearch,Elasticsearch是一个分布式JSON数据库。Kibana可以可视化存储在Elasticsearch上的数据。
Grafana是另一个流行的可视化工具,用于Graphite或者InfluxDB等时间序列数据库连接。时间序列数据库用户存储非规范化的数字型数据如cpu使用率、网络流量,与RDBMS不同,时间序列数据库有一些内置优化可以节省数据空间,可以更快的查询数据历史记录。大多数DevOps监控工具后端都使用时间序列数据库。

(4)沟通工具

如果使用前面提高的几个DevOps工具,需要来回切换访问不同的控制台以检查CI和CD流水线是否正常工作。列入:

​ ①将代码部署合并到Github。

​ ②在Jenkins上触发新的构建。

​ ③触发AWS CodeDeploy以部署新版本的应用程序。

​ 上面的这些事件需要按照时间顺序跟踪,如果存在问题,DevOps需要与开发人与QA讨论处理这些情况。然而,这样存在一些过度通信问题,因为DevOps需要逐个查看事件,然后通过电子邮件进行解释。这样效率不但不高而且问题仍在继续。

​ 有一些通信工具可以帮助集成这些DevOps工具,任何人都可以加入以查看事件并相互评论。Slack和HipChat是其中最受欢迎的通信工具。这些通信工具集成到Saas服务,以便DevOps可以在单个聊天室中查看事件。

5.公有云

使用云计算技术,可以轻松实现CI/CD和自动化工作。特别是公有云API可以为DevOps提供需要CI/CD的支持。