架构设计从这5点考虑,能帮后期运维很大忙!
周梁伟|云信 IM即时通讯云服务器端开发负责人·
1.良好的系统架构是顺利开展运维工作的前提
在做系统架构设计时需要充分考虑功能模块的耦合性,尽量做到业务功能的独立解耦,降低互相之间的依赖;最差的情况就是所有的服务功能集中在一个进程中,一个挂,全部挂,一个升级全部受影响,这种系统设计对运维工作来说就是灾难;做好功能模块的划分和隔离,可以降低故障的影响范围,在升级等日常运维工作中也可以做更好的规划;
2.架构设计时将HA作为必须满足的非功能性指标
任何一个系统都会存在故障的可能,程序猿写的代码即时再好也有出bug的时候,即时程序不出bug,也还是逃不过机器宕机后者断电断网等各种意外情况的发生;所以设计者需要善于找到系统中存在的单点,并解决这些单点;高可用的特性并不是说要求程序一定不能挂,而是说从架构上允许故障的发生,任何一个节点的故障只能影响系统的整体处理性能,但是不会造成业务不可用;具体来说,如果是Web类的应用,可以使用Nginx等反向代理工具来搭建多个后端的业务集群,并在出口上做Keepalived等高可用的方案,对于一般的应用,设计时需要保证多实例可同时服务,多实例功能相互对等,任何一个实例的停服,其业务请求可以被其他实例来分担;做好了HA架构,我们在运维工作时才能更加从容,因为当运维报警发生时,我们知道当前业务处理能力虽然下降了,但是整个业务并不是不可用的状态,对用户来说不会产生直接的影响,运维人员可以从容得恢复故障节点即可;同时良好的HA架构也有助于业务扩张时的增强系统扩展性;
3.业务系统给运维系统提供更加友好的接口
运维平台的一个重要工作是从业务系统中提取到准确的指标,并针对这些指标来做线上的监控和预警;更加了解业务系统的还是开发人员,而非运维人员,所以开发人员需要在设计功能时同时兼顾到运维的需求,充分设计哪些指标需要被暴露出来,常见的比如当前系统的TPS(每秒的处理能力),MRT(平均响应时间),系统的能力上限等,再结合如JVM内存使用情况,GC情况等基础数据,运维平台就能做出更加合理的监控支持,有了这些监控数据之后再制定更加科学的预警,可以在故障实际发生之前就做出预警(比如TPS达到系统容量的80%了),让运维人员提前做出扩容等应对,而不是等到功能不可用了才报警;从技术实现上来说,业务系统向外暴露接口的方式就非常多了,比如JAVA程序可以通过JMX来实现,通用的进程可以使用隐藏的Http接口等方式来实现;如果运维平台使用的是Ganglia等开源平台,也可以使用对应的客户端Agent来向运维平台暴露数据;
4.规范的日志输出
很多开发者在实现业务系统的时候往往会忽略日志的作用,或者只把日志当做偶尔查查问问的工具,日志的输出内容往往是只有人来读取的非格式化内容;其实除了定位问题之外,日志还可以帮助我们做更多的事情,我们可以设计一个程序友好的日志格式,比如输出JSON格式的日志来记录每个业务请求的执行情况,如请求参数,处理时间和响应码,失败信息等;有了规范的日志之后,可以通过脚本的方式将日志中的信息提取成指标输入到运维平台中,可以对业务系统当前处理的成功率,响应时间等做更加细粒度监控和报警;
5.善于利用功能测试框架
很多公司对开发人员的代码质量要求都很高,会要求在QA测试之前做到单元测试等工作,有些QA部门也会利用一些标准化的工具对线上流程做回归测试,比如Junit或者TestNG等;其实我们也可以充分利用这些资源来做线上的运维监控;我们退一万步来说,如果一个系统没有任何运维预警,那么如果线上发现问题的会是谁?这一定是用户,那么能不能有一个机器人用户来帮我们提前发现问题呢?这里我们就可以利用功能测试的成果了,将用作线上回归的TestNG代码用程序自动化的方式定期执行起来,并解析执行的结果,如果回归测试失败就立刻发报警出来,这种看起来很土的方法在实际操作中。
架构设计从这5点考虑,能帮后期运维很大忙!相关推荐
- 架构师2月刊发布:解读Android、高效运维、API设计方法论
卷首语(InfoQ总编辑 崔康) \\ 又到年根,作为一位技术媒体人开始频繁拜访各家公司,总结过去,面向未来,在这里把发现的一些新趋势和自己的感受梳理一下,就不透露公司名称了,供大家参考. \\ 公有 ...
- java架构设计理解(一)
个人学习资源免费分享网站:http://xiaocaoshare.com/ 1.关于单机架构.集群架构.分布式架构理解: 单机架构:所有的代码都写在一个项目中,项目部署在一台服务器上 集群架构:就是单 ...
- 如何实现高容量大并发数据库服务 | 数据库分布式架构设计
袋鼠学院和优云.阿里云联合举办的沙龙结束之后,总是有小伙伴们来问PPT内容,想要进一步了解Topic内容.(哦,对了对了,竟然还有小伙伴专门冲着袋鼠云去听沙龙,感动cry~~) 千呼万唤,忙成狗的袋鼠 ...
- 自学架构设计?帮你总结了 4 个方法
从编程思维到架构思维的升级,是工作 3.5 年的程序员遇到的第一个槛,特别是当你准备晋升考核时. 我有个哥们,技术和业务都很不错,腾讯 T2.3 升 T3.1,就卡在了架构设计这部分. 架构这个事儿, ...
- 架构设计中的方法学(五)
在定义了架构愿景之后,团队中的所有人员应该对待开发的软件有一定的了解了.但是,面对一个庞大的软件系统,接下来要做些什么呢?分而治之的思想是计算机领域非常重要的思想,因此我们也从这里开始入手. 要进行应 ...
- 快手春节红包背后,高并发存储架构设计
导语 | 2020年春节,腾讯云文件存储(CFS)在通过了预演层层压测的选拔后成为快手广告推荐业务的护旗手,以100%的可用性护航了快手春节红包活动.本文是腾讯云高级工程师陈宏亮在「云加社区沙龙onl ...
- 云盘数据库设计mysql_一份最实用的云数据库架构设计与实践指南(内含PPT)
原标题:一份最实用的云数据库架构设计与实践指南(内含PPT) Tips:点击文末[阅读原文]或登陆云盘:http://pan.baidu.com/s/1bo9Ni7l 即可下载5月21日DBAplus ...
- java基础巩固-宇宙第一AiYWM:为了维持生计,大数据Hadoop之HDFS分布式文件系统(HDFS读写流程、主从集群两种问题“单点故障”及“压力过大内存受限”、HDFS的架构设计)~整起
Hadoop之HDFS 目录 一.大数据 二.HADOOP 三.HDFS 1.HDFS基本概念 2.HDFS的架构设计 3.HDFS自己对于上面两种数据持久化技术的实现: 4.HDFS读写流程 5.H ...
- 南方地区数据中心节能架构设计——以深圳地区为例
摘 要:大数据.云计算.5G等信息技术快速发展,数据中心的建设需求增加.能耗.能效是数据中心建设和运营的核心要点,也是制约数据中心行业发展的关键因素.围绕影响数据中心能耗的主要因素,从数据中心供电.制 ...
最新文章
- 敏捷个人:激励 2011-11-26期
- UVA 11578 - Situp Benches(dp)
- CTFshow 文件上传 web165
- windows中search driver的顺序
- 区块链系统之《一种基于区块链的云数据共享方法》
- 基因分子生物学(1)-基因常识与DNA常识
- 0001-Hello world(第一弹)
- Istio的网络API解释了
- Android异步处理:Handler+Looper+MessageQueue深入详解
- IoT 打响安防保卫战!
- TensorFlow 资源大全中文版
- django 之模板层
- Wysistat与Webtrends比较
- 2010年最怪异的25个面试问题,你能回答吗?
- pandas笔记(3)——DataFrame数据查看,缺失值,异常值,重复值预处理
- Android根据输入法的状态隐藏和关闭输入法
- C1128 和C4503
- 如何给Mac挑选外接显示器?苹果外接显示器选购指南
- StarUML for Mac(UML软件建模器)
- 机器学习——变分推断
热门文章
- C#设置标记方法等为否决的不可用
- SDUT 1265-马停下过河卒(DFS)
- python实现函数ifodd_09-Python笔记整理(函数)
- Origin进行多元线性回归、指数拟合和非线性曲面拟合
- reverse函数实现vector变量的翻转
- 计算机视觉--Python实现人体姿态估计
- 集成电路设计软件Tanner 16.30安装教程(附安装包)
- java 内部类异常_Java笔记(三 内部类、异常、编程规范)
- 医疗器械软件网络安全法规和标准概述(附所有标准)
- java程序设计颜志军_JSP 自定义标签之一 简单实例