在服务或者其它线上资源发布新版本的时候,我们都有必要为发布信息本身和上线的资源做风险检查,以确认发布内容不会对线上造成影响。通常来说,在检查能力铺垫时,一个主旨的思路是保证问题的召回率,即检查能力本身必须理论上可以拦截更多的风险,这样才能够基本限度保证发布过程的安全。但随着检查能力集合变得成熟,业务也肯定会有对检查能力优化的需求,需要提升检查的准确率,不至于出现太多无用的噪音,这也成为了风险检查提升可靠性的一项挑战。
因此,本文就浅谈一下,提升发布风险检查准确率的一些思路。
在服务或者其它线上资源发布新版本的时候,我们都有必要为发布信息本身和上线的资源做风险检查,以确认发布内容不会对线上造成影响。通常来说,在检查能力铺垫时,一个主旨的思路是保证问题的召回率,即检查能力本身必须理论上可以拦截更多的风险,这样才能够基本限度保证发布过程的安全。但随着检查能力集合变得成熟,业务也肯定会有对检查能力优化的需求,需要提升检查的准确率,不至于出现太多无用的噪音,这也成为了风险检查提升可靠性的一项挑战。
因此,本文就浅谈一下,提升发布风险检查准确率的一些思路。
今天闲聊一下可持续性架构设计的秘诀,总共八个字:概念拆解,重组改造。
说到新开发一个技术工程,很多同学会引用需求拆解的思路,自顶向下拆解子需求,做对应的层次模块设计,然后直接按照拆解结果分模块编码。依照这样的思路,虽然最终架构形态比较符合预期,但不一定能够保障长线迭代。这是因为,技术实现始终是自底向上,而不是自顶向下的,如果说在拆解过程中,思考深度不够,没有触及到底层概念的粒度,那么技术实现的结果,必然是失去可扩展性——上层隐含的底层概念跟需求强绑定,导致底层功能无法拆分出来,不能适配更多场景,最终不断堆积,就产生了技术债。
这个问题需要如何解决?举一个游戏领域的例子。以客户端自动化测试为例,我们期望的一个效果,是要通过客户端自动化测试工具,可以代替人力做游戏场景遍历,解决遍历冒烟测试耗时的问题。为了解决这个问题,可以简单做子问题拆解:
技术风险,作为质量保障领域的重要的一环,主要研究如何通过解决方案和技术手段,解决企业内业务在基础运维、日常运营和变更上线过程中的稳定性问题,保证业务风险得到收敛。在国内,蚂蚁金服在这个方向上有沉淀很多方法论和实践经验。变更管控是技术风险地一个子领域,主要的目标是在变更过程中,通过对变更流程的管控介入,提前发现变更过程存在的事故风险,或者阻止变更过程的错误进一步扩大影响面。在这个子领域,蚂蚁开源了AlterShield变更管控平台,提供了一套变更风险防御的解决方案。今天,本文就浅析下AlterShield平台整体的设计,适用的场景以及局限性。
AlterShield的源码可以参考这个GitHub-Repo。整体的技术架构,主要包含几块部分:
在线上环境运维过程中,我们通常需要治理慢查询的风险。慢查询会引起DB性能问题,并且当线上环境流量较大的情况下,就会出现因大量慢查询堆积导致DB被打挂的情况。因此,本篇文章分享一下慢查询的风险治理思路。
首先,我们需要知道什么情况下会出现慢查询。通常对于大表,未正确引用索引导致全表扫描,就会出现慢查询。慢查询出现也会经历从无到有的过程,而为何从无到有,就涉及到业务变更。以下几种业务变更场景就有可能导致慢查询的产生:
数据同步或者迁移操作也算是线上数据变更的一种类型。由于涉及的数据量非常大,一旦发生故障,会直接影响线上业务,并且较难止损。从变更风险管控的角度考虑,数据同步或迁移操作也需要走合理的发布窗口,并且在操作前也需要做足够的影响分析。本文就来聊一下数据同步和迁移的变更期间注意事项。
数据同步按照持续状态的不同可以分为一次性同步跟持续性同步。从质量保障的角度,要降低持续性同步的风险,需要额外考虑数据跟组件性能的监控,其它方面的考虑两者没有太大的差别。数据同步的操作手法也有很多种,既可以通过搭建中间件,实现一个导入binlog到MQ然后再导到其它存储的通路,也可以通过自建业务服务,通过批量刷数的方式主动导入大量数据。对于后者,在以前的文章当中已经提到了一些通用的风险点,但如果考虑到数据同步的需要,还会有一些额外的考量。
在接手以前的项目做开发的过程中,我们经常会遇到因为既有代码理解困难,导致代码难以删改,问题难以排查的情况。一份富含技术债的代码,不论对于当下的问题解决,还是未来的需求开发,都会形成累赘。因此,本文就分享一些通用的代码优化和治理经验。
首先我们需要从工作的角度去看待代码优化这件事情。需要捋清楚几件事情:
比起为技术而技术地去做代码重构甚至重写,锚定当前的目标,按需优化才是最好的选择。如果历史代码存在比较严重的问题,影响了核心的业务,那么必须强行去做修复,不论代码实现是否符合自己的审美。如果历史代码写的不那么美观,但线上跑的还比较稳定,那么也不建议直接做优化,更多的优先级应该放在新研发的内容上面。
精准测试在互联网领域有广泛的应用。以变更为出发点,通过对变更内容进行分析,可以确定单次变更具体涉及到哪些模块和功能点,以及是否存在夹带风险,从而从QA的视角,可以知道哪些功能模块需要做测试,以及哪些变更内容不符合预期。相比于互联网QA,游戏QA接入业务项目研发过程并没有那么深入,比如项目代码权限基本上游戏QA不会拥有,但即便如此,要在游戏测试领域应用精准测试专项技术,还是有一定思路可循。
因此,本篇文章,笔者以自身经验为出发点,讲述一下在游戏业务测试落地精准测试专项的一些思路。
近些日子想到自己尘封已久的笔记本电脑没有开机了,很多软件驱动之类的没有更新,就打算把电脑开起来做一轮批量升级。但开电脑的时候很久没有进入Win10桌面,等了很长一段时间蓝屏提示0xc0000185错误,说系统需要恢复。经历了一番折腾之后,笔者解决了这个问题。虽然不明确这个问题的根因在哪里,但还是分享一下自己收集到的一些解决方式。
首先,重装系统肯定是能解决这个问题,但不一定需要真的重装,这个成本太大了。反之,我们可以用重装系统所需要的东西,一个自带WinPE系统的U盘,把U盘插到电脑里,重启电脑,在自己电脑的BIOS里选择优先引导U盘的WinPE系统,这样下次启动电脑时候就能进去。市面上做装机服务,基本上都会用到这种系统,而这样的U盘也很好做,有一个空的U盘,然后在老毛桃之类的网站找一个一键制作的软件操作就可以。
近期在testerhome的游戏测试节点里,看到一个很有趣的帖子:针对游戏策划的配置表测试,是否有开源的框架可以用?除了问题本身之外,帖子的楼主也附了一张整个配置表测试工具的设计图,由SVN变更监控、发起检查最后到消息通知,组成了一个持续集成的配置表测试专项工程。为此,针对这个场景,笔者也希望输出一些自己对于配置表检查测试技术的一些思考。
本篇文章讲述两块内容,第一块讲下测试框架的开源,第二块讲下专项技术的设计。首先,看一下配置表测试框架开源这块的问题。
在使用Golang做后端开发的工程中,我们通常需要声明一些一些配置类或服务单例等在业务逻辑层面较为底层的实例。为了节省内存或是冷启动开销,我们通常采用lazy-load懒加载的方式去初始化这些实例。初始化单例这个行为是一个非常经典的并发处理的案例,比如在java当中,我们可能用到建立双重锁+volatile的方式保证初始化逻辑只被访问一次,并且所有线程最终都可以读取到初始化完成的实例产物。这段经典的代码可以按如下的方式编写: