写这篇文章算是对我来淘宝平台架构组实习的一个总结吧。
开始接手SysLog的时候,那时候SysLog是比较粗糙的,一天只有几万条数据,显示图的曲线都是一路往上涨的,数据的值是直接累加,很难看出某个时间点的值,只能从曲线的曲率上大概判断现在是不是增长的很快。开始的时候需求很简单,毕玄只是让只是要让曲线按照每一分钟的实际值显示就行了。
还记得当时改的时候真的是一步三回头,在学校的时候哪有这种经历,自己做的东西马上要给别人用了。那次是查了又查,还是担心。虽然真的就改了一点点东西。这感觉相信每个从学校刚出来的人都会经历的:紧张,激动,兴奋&&担忧。
其实当时的结构还是比较简单直接的。数据库中一个月才一张表,就是原始数据表,那时候一个一天才几万的数据量。
实现方案:
入库:
接收到客户端数据 解析直接入库
查看:
获取参数 从原始数据表取数据 处理数据 展示
这时候没学到多少技术,学到最多的是就是debug,其实就debug的步骤没什么好说的:设置断点,单步跟踪,运行到返回,运行到下一个断点…更重要的是在debug之前,造成错误结果的可能的原因在哪,先找到原因再下断点。当然肯定会有无从下手的时候,那没办法,从开始就下断点,一步步的跟踪,每一步对比跟是不是预期值,这个要是错过了一步可能就得从头再来,比较恶心。
=================================下面是历史的改进==============================
问题一:如何让用户更快速的查看历史或当前的数据?
当数据量开始增大的时候,从每天几万条增长到几十万条,程序不做优化,mysql有点开始有点吃力了。
记得某天早上,华黎师兄过来跟我说:“小伙,现在访问一个页面要10分钟才能刷出来,都不敢刷新啊。”我大囧。然后黎叔给我了一些建议,说用缓存吧,以至于我建的表名都是listCachexxx(其实就是把中间结果存起来)
优化一:对已经入库的数据定时的进行计算,将计算结果存放至另外的表中。用户请求数据直接返回计算好的结果
实现方案:
入库:
接收到agent的数据 解析直接入库
更新:
接受更新请求 取出原始数据中需要更新的数据 处理原始数据放入“缓存”表
查看:
获取参数 从“缓存”表取数据 展示数据
优化结果:请求