来源:Redislabs前端
做者:Shabih Syedredis
翻译:Kevin (公众号:中间件小哥)数据库
为了让系统运行更流畅,又避免 Knights Capital 在 2012 年犯下的 4.6 亿美圆的错误,一家领先的金融市场制造商的单日计算机系统故障给 IT 社区提供了一些教训,包括系统组件的设计、实现,和DevOps 的重要性。在这个由两部分组成的博客中,我将分享一些想法,以帮助开发团队保持其持续集成和持续部署(CI / CD)流程的安全, 特别的,我将展现如何使用特性开关和特性上下文来来管理持续更新,如何建立一个容易访问的日志数据库,一个能够快速查找的错误信息数据库--全部这些都借助 Redis。想象一下,您是一名工程总监,管理着一个由多个开发人员组成的团队,这些开发人员负责具备数千个并发用户的Web 应用程序的前端。您的应用程序已部署在 AWS 中,您须要每周推送新的版本,公司没法承受因Web 应用程序带来的任何破坏,所以若是发生错误,您的团队必须当即回滚到最近更新的版本。您必须快速识别出问题代码,让开发人员对其进行修复,并在后续对外发布,并且产品团队老是要求尽快提供新功能,所以您如何迅速对错误作出反应,并以业务需求的速度上线新功能?api
在 2019 年游戏开发者大会(GDC)上,我参加了一个主题为“大规模调试:每个月活跃用户超过 7 千万的跨平台稳定性”的议程,由Redis Labs 客户 Roblox 和 Chris Swiedler 共同主持,描述了一种能够能够支撑每周更新的软件发布过程。克里斯分享了他的团队如何在 Roblox 上修改应用程序行为而不改变代码,这样能够减小现网问题的发生。他们使用特性标记,这与 Martin Fowler 的“特性开关”方法很是类似。安全
新功能发布的示例 CI / CD 流程网络
让咱们分解图 2,其中概述了能够做为CI / CD 和分类过程的一部分的方法:
1. 开发人员开始研究新功能;并发
2. 开发人员和产品管理团队决定哪些场景将使用新功能(可能仅针对部分用户);分布式
3. 开发人员提出了一种切换策略,其中新代码和旧代码由“ if and else”块分隔;测试
4. 一旦开发人员完成新功能代码的开发,他们便将Canary 版本发布到生产环境(借助 DevOps);翻译
5. 人们在使用该应用程序中,根据其角色和切换,能够执行新代码或者旧代码;
6. 若是出现问题,能够将切换开关设置为false,以将全部用户转移到旧代码;
7. 一段时间后,该功能将升级为正式发布版本(GA)。
此策略可有助于:
1. 将canary 版本发布到生产中,以实时流量和真实用户(而不是模拟)进行测试;
2. 在不回滚任何代码的状况下即时禁用功能;
3. 经过切换特性开关启用功能或功能组合;
4. 可经过特性开关中的元数据轻松识别(对于大型开发团队而言)负责的开发人员。可是能够将这种方法前进一步,以帮助分布式开发团队安全地发布新功能,并在须要时以最小的影响回滚新功能。
Redis Enterprise 的 CI / CD
您须要快速,持久的数据库时,Redis Enterprise 很是适合。其功能包括:
具备永久网络存储的彻底托管的 Redis 数据库即服务,可防止实例数据存储丢失;
跨多个 RedisEnterprise 群集建立的无冲突可复制的数据库,这些集群位于各地的不一样数据中心,这提供高可用的双活和主备部署。
强大的搜索功能(经过 RediSearch 模块)可跨数据库集群运行搜索查询。
为了让您的 CI/ CD 分流过程更加有效,在本系列的下一部分中,我将提供更多详细信息和代码段来具体展现如何使用 Redis 构建特性开关、特性上下文、错误数据库和日志数据库。
原文连接:https://redislabs.com/blog/using-redis-to-optimize-feature-rollouts-and-error-triaging/
更多优质中间件技术资讯/原创/翻译文章/资料/干货,请关注“中间件小哥”公众号!