写点什么

中原银行分布式缓存实践

用户头像
中原银行
关注
发布于: 2021 年 09 月 16 日
中原银行分布式缓存实践

随着业务规模的增长,用户数和访问量越来越大,应用需要支撑更多的并发量,而数据库很容易达到瓶颈,一个有效的办法就是引入缓存。分布式缓存技术作为传统单机缓存的延伸,其具有独立部署、高可用、可扩展性好、支持高并发的特性,而随着微服务、分布式技术的发展,分布式缓存在业务数据缓存、分布式 Session、分布式锁、排行耪、秒杀等分布式高并发场景中发挥着举足轻重的作用。

1. 中原银行分布式缓存平台简介

随着我行微服务化架构拆分以及各种营销活动带来的高并发流量,使得我行分布式缓存的应用变得更加普及。目前中原银行分布式缓存平台已推广应用了手机银行、吃货地图、金融开放平台、消息平台、反欺诈等三十多套系统,高峰时达到每秒上万次接口调用,有力的支撑了五周年行庆以及吃货地图、综合商城等各种营销活动的举办。

本文将基于分布式缓存平台在中原银行的实践经验,分享我行在分布式缓存平台的建设心得。

2. 分布式缓存平台实践

Redis 作为目前最流行的开源分布式缓存,是一个基于内存实现的 NoSql 数据库,具有高性能、高可用、可扩展性好的特点。同时 Redis 还支持多种复杂的数据结构,数据持久化,主从复制等丰富的功能特性。

我行的分布式缓存平台是基于开源 Redis 定制化开发的一站式中间件平台,由功能丰富客户端 SDK、Redis 集群管理系统、定制化 Redis Server 三部分组成。不仅实现了 Redis 连接池监控、Redis 数据看板、分布式锁等基础功能,还创新性的实现了多租户、增强版的 Redis 安全接入等高级功能节省了服务器资源,增强了安全性;同时 Redis 集群管理系统提供丰富的 Redis 指标监控告警、无感知的 Redis 数据迁移等运维功能,提升了系统的稳定性,降低了人工运维成本。

2.1. 功能丰富的客户端 SDK

我行的分布式缓存平台当前支持 C 和 Java 两种语言版本的 Redis 客户端,完善并增强 Redis 操作命令,封装了分布式锁、原子自增序列等常用功能,提供连接池监控告警能力,并创新实现 Redis 的多租户机制。

2.1.1. 客户端连接池监控

客户端 SDK 定期检测 Redis 连接池的使用状态,并上传至 Redis 集群管理系统,Redis 集群管理系统中可实时查看每个 Redis 客户端的连接池使用状态,实现风险预判、问题快速定位等功能,同时当客户端连接存在泄露风险时将即时触发告警。

2.1.2. 分布式锁实现

随着系统的微服务化拆分、多实例化部署,在解决应用的并发冲突问题(如:防止库存超卖)时,传统的 JVM 进程级别的锁或数据库锁渐渐的被分布式锁替代。我行的客户端 SDK 基于 Redis 实现了高性能的分布式锁功能,同时支持自动续约机制,避免因为业务执行时间过长引发 key 过期而导致的锁冲突问题,从而较大程度上保证了业务逻辑的正确性。

2.1.3. 多租户机制

原生的 Redis 不支持多租户功能,在微服务大行其道的当下,如果为每个微服务单独部署一套 Redis 集群,则会造成资源浪费、集群太多运维管理困难的问题;反之多个微服务使用同一套 Redis 集群则会存在数据互相影响的问题。我行自主实现了 Redis 的多租户功能,允许多个微服务系统使用同一套 Redis 集群而数据互不影响,同时伴有丰富的租户数据监控管理功能。

l 多租户实现原理

每个微服务应用会分配一个唯一标识(如 EUP:AUT),当微服务通过 Redis 客户端 SDK 操作 Redis 中数据时,客户端 SDK 会在原有 key 的基础上添加该唯一标识(如 EUP:AUT)作为前缀。如下示例:业务系统(EUP:AUT)对 key 为 hello 的数据进行读写操作,对应到 Redis Server 中的 key 值是 EUP:AUT:hello,从而实现不同业务系统的数据隔离。



图 1Redis 多租户实现原理

l 多租户-支持系统内部跨微服务的数据共享

依托于我行良好的架构设计,每个业务系统由多个不同的微服务应用组成,应用的唯一标识由两部分组成:系统标识和微服务标识,如 EUP:AUT,EUP 为系统标识,AUT 为微服务标识。客户端 SDK 支持同一个系统内跨微服务的 Redis 数据共享,即 EUP:AUT 与 EUP:APR 两个不同的微服务可以对 Redis Server 中同一个 key 进行读写操作。

2.2. 增强版的 Redis 安全接入

原生的 Redis 对于安全性支持的比较弱,密码是通过明文的方式写在配置文件中的,而且仅支持配置一个密码。我行通过对 Redis 定制化开发,避免了 Redis 密码的明文存储,同时支持为每个业务系统分配独立的 token 和密码,实现更为灵活、安全的管理配置。

Redis 客户端 SDK 也做了相应的定制化开发,业务系统不直接配置 Redis 集群的 IP 地址和密码,而是配置 Redis 集群管理系统分配的 token,业务系统启动时,Redis 客户端 SDK 会基于分配的 token 动态的从 Redis 集群管理系统获取 Redis 集群的地址和密码。这种架构模式不仅增强了 Redis 的安全性,更方便了 Redis 集群的管理,可以实现业务无感知的切换 Redis 集群,或者临时禁止某个业务系统访问 Redis。

2.3. Redis 集群管理系统

中原银行自建的分布式缓存集群管理平台实现了丰富的 Redis 指标监控告警功能,同时支持 Redis 数据查看、一键集群数据迁移、多租户数据监控等多种运维功能。

2.3.1. 丰富的指标监控

Redis 集群管理系统实现了丰富的 Redis 集群监控告警功能,可以实时展示 Redis 的集群健康状态、ops、连接数、key 数量、命中率、网络输入输出流量、内存使用占比等指标,同时支持展示各种监控指标的历史趋势图。下图为部分监控指标的效果图:

Redis 集群列表页:


Redis 集群详情页:



图 4Redis 集群详情页

2.3.2. 灵活的告警策略配置

Redis 集群管理系统可以针对 Redis 的运行状态、内存使用率、key 数量、ops、连接数、主从同步延迟等多达十几项指标配置告警策略,支持自定义设置告警阈值,可对全局 Redis 实例或者针对某一个 Redis 实例单独配置告警策略。告警信息通知的发送目前支持短信、原心等多种渠道。

2.3.3. Redis 数据看板

虽然市面上存在一些 Redis 数据查看工具,但功能较为简单,当 Redis 集群或节点数量庞大时管理复杂,无法满足企业级的管理需求。中原银行自主研发的 Redis 集群管理系统集成了 Redis 数据看板功能,实现了数据查看权限的精准控制,极大的提升了数据安全性及管理效率。



2.3.4. 多租户数据监控

多租户实现方案中,多个业务系统共享同一套 Redis 集群,导致系统运维时难以了解每个业务系统对 Redis 的内存使用情况。我行的 Redis 集群管理系统提供了业务系统使用 Redis 的详细统计数据,包括 key 的数量、big key 详情、内存使用、无过期 key 的统计等。


2.3.5. 集群数据迁移

在使用 Redis 的过程中,当遇到单个集群故障、内存空间使用预警、集群应用数据分布失衡等问题时,需要进行数据迁移。Redis 集群管理系统支持一键迁移操作,可以将一个 Redis 集群中的数据同步迁移至另一个 Redis 集群或单节点实例中,并且允许在 Redis 不停机的前提下完成数据迁移。

3. 总结与展望

中原银行分布式缓存平台在开源 Redis 的基础上做了较多定制化开发,增强了 Redis 的安全性,实现的多租户机制节省了服务器资源;完善的 Redis 集群管理系统增强了 Redis 的稳定性,减小人工运维成本。后续我们会继续紧跟行业发展趋势,在云原生、自动化运维等方面持续发力。

作者简介

杨晓兵,来自于中原银行信息技术部,目前主要负责分布式缓存的开发建设工作。


本文转载自原银科技

原文链接:中原银行分布式缓存实践

发布于: 2021 年 09 月 16 日阅读数: 24
用户头像

中原银行

关注

打造科技驱动、创新引领的数字化未来银行。 2020.02.06 加入

中原银行是河南省属法人银行,总部位于河南省郑州市。我行坚持“科技立行、科技兴行”,秉承“稳健 创新 进取 高效”理念,发展移动金融、线上金融,提升综合金融服务能力。 官方网站:http://www.zybank.com.cn/

评论

发布
暂无评论
中原银行分布式缓存实践