摘要: 一、背景 客经使用rocketMq批量推送数据到pcr执行次贷策略引擎和互斥决策引擎,pcr将决策结果推送到前置路由。 二、问题现象描述 在客经推数据时,pcr-updateBorrowState消息积压越来越多,从日志上看,pcr不拉取消息,重启服务器后可以消费消息,过一会又消费变慢,不断重启才让 阅读全文
posted @ 2023-06-08 16:23 上好佳28 阅读(455) 评论(0) 推荐(0)
摘要: Redis使用的是I/O多路复用 首先,Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这 阅读全文
posted @ 2023-06-08 16:14 上好佳28 阅读(39) 评论(0) 推荐(0)
摘要: select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间 select 调用后select函数会阻塞,直到有描述符就绪(有数据 可读、可写 阅读全文
posted @ 2023-06-08 16:07 上好佳28 阅读(40) 评论(0) 推荐(0)
摘要: I/O过程 对于一次IO访问(这回以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的缓冲区,最后交给进程。所以说,当一个read操作发生时,它会经历两个阶段: 1. 等待数据准备 (Waiting for the data to be ready 阅读全文
posted @ 2023-06-08 16:06 上好佳28 阅读(55) 评论(0) 推荐(0)
摘要: 直接I/O和缓存I/O 直接I/O 缓存 I/O 又被称作标准 I/O,数据会先被拷贝进程缓冲区,在拷贝到操作系统内核的缓冲区中,然后才会写到存储设备中 阅读全文
posted @ 2023-06-08 15:39 上好佳28 阅读(32) 评论(0) 推荐(0)
摘要: 用户空间和内核空间 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操心系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间 进程上下文切换 从一个进程的运行转到另一个进 阅读全文
posted @ 2023-06-08 15:37 上好佳28 阅读(12) 评论(0) 推荐(0)
摘要: 如何保证 Redis 中的数据都是热点数据 提供一种简单实现缓存失效的思路: LRU(最近少用的淘汰) 即redis的缓存每命中一次,就给命中的缓存增加一定ttl(过期时间)(根据具体情况来设定, 比如10分钟). 一段时间后, 热数据的ttl都会较大, 不会自动失效, 而冷数据基本上过了设定的tt 阅读全文
posted @ 2023-06-08 15:25 上好佳28 阅读(29) 评论(0) 推荐(0)
摘要: 多客户端同时并发写一个key,可能本来应该先到的数据后到了,导致数据版本错了。或者是多客户端同时获取一个key,修改值之后再写回去,只要顺序错了,数据就错了 首先使用分布式锁,确保同一时间,只能有一个系统实例在操作某个key 然后修改key的值时,要先判断这值的时间戳是否比缓存里的值的时间戳更靠后, 阅读全文
posted @ 2023-06-08 15:24 上好佳28 阅读(15) 评论(0) 推荐(0)
摘要: 缓存穿透 缓存穿透是指查询一个缓存和数据库中都不存在的数据,客户端不断发起请求,导致数据库压力过大 解决方法 1、采用布隆过滤器,将所有可能存在的数据,哈希到一个很大的 bitmap 中, 一个一定不存在的数据会被 bitmap 拦截调,从而避免了对数据库的查询压力。 2、如果查询的数据为空,直接将 阅读全文
posted @ 2023-06-08 15:23 上好佳28 阅读(24) 评论(0) 推荐(0)
摘要: 横向扩容,保证哈希一致性 一致性哈希将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1(即哈希值是一个32位无符号整形) 下一步将各个服务器使用Hash进行一个哈希,具体可以选择服务器的ip或主机名作为关键字进行哈希,这样每台机器就能确定其在哈希环上的位置 接下来使用 阅读全文
posted @ 2023-06-08 15:22 上好佳28 阅读(80) 评论(0) 推荐(0)