文章目录
DevOps
DevOps 是一组用于促进开发、测试以及运维人员之间协作的过程、方法和系统的统称。
- 开发:研发部门。
- 测试:测试部门,或称质量保证部门。
- 运维:服务部门。
DevOps 提倡通过一系列的技术和工具降低开发、测试以及运维人员之间的隔阂,实现从开发、到测试、再到最终部署的全流程自动化,从而达到开发、测试、运维一体化。通过将 DevOps 的理念引入到整个生产系统的流程中来,能够显著提升软件的开发效率,缩短软件交付的周期,更加适应当今快速发展的互联网时代。
一个 DevOps 系统应该具备以下 8 点要求:
- 环境一致性:在本地开发出来的功能,无论在什么环境下部署都应该能得到一致的结果。
- 代码自动检查:为了尽早发现问题,每一次代码提交后,系统都应该自动对代码进行检查,及早发现潜在的问题,并运行自动化测试。
- 持续集成:每次代码提交后系统可以自动进行代码的编译和打包,无需运维人员手动进行。
- 持续部署:代码集成完毕后,系统可以自动将运行环境中的旧版本应用更新成新版本的应用并且整个过程中不会让系统不可用。
- 持续反馈:在代码自动检查、持续集成、持续部署的过程中,一旦出现问题,要能及时将问题反馈给开发人员以及运维人员。开发和运维人员收到反馈后对问题及时进行修复。
- 快速回滚:当发现本次部署的版本出现问题时,系统应能快速回退到上一个可用版本。
- 弹性伸缩:当某个服务访问量增大时,系统应可以对这个服务快速进行扩容,保证用户的访问。当访问量回归正常时,系统能将扩容的资源释放回去,实现根据访问情况对系统进行弹性伸缩。
- 可视化运维:提供可视化的页面,可实时监控应用、集群、硬件的各种状态。
DevOps 平台包括:GitHub、Travis、Artifactory、Spinnaker、FIAAS、Kubernetes、Prometheus、Datadog、Sumologic 和 ELK 等组件。
DevOps 本质上是为运维服务的,运维通过使用新技术和开发一系列自动化工具,让开发更接近生产环境,负责开发和运维全部过程,保证了自由度和创新性。在监控、故障防控工具,功能开关的配合下,可以在保障用户体验和快速交付价值之间找到平衡点。
- 持续集成(Continuous Integration)
- 依赖与版本管理(Dependency and Version Management)
- 持续交付流水线(CD Pipeline)
- 部署和回滚自动化(Automated Deployment and Rollback)
- 开发者工具网站(Simple developer web portal)
- 灰度发布(Gray Release)
- 端到端调试与分析(Full Stack Debugging and Profiling) –distributed tracing
- 设置管理(Configuration Management)
- 自助环境获取(Self Serviced Environment Acquisition)
- 统一标准的服务开发框架(Standardized Service Framework)
- 测试自动化(Continuous Automated Testing)
- A/B 测试(A/B Testing)
- 服务状态的实时感知(Real time Service Status through Monitoring)
- 实时报警(Real time Alerting)
- 基于日志的运维数据采集与处理(Log Based Data Collection and Processing)
- 运维和业务相关指标的数据仪表盘(Visualized Dashboards of Operational and Business Relevant Metrics)
- 动态调度(Resource Dynamic Orchestration)
- 历史审计(Audit Trail Information)
- 可测量的服务SLA (Measurable Service Level Agreement)
- 快速问题定位(Issue Isolation)
- 从故障中自动恢复(Automated Recovery from Failure)
- 工单系统(Ticketing System)跟踪处理在线系统故障。
- 生产线探针(Probe in Production)
- 资源记账(Resource Accounting)
- 设施即代码(Infrastructure as a Service):将基础设施及其完整的生命周期(创建、销毁、扩容、替换)以代码的方式进行描述、通过相应的工具(terraform、ROS、CloudFormation等)编排执行和管理。比如应用用到的所有基础资源(如:ECS、VPC、RDS、SLB、Redis 等),无需在控制台不停的切换页面申请购买,只需定义相应代码,一键创建。这样做的受益是基础设施代码版本化,可 Review,可测试,可追溯,可回滚,一致性、防止配置漂移,方便共享、模板化和规模化,提升了运维整体效率和质量,通过代码也可以轻松了解基础设施的全貌。
- Cloud IDE:云端 IDE 深入研发的整个生命周期,提供了完整的开发、调试、预发、生产环境及 CI/CD 发布一体化体验。云端可提供丰富的代码库模板,通过分布式运算提升编译速度,以 “智能” 方式实现代码推荐、代码优化、自动扫描发现 BUG、识别逻辑和系统性风险。可以想像云时代开发模式与本地开发完全不同,拥有更高的研发效率,更快的迭代速度,更完善的质量控制。