一文看懂微服务架构及DevOps
DevOps是什么?
DevOps 是通过:
平台(Platform)、流程(Process)和人(People)的有机整合,以 C(协作)A(自动化)L(精益)M(度量)S(共享)文化为指引,旨在建立一种可以快速交付价值并且具有持续改进能力的现代化 IT 组织。
瀑布开发模式
瀑布模型(Waterfall Model)是Royce在1970年提出的,他把大型软件开发分为:分析与编程,象工厂流水线一样把软件开发过程分成各种工序,并且每个工序可以根据软件产品的规模、参与人员的多少进一步细分成更细的工序。该模型非常符合软件工程学的分层设计思路,所以成为软件开发企业使用最多的开发模型。
敏捷开发模式
敏捷是一种迭代的、基于团队的开发方法。这种方法强调以完整的功能组件快速交付应用程序。所有的时间都被“固定时间盒”划分为“冲刺(通常称迭代)”阶段。而不是创建任务和时间表。每个迭代周期都有一个定义的持续时间(通常以周为单位),其中包含在迭代开始时计划的可交付成果的运行列表。交付物根据客户确定的业务价值进行优先级排序。如果迭代中所有计划的工作都不能完成,那么工作将被重新排序,这些信息将用于未来的迭代计划。当工作完成时,项目团队和客户可以通过每日构建和迭代演示对其进行审查和评估。敏捷依赖于整个项目中非常高水平的客户参与,特别是在这些评审期间。
DevOps变化进度
Scrum的理念
Scrum敏捷软件开发强调的是在一个固定的时间内,利用一切合理的开发资源,完成客户的一定需求。总体的项目是由一个一个小的冲刺(Sprint)组成的。每个小的冲刺(Sprint)都有很清晰明确的需求,而且也有明确的需求验收标准,从而能够把一个大的项目逐渐分解到小冲刺中,为按时保质地完成交付提供支持。
从瀑布到敏捷转型的要点
- 瀑布模型的核心思想是按工序将问题简化,将功能的实现与设计分开,便于分工协作。将软件生命周期划分为制订计划、需求分析、软件设计、程序编写、软件测试和运行维护6个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
- 瀑布模型有以下特点:
- 为项目提供了按阶段划分的检查点。
- 当前一阶段任务完成后,只需要去关注后续阶段。
- 瀑布模型强调文档的作用,并要求每个阶段都要仔细检查。但是,这种模型的线性过程太理想化,其主要问题在于:
各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险。
在瀑布开发模式下,早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。
3.在做大的变革之前,积极听取其他成员的意见,努力理解其他成员的观点,获得团队主要成员的支持,是保证变革成功的重要一环。
4.软件开发根本就没有什么灵丹妙药可言。虽然敏捷可以很快开发出优秀的应用软件,但不是说这项技术适合每个项目。在实施敏捷之前,一定对现有项目做好分析,对症下药。
5.在Scrum开发模式下,为每个Sprint起一个名字,不但可以增加团队软件开发的乐趣,提高大家的参与度,还可以记录下Scrum Team当时的心情。
DevOps实践六大原则
DevOps 的三大支柱
人(People)、流程(Process)和平台(Platform)
DevOps = 人 + 流程 + 平台
人 + 流程 = 文化
流程 + 平台 = 工具
平台 + 人 = 赋能
DevOps工具系统
项目管理(PM):jira。运营可以上去提问题,可以看到各个问题的完整的工作流,待解决未解决等;
代码管理:gitlab。jenkins或者K8S都可以集成gitlab,进行代码管理,上线,回滚等;
持续集成CI(Continuous Integration):gitlab ci。开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
持续交付CD(Continuous Delivery):gitlab cd。完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
镜像仓库:VMware Harbor,私服nexus
容器:Docker
容器平台: Rancher
编排:K8S
服务治理:Consul
脚本语言:Python
日志管理:Cat+Sentry,还有种常用的是ELK
系统监控:Prometheus
负载均衡:Nginx
网关:Kong,zuul
链路追踪:Zipkin
产品和UI图:蓝湖
公司内部文档:Confluence
报警:zabbix,微信企业号
DevOps 可让您通过持续部署来实现扩展
持续集成和持续部署管道(CI/CD)是实施 DevOps 的一大重要成果。CI/CD 可帮助您频繁地向客户交付应用并检验软件质量,而且只需极少的人工干预。
具体而言,CI/CD 在整个应用生命周期内(从集成和测试阶段,到交付和部署)都引入了持续自动化和持续监控,让您能够快速识别和改正问题与缺陷。这些彼此关联的实践通常被统称为"CI/CD 管道",需要开发和运维团队以敏捷方式协同支持。