我有一个Web实例,可以提供大量高流量的数据。我想使用Redis缓存所有数据。我还想继续更新我的数据库。在“选择”请求期间,请求将被发送到ony Redis。如果请求是“更新”或“删除”,它将同时发送redis和db。
我决定放置一个“请求处理程序”层(例如Web服务,Web实例,具有套接字结构的独立应用程序等)来处理所有类型的请求并将它们发送到正确的应用程序(redis或DBMS)。但是,如果我把那一层,我想,我不能很好地利用Redis的力量。例如,如果我的请求处理程序层已关闭,则Redis的平衡系统和数据保持(最小丢失)技能将变得毫无意义。另一方面,Redis提供处理这么多并发请求,那么我的“请求处理程序”层呢。我的系统的运行状况将取决于我的请求处理程序层?
我只需要您对这类系统架构的建议和想法。
(user1,user2,user3 ... userN)--->请求处理程序----> (Redis或/和DBMS)
答案 0 :(得分:1)
我认为这个问题与Redis的权力无关。 如果您有一些具有数据的不同端点,则必须将它们正确地路由到redis和/或dbms。它们不以相同的方式通信,因此您应该具有路由和/或转换层。但它不会是一个如此聪明的层。你可以这样做:
你可以在redis上使用复制系统来获得更强大的功能:
链接到dbms的主redis - >多个redis slave来回馈客户端
答案 1 :(得分:1)
您要求的要点是:
应用程序级别要求:
为了达到以上所有要点,我将分三部分分解应用程序:
随着消息队列的引入,我们将生产者和消费者分开。两人都没有意识到彼此的存在。
假设消息队列为RabbitMQ,这个应用程序将如何运作。
生产者使用一些路由键在队列上发布消息。消费者使用特定的路由密钥绑定到队列。消费者消费者消息及其路由密钥并执行其操作。
路由键可以是:选择,更新,删除
消费者:RedisSelectConsumer,RedisUpdateDeleteConsumer,DatabaseUpdateDeleteConsumer
这样我们就可以在各个模块之间划分责任。
如果传入消息的比率很高,则会增加消费者的数量。
在主服务器关闭的情况下,使用REDIS中的复制进行故障转移。