使用Redis& amp ;;设计系统的最佳架构DBMS

时间:2013-12-04 12:21:15

标签: java architecture redis

我有一个Web实例,可以提供大量高流量的数据。我想使用Redis缓存所有数据。我还想继续更新我的数据库。在“选择”请求期间,请求将被发送到ony Redis。如果请求是“更新”或“删除”,它将同时发送redis和db。

我决定放置一个“请求处理程序”层(例如Web服务,Web实例,具有套接字结构的独立应用程序等)来处理所有类型的请求并将它们发送到正确的应用程序(redis或DBMS)。但是,如果我把那一层,我想,我不能很好地利用Redis的力量。例如,如果我的请求处理程序层已关闭,则Redis的平衡系统和数据保持(最小丢失)技能将变得毫无意义。另一方面,Redis提供处理这么多并发请求,那么我的“请求处理程序”层呢。我的系统的运行状况将取决于我的请求处理程序层?

我只需要您对这类系统架构的建议和想法。

(user1,user2,user3 ... userN)--->请求处理程序----> (Redis或/和DBMS)

2 个答案:

答案 0 :(得分:1)

我认为这个问题与Redis的权力无关。 如果您有一些具有数据的不同端点,则必须将它们正确地路由到redis和/或dbms。它们不以相同的方式通信,因此您应该具有路由和/或转换层。但它不会是一个如此聪明的层。你可以这样做:

  • 如果存在则从redis读取,如果不存在,则从dbms获取,存储在redis上,返回给客户端
  • 在redis上编写删除条目并在dbms上更新

你可以在redis上使用复制系统来获得更强大的功能:

链接到dbms的主redis - >多个redis slave来回馈客户端

答案 1 :(得分:1)

您要求的要点是:

  1. 需要存储的大量数据。
  2. 在redis上选择,在redis和数据库上更新/删除。
  3. 可以将消息路由到redis或数据库的处理程序。
  4. 应用程序级别要求:

    1. 持久性
    2. 可以通过
    3. scaliblity
    4. 为了达到以上所有要点,我将分三部分分解应用程序:

      1. 制作人(提供大量数据)
      2. 消费者(在redis或数据库上存储数据)
      3. 消息队列/代理接受大量数据,为消费者提供持久性和路由。 (如RabbitMq)
      4. 随着消息队列的引入,我们将生产者和消费者分开。两人都没有意识到彼此的存在。

        假设消息队列为RabbitMQ,这个应用程序将如何运作。

        生产者使用一些路由键在队列上发布消息。消费者使用特定的路由密钥绑定到队列。消费者消费者消息及其路由密钥并执行其操作。

        路由键可以是:选择,更新,删除

        消费者:RedisSelectConsumer,RedisUpdateDeleteConsumer,DatabaseUpdateDeleteConsumer

        这样我们就可以在各个模块之间划分责任。

        如果传入消息的比率很高,则会增加消费者的数量。

        在主服务器关闭的情况下,使用REDIS中的复制进行故障转移。