圣诞夜的记录

过了圣诞,一年的时间也结束。这一年,经历了很多事情,也学到了很多,也有很多遗憾。

过年后回到上海,完成了人生的第一次跳槽,感觉还算顺利。跳槽的目的是成为mysql dba,之前是OP,也做一些DBA的事情。潜意识中,觉得DBA更有意思一点,更有适合我口味。很多数据库的很多技术对我来说是一个谜,很吸引我,也想花时间弄明白。

跳槽需要表现出自己的能力。我的简历也写得很简单,就简单介绍我做过哪些事情,还有博客地址以及联系方式。面试我也准备了一下,就回顾了一下我在上家公司干了什么事情,学过什么东西。最基本的,我一个个的回顾我配置过mysql什么参数,调整过什么参数,踩过什么坑。之后review了我之前看过的几本书,《mysql reference manual》《high performance mysql》《mysql trobleshooting》这三本书。

工作经验方面,从去年三月份开始工作,因而工作经验谈不上,也没做过什么大的项目。另外,工作中就管理了20来台mysql服务器和几十台web服务器,而且也没有高并发高流量的压力,服务都很稳定。面试过程中,我也尝试引导面试问我一些我熟悉的数据库和mysql的基础知识以及一些技术细节,我感觉自己比较擅长这些。数据库运维多少还有一点处理故障的经验,而自动化开发几乎是空白。后来经理电话面试了一堆的redis和mc的问题,也不是很熟悉,简单介绍一下我熟悉的东西和twemproxy方面的(冥冥中注定做一个nosql dba)。

入职后,我也面试了一些来应聘的人,也是问一些工作工作中常用的技能,还有我们团队所需的技术空缺。比如,sql优化、自动化开发、数据库相关的性能优化、mysql/innodb的内部原理,新的技术了解。作为面试官也有一定的压力,首先要表现出应有的技术能力;其次,要理解面试人表达的内容,每个人的思路差别很大。

在干了2个月的mysql dba的事情后,一个负责redis的同事离职了,这样我就接盘redis了。工作交接的时候,已经有200多个redis实例。最大的难题是弄清楚这些业务怎么使用redis的,个人也不大擅长和别人沟通,到现在我还没搞清楚一些redis实例是干什么用的。

redis是data structure server,而且几乎是单进程的工作方式。因而需要redis开发了解数据结构和数据操作的算法时间复杂度,否则一大堆的性能问题,比如redis的进程cpu经常跑到了100%。制定reids开发规范,优化redis的使用,帮助开发设计数据结构是在这后半年的主要工作,开发支持工作占了每天的大量时间。

通常说nosql是schema-less/free的,开发可以更灵活使用db。schema设计的依然很重要,而且nosq的使用对开发人员的能力要求反而更高了,需要开发人员去了解存储模型和数据模型。

在这里,学到做多的东西就是自动化方面的知识。配置标准化和自动化、服务自发现以及监控自动化、还有运维平台的开发都是我第一份工作中没有干过的(汗颜,起码做了一年的OP)。到现在,多多少少参与了自动化平台的设计,也开发了几个小工具和zabbix服务自发现以及监控脚本、学到的东西真的很多。标准化、分类、解耦是运维自动化的基础,深以为然。

而最近两个月的时间里,主要是主导了一个db(mysql、redis、memcache、twemproxy)的监控系统开发。第一次当产品经理PM,真是难。首先,要设计一个有用的东西,充分挖掘日志数据的价值;其次,需要一定的领导能力和项目管理经验。这些方面只能说一塌糊涂,起初领导说干什么,我就让开发干什么。工作经验少和资历太浅,不好意思对开发提各种需求,让他们自由发挥也许比我想的更好。和开发沟通时,以态度更谦卑学习,提出的需求更加合理,而不让开发(一个spark开发和一个前端开发)排斥我这个PM。

db监控系统后端是我开发的,类似于tcpdump抓包,然后按照redis、mysql、memcache协议解析出tcp包数据段包含的query。数据进入kafka,之后spark stream computing完成db响应延迟、请求来源等数据分析共组。在这个项目中也接触了一下flume、kafka、spark、hbase,对我来说都是很新鲜的东西,也增长了Distribution System、Stream Computing、Service Tracing、Data Architecture方面的知识。

公司大促时候的高流量高并发对我们的系统稳的压力很大。3月底入职之后,除了4.18大促,经历6.18、8.15、11.11、12.8店庆几次大促,每次都让人很兴奋。挑战技术,积累经验,乐此不彼。大促之前做容量评估,分析TPS/QPS增长,然后扩容机器。容量评估需要了解业务怎样是用db,比如,商品数增加了,档期排序的redis的内存需要加多少,commands/s每秒会有多。预估计订单会增加多少,那么mysql订单库的tps/qps会预估达到多少。了解业务是dba工作中一件很重要的事情。

大半年的时间里,主要是跟着业务跑,零碎的事情很多。这篇博客差不多算是年终总结,很多事情值得思考,来个总结吧.
干的不好的地方:
1)耐心对待每一个开发的业务需求。分析和思考开发对db需求、更耐心的帮助他们,不合理的设计不是直接拒绝,而是提供更好的方案。
2)自动化开发做的很烂,开发能力有点弱。不会前端的DBA不是好运维。不会前端,不能更好的展示DB的状态数据,真是痛苦。还好大半年的时间坚持使用python开发一些工具。

3)没有坚持写博客。即使没有多少人阅读,也要坚持写。storm的开发Nathan说的很对,写博客可以让你成为一个更好的读者,让你更聪明,还有一些side effect(比如提升你的reputation、找下家工作)。
4)提高效率,实际上也就是技术能力。另外开发工具是正途,扩展自己的双手和大脑。

唯一满足的:
坚持学习一些新的东西,看文档和他人分享的博客。nosql、分布式系统都是很意思的东西,也看了一些papers。

而2015的计划,主要是改正上面一些做得不好的地方:
1)提高Qos,沟通是一种艺术,多耐心一些,多与boss沟通也很重要。
2)坚持写博客,计划写一些little book,redis、nosql、分布式方面的
3)学习不会的东西,学习新的东西

4)锻炼身体很重要
5)长假期间多回家几次,今年都没回过家。
Merry x’mas to all!
此条目发表在essay分类目录。将固定链接加入收藏夹。

圣诞夜的记录》有 1 条评论

  1. 奕秋(collins)说:

    真的是DBA的艺术宝殿啊。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.