本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达。
《DevOps入门与实践》 :本书结合实例详细介绍了在开发现场引入DevOps的具体流程。
- ISBN: 978-7-115-51256-7
- https://www.ituring.com.cn/book/2407
适合已有实践经验的实施人员,对已有知识和技能做结构性梳理。
适合对DevOps欠缺了解的人员,能够建立起基本的概念。
缺憾是,因为外文书籍翻译引入存在时间差的原因,书中涉及的一些工具和方法的实例,落后于当前主流应用场景。
此外,书中最终实现的DevOps结构,仅满足于流程原理性演示,相对于当前主流业务需求,过于简单,不具备大的实用价值。
如何以DevOps为中心对架构进行变革,成功实施DevOps?
DevOps的核心要素
在DevOps土壤上,将当前业务与DevOps思想、方法和工具结合时,最好参照已有的最佳实践模式来指导实践活动。
这将会实现规避掉一部分可能的问题,主要的时间和精力不应该花费在一个又一个问题上。
The Twelve-Factor App
- 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。
- 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。
- 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。
- 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。
- 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。
微服务架构是一种将单个应用作为一套小型服务来开发的方法。
微服务的9个特征:服务组件化、以业务功能为中心组织团队、做产品的态度、服务端点、分布式治理、分布式数据管理、基础设施自动化和容错和演进式设计。
每个小服务都以业务功能为单位来构建,采用自动化部署机制进行独立部署,并以独立的进程运行,不同进程之间使用轻量HTTP资源API等方式进行通信。
各个进程相互独立,因此在保持最低限度的集中式管理前提下,每个服务都可以采取不同的编程语言和存储来实现。
简而言之,微服务架构以业务功能为单位把一个大的服务拆分为多个小的进程,由这些小进程的集合构成一个完整的服务,可以轻松地对各个小进程进行功能的添加、修改和重复使用等操作。
对应的在组织架构上,每个单独的进程是由包含不同技能人员的一个团队来实现。
顾名思义,其主要含义就是在基础设施构建完成后就不再进行任何变更。
如果想对环境进行操作时,需要先销毁现有的基础设施,然后再创建新的基础设施。
也就是说,能够舍弃原有的基础设施并可以从零开始重新构建出和原来一样的基础设施。
其主要优点
需要特别关注的地方
蓝绿部署是为了解决传统发布方式的问题而出现的。
原理上,蓝绿部署是通过冗余来解决问题。
蓝绿部署的切换速度快,即使发生故障,也能容易回退版本,几乎不影响用户的使用。
但也有一些限制,就是需要保持双重的基础设施,而且不适用于有状态服务器。
DevOps的实现并不要求特定类型的环境,而是建议根据具体条件因地制宜。
本地部署
公有云
私有云
对于和服务不直接相关的非核心功能,可以选择基于互联网服务来实现,彻底削减非核心部分的成本。
例如,在持续集成范围,就有CircleCI和Travis CI等。
如果SaaS服务提供的功能越重要,就越需要在使用之前进行严密的验证并制定相应的应急计划(灾害、故障的应对计划)
SaaS的好处
SaaS的缺点
在DevOps中,日志除了被收集和存储,还应该积极地用于分析。
在使用不可变基础设施的情况下,最为理想的方式是实时进行日志收集、处理和输出展现。
使用ELK技术栈(Elasticsearch、Logstash和Kibana)、可以快速完成日志的传输、分析和可视化(信息的数值化和图形化),有助于进行客观的判断。
通过持续地日志分析和可视化,认真地对现状加以思考和反省,通过迭代式的改进最终达到长期的目标。
敏捷开发是一种通过改善开发方法和团队结构,持续对最终成果进行改善的方法。
开发成功与否并不在于是否按计划准时发布了服务,而在于服务的的开发是否能应对变化,是否产生了商业价值。
在以迅速应对变化为目标的敏捷开发中,计划、设计、开发、测试以及发布等相关工作均由一个小型团队完成。
通过在短期内不断重复这一系列的工作,接受外界对服务和产品的反馈,从而持续进行改善。
所有成员都要对服务和产品负责,需要理解彼此的业务,自然而然地就形成了DevOps所需要的模式。
在软件开发过程中使用JIRA、Redmine和Trac等缺陷跟踪系统或问题跟踪系统,以ticket为单位对问题、缺陷以及敏捷开发中的用户故事等进行管理的方法。
作为DevOps实践的一个良好补充,解决了文档式管理的信息分散问题,可以支持从瀑布开发到Scrum开发。
在DevOps中,通过ticket为单位进行信息共享以及任务管理,将会使内外部之间的协调变得简单,信息也更易于集中管理。
在具体实现上,就是所有任务包括代码改动都以ticket方式进行管理,与具体事项和相关人员进行关联,同步更新状态。
ticket中可以包含各类日期、负责人、详细内容和讨论记录等信息。
提供仪表盘功能(Dashboard),可以从项目管理、工作量估算和进度管理等角度把握开发整体情况。
基于Google长期的运维实践经验而提出,重点关注运维,可以说SRE是DevOps中运维的一个更加具体的描述。
虽然网站可靠性的下降并不会直接阻碍商业价值的实现,但受阻的风险概率大幅提高。
SRE团队要在资源有限的条件下保证SRE,技术难度很大,要求较高的改善技能。
提高SRE的主流方法与观点
针对各种任务,通过即时通讯工具来提高工作效率,确保团队成员都能够实时了解其他人的操作和系统当前的情况。
通讯工具可以所有类型信息做集成,例如CI&CD工具、Web服务等。
Slack(聊天工具,可集成第三方工具)和Hubot(聊天机器人)是实现ChatOps的代表性组合。
使用ChatOps实现自动化与效率化
ChatOps的构成
ChatOps的阶段
原文:https://www.cnblogs.com/anliven/p/11870155.html