背景

这是一个微服务世界。这些应用程序或微服务需要临时存储数据,并且频繁和超快速访问,以避免使用类似Redis的内存数据库进行磁盘IO操作。这些应用程序具有多个内存数据库集群,可以处理大量流量并避免请求失败。要快速访问此数据,应用程序需要准备好预先配置的已建立的池连接,以便从应用程序进行服务。

问题陈述

为应用而构建的应用程序在应用程序或基础架构故障时具有备份选项。存在于不同服务器上的不同数据中心的内存数据库群集允许在数据中心或服务器问题的情况下进行备份连接。

使用内存数据库的多区域弹性应用程序应该能够在断开连接时重新连接群集,并且如果主群集不可用则连接到备份群集以避免请求失败。

真正的区域无关解决方案将动态选择内存数据库集群以持久化或检索数据,即使在主集群连接被重新水化时出现错误,也可使事务无缝连接到客户端。这种动态再水化是一个问题,同时依赖于现代自动依赖注入和自动布线对象操纵技术。

一旦传入请求到达应用程序,即使该区域中的底层基础结构出现故障,也应正确处理该请求。

当主群集出现问题时,需要从另一个备份内存数据库群集动态保留或提取服务传入请求。同时,对于后续请求,与故障群集的连接将从其连接池中重新水合并准备服务,而不依赖于备份群集。

解决方案摘要

解决上述问题的一个简单方法是重新创建已针对具有连接问题的内存数据库进行池化的所有连接。

使用新建立的连接池,并确保对于其余事务,将从新缓存的池集中使用新连接。关键技术方面是在运行时动态管理这些池。

独生子

具有自定义扩展框架的服务,使用单例设计模式仅将对象实例化为一个实例。对于内存数据库,该框架允许应用程序实例化一个模板(如Spring RestTemplate)来处理所有数据库事务。实现连接工厂和池配置的基础模板建立连接以执行事务。当此模板无法用于建立连接时,它将在从工厂重新连接连接池时自我修复。该框架将丢弃旧模板并创建一个新模板。此新单个模板将用于为所有传入请求提供服务。

活动和备份连接

创建/使用多个内存数据库模板的服务:一个用于连接到主群集,另一个用于连接到备份群集。主群集由运行应用程序的服务器的“区域”确定。区域可以表示地理位置和/或数据中心。在多个区域中运行的相同应用程序将使用模板配置机制连接到相应的数据库。

跨区域弹性

每个“跨区域”弹性的服务意味着应用程序部署在多个区域中的多个服务器上,并且底层内存数据库集群基础结构类似地部署在不同区域的不同服务器上。

如果整个“区域”遇到问题,则传入的客户端请求将由针对另一个区域中自动复制的应用程序运行。但是,一旦请求到达应用程序,如果底层数据库集群遇到问题,该服务会动态地将操作转发到备份集群,并应成功完成请求。同时,模板将开始丢弃所有预先创建的连接的过程,并将开始重新创建根据提供的池配置配置的新连接集,并将为后续操作建立新模板以使失败区域成功,直到它很成功。BV

连接补液

必须删除内存数据库集群之间断开的连接,因为如果不采取任何操作,这是一个不可恢复的错误。当作为单独连接实现时,该框架保持断开的连接,并且不容易支持删除连接。如果先前已破坏模板提供的连接,则传入请求将失败。服务必须通过从池中删除所有连接并重新创建新的连接来支持运行时连接重新补充。当连接断开时,应用程序将重新创建模板和连接,以便为下一个事务提供与内存数据库集群的干净重新连接。

运行时和性能

每个服务都应确定启动时的主要和备份区域,以分摊对哪个数据库集群执行默认操作的动态决策。当操作无法在活动的所选群集上执行时,该服务应重新创建基础模板和连接,并将操作转发到备份群集。该实现允许数据库集群的快速,动态重新连接多区域弹性。由于新创建的模板是单例并在运行时获取,因此除了最初失败的模板之外,可以避免性能影响。

详细说明

概观

使用现有技术连接到内存数据库非常简单。我们在90%的应用程序中通常会遗漏的问题是数据库被重新水化或暂时丢失网络连接时。

应用程序将具有一组汇集的预配置连接,这些连接在工厂根据配置的间隔具有可执行的逐出算法进行缓存和生成,以验证连接的有效性。下图说明了连接到多个基于区域的内存数据库的多个模板。每个模板都配置了一个连接工厂,这些连接已创建并分配给要保留的池。然后,当请求执行事务时,工厂将根据需要从池中检索连接。

丢失连接

下图表示由于DB重新合并,数据库重新启动,数据库网络连接问题,防火墙问题或由于我们可以想象的任何其他原因导致连接丢失的时间。由于连接丢失了套接字连接,整个连接池现在变得无效,导致在请求的事务上发生连接拒绝错误消息。

无效的连接池

即使在数据库恢复之后,整个连接池仍然无效,因为它们将在失去跟踪数据库同时发生的情况的轨道时开始显示损坏的管道消息以重新建立连接。

再水化连接

池中的所有连接都需要重新水合才能执行成功的事务。这需要工厂创建新的连接以通过池保存相应的模板,这些模板也需要重新创建。当检测到连接失败时,系统现在可以智能地构建,以重新创建连接到相应的基于区域的数据库的所有模板。

连接将保存在线程上下文中,不会关闭或返回池以便快速执行下一个事务。这些称为从池到线程上下文的缓存连接。当随机连接无法执行事务时,很难找到用于运行事务的连接以及连接池中存在多少这样的断开连接。相反,重新创建连接池所需的时间比通过每个连接关闭要少。此外,关闭这些连接最终会导致运行时池耗尽状态,或者没有可用于即将执行的事务的连接。

重新启动内存数据库服务器后,线程中连接的保持操作将开始丢失管道错误。为避免这种情况,连接的再水化是最佳解决方案,如下所示。

转载于:https://blog.51cto.com/14009535/2366034

Redis重新连接弹性相关推荐

  1. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...

  2. Linux大棚版redis入门教程

    后端开发过程中,有时需要考虑系统的实时性,那么缓存系统就派上用场了,当然,现在最常用的当属Redis,这篇文章转自 Linux大棚版redis入门教程 [本教程目录] redis是什么 redis的作 ...

  3. 超强、超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...

  4. Redis 数据库入门教程

    From:http://www.jb51.net/article/56448.htm Redis 菜鸟教程:http://www.runoob.com/redis/redis-tutorial.htm ...

  5. 非常详细Redis数据库入门教程

    [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – 简介 ...

  6. Redis 集群使用(2)

    Redis包含三种集群策略: 主从复制 哨兵模式 redis cluster 主从复制 在主从复制中,数据分为两类:主数据库(master)和 从数据库(slave).其中主从复制有如下特点: 主数据 ...

  7. redis配置信息解读

    [教你看懂redis配置 – 简介] 我们可以在启动redis-server时指定应该加载的配置文件,方法如下: $ ./redis-server /path/to/redis.conf 接下来,我们 ...

  8. Redis基础与高可用集群架构进阶详解

    一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...

  9. Redis 详细入门教程

    [redis是什么] redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. redis的官网地址,非常好记,是redis.io.(特意查了一下,域 ...

最新文章

  1. mysql组件化_组件化开发和模块化开发概念辨析
  2. 第24天学习Java的笔记-接口Interface
  3. mysql8坑太多_mysql8安装遇到的坑
  4. 有些图,只要看错一眼就再也回不去了!
  5. 快手联合创始人银鑫卸任A站法定代表人、董事、经理
  6. Jenkins+GitLab+Docker+SpringCloud+Kubernetes实现可持续自动化微服务
  7. 将markdown文本转换为微信文章格式的解决方案
  8. 【Codeforces Round #291 (Div. 2) D】R2D2 and Droid Army【线段树+二分】
  9. matlab处理图像的报告,matlab图像处理的 毕业论文中期考核报告怎么写
  10. 计算机论文有哪些方向,计算机论文研究方向有以下四类
  11. JasperReport导出Excel锁定行或列
  12. 通过池塘配置ip实验
  13. 关于创建String对象的抉择
  14. 转:教人找电影的攻略
  15. graphpad prism怎么添加图例_Graphpad Prism 绘制散点图详细图解
  16. ORACLE中的KEEP()使用方法
  17. 关于电子科技大学宿舍安装热水的调查
  18. laytpl--前端数据绑定 (示例)
  19. Linux常用命令——ps命令
  20. 疯狂动物消消乐html5游戏在线玩,疯狂动物消消乐

热门文章

  1. 【转】弧度和角度的转换
  2. squid启动失败的解决办法
  3. Linux的cat、more、less有什么区别
  4. 2009年中国贫富标准线
  5. 机器学习基础专题:高斯混合模型和最大期望EM算法以及代码实现
  6. js 上传头像img
  7. Java项目中,如何限制每个用户访问接口的次数
  8. call(),apply()和bind()的详解使用:
  9. 【树莓派】为树莓派配置或扩展swap分区
  10. MyBatis执行过程显示SQL语句的log4j配置