Redis+MongoDB 最佳实践 做到读写分离 -摘自网络

方案1. (被否定)

加上Redis,做到MongoDB的读写分离,单一进程从MongoDB及时把任务同步到Redis中。

看起来很完美,但是上线后出现了各种各样的问题,列举一下:

1.Redis队列长度为多少合适?

2.同步进程根据优先级从MongoDB向Redis同步过程中,一次取多少任务合适?太大导致很多无谓的开销,太小又会频繁操作MongoDB

3.当某一个子任务处理较慢的时候,会导致MongoDB的前面优先级较高的任务没有结束,而优先级较低的确得不到处理,造成消费者空闲

最终方案:

在生产者产生一个任务的同时,向Redis同步任务,Redis sort set(有序集合,保证优先级顺序不变),消费者通过RPC调用时候,RPC服务器从Redis中取出任务,然后结束任务后从MongoDB中删除。

测试结果,Redis插入效率。Redis-benchmark 并发150,32byte一个任务,一共100W个,插入效率7.3W(不使用持久化)

在这之前我们的担心都是没必要的,Redis的性能非常的好。

目前此套系统可以胜任每天5KW量的任务,我相信可以更多。

时间: 2025-01-03 19:33:35

Redis+MongoDB 最佳实践 做到读写分离 -摘自网络的相关文章

Mongodb集群部署ReplicaSet+Sharding -摘自网络

网上关于三种集群方式的搭建方式很多,都是分开来介绍的.Replica Set (复制集成)主要是做主从库的,但是没法实现负载均衡的效果,真正实现这个的,是Sharding(分片集群),通过数据分布在每个分片上而实现.所以,如果只用分片,如果一个只有一个主库,那么挂了就真的挂了.所以在我尝试的集群部署采用的Replica Set+Sharding的方式.OS是Redhat_x64系统,客户端用的是Java客户端.Mongodb版本是mongodb-linux-x86_64-2.4.9.tgz. 要

mongoDB 3.0 安全权限访问控制 -摘自网络

MongoDB3.0权限,啥都不说了,谷歌百度出来的全是错的.先安装好盲沟,简单的没法说. 首先,不使用 —auth 参数,启动 mongoDB: mongodb-linux-i686-3.0.0/bin/mongod -f mongodb-linux-i686-3.0.0/mongodb.conf 此时你 show dbs 会看到只有一个local数据库,那个所谓的admin是不存在的. mongoDB 没有炒鸡无敌用户root,只有能管理用户的用户 userAdminAnyDatabase.

spring mongodb 复制集配置(实现读写分离)

注:mongodb当前版本是3.4.3 spring连接mongodb复制集的字符串格式: mongodb://[username:[email protected]]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mongodb:// 前缀,代表这是一个Connection String username:[email protected] 如果启用了用户认证,需要指定用户密码 hostX:por

mongoDB的读写分离

一.ReadPreference读偏好 在副本集Replica Set中才涉及到ReadPreference的设置,默认情况下,读写都是分发都Primary节点执行,但是对于写少读多的情况,我们希望进行读写分离来分摊压力,所以希望使用Secondary节点来进行读取,Primary只承担写的责任(实际上写只能分发到Primary节点,不可修改). MongoDB有5种ReadPreference模式: primary: 主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常. p

spring-data-redis读写分离

在对Redis进行性能优化时,一直想对Redis进行读写分离.但由于项目底层采用spring-data-redis对redis进行操作,参考spring官网却发现spring-data-redis目前(1.7.0.RELEASE)及以前的版本并不支持读写分离.  一.源码分析 spring-data-redis中关于JedisConnectionFactory的配置如下: <?xml version="1.0" encoding="UTF-8"?> &l

Mysql 主从复制,读写分离

Mysql 主从复制及读写分离 特别推荐看:amoeba.xml 的配置部分,在百度上看了很多配置都不完整,是我测试时的痛点 实验的目的: 有两部分:第一实现Mysql主从复制,第二实现读写分离. 下面是实验的环境: 192.168.58.11     安装了amoeba 的节点 192.168.58.16      master    系统:rhel 5.4 192.168.58.12      slave     系统: rhel 5.4 192.168.58.11      代理     

关于防止语音网关被盗用的最佳实践

问题描述尽管事实情况是没有任何内部用户拨打过国际或省际长途电话,但用户的电信账单依然出现了难以置信的高额费用.记录显示,用户曾经频繁.长时间联系国际和省际的长途用户,从而产生了非常高的长途费用.本文介绍如何发现并防止语音网关被盗用的实例.最佳实践1. 防止来自IP网络的盗用如果用户的语音网关有Internet/Intranet可达的IP地址,但没有配置足够的安全特性,任何voip的终端都有可能跳过管理员的耳目,实现越权拨打电话.针对此类风险,我们建议的最佳实践如下:在网关上增加访问列表,除了允许

第五部分 架构篇 第十四章 MongoDB Replica Sets 架构(自动故障转移/读写分离实践)

说明:该篇内容部分来自红丸编写的MongoDB实战文章. 1.简介 MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余,多机器中同一时刻只有一台是用于写操作,正是由于这个情况,为了MongoDB提供了数据一致性的保障,担当primary角色的服务能把读操作分发给Slave(详情请看前两篇关于Replica Set成员组成和理解). MongoDB高可用分为两种: Master-Slave主从复制:只需要在某一个服务启动时加上-master参数,而另外一个服务加上-slave与-so

Redis 在 SNS 类应用中的最佳实践有哪些?

1. 消息队列(通知类.延迟更新类)2. 热点数据的实时缓存(比如feed,数据库.缓存同时写)3. 热点列表数据缓存(首页.热门话题等)4. counter(计数器,大多是用缓存实现的)5. 记日志最好不要用redis,用mongodb比较适合.Redis 在 SNS 类应用中的最佳实践有哪些?,码迷,mamicode.com