热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DevOps使SAAS持续交付

提到Devops我们不得不先切分一下Dev(开发)和Ops(运维)这两个角色。 在计算机产生早起,由于计算机使用范围的限制,硬件生产、软件开发及软硬件的维护都是来自相同的人员或团队

提到Devops我们不得不先切分一下Dev(开发)和Ops(运维)这两个角色。 在计算机产生早起,由于计算机使用范围的限制,硬件生产、软件开发及软硬件的维护都是来自相同的人员或团队,所以两个角色自然融合,本身就是一体的。 随着计算机使用领域和范围延入了各行各业,产品需求越来越复杂,人们更精细化的拆分了整个研发的生命周期,形成了更专注于开发测试的Dev角色和面向部署运维的Ops角色。

       如今为了更快速交付价值,传统瀑布式开发模型转型敏捷开发。同时一款优秀的产品通常也都是一个有规模的体系工程,需要产品、研发、测试、运维更和谐的团队沟通和更合理有效的配合流程,然而对开发团队的要求是通过快速实现新的功能交付价值,而运维团队则希望能提供给用户最稳定最可信任的生产环境,两个团队提供给用户的价值衡量指标不同,自然工作重点也不相同,这种矛盾也导致配合中出现了巨大的浪费。 为了缩小开发与运维之间存在着信息"鸿沟",能够更快地构建可靠性更高、质量更好的软件,DevOps的理念随之产生,它并不代表一个角色,一个资格或一个头衔,而是开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程和方法的一个集合、一种文化,也是从瀑布式到敏捷再到精益的发展必然。

       近年来中国企业应用采用SAAS模式已经是大势所趋。但产品生产过程中出现的种种问题:不一致的运行环境、过多的人工参与依赖构建和部署,改动引起不可控的质量,各个环节沟通和理解不到位等,导致了个人或团队经常出现工作中断,配合效率低下。所以如何结合SAAS和DevOps高效发展产品也将是大多数企业快速成长必然经历的过程。

  • 全局把握
    团队对DevOps有统一的认识和相同的思维方式,描绘愿景,使DevOps的目标清晰。各角色深入理解相互的工作内容,打破隔阂,比如Dev角色要清楚部署架构、部署流程;如何保障安全性和高可用性;对性能指标、压力情况和监控报警的结果更要作为工作重点。Ops角色也要对开发所使用的语言、框架、工具等有所了解,如何管理源码及分支、如何编译打包部署更要不仅仅接手命令的使用,要深入理解原理和过程,甚至Ops也要参与需求的技术评审,提出技术实现可能带来的运维风险。团队有了统一的思想并能及时沟通协作,有助于技术或工具的合理选型及应用, 制定统一的规范,标准化流程。
  • 代码和运行环境
    管理好源码和分支是研发团队保障信息安全、高效协作的基础。我们采用Git作为源码管理工具,并引入多年来业界总结出的Git使用最佳实践,也定义了适合自己的源码命名规则及版本号规范。更合理的branches为敏捷开发提供了高效运转的可行性,但也对各个branch的运行环境带来巨大的挑战。我们根据敏捷生命周期不同时期的要求,拆分了四套(Develop、Test、Staging、Production)运行环境。
    Develop主要给feature branches提供环境。一次敏捷迭代会完成多个(几个或几十个)新feature,每个feature都需要有单独的运行时来保证feature之间互不影响,开发和测试环境单纯,所以Develop环境是由多个运行时组成的,根据新feature数量来决定。我们采用docker技术将运行时容器化,开发人员完全可以依据需要随时产生一个运行时,并在使用完毕后销毁它。
    Test主要给develop branch提供环境。当一次迭代中某个新feature已经开发并测试完成,这个feature就可以将源码merge到develop branch上并进入下一周期——集成测试,Test就提供了一个或多个新feature集成环境。
    Staging是一套预发布环境。它和Production在环境配置方面保持高度一致,用户数据则是production环境中混淆脱敏的数据。在Test环境完成集成测试后发布Staging环境中进入性能、压力及数据完整性方面的测试,同时公司内部也是通过这个环境完成产品新功能的培训和体验的。
    Production是生产环境。提供给用户使用SAAS服务的最终环境。
  • DevOps - 使SAAS持续交付
  • 持续集成和自动化
    每一次源代码提交都应该立即构建、测试来验证功能并保证新代码的正确性及和旧代码是否能成功集成在一起,持续集成将整个过程快速不断的反馈和修正。要达到持续集成的能力,不单是管理好源代码,还需要更多的工具和准则:使用code style对源代码编写规范化;maven进行构建;利用nexus建立本地私服来对各种环境的编译和部署提供统一的依赖库。更重要的是面对如此复杂多样的环境过多的人工参与会使出错的几率大大提升,为了降低浪费,我们要将各个环境尽可能的自动化:构建部署自动化、测试自动化(自动化单元测试、自动化集成接口测试、自动化功能测试),使用jenkins来建立jobs将所有的自动化环境串联起来。我们对Develop和Test环境设置了持续集成规则,任何feature branch代码的提交将触发jenkins一系列jobs的执行,检查、构建、测试最终部署到指定的docker容器中;同样Test环境每天早上从develop branch上检测出变更的代码进入jobs,自动化完成各个粒度的测试。当然持续集成过程中任何问题都会邮件通知给相应的人员处理。
  • 持续交付
    交付成果给客户使用时每次迭代的目标,在持续集成的基础上,将集成后的代码部署到真实运行环境中,使得交付物尽早的得到验证和反馈,无论输出的好坏都是有价值。持续的交付可以不堆积问题马上调整,也为产品下一次迭代提供优化的空间。
  •        计算机领域新概念都是在面临之前的困境和挑战中孕育而生的,这些概念不仅是人类经验积累和智慧的结晶,也为行业提供了统一的新思想和解决方案。如今DevOps已经离我们不再遥远,正是革新团队尝试新理念的好时机。IT服务能力在今天已经成为企业的核心竞争力,为了在激烈的市场竞争中占有优势,研发团队甚至整个公司都应该作出快速并积极的响应。也许在实践中还要结合实际进行探索和试错,但我们坚信只要方向正确,就要坚持走下去。

转载于:https://my.oschina.net/jumpLee/blog/1529083


推荐阅读
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
author-avatar
bl乄ue光耀
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有