本文共 1222 字,大约阅读时间需要 4 分钟。
点击上方“中兴开发者社区”,关注我们
每天读一篇一线开发者原创好文
DevOps微课系列旨在帮助用户学习DevOps实践。今天和大家介绍用户数据的抽取。
2017年年末,支付宝年度账单、樊登读书会年度总结等充斥了整个朋友圈的分享。恰好我们wiki也已经运营快2年了,思考是否可以尝试通过积累下来的历史数据统计出2017年ZTE DevOps用户对工具链的使用历程,给用户一个温馨的年度回顾呢?
★答案是肯定的,于是不久您收到了内含开头两幅画面的邮件。
下面带您了解这封邮件的拟制~
整个过程分成四个任务:统计用户数据、前端页面设计及开发(本文略)、数据组装、邮件推送。
用户历程的关键在于用户数据的统计
1) 统计出用户最关心、最感兴趣的各个数据项
2) 然后通过SQL查询把各个数据项存入临时表
3) 再通过左关联把所有表关联查询得到最终结果
4) 最终结果导出成csv文件,文件中每一行对应一个用户的数据,数据项之间用逗号分隔开,如下所示是某个用户具体统计数据。
整理各个数据的含义如下:
本文主要是介绍开发过程,故前端页面设计部分省略。下面就来讨论下数据组装方案
方案1:通过用户工号去实时查询用户信息动态组装页面,
优点:简单容易实现;
缺点:会对生产环境的wiki服务器造成性能压力,每个用户都需要频繁请求服务器查询数据库。性能是瓶颈,因此我们果断舍弃了这个方案。
方案2:为每一个用户生成独立的静态页面,而且每个页面地址是唯一的,每个用户访问时都是直接访问自己拥有的静态页面,然后通过nginx进行加速。
优点: 采用空间换取时间的优化方案,减少后端服务器压力。
缺点:有开发工作。
结论:项目组决定采用方案2。
【静态页面生产方法】
l 使用python小程序把csv中每行数据项(逗号分隔)按照顺序映射到html中占位符,如下所示:
再关联一些准备好的图片后,一个包含数据和图片的静态页面就生成了
程序重复上面步骤生成所有wiki用户的静态页面,具体实现代码如下所示
本着快速实现、一切从简的原则,我们决定采用邮件推送方式呈现给用户。如何减少对zmail服务器负载造成的压力呢?
【采用如下策略】
●避免直接把html页面作为附件或者文本的方式发送给客户,从而减少对zmail邮件服务器的负载
●利用zmail可发送富文本邮件的特性,将用户的html静态页面通过iframe的方式嵌入到邮件中发送给客户,将访问压力交给nginx服务器
【实现方式】 使用java遍历上述csv文件获取用户列表,对每个用户分别调用一次websevice接口给每个用户发送一封邮件。
综上,通过以上步骤,我们顺利完成了wiki 2017历程的发布。另外,gerrit套用此套解决方案,只修改了“统计用户数据”和相关代码就很快完成了gerrit 2017历程的发布。
欢迎大家尝试!
转载地址:http://jcirj.baihongyu.com/