静儿来面试新美大这个部门的时候,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岁我们的初见。选对人最重要的两方面而已:健康和人品。身怀感恩之心,一起创造岁月的童话。