AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

利用 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:522611

评论

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

Linux之time命令

入门小站

Linux

如何使用python制作动感炫酷的 动态二维码

4ye

Python 后端 二维码 8月日更

ShardingSphere UI 初步体验

源码 ShardingSphere

SSH免登陆

Mike

区块链产业正处于繁荣前夜(上)

CECBC

审计挖掘之CNVD通用漏洞

网络安全学海

黑客 网络安全 信息安全 WEB安全 漏洞挖掘

springboot使用redis(从配置到实战)

Python研究者

8月日更

区块链产业正处于繁荣前夜(下)

CECBC

极光开发者周刊【No.0827】

极光JIGUANG

JavaScript 中 Math.random() 生成随机数据

devpoint

JavaScript 8月日更 math

轻松让你的nginx服务器支持HTTP2协议

程序那些事

Java nginx HTTP 程序那些事 http2

架构实战营 模块六 作业

一雄

作业 架构实战营 模块六

谈 C++17 里的 Factory 模式

hedzr

c++ factory pattern c++17 factory method

百度地图开发-绘制点线提示框 07

Andy阿辉

android Android 小菜鸟 Android端 8月日更

neo4j 基本概念与入门实例

escray

学习 neo4j 8月日更

ShardingSphere JDBC 语句执行初探

源码 ShardingSphere

CC校园运动小程序云开发解决方案

CC同学

Docker 系列 _ 01_ 一念缘起

编程三昧

Docker 8月日更

架构实战训练营模块六作业

NewBranSTONE

#架构实战营

区块链溯源:重塑咖啡产业链

CECBC

强强联合!北鲲云与宝德就打造混合云HPC解决方案达成战略合作

北鲲云

命中率高达87%,GitHub收费下载超过28W次的Java面试题库外泄

Java架构师迁哥

在线JSON转HTML工具

入门小站

工具

聊聊 PC 端自动化最佳方案 - Pywinauto

星安果

Python 自动化 Pywinauto PC

今天聊一聊Golang的互斥锁吧

Regan Yue

互斥锁 互斥锁Mutex 8月日更

成为高效工程师的四步法则

俞凡

生产力 认知

03. AI就是与人类思考方式相似的计算机程序:从仿生学看人工智能的定义

Databri_AI

人工智能

mycat入门:落地分库分表与读写分离

小鲍侃java

8月日更

死锁终结者:顺序锁和轮询锁!

王磊

Java 死锁 8月日更

微校园小程序(云开发)设计方案

CC同学

☕【Java技术指南】「TestNG专题」单元测试框架之TestNG使用教程指南(上)

码界西柚

Java 测试 单元测试 8月日更 testNG

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