周梁伟|云信 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点考虑,能帮后期运维很大忙!相关推荐

  1. 架构师2月刊发布:解读Android、高效运维、API设计方法论

    卷首语(InfoQ总编辑 崔康) \\ 又到年根,作为一位技术媒体人开始频繁拜访各家公司,总结过去,面向未来,在这里把发现的一些新趋势和自己的感受梳理一下,就不透露公司名称了,供大家参考. \\ 公有 ...

  2. java架构设计理解(一)

    个人学习资源免费分享网站:http://xiaocaoshare.com/ 1.关于单机架构.集群架构.分布式架构理解: 单机架构:所有的代码都写在一个项目中,项目部署在一台服务器上 集群架构:就是单 ...

  3. 如何实现高容量大并发数据库服务 | 数据库分布式架构设计

    袋鼠学院和优云.阿里云联合举办的沙龙结束之后,总是有小伙伴们来问PPT内容,想要进一步了解Topic内容.(哦,对了对了,竟然还有小伙伴专门冲着袋鼠云去听沙龙,感动cry~~) 千呼万唤,忙成狗的袋鼠 ...

  4. 自学架构设计?帮你总结了 4 个方法

    从编程思维到架构思维的升级,是工作 3.5 年的程序员遇到的第一个槛,特别是当你准备晋升考核时. 我有个哥们,技术和业务都很不错,腾讯 T2.3 升 T3.1,就卡在了架构设计这部分. 架构这个事儿, ...

  5. 架构设计中的方法学(五)

    在定义了架构愿景之后,团队中的所有人员应该对待开发的软件有一定的了解了.但是,面对一个庞大的软件系统,接下来要做些什么呢?分而治之的思想是计算机领域非常重要的思想,因此我们也从这里开始入手. 要进行应 ...

  6. 快手春节红包背后,高并发存储架构设计

    导语 | 2020年春节,腾讯云文件存储(CFS)在通过了预演层层压测的选拔后成为快手广告推荐业务的护旗手,以100%的可用性护航了快手春节红包活动.本文是腾讯云高级工程师陈宏亮在「云加社区沙龙onl ...

  7. 云盘数据库设计mysql_一份最实用的云数据库架构设计与实践指南(内含PPT)

    原标题:一份最实用的云数据库架构设计与实践指南(内含PPT) Tips:点击文末[阅读原文]或登陆云盘:http://pan.baidu.com/s/1bo9Ni7l 即可下载5月21日DBAplus ...

  8. java基础巩固-宇宙第一AiYWM:为了维持生计,大数据Hadoop之HDFS分布式文件系统(HDFS读写流程、主从集群两种问题“单点故障”及“压力过大内存受限”、HDFS的架构设计)~整起

    Hadoop之HDFS 目录 一.大数据 二.HADOOP 三.HDFS 1.HDFS基本概念 2.HDFS的架构设计 3.HDFS自己对于上面两种数据持久化技术的实现: 4.HDFS读写流程 5.H ...

  9. 南方地区数据中心节能架构设计——以深圳地区为例

    摘 要:大数据.云计算.5G等信息技术快速发展,数据中心的建设需求增加.能耗.能效是数据中心建设和运营的核心要点,也是制约数据中心行业发展的关键因素.围绕影响数据中心能耗的主要因素,从数据中心供电.制 ...

最新文章

  1. 敏捷个人:激励   2011-11-26期
  2. UVA 11578 - Situp Benches(dp)
  3. CTFshow 文件上传 web165
  4. windows中search driver的顺序
  5. 区块链系统之《一种基于区块链的云数据共享方法》
  6. 基因分子生物学(1)-基因常识与DNA常识
  7. 0001-Hello world(第一弹)
  8. Istio的网络API解释了
  9. Android异步处理:Handler+Looper+MessageQueue深入详解
  10. IoT 打响安防保卫战!
  11. TensorFlow 资源大全中文版
  12. django 之模板层
  13. Wysistat与Webtrends比较
  14. 2010年最怪异的25个面试问题,你能回答吗?
  15. pandas笔记(3)——DataFrame数据查看,缺失值,异常值,重复值预处理
  16. Android根据输入法的状态隐藏和关闭输入法
  17. C1128 和C4503
  18. 如何给Mac挑选外接显示器?苹果外接显示器选购指南
  19. StarUML for Mac(UML软件建模器)
  20. 机器学习——变分推断

热门文章

  1. C#设置标记方法等为否决的不可用
  2. SDUT 1265-马停下过河卒(DFS)
  3. python实现函数ifodd_09-Python笔记整理(函数)
  4. Origin进行多元线性回归、指数拟合和非线性曲面拟合
  5. reverse函数实现vector变量的翻转
  6. 计算机视觉--Python实现人体姿态估计
  7. 集成电路设计软件Tanner 16.30安装教程(附安装包)
  8. java 内部类异常_Java笔记(三 内部类、异常、编程规范)
  9. 医疗器械软件网络安全法规和标准概述(附所有标准)
  10. java程序设计颜志军_JSP 自定义标签之一 简单实例