本文来自网易云社区

作者:施勇

我们在开发一个复杂系统的时候,常常会强调服务化、模块化、松散耦合等要求以达到高可用、高可靠及高性能等目的;比较少的人会考虑到系统的方便部署配置和运维,至少是在刚开始设计系统的时候很少考虑到运维部署方面的需求。这样的复杂系统,在正式投入使用之后,常常会因为部署配置和运维等方面问题造成系统不稳定甚至出现异常。

根据整个系统的生命周期,运维占据的比例和时间远远大于开发设计的时间,当然是排除了一些夭折的系统。所以在开发设计系统的时候,需要加强对于运维方面的重视。一个好的系统,除了受到产品用户的欢迎之外,还需要得到运维人员的认可,才能让系统更加健康地发展。反之,如果一个系统运维性较差,那么运维人员和开发人员可能会逐渐形成隔阂,进而影响整个系统的服务。

结合自己在开发和运维方面的经历,以及多年被无数短信告警骚扰的烦恼,谈谈在开发设计一个系统的可运维性方面需要注意的问题。

一、配置和部署

复杂系统在开发上线及运维的过程中,肯定需要经历各个不同的阶段:开发测试、QA测试、上线前测试、上线、后续版本更新等。不同阶段和环境下,系统都需要有不同的配置,对于配置和部署,最好能做到以下几点:

  • 提供详细的配置和部署手册。

  • 提供适用典型场景的各个配置模板。

  • 提供灵活的关键参数可配置,以适应各类复杂的运行环境;尽可能提供在线动态修改的方式。

  • 提供自动化的部署方案或脚本,在异常情况下能自动重启恢复。

各类系统实际运维的过程中,经常会出现下面的情况,需要尽量排除:

  • 针对线上环境,系统未能提供足够的参数配置以适应其负载或优化服务。

  • 系统提供了足够多的灵活可配置的参数,但未针对线上环境进行优化配置。

  • 系统程序写死了配置目录路径等部分参数。

二、监控告警

一个复杂系统在实际运行过程中,难免会出现各类无法预见的问题。为了让系统在这种异常环境下还能提供稳健的服务,除了系统设计的容错和健壮性之外,还需要的是无处不在的监控和及时的告警。

类似天网的监控

复杂系统至少需要监控:

  • 系统整体服务的可用性、稳定性和性能指标。

  • 外部依赖服务的可用性和稳定性;若外部依赖服务影响自身服务的性能指标,需要对外部依赖服务做好性能监控。

  • 系统内部各个模块的可用性、性能指标以及各模块衔接的连续性。

  • 系统异常日志的监控。

  • 系统后台线程的健康状态,这点很容易被忽略。

  • 系统部署所在服务器和网络的健康状态。

系统需要提供对各项监控内容的查询显示,以便运维人员能够随时了解系统的运行状态;此外,最好能够提供查询API,方面运维集成。

智能的告警策略

当一个复杂的系统出现问题时,需要及时报警通知到相关的运维人员。在告警策略设计时,需要考虑到:

  • 不同的告警等级,根据系统服务异常的原因和影响的范围,划分为不同等级并便指导不同的告警策略。

  • 多样的告警方式,至少支持IM、邮件和手机短信的三种方式告警。

  • 不同层级的告警接收人员。

告警等级

描述

告警方式和策略

告警接收人员

事故级

系统整体服务不可用或异常,造成业务损失

IM、邮件和手机短信;持续短间隔告警

运维、开发和产品业务,以及各自部门领导

故障级

系统服务不稳定,未对业务造成明显影响

IM、邮件和手机短信;持续告警

运维、开发,以及各自负责人

异常级

故障前兆,系统可能在不久将来出现故障

IM、邮件;固定周期告警

运维和开发人员

缺陷级

系统已知的缺陷,目前不会对整体服务产生影响

邮件;当系统触发缺陷时告警

运维或开发人员

告警程序设计上,高等级的告警需要被优先处理,不能因为低等级告警过多而造成高等级告警被延迟。同时需要支持对同类告警的暂停报警功能(暂停一段时间后自动恢复监控报警),便于运维人员计划性的维护操作。

告警内容的可读性,对于运维人员也非常重要,特别是手机短信告警的内容,应该能够让运维人员马上定位到是哪个服务器所在的服务出现了哪类问题;最恼人的告警短信是各个环境系统都是相同的内容: xx服务出现异常,请检查邮件和log 。

设计良好的系统,需要有接入统一的报警监控中心的能力。

三、故障处理

一个复杂系统需要提供良好的故障处理机制,包括故障预见、故障现场保留、故障智能处理等。

故障预见

系统在运行过程中,对其利用的资源和自身的运行状态做好监控,如果预见系统可能出现不稳定等情况,需要加以处理和告警。系统可预见的故障可能有:

  • 所处的服务器硬件资源利用率上升,不久将来会到达上限,需要及时告警。

  • 系统设计的有限制的资源的使用量将达到配置限额,需要及时告警。

  • 系统处理效率突然降低,及时告警。一个容错备份的分布式系统,需及时屏蔽处理效率地下的组件,用其它备份的组件代替。

  • 系统接收处理的请求量突升或突降,及时告警。

故障现场保留

当系统出现故障后,需要对故障现场做好保留,便于后续分析、处理和改进。故障现场保留的方式通常可以有:

  • 日志。最简单直接的方式,但在日志输出格式和内容方面,需要做好设计;既要保证对系统性能影响和资源占用足够小,又要保留足够的信息供运维人员和开发人员排查。

  • 性能和资源监控平台。详细记录服务器运行状态和各类资源的使用情况,可以了解故障发生时候的服务器硬件运行状态。

故障智能处理

一个复杂系统,必须要做到可容错和故障的自动处理及恢复。如果系统的可容错和故障自动恢复做得还不完善情况下,至少需要提供可人工运维处理的接口。最怕的是系统做了部分的故障自动处理,但处理机制有问题,并且没有提供有效的人工处理方式去解决,这个简直是运维人员的噩梦!一个系统在交付运维的时候,运维手册中必须包含各类故障的详细处理方式。

系统可容错和故障自动恢复,典型的场景有:

  • 当某个依赖的底层服务异常情况下,系统自动屏蔽依赖此服务的请求或通过升降级方式绕过异常底层服务;若不行,也必须在底层服务恢复正常后,系统能立即自动恢复。

  • 系统各个模块之间的容错性,包括部分模块异常或者模块衔接出现短暂问题,当问题解决后都需能立即恢复。

  • 包含多备份组件的系统,当少数备份组件出现异常时候,其它备份需要立即接管其服务,并能够自动恢复到正常状态。

  • 系统自动故障恢复,需要尽可能以代价小的方式来恢复,并做到整体资源可控。

当系统出现故障时,需要及时告警,通知运维和开发人员系统故障及对应的处理方式。如果故障自动恢复需要一定时间,恢复的进度也需要定期报告。

四、小结

一个可运维和方便运维的系统,不仅有助于运维人员快速掌握和上手运维,又能及时发现系统中可能存在的不稳定的异常的因素,从而促进整个系统更好更健康的发展壮大。系统的可运维性,不单单是系统上线之后要考虑的问题,而是要在系统设计之初就应该关注的一面,并且是贯穿到开发设计的各个阶段中的。

以上仅仅是个人对可运维系统的一点体会,希望以后能多多出现这样的系统,助更多的运维和开发人员脱离疲于奔命救火的苦海。

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区。

相关文章:
【推荐】 基于Redis+Kafka的首页曝光过滤方案
【推荐】 知物由学 | AI时代,那些黑客正在如何打磨他们的“利器”?(一)

转载于:https://www.cnblogs.com/163yun/p/9674268.html

如何开发一个可运维系统的一点体会相关推荐

  1. 储留香:一个智能运维系统就是一个中枢神经系统,我说的!

    简介: 运维系统可以像神经系统一样,首先,做到数据的统一汇总:其次,可以对数据进行识别筛选输出有效信息:再次,可以预先感知到异常风险,并进行有效规避.而日志服务SLS凭借出色的数据统一采集.智能分析告 ...

  2. 智能配置运维系统开发工具链

    背景 •任何场景内某宏观对象都可以通过配置系统去数据化, •例如:制造场景的产品系统 (需求.设计.开发.测试.维护等配置子系统合作运维) •软件是配置运维系统的大脑. •产品软件是制造商给客户开发的 ...

  3. 智能运维监管系统终端_城市轨道交通关键设备智能运维系统初步建构

    城市轨道交通中关键设备的诊断和智能运维管理系统可为城市轨道交通关键设备构建预测性维修体系和全员自主维修制度提供全面的技术支持.分析城市轨道交通关键设备智能运维系统的需求及其构建思路,分析结果表明,该系 ...

  4. 美团外卖自动化业务运维系统 - Alfred

    1背景 美团外卖业务在互联网行业是非常独特的,不仅流程复杂--从用户下单.商家接单到配送员接单.交付,而且压力和流量在午.晚高峰时段非常集中.同时,外卖业务的增长非常迅猛,自2013年11月上线到最近 ...

  5. 从零搭建一个自动化运维体系

    作者简介: 胥峰,著有畅销书<Linux运维最佳实践>.译著<DevOps:软件架构师行动指南>,资深运维专家,有 11 年运维经验,在业界颇具威望和影响力.2006 年毕业于 ...

  6. 一个初级运维工程师对于运维工作的一些浅显认知

    最近因为部门架构调整,之前工作做了交接,新的安排又没有确定,领导建议学习下JAVA开发,后续直接参与到研发工作中而不再负责运维工作.周围同事也都在说运维工作比较low,转研发会好一些.但是毕竟从毕业之 ...

  7. 自动化运维-----项目实战: 基于Ansible的云平台自动化运维系统

    文章目录 项目实战: 基于Ansible的云平台自动化运维系统 一.项目介绍 1.项目介绍 2.项目背景 二.项目环境搭建 1.项目目录的配置 2.远程服务器虚拟环境的配置 3.MySQL数据库配置 ...

  8. 如何设计大型集团一体化IT运维系统

    大型集团企业中,集团旗下各公司通常会独立建设数据中心以及一系列的IT运维系统. 随着IT技术的发展,运维需求越来越多样,运维系统的架构也越来越复杂,各公司分别独立建设运维系统的技术和成本要求越来越高, ...

  9. 【金猿案例展】某大型电机公司——水电机组智能运维系统建设

    昆仑数据案例 本项目由昆仑数据投递并参与"数据猿年度金猿策划活动--2021大数据产业创新服务企业榜单及奖项"评选. 数据智能产业创新服务媒体 --聚焦数智 · 改变商业 水力发电 ...

最新文章

  1. 点击文字弹出一个DIV层窗口代码
  2. 瞬间学会使用java中list的retainAll方法
  3. 高性能计算机系统及应用,高性能计算
  4. 全球及中国箱包市场需求前景与投资动态分析报告2022版
  5. 汇编逻辑运算指令笔记
  6. Apache Mahout:构建垃圾邮件过滤器服务器
  7. python怎么实现音乐快进_Python 超简单3行代码提取音乐高潮(附批量提取)
  8. 循环神经网络LSTM RNN回归:sin曲线预测
  9. MySQL新建存储过程出现:ERROR 1558 (HY000): Column count of mysql.proc is wrong. Expected 20, found 16. Create
  10. 怎样用sql语句复制表table1到表table2的同时复制主键
  11. Java.I/O流编程一览笔录
  12. MacOS 利用keka.app压缩工具制作dmg文件
  13. 【Rust日报】2022-09-13 Stabilize GAT
  14. C# 从零开始写 SharpDx 应用 初始化dx修改颜色
  15. 基于Patachmatch的stereo matching笔记(三):《PatchmatchNet》
  16. 证券行业智慧化转型思考
  17. ISP(图像信号处理)之——坏点校正
  18. 如何用c语言串口通讯,串口通信入门
  19. 编码修养系列---提升性能必学篇
  20. PaddleClas蝴蝶分类

热门文章

  1. IntelliJ IDEA 配置文件位置
  2. 在Linux中su和sudo区别,Linux中su和sudo的用法和区别
  3. C 常用新特性(上)
  4. 计算机驱动空间不够,Win8.1系统如何释放驱动器空间解决可用空间不足问题
  5. 交易猫鸿蒙空间,回收站是指
  6. c语言输出星期几的英语表达,C语言程序设计: 输入年月日 然后输出是星期几...
  7. 第18次csp认证 201912-2 回收站选址(C++)
  8. 光纤收发器具体是怎么分类的?
  9. 光模块常见故障与使用注意事项详解
  10. 以太网交换机的概念,网络接口和主要特点