系统的稳定性建设

  静儿来面试新美大这个部门的时候,HR跟我说我们是最核心的部门,没有之一。我以为这是句夸张的招人用的玩笑。结果来了发现,额,这句话是很公正客观的。现在上上下下组成了一支牛人团队,请来了其他部门很多资深高手进行封闭开发,确保我们系统的稳定性。

  选择一份工作,必然要考虑的是:我们是做基础设施的,还是做平台的,还是做核心链路的。业务方面讲究领域驱动,各个领域目标也不同。

  基础设施最重要的指标是稳定性、性能、扩展性。平台讲究多业务,通用性,人效。所谓人效就是我这个平台有些自动化的东西不能满足需求,需要靠手工来完成,这样开发人员的人效就低。如果一个平台需要输入的东西很多,而且还需要多步骤审核,审核不够自动,那么输入人效低,运营的人效也低。如果平台的用户是外部用户,他们输入繁琐,这个用漏斗分析法来分析,得出来的流失率会高。

checklist:

  核心链路最重要的是稳定性。如果拿到一手烂代码,到了非重构不可的程度。那么重构之前要弄明白几个问题:原系统TOP5的主要问题是哪些?我重构了就能解决这些问题吗?重构之后怎样保证很长一段时间内不需要再次大规模重构?

  对于任何一个系统,都要设计一个checklist。比如比较重要的:

大分类

小分类

check项目

基础组件依赖

缓存

挂了是否可用、跟其他系统共用?

MYSQL

跟其他系统共用、慢查询、大事务、连接池监控状况、大表、读写分离、主从延时敏感?

MQ

挂了是否可用、依赖消息的发送顺序?

日志

建议应用日志不超过磁盘的30%,使用日志组件的性能和稳定性?

其他组件,如databus

是否有监控?是否单点?自动fail over?

依赖内外部系统

下游系统1

timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?

下游系统2

timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?

被依赖内外部系统

上游系统1

是否限流?timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?

上游系统2

是否限流? timeout配置?重试次数?满足幂等性?TP99?挂掉后是否稳定?

核心接口性能

核心接口1

QPS、TP99、可用性?

核心接口2

QPS、TP99、可用性?

JVM

基本配置

堆栈配置、线程使用的监控报警、fullgc异常、无界队列、批量更新cache?

容量预估

高峰期CPU load、高峰期内存、高峰期磁盘IO、高峰期网卡、是否有两到三倍冗余?

组件和版本:

  维护系统稳定性要注意选择合适组件和版本。

  比如Apache Tomcat被纰漏有高危漏洞。当在应用配置文件web.xml中显式的配置DefaultServlet的readonly属性值为false时,恶意用户能够通过PUT请求方法上传文件,如果上传的是可执行文件,将会导致远程命令被执行。

  jackson-databind2.9版本前有反序列化漏洞,它可能语序未经身份验证的用户通过将而已制作的输入发送到ObjectMapper的readValue方法来执行代码。如果服务器反序列化了不安全的数据,能造成服务器执行恶意代码。建议升级到2.9.2以上。

  比如Apache Struts发布S2-054和S2-055安全公告,两个漏洞皆是因为调用了有问题的组件而产生的漏洞。

  S2-054漏洞由于Apache Struts REST插件使用了过时的JSON-lib库,这个库很容易受到攻击,攻击者可以构造特制的JSON恶意请求造成DOS攻击。

  由于Apache Struts调用了存在反序列化漏洞的Jackson JSON库,导致了反序列化漏洞。

 外部依赖:

  外部依赖,比如我们的下游系统、或者缓存,MQ等等。都需要在系统里处理好它们出问题的情况。测试方法是:将这些依赖的端口禁用,流量打过来后观察系统。系统线程数有没有飙升,超时是否合理,有没有异步化,有没有熔断?最重要的是:事务里不允许有外部依赖。

跑题时间:

  幸福是件很简单的事情:幸福是可以轻快的又跑又跳,可以边走路边跳起来够到路边的树叶;幸福是无论小鲜肉受了伤还是熟睡中,只要我拥抱他,他就会紧紧的搂住我。幸福是下班很晚,回家发现男神还在客厅等我。

  周四男神发消息祝我生日快乐,说给我准备了棒棒糖。我抬头对周围的同事说:“爷爷的,我的生日是昨天。”同事说:“能想起来就不错,别管哪天想起来。”回家才发现棒棒糖是小鲜肉在幼儿园得到的礼物,拿回来送给妈妈的。我笑着说男神真无耻。

  二十几岁的时候,安逸到过段时间上班会换一条远的路线,看到不同的风景会欣喜。年轻是用来挥霍的,愿意去接受无法预估和掌控的无限可能。现在每走一步要做好规划,沿着设定的道路来走。就像二十几岁的时候想穿什么衣服都可以,而再大一点就需要讲究衣品。什么阶段做什么事情。

  做程序媛其实本身就是是很幸福的。记得大学的时候有个男孩表白,静儿没有同意。后来听别人说有他们宿舍那几个男孩子都很喜欢静儿。本来也没放在心上,后来毕业聚会的时候,其中一个男孩喝醉了拉着静儿不放。静儿才开始想这件奇怪的事情,因为静儿和他们很少接触的。后来想明白了:他们喜欢的不是静儿本人,是那个男孩子口中的静儿。不论在什么情况下,都把别人说的非常好,这不是静儿有多好,而只能说明那个男孩子的人品非常好。

  所以静儿最大的幸福是周围都是这样一群单纯善良的程序员。可能当初和谁在一起,结果都会不错。只是爱是一种天时地利的迷信。一起经历过的回忆和青春,别人是代替不了的。我问男神我在他心中长得到底是什么样子。男神只是说:一直就是当初第一次见到我的样子。终于明白为什么一些人可以接受一起变老,而不能接受第一次见面对方就不再年轻。对于我和男神,时间永远定格在了20岁我们的初见。选对人最重要的两方面而已:健康和人品。身怀感恩之心,一起创造岁月的童话。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安恒信息

邮箱安全服务专题 | Web漏洞是表象,代码容错不足是本质

上一期我们谈到了邮箱安全扫描部分的网络和主机安全检测,狭隘的讲这类漏洞是属于静态漏洞,只要我们有心,及时更新策略库,扫描发现和修补,可以把风险控制在一定的安全范...

2588
来自专栏安智客

TEE相关专利信息(上篇,涵盖TEE各个方面)

[001] [发明公布] 可扩展的可信用户接口、方法和电子设备 申请公布号:CN107066888A 申请公布日:2017.08.18 申请号:2017102...

2646
来自专栏腾讯云数据库(TencentDB)

微信小游戏流水过亿的技术揭秘 腾讯云数据库MongoDB攻略篇

腾讯云已为多个爆款微信小游戏提供服务,腾讯云数据库团队在多年MongoDB运营&支持微信小游戏服务经验总结,MongoDB产品经理李晓慧在7月26日在厦门举行的...

1.1K57
来自专栏杨建荣的学习笔记

胖客户端程序总结(r3笔记44天)

这周基本功能都花在了胖客户端程序上,自己考虑做一个应用,个人比较倾向于胖客户端程序,主要考虑了一下几种。 spring richclient 开源的,自己之前...

3217
来自专栏Python与爬虫

从爬虫角度来说下360快视频事件

360快视频事件 最开始好像是东方华灯宴的视频被发现被盗用,然后众用户排查发现大量B站视频被快视频盗用,连用户和评论也大量照搬,并有很多B站用户发现使用B站的用...

32913
来自专栏FreeBuf

还在使用TrueCrypt?当心这两个危险漏洞

著名安全专家James Forshaw发现了TrueCrypt中的两个重要漏洞,这两个漏洞存在于TrueCrypt安装在Windows系统上的驱动程序中。此外,...

1716
来自专栏Flutter入门到实战

从内涵段子被下架、快手禁用评论探讨其背后的技术细节

由于后台接口没有返回数据了,界面上自然都是空白,你看内涵段子上面的所有的列表的item都显示的是同一个View,就是下面的这个声明。其实只要把所有的item替换...

772
来自专栏Android 开发者

持续提高 Android 应用的安全性与性能

2115
来自专栏FreeBuf

宜信防火墙自动化运维之路

做了多年安全运维的我一直想出点干货,经常看众大神分享经验,仰望的同时总是想有一天自己也能贡献点什么。在宜信的这些年工作了许久,经验也积攒了一些,不敢说干货多硬,...

993
来自专栏Java技术

Redis 深度历险:核心原理与应用实践!

Redis 是如今互联网技术架构中,使用最广泛的缓存。支持复杂的数据结构,支持持久化,支持主从集群,支持高可用,支持较大的value存储...

1601

扫码关注云+社区