写点什么

利用 Redis 来优化功能部署和错误分类

  • 2019-12-09
  • 本文字数:1377 字

    阅读完需:约 5 分钟

利用 Redis 来优化功能部署和错误分类

为了让系统运行更流畅,又避免 Knights Capital 在 2012 年犯下的 4.6 亿美元的错误,一家领先的金融市场制造商的单日计算机系统故障给 IT 社区提供了一些教训,包括系统组件的设计、实现,和 DevOps 的重要性。在这个由两部分组成的博客中,我将分享一些想法,以帮助开发团队保持其持续集成和持续部署(CI / CD)流程的安全, 特别的,我将展示如何使用特性开关和特性上下文来来管理持续更新,如何创建一个容易访问的日志数据库,一个可以快速查找的错误信息数据库–所有这些都借助 Redis。


想象一下,您是一名工程总监,管理着一个由多个开发人员组成的团队,这些开发人员负责具有数千个并发用户的 Web 应用程序的前端。您的应用程序已部署在 AWS 中,您需要每周推送新的版本,公司无法承受因 Web 应用程序带来的任何破坏,因此如果发生错误,您的团队必须立即回滚到最近更新的版本。


您必须快速识别出问题代码,让开发人员对其进行修复,并在后续对外发布,而且产品团队总是要求尽快提供新功能,因此您如何迅速对错误做出反应,并以业务需求的速度上线新功能?


在 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 构建特性开关、特性上下文、错误数据库和日志数据库。


本文转载自公众号中间件小哥(ID:huawei_kevin)。


原文链接:


https://mp.weixin.qq.com/s/OH_JlBEBwMXYxcfYfbom8A


2019-12-09 13:522593

评论

发布
暂无评论
发现更多内容

校招面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

霍格沃兹测试开发学社

【网络安全篇】--HTML基础(预计学习时间:30分钟)从此以后不迷糊~

贤鱼很忙

html 前端 10月月更

牛客刷题系列之进阶版(搜索旋转排序数组,链表内指定区间反转)

雪芙花

c c++ 10月月更

7 步保障 Kubernetes 集群安全

SEAL安全

Kubernetes 云原生 Kubernetes 集群 企业号十月 PK 榜 审计日志

【高并发】深度解析ScheduledThreadPoolExecutor类的源代码

冰河

并发编程 多线程 高并发 协程 异步编程

热门探讨:为何数字化转型的企业,大都“死”在了黎明前夕?

优秀

数字化转型

牛客刷题系列之初阶版(自守数,返回小于 N 的质数个数,第一个只出现一次的字符)

雪芙花

c c++ 10月月更

Go语言入门—06切片

良猿

Go golang 后端 10月月更

记一个“奇葩”需求的实现

甜点cc

JavaScript 前端 Element UI 10月月更

你真的了解v-model吗🔥

渔戈

前端 Vue3 10月月更

你真的了解过Vue的组件化开发吗🔥

渔戈

前端 Vue3 10月月更

Python列表和元组有什么区别

芥末拌个饭吧

后端 python 3.5+ 10月月更

Java中的super和this关键字详解

共饮一杯无

Java 10月月更 super和this关键字

详解Native Memory Tracking 追踪区域分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

基于Ernie-3.0 CAIL2019法研杯要素识别多标签分类任务

汀丶人工智能

nlp

全彩LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

以指标驱动业务决策,Kyligence 亮相 Gartner IT Symposium/Xpo™ 峰会

Kyligence

数据分析 指标中台 OLAP技术

一种基于柔性事务的分布式事务解决方案设计探究

京东科技开发者

编程 分布式事务 事务 事务回滚 柔性事务

技术分享 | 测试开发工程师必读经典好书清单,抽奖赠书送福利!

霍格沃兹测试开发学社

复杂场景数据处理的 OLTP 与 OLAP 融合实践

NebulaGraph

数据库 知识图谱

Vue的开发模式与webpack🔥

渔戈

前端 Vue3 10月月更

面试官:数据库加了唯一索引,就不会有重复数据了吗???

小小怪下士

Java MySQL 程序员

C++精通之路:红黑树

雪芙花

c c++ 10月月更

2022年第六届数据质量管理国际峰会重磅开启

数据质量管理智库

数据 数据隐私 数据安全 峰会 数据质量

【kafka运维】Topic的生产和消费运维脚本

石臻臻的杂货铺

kafka kafka运维 10月月更

vue-router学习-1

Studying_swz

前端 10月月更

HashMap源码分析(六)

知识浅谈

hashmap 10月月更

【网络安全篇】JavaSript基础内容大全

贤鱼很忙

10月月更

升级全新网络方案,给你低成本、高性能的裸金属体验

华为云开发者联盟

云计算 后端 华为云 云服务器 企业号十月 PK 榜

openGemini内核源码正式对外开源

华为云开发者联盟

数据库 物联网 华为云 企业号十月 PK 榜

《Go语言学习路线图》让你少踩坑,高效学,Let’s Go!

王中阳Go

golang 学习方法 技术专题合集 10月月更 “程”风破浪的开发者

利用 Redis 来优化功能部署和错误分类_文化 & 方法_中间件小哥_InfoQ精选文章