持续交付9-基础设施和环境管理

基础设施和环境管理

部署软件步骤:

  1. 创建并管理应用运行所需的基础设施
  2. 安装应用程序的正确版本
  3. 配置应用程序,包括数据和状态

环境:指应用程序运行所需的所有资源和它们的配置信息.

基础设施:代表了你所在组织的所有环境和支持其运行的所有服务.

基础设施和环境管理方式:

  1. 使用版本库中的配置信息指定基础设置所处的状态
  2. 基础设施具备自治性.可自动状态恢复
  3. 测试和监控基础设施.

基础设施内容:

  1. 操作系统及其配置信息
  2. 中间件软件栈及其配置信息
  3. 基础设施软件,如版本控制代码库,目录服务,监控系统
  4. 外部集成点,外部系统和服务
  5. 网络基础设施

解决什么问题

基础设施和环境管理,持续交付不仅是应用的版本化管理,基础设施和环境的版本化管理是关键,只有将所有影响因素进行控制才能保障应用迭代后可顺利交付.也因此基础设施和环境的管理,可以说是持续交付的基石.

  1. 确保所有环境都是幂等的
  2. 很容易准备一个相同的环境系统,如预生产,生产环境
  3. 环境可实现自动化迁移
  4. 如果服务监控得当,环境还具备自恢复能力

怎么做

  • 运维管理

一般基础设施都是运维团队负责,但是开发也应该了解运维流程并给予相应的支持.

  1. 文档和审计.环境变更要被记录,便于追溯;变更管理要进行审批流程.
  2. 异常告警.开发要辅助运维监控的实施
  3. 进行灾备管理.高可用服务,需要进行建立备用服务,定时进行数据备份,恢复测试以及对于大数据量数据进行归档管理.
  4. 内部沟通使用运维熟悉的技术.

监控很重要

  • 基础设施管理

与交付流程的其他方面一样,创建和维护基础设施的所有内容都要进行版本控制:

  1. 操作系统的安装定义项
  2. 数据中心自动化工具的配置信息
  3. 通用基础设施配置信息
  4. 用于管理基础设施的所有脚本

更代码管理一样,基础设施变更也要进行流水线控制,共享基础设施还应该单独建立流水线

  1. 变更之后,上层应用可以正常运行;
  2. 将变更内容放到运维管理的的测试和生产环境上
  3. 执行部署测试

实际基础设施访问需要进行权限控制

  • 基础设施访问控制

控制主要包括如下内容:

  1. 未经批准,不允许修改基础设施
  2. 制定基础设施变更自动化过程
  3. 进行基础设施监控

测试和生产的审核流程要一致,区别只是审核严格程度不同.

  • 基础设施变更

变更流程:

  1. 各种基础设施变更流程一致
  2. 变更流程需要进行用户登录管理,统计变化平均周期时间
  3. 变更要详细记录到日志
  4. 能够看到每个环境的变更历史
  5. 修改内容必须经过测试才可应用生产
  6. 每次修改进行版本控制,并通过自动化流程对基础设施进行变更
  7. 验证变更已生效

自动化脚本即文档,它记录变更内容,便于后面进行变更审计.
自动化对生产系统变更可使用工具:puppet,cfengine等

  • 基础设施环境安装

环境安装分为三种方式:

  1. 手动安装,不推荐
  2. 自动化远程安装
  3. 虚拟化

自动化安装方式流程:

  1. 通过带外远程管理系统启动服务器
  2. 通过网络启动并使用PXE安装操作系统
  3. 通过配置管理工具进行环境管理

环境修改包括:修改操作系统的服务包,升级,安装新软件,修改配置项,执行部署等;

  • 中间件配置管理

中间件组成:二进制安装包,配置项和数据

实际中间件的管理分为三种:

  1. 配置文件管理.通过组合安装包和配置文件即可工作,这种管理最方便;
  2. 通过操作系统打包,使用服务器管理系统管理
  3. 无法通过上述方式管理的方式.

实际中间件选择时就要考虑管理的便捷性:

  1. 通过产品文档和技术支持进行产品研究.
  2. 考查中间间如何处理状态的.实际中尽量选择文本处理方式,如果是数据库来进行状态处理,你还需要将数据库管理作为其一部分,会增加复杂性.
  3. 查找用于配置的API.

如果都不满意,那么就应该学会放弃,选择更好的技术.

  • 基础设施服务的管理

实际服务运行中经常会出现基础设施配置引起的问题,这种问题因为平常接触比较少,很难第一时间排查到.

所以基础设施管理应该:

  1. 基础设施也应该进行版本控制
  2. 进行监控
  3. 重视日志
  4. 部署时进行基础设施冒烟测试
  5. 测试环境和生产环境的网络环境尽量一致,这样可以提前发现问题.这种方式可能感觉有些浪费,但是如果出现问题测试环境和生产环境进行蓝绿部署.相当于增加了一个备用环境.
  • 平台虚拟化

虚拟化:是一种在一个或多个计算机资源上增加了一个抽象层的技术.
但是基础设施中虚拟化指的是平台虚拟化,即模拟一个完整计算机系统.
通过平台虚拟化,我们可以控制环境差异,轻易实现基础设施管理.

优点:

  1. 轻松进行环境初始化
  2. 环境固化.
  3. 硬件标准化
  4. 基线维护简单.

缺点:

任何事物都有两面性,当你要降低风险时,就要较全面的了解它的优缺点.

缺少动态能力,实际服务变化,不能及时调整.

根据虚拟化的优点,我们可以通过虚拟化技术进行环境升级测试以及,应用部署测试,以及线上环境问题复现以及并行测试等操作.

云计算

云计算:分布式计算的一种,指通过网络将巨大的数据计算处理程序分解为无数小程序,然后通过多服务器组成的系统进行处理和分析这些小程序,得到结果并返回给用户.

云计算服务可以分为三类:

  1. 基础设施即服务IaaS
  2. 平台即服务PaaS
  3. 软件及服务SaaS

实际就是将不同的产品进行封装,便于用户按需使用.

  • 基础设施即服务

包括基础设施服务,消息队列,静态内容托管,流媒体托管,负载均衡,存储.
云服务天然支持虚拟化,扩展简单,有成熟的环境管理服务,使用非常便捷.但是使用的服务越多,与服务商的架构耦合就越严重,这是所谓的"上云容易,下云难"的来源.

同时最核心的问题还是:安全问题和服务级别问题.

安全问题:

  1. 如何控制外部危害
  2. 如何限制数据窃取

因为黑盒原因,你无法自己控制这些行为,但是云服务商会提供相应的服务来便于你管理.

  • 平台即服务

服务商通过让用户使用标准应用栈,通过牺牲一定的灵活性,便于应用程序和基础设施的横向扩展.

优点:

  1. 按需扩展
  2. 服务商会处理非功能需求,如安全性,可用性,扩展性等
  3. 标准化应用栈,有利于服务迁移,服务初始化.

缺点:

  1. 有灵活性限制
  2. 使用功能越多,服务绑定越严重

基础设施的监控

监控策略考虑内容:

  1. 监控应用和基础设施,便于收集必要数据
  2. 存储数据,便于分析
  3. 数据聚合展示
  4. 通知机制
原文地址:https://www.cnblogs.com/chengmuyu/p/13284093.html