美文网首页
1 DevOps简介

1 DevOps简介

作者: AgileHouse | 来源:发表于2022-01-22 07:51 被阅读0次

    软件交付周期(SDLC,Software Development Life Cycle)越来越短,应用程序规模越来越大,DevOps致力于支持软件的持续构建和交付

    SDLC已发展为通过若干流程、工具、方法以实现快速交付

    软件交付的挑战

    瀑布模型和实物交付

    串行由上而下,一般不返回上阶段,交付周期一般较长,如软盘\CD-ROM

    敏捷模型和电子交付

    增量、迭代、敏捷模型,可多次交付(更利于更新和打补丁),如exe程序

    基础设施(如服务器和网络)是静态的,需事先设置好,一般SDLA不涉及影响基础设施

    云端的软件交付

    软件程序从二进制变为在线服务

    虚拟化技术和软件定义网络(SDN)使服务器更动态化

    如Amazon Web Service(AWS)、Google Cloud Platform(GCP)这种云服务,可轻松创建和管理动态基础设施

    基础设施被纳入SDLC范围,成为重要组件之一,程序被安装和运行在服务器上,不再是客户的PC机上

    软件和服务交付周期缩短

    持续集成

    为了更高质量的快速交付,开发者和QA开始采用一些自动化技术

    CI continuous integration,CI包含一系列工具的组合,如版本控制系统version control systems VCS、构建服务器、自动化测试工具

    VCS帮助开发在中心服务器上维护程序源代码

    CI帮助开发者和QA提升代码质量,缩短程序归档或模块打包周期,CI足以应对电子交付

    持续交付

    CI加上自动化部署是服务器上应用程序向用户提供服务的过程

    如何将软件交付服务器?如何关闭、替换、回滚已有程序?如系统库也更新,如何升级?如何修改操作系统的用户和组设置?

    基础设施包含服务器和网络,上述取决于开发、QA、预发布、生产等环境,每个环境都有不同的服务器配置和IP地址

    CD continuous delivery,是CI工具、配置管理、编排工具的组合,可实现上述问题

    配置管理

    帮助配置操作系统,包括用户、用户组、系统库,可管理多台服务器,以便更换服务器时与所需状态或配置保持一致;支持将应用程序部署或安装到服务器中;配置管理支持自动或手动更新程序

    手动触发执行-蓝绿部署

    基础设施即代码

    配置管理工具不仅支持操作系统或虚拟机,还支持云基础设施,在云端创建并配置网络、存储和虚拟机,通过配置文件自动化设置云基础设施

    配置管理比标准操作过程SOP有优势,复制环境也容易

    编排

    也是配置管理工具的一种,在配置和分配云资源时,更智能和动态

    编排工具可管理多个服务器和网络资源,当管理员要增加应用程序实例时,编排工具可确定可用服务器,自动部署和配置应用程序和网络

    编排工具超出SDLC范围,但在扩展应用程序和重构基础设施资源时有助于持续交付

    微服务趋势

    模块化编程

    每个模块独立且可重用,可由不同开发团队维护

    当实现应用程序时,应用程序只需初始化,并使用这些模块来构建更大的应用程序

    模块化编程可提高软件开发速度,减少重复造轮子

    包管理

    Java或轻量级编程语言都有自己的模块或包管理工具

    java-Maven、python-pip、ruby-rubyGems、JavaScript-npm

    包管理工具允许将模块或软件包注册到集中式或私有存储库,并下载必要的软件包

    MVC设计模型

    不断添加新功能和逻辑时,应用程序需要更多的模块、包、框架组合,尤其是服务器端应用程序

    常需要连接数据库如RDBMS、身份验证服务器如LDAP,通过具有适当的设计的HTML将结果返回用户

    因此需要软件设计模型,以便应用程序中使用一组模块开发应用程序

    MVC模型视图和控制器,一种流行的程序设计模型,定义了三个层次:

    视图层:负责用户界面UI、输入输出I/O

    模型层:负责数据查询和持久化,如加载和存储数据到数据库

    控制层:负责视图和模型之间的业务逻辑

    简化MVC的框架:Struts、SpringMVC、Ruby on Rails、Django

    单体架构应用程序

    MVC定义了每层的边界,但源代码model、表示代码view、业务逻辑controller都存在统一VCS存储库中,虽然应用程序体积变大,会变得更慢,被称为单体架构monolithic,包括构建巨型exe\war程序的代码

    当添加或修改其中一个模块时,会影响很多代码,导致没人愿意维护这些代码

    远程过程调用

    Sun RPC remote procedure call 远程过程调用,允许远程使用模块,有利于将应用程序划分为多个进程(程序)单个程序可以有单独的源代码存储库

    如RPC实现的NFS network file system网络文件系统,NFS客户端和服务器之间的CPU和操作系统版本是互相独立的

    如RPC风格的编程语言,unix、c语言有rpcgen工具生成桩代码负责网络通信、Java有类似RMI remote method invocationRMI编译器生成连接远程java进程的桩代码,以调用方法并获得结果、Object C有分布式对象,.Net有远程处理功能

    远程过程调用,用于客户端\服务器模型结构,不是分布式架构,出于安全角度,不建议在公共网络上使用

    SOAP(HTTP/SSL)作为数据传输的Web服务,使用XML作为数据表示和服务定义Web服务描述语言(Web Services Description Language,WSDL),然后使用通过描述、发现和集成(Universal Description、Discovery、Integration,UDDI)作为服务注册来查找Web服务应用程序

    RESTfull

    HTTP/SSL作为RPC传输,并简化为RESTfull设计

    使用HTTP和SSL/TLS作为传输标准

    使用HTTP方法进行创建、加载、上传、删除(create、load、upload、delete,CLUD),如get、post、put、delete

    使用URI作为资源标识符

    使用JSON作为标准数据表示

    RESTfull基于HTTP支持任何编程语言

    如有多个RESTfull程序,需要考虑在VCS上管理多个源代码及如何部署多个RESTfull服务器,CICD帮助构建和部署更多RESTfull服务应用程序

    微服务

    微服务设计关注

    无状态,不将用户会话存储到系统,有助于扩展

    无共享数据存储,有自己的数据存储如数据库,有助于封装后端数据库,代码重构,单个微服务中更新数据库模式

    版本控制和兼容性,经常更改和更新API,应定义版本,具有向后兼容性,有助于与其他微服务和应用程序解耦

    集成CICD:采用CICD流程来消除管理工作

    构建微服务应用程序框架

    Spring Boot、Flask

    单体架构应用程序设计和微服务设计

    微服务也包括接口层、业务逻辑层、数据存储,但应用程序(服务)由多个微服务构建,不同应用程序可在下面共享相同的微服务,开发者可以添加或修改现有的微服务

    CICI有助于开发和部署多个微服务,但资源和复杂性(如虚拟机、操作系统、库、磁盘卷、网络)在数量上无法与单体架构应用程序进行比较,在工具和角色可以支持云上大型自动化环境

    自动化工具

    自动化实现快速软件交付,解决管理许多微服务的复杂性

    自动化工具不是普通的IT\基础设施应用程序,如Active Directory、Bind(DNS)、Sendmail(MTA),为了实现自动化,工程师应具备编码技能尤其是脚本语言,及基础结构运维技能,如虚拟化、网络、存储

    DevOps是开发和运维的结合,可实现自动化流程,如持续集成、基础设施即代码和持续交付

    持续集成工具

    Git VCS工具,使用git进行check in\out代码,托管git服务如Github、Bitbucket,创建保存Git存储库,并与其他用户协作

    构建服务器,如jekins、Teamcity

    托管服务,软件即服务Software as a service,SasS,如Codeship、Travis CI

    持续交付工具

    配置管理工具:Puppet、Chef、Ansible

    托管Chef平台:AWS Ops Works

    AWS CloudFormation有助于实现基础设施即代码,支持AWS操作的自动化

    创建VPC

    在VPC上创建子网

    在VPC上创建Internet网关

    创建路由表以将子网关联到Internet网关

    创建安全组

    创建云主机实例

    将安全组关联到云主机实例

    AWS CodeDeploy聚焦软件部署,允许用户自定义

    监控和日志工具

    Amazon CloudWatch是AWS内置监控工具

    ELK是流行堆栈组合,是Elasticsearch、Logstash、Kibana的组合

    Logstash有助于采集日志并转为JSON格式,发送到ES,ES是一个分布式JSON数据库,Kibana可以可视化存在ES上的数据

    Grafana 也是一个流行的可视化工具,与时间序列数据库连接,如Graphite、InfluxDB,时间序列数据库用于存储扁平的、非规范化的数字型数据,如CPU使用率和网络流量,时间序列数据库有内置优化,可节省数据空间,更快的查询历史数据,大多数DevOps监控功能根据后端都适用时间序列数据库

    沟通工具

    如使用多个DevOps工具,需切换访问不同控制台以检查CICD流水线是否正常工作,

    如需考虑, 将源代码合并到GitHub、在Jenkins上触发新构建、触发AWS CodeDeploy以部署新版吧应用程序

    通信工具,可以帮助集成这些DevOps工具,任何人都可查看事件并评论,如Slack、HipChat

    公有云

    云计算,可以轻松实现CICD和自动化工作,特别是公有云API为DevOps提供多CICD支持

    Amazon Web Services、Google Cloud Platform

    相关文章

      网友评论

          本文标题:1 DevOps简介

          本文链接:https://www.haomeiwen.com/subject/gknncrtx.html