导读:本文主要总结一下笔者之前做的关于业务存储资源优化的整个过程,正所谓前事不忘,后事之师,希望以文中的例子为引,能够总结出一些如何避免坑以及如何填坑的方法论。
全文19135字,预计阅读时间26分钟
为了更好的理解下面介绍的点,先对业务的一些概念进行简单介绍。- 「百度手机助手」:百度手机助手是在Android系统上的手机应用分发平台,管理开发者上传的Android应用,经过转存等处理后将应用分发到C端。
在优化的时间点,整个助手的存储占用已经达到了几P的量,每年的预算费用近千万。从业务上进行数据分析,通过分析对应业务场景的mysql库,库中会记录对应应用的大小。分析后的大致数据如下:
这里面会发现应用patch包的占用非常大,同时发现存储总量-已知存储后,仍有P级别的存储是未知的。这里应用patch包的存储占用是否符合预期需要看一下。所以,为什么优化就有了几个合理的理由:
下面就展开整个清理的过程。
优化的第一步就是分析要怎么优化,把闲置的存储找出来,然后优化它。用普通话来说就是猜。此处的闲置,可以定义为消耗的存储带来的价值不符合预期。存储的价值是什么?分几部分来说。
有了初步的方向后,要进行更准确的确认,判断收益空间。从下面两个角度进行验证。
▲存储空间分布
▲更新流量分布
有了上面的数据,可以从基本面看出,省流量更新的存储消耗更大,但是实际的流量价值却很低,基于此可以确定要对省流量更新的patch包下手了。
就像把大象装进冰箱一样,开门-放大象进去-关门。优化也不是上来就动手把存储清除,整个过程参考大象装冰箱的思路,分为三步:
正所谓 “知己知彼百战百胜”,做一件事情降低风险的第一要领,应该是把事情摸清楚。对于存在几年的老业务,如何去摸底,总结下来有几点经验。
最后,基于全面的信息梳理,完成基于数据流的业务流程图。整个过程有点像是《长夜难明》的探案过程,抓住每一个线索,完成最后的拼图。
从图中,可以看到主要的存储分为三部分,「开发者应用,客户安装应用,省流量patch包」。其中patch包的生成步骤为:
核心的数据处理流程如下:
由于是进行存储优化,那就主要关注梳理出的数据流程各个环节是否可以优化 以及 是否要进行优化。首先,磨刀不误砍柴工,从BOS处通过api导出全量列表,由于历史积累,共亿+条object数据。然后基于原来的增量更新策略 制定出了对应的优化策略。
在梳理方案的过程中,深感项目的评估以及持续跟进的重要性。下面举几个例子简单说明下。
在处理的过程发现上文提到的未知的P级别空间,发现是原来物理机迁移,自运维的数据库未迁移,导致之前的增量包虽然占用了BOS存储,但是没有在db中发现,评估对业务没有实际用途了,最后一股脑清理掉了(非常爽)。
这是最轻松的过程,核心要注意的是要设计好验证方式和回滚方案。此处不细说了。整个效果从高峰的P级别降到了百T级别,排除毒素,一身轻松。
以习惯的五问法做一个回顾,总结下整个过程学习到的东西。
程序没有清除,研发反馈产品设计并未考虑历史存量问题
研发,个人认为产品和研发的和谐边界是,产品给出要完成的用户功能,技术给出解决方案。产品不用关心存储存多久,只需要提出用户的省流量更新需要在什么场景时效,研发基于产品功能来判断patch包是否可以归档删除。
文档积累 & 监控 & REVIEW。要做好文档积累,方便有一天需要对系统优化的时候能看到为什么系统是这个样子;要完善监控,做到心里有数;要定期review,同一个业务逻辑随着产品的演进有可能就会从因地制宜的设计变成历史包袱,保持开放心态,放眼过去,着眼未来。
靠你的经验,同时考虑对立面。事情都有对立面,很多时候我们考虑问题都只会着眼于眼前看到的点,阳光之下必有阴影相伴,作为研发可以多思考问题的背面是什么,这样可以更全面的考虑问题,少留一些技术债。
系统永远是为产品服务的,但是研发要考虑投入产出,不仅要考虑研发的投入产出,同时要帮助产品一起考虑产品的ROI。换个角度去看问题,会发现不一样的技术方案,也许就会do better。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8