Redis

redis-cluster client容灾(高可用)方案

橙三吉。 提交于 2021-01-03 15:45:25
这个涉及到redis的集群方案,无论是什么方案 都逃不过节点挂掉,高可用的处理。 一般有2种,重连和等待新主节点 提权。 一般来说节点宕机后 大量数据需要重新加载到内存 因此恢复时间比较长(甚至达到几分钟),因此高可用方案,几乎只考虑后者了。、 新的主节点提权,slot切换为连接新主节点继续服务。这里就分析redis-cluster的官方方案了。基于该方案,一般配置是1主2从,该slot一共3个节点供高可用。MOVED error也要一并处理,防止连接到的是从节点, redis集群规范 http://redisdoc.com/topic/cluster-spec.html 来源: oschina 链接: https://my.oschina.net/u/1391394/blog/2245764

“12306”是如何支撑百万QPS的?

陌路散爱 提交于 2021-01-03 15:42:42
点击 上方“ 程序猿技术大咖 ”,选择“ 关注公众号 ”, 一起共进步! 每到节假日期间,一二线城市返乡、外出游玩的人们几乎都面临着一个问题:抢火车票! 来源:http://rrd.me/eE8ty 12306 抢票,极限并发带来的思考 虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会。 尤其是春节期间,大家不仅使用 12306,还会考虑“智行”和其他的抢票软件,全国上下几亿人在这段时间都在抢票。 “12306 服务”承受着这个世界上任何秒杀系统都无法超越的 QPS,上百万的并发再正常不过了! 笔者专门研究了一下“12306”的服务端架构,学习到了其系统设计上很多亮点,在这里和大家分享一下并模拟一个例子:如何在 100 万人同时抢 1 万张火车票时,系统提供正常、稳定的服务。 Github代码地址: https: //github.com/GuoZhaoran/spikeSystem 大型高并发系统架构 高并发的系统架构都会采用分布式集群部署,服务上层有着层层负载均衡,并提供各种容灾手段(双火机房、节点容错、服务器灾备等 ) 保证系统的高可用,流量也会根据不同的负载能力和配置策略均衡到不同的服务器上。 下边是一个简单的示意图: 负载均衡简介 上图中描述了用户请求到服务器经历了三层的负载均衡,下边分别简单介绍一下这三种负载均衡。 ①OSPF

Redis 的处理模型AE 模块

↘锁芯ラ 提交于 2021-01-03 15:17:11
事件类型 – 时间类型(serverCron) – 文件类型(客户端请求,复制等) – 两个类型不会并发,串行执行 • 好处: – 不需要考虑各个操作并发的情况 • 坏处: – 效率会有影响(时间事件如serverCron可能会被 阻塞一段较长的时间) 事件的实现 • 将文件事件和时间事件注册到eventLoop中, eventloop在系统main方法中开始循环 • 从epoll/kqueue/select中选择一种多路复用方 法 • 先处理文件事件再处理时间事件 (aeProcessEvent) – 遍历时间事件链表中找到即将触发的时间 – 以这个时间和当前时间差为超时时间去pull文件事 件,置入一个数组中,并根据读写不同的属性调用 对应的回调函数 –遍历时间事件链表,处理到期的时间事件 来源: oschina 链接: https://my.oschina.net/newchaos/blog/4874391

Java项目笔记之秒杀系统基础搭建

ε祈祈猫儿з 提交于 2021-01-03 11:45:51
不点蓝字,我们哪来故事? 秒杀系统 目的: 不仅仅是秒杀 !!! 项目搭建 基础模块搭建 创建仓库替换config配置中的仓库路径; 将项目上传到git: 先初始化,git init; 在idea中选择 提交项目到远程仓库:添加ignore文件在进行add . ,但是ignore文件也要提交上去,ignore文件的内部第一行就将自己给忽略了,我们要将它强制提交,或者删除第一行之后再提交; 执行命令强制提交ignore文件: git add -f .gitignore 执行分支(仅第一次需要执行): git push -u origin master 在项目中添加gitignore文件;不加会把目录下的所有文件都提交到远程仓库; 上面命令需要gitignore文件: 第一次导入需要的: 命令行的方式推送: git remote add origin <git仓库复制的HTTPS路径> git push -u origin master 注意:这里因为创建仓库的时候已经有了一个.gitignore文件,上面做了强制add我们自己的文件,导致了文件名形同内容不同的情况,所以冲突了。所以,要么删除仓库的文件在推送,要么不推送这个文件。或者先拉取再推送: git pull origin master git push -u origin master 至此,仓库的初始化就完成了;

加强版Redis,又一款国产高性能KV存储数据库开源了!

杀马特。学长 韩版系。学妹 提交于 2021-01-03 11:00:12
项目简介 Tendis是腾讯互娱CROS DBA团队 & 腾讯云数据库团队自主设计和研发的分布式高性能KV存储数据库,兼容Redis核心数据结构与接口。 可提供大容量、低成本、强持久化的数据库能力,适用于兼容Redis协议、需要大容量且较高访问性能的温冷数据存储场景。 Tendis目前已经被应用到腾讯内、外部大型项目中。 集群架构 Tendis使用去中心化集群架构,每个数据节点都拥有全部的路由信息,用户可以访问集群中的任意节点,并且通过redis的move协议,最终路由到正确的节点。 每个Tendis节点维护各自的slot数据,任意两个master节点之间的slot不重复,master节点之间支持基于slot的数据搬迁,主备节点之间通过binlog实现数据复制。 所有节点之间通过gossip协议进行通讯,类似于redis cluster的分布式实现,所有节点通过gossip协议通讯,可指定hashtag来控制数据分布和访问,使用和运维成本极低。 适用场景 兼容Redis协议,需要大容量且较高访问性能的温冷数据存储场景 适合成本为主要考虑因素,业务数据有高持久化要求的业务场景 解决原生Redis固有的fork问题而预留部分内存问题 主要特性 兼容Redis协议 完全兼容redis协议,支持redis主要数据结构和接口,兼容大部分原生Redis命令。 持久化存储

Mysql Binlog日志写入模式和文件结构

筅森魡賤 提交于 2021-01-03 10:53:27
目录 Binlog日志介绍 Binlog的记录模式 Binlog的文件结构 Binlog日志介绍 二进制log,别于数据库引擎的redo log。 binlog记录记录DML DDL 。 Binlog的记录模式 statement 有点像redis的 rdb持久化。 Binlog的文件结构 这个log的格式了解即可,查看log时再来查询。 来源: oschina 链接: https://my.oschina.net/u/4306931/blog/4874139

摸鱼 | 有内鬼,停止交易 ( 推荐两个 Github 项目)

安稳与你 提交于 2021-01-03 08:47:53
这个周末没有学习,连摸鱼都争分夺秒。 光光加班就夺走了我周末一天半的时间,感谢领导至少让我在家睡觉而不是在公司通宵。 感恩。 技术文这周写了一些,今天不聊技术,分享两个 Github 项目。 有内鬼,停止交易 一个生成诺基亚的信息截图,可以玩一玩,蛮有意思的。 https://github.com/dcalsky/zzkia 代码可以使用 Docker 直接部署,作者连 Dockerfile 与 docker-compose 配置文件都一并上传了,可以说很贴心。 可以先看看咸鱼生成的样例: 大家可以自己部署一个也可以使用作者搭建好的案例。 https://zzkia.noddl.me:8020/ 这个网站访问较卡,动手能力强的朋友可以参考咸鱼之前写过的 docker 教程自己搭建。 http://mp.weixin.qq.com/mp/homepage?__biz=MzIwNDI1NjUxMg==&hid=3&sn=fd02a149bab8c72908341b6523af7c42&scene=126&sessionid=1571571392&subscene=0&clicktime=1571571396#wechat_redirect flask-restful-example https://github.com/qzq1111/flask-restful-example

redis 内存突增原因

邮差的信 提交于 2021-01-02 17:04:23
工作中遇见redis内存突增2G,一段时间之后又突然释放1G,这个时间段内qps正常,没有大数据写入,其他各项正常。 问题原因,redis内部维护了一个数组字典,存储key指向的内存位置(类似HashMap的容量)。当redis的元素=数组字典的长度时,就会扩容。扩容过程是,首先申请2倍当前长度的空间,然后渐进式hash把旧字典的数据拷贝到新字典去,拷贝完成释放旧字典空间。 字典存储的是指针,每个指针占用8个字节,当key的数量达到134217728时(1.3亿),此时134217728*8字节=1GB,就会导致先申请2GB,再释放1GB。 另外需要注意的是,redis的过期时间也是一个单独的字典维护,当有过期时间的key达到1.3亿时,也有突增2GB的现象。 参考文章: https://www.cnblogs.com/ourroad/p/4891648.html 渐进式hash说明 https://www.cnblogs.com/meituantech/p/9376472.html 比较详细的介绍了rehash 关键字: redis内存突增 内存突增1GB 内存突增2GB 来源: oschina 链接: https://my.oschina.net/u/4193646/blog/3105308

Docker容器开机自动启动

血红的双手。 提交于 2021-01-02 16:39:50
部署项目服务器时,为了应对停电等情况影响正常web项目的访问,会把Docker容器设置为开机自动启动。 在使用docker run启动容器时,使用--restart参数来设置: [plain] view plain copy # docker run -m 512m --memory-swap 1G -it -p 58080:8080 --restart=always --name bvrfis --volumes-from logdata mytomcat:4.0 /root/run.sh --restart具体参数值详细信息: no - 容器退出时,不重启容器; on-failure - 只有在非0状态退出时才从新启动容器; always - 无论退出状态是如何,都重启容器; 如果创建时未指定 --restart=always ,可通过update 命令设置 docker update --restart=always xxx 还可以在使用on - failure策略时,指定Docker将尝试重新启动容器的最大次数。默认情况下,Docker将尝试永远重新启动容器。 [plain] view plain copy # sudo docker run --restart=on-failure:10 redis 转载地址:http://blog.csdn.net/lin521lh

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

橙三吉。 提交于 2021-01-02 13:04:44
Java技术栈 www.javastack.cn 优秀的Java技术公众号 想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉。 下面我为大家准备了一些 Dubbo 常见的的面试题,一些是我经常问别人的,一些是我过去面试遇到的一些问题,总结给大家,希望对大家能有所帮助。 1、Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 面试官问你如果这个都不清楚,那下面的就没必要问了。 官网:http://dubbo.apache.org 2、为什么要用Dubbo? 因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。内部使用了 Netty、Zookeeper,保证了高性能高可用性。 使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。 下面这张图可以很清楚的诠释,最重要的一点是,分布式架构可以承受更大规模的并发流量。 下面是 Dubbo 的服务治理图。 3、Dubbo 和 Spring Cloud 有什么区别? 两个没关联,如果硬要说区别