如何开发一个可运维系统的一点体会

本文来自网易云社区


作者:施勇

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

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

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


一、配置和部署

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

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

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

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

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


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

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

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

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


二、监控告警

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


类似天网的监控

复杂系统至少需要监控:


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

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

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

  • 系统异常日志的监控。

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

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


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


智能的告警策略

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


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

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

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


告警等级

描述

告警方式和策略

告警接收人员

事故级

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

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

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

故障级

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

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

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

异常级

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

IM、邮件;固定周期告警

运维和开发人员

缺陷级

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

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

运维或开发人员

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

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

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


三、故障处理

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


故障预见

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


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

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

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

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


故障现场保留

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


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

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


故障智能处理

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

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


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

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

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

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


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


四、小结

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

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


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

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


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程勘察设计收费标准2002修订版_全过程工程咨询收费模式超全解析

国内全过程工程咨询试点方案中收费标准比较全过程工程咨询是近两年提出的新的工程建设组织模式,它的管理机制、运行方式还处于探索阶段。各试点省、市相继发布了全过程工程咨询试点工作方案,对全过程工程咨询收费问题进行了积极探索。笔者整理了部分省市…

Java / Web项目中的NPM模块Browser-Sync

Browser-Sync是一个方便的基于Node.js的NPM模块,可用于更快的Web开发。 浏览器同步可在许多设备之间同步文件更改和交互。 最重要的功能是实时重新加载。 我们也可以在Java / Web项目中使用Browser-Sync。 Cagatay Civici创造了一个伟大的 视频教程如何在PrimeFace…

设置vs2008代码区的背景色

编写程序、调试代码时,是不是感觉文字的白色背景有些刺眼呢?vs2008 给我们提供了改变背景色的功能。 依次展开:工具->选项->环境->字体和颜色,可以看到下图所示设置框。 首先,在图中标记的“显示项”一栏选择…

bzoj3277 串 (后缀数组+二分答案+ST表)

常见操作:先把所有串都连到一起,但中间加上一个特殊的符号(不能在原串中/出现过)作为分割 由于全部的子串就等于所有后缀的所有前缀,那我们对于每一个后缀,去求一个最长的前缀,来满足这个前缀在…

微型计算机实验报告温度控制,单片机、可编程控制器实验教学大纲.doc

单片机、可编程控制器实验教学大纲.doc单片机、可编程控制器实验教学大纲 一、实验课的性质与任务 本实验课是在学生学完单片机原理与应用课程之后,为巩固提高所学知识,而安排的一次综合设计实验。通过本实验使学生将所学的单片机硬件结构、工作原理、编…

电脑word在哪_Word论文里的公式怎么编辑?这4个小工具帮你一分钟搞定!

临近毕业时,不少小可爱都在为论文头秃!搜索并下载论文,论文排版,论文查重,这些我们之前已经写过相关文章啦!Tools指南推荐搜索论文论文排版论文查重论文网站今天,再来给大家分享一个写论文时经常…

RTree算法及介绍

空间索引是对存储在介质上的数据位置信息的描述,用来提高系统对数据获取的效率。GIS涉及的各种海量复杂数据存储于外存,如果对磁盘上的数据的位置不加以记录和组织,每查询一个数据项都要扫描整个数据文件,则这种访问磁盘的代价将严…

文件桌面跟计算机同步删除吗,电脑里桌面文件被不慎覆盖了如何恢?

2007-10-30如何恢复桌面图标不小心将某个程序的桌面Windows桌面图标是启动计算机一定程序或文档的开关,Windows桌面的图标分为两类:快捷图标和默认图标。快捷图标主要由应用程序安装时自动创建或计算机使用者人为创建,用一个从左下向右上斜指的小箭头来标…

win10易升_微软Win10版本20H2正式版官方ISO镜像下载大全_windows10_Windows系列_操作系统...

10月21日,微软推送了 Windows 10 十月更新版 20H2 系统更新。我个人认为微软 Win10 版本 20H2 正式版官方 ISO 镜像下载大全:此次系统版本(20H2)更新相对于上一版 20H1 正式版,这次十月更新的 20H2 正式版可能是很棒的一个版本,因…

乐观锁的两种实现方式

什么场景下需要使用锁? 在多节点部署或者多线程执行时,同一个时间可能有多个线程更新相同数据,产生冲突,这就是并发问题。这样的情况下会出现以下问题:更新丢失:一个事务更新数据后,被另一个更新…

c++编译时候fatal error C1075: end of file found before the left brace '{' at

出现 C:\Users\acer\Downloads\Cpp2.cpp(591) : fatal error C1075: end of file found before the left brace { at C:\Users\acer\Downloads\Cpp2.cpp(357) was matched 执行 cl.exe 时出错. 谁知道怎么求改?? 答: 程序中 {} 不是成对出现…

Cloud Foundry Java客户端–流事件

Cloud Foundry Java客户端提供了基于Java的绑定,用于与正在运行的Cloud Foundry实例进行交互。 这个项目的优点之一是它采用了基于Reactive Stream的API作为方法签名,特别是使用Reactor实现,这在使用流数据时特别有用。 在这篇文章中&#x…

vue导入html登陆页,Vue 实现 登陆后打开主页面(登陆组件 + 主页面组件)

本次演示,项目所需iview,router首先在 views 目录 新建 两个 组件 ( login.vue ,index.vue )login.vue登录登 录export default {methods: {login() {// 假设登陆成功,则跳转到 index 组件this.$router.replace(/index);}}}backgr…

设置窗口大小

window.resizeTo(screen.availWidth, screen.availHeight);转载于:https://www.cnblogs.com/7q4w1e/p/9680037.html

android IO流_Flutter实战经验(十):打包和发布到 Android 平台

本文适合ios开发者不清楚Android上架机制学习。在一般的开发过程中,我们可以使用 flutter run 命令,或者 IntelliJ 工具栏中的 Run 和 Debug 来测试 app。这时候,Flutter 默认会为我们构建 app 的调试版本。当想要发布 app 时,比如…

西安单招学校学计算机软件的,西北大学软件职业技术学院单招

西北大学肇始于1902年的陕西大学堂和京师大学堂速成科仕学馆,1912年始称西北大学,1978年被确定为全国重点大学。现为国家“211工程”建设院校、教育部与陕西省共建高校。在长期的办学历程中,西北大学形成了“发扬民族精神,融合世界…

autojs遍历当前页面所有控件_PyQT5控件:容器(Containers Widgets)

QWidget主窗体容器 在Qt设计师中新建文件,选择QWidget QWidget属性 enabled 窗口部件是否有效geometry 窗口部件相对于其父窗口的几何图形,并排除窗口框架sizePolicy 窗口部件的默认布局行为minimumSize 窗口部部件的最小尺寸(以像素为单位&a…

JAVA 技术类分享(一)

一、dubbo dubbo原理模型? 主要是注册中心,服务提供者,服务消费者,监控中心,其中后者可有可无。1.服务端,在注册中心注册自己提供的服务,并暴露端口,2.客户端在注册中心注册&#xf…

计算机的就业指导论文,计算机就业指导期刊文章参考文献 计算机就业指导专著类参考文献有哪些...

为论文写作提供【100个】计算机就业指导期刊文章参考文献,海量计算机就业指导相关论文参考文献,包括期刊,专著,外文参考文献,解决您的计算机就业指导专著类参考文献有哪些的相关难题!一、计算机就业指导论文参考文献范文[1]“基于就业岗位需求”的专业课程体系建设的…

junit rule_使用JUnit的ExpectedException和@Rule测试自定义异常

junit rule异常测试 为什么要测试异常流? 就像所有代码一样,测试覆盖率在代码和应该产生的业务功能之间写了一个合同,从而为您提供了代码的有效文档 ,以及可以尽早且经常强调功能的附加功能。 我不会介绍测试的许多好处&#xff0…