摘要: Java程序经常会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码。JAVA中的ShutdownHook提供了比较好的方案。而在SOFAJRaft-example模块的CounterServer-main方法中就使用了shutdownHook实现优 阅读全文
posted @ 2023-01-25 14:30 Akai-yuan 阅读(67) 评论(0) 推荐(1) 编辑
摘要: 网上有很多资料说 Kryo 只能在 Java 上使用,这点是不对的,事实上除 Java 外,Scala 和 Kotlin 这些基于 JVM 的语言同样可以使用 Kryo 实现序列化。 1.使用方法 (1)添加kyro依赖 <dependency> <groupId>com.esotericsoftw 阅读全文
posted @ 2023-01-24 20:32 Akai-yuan 阅读(19) 评论(0) 推荐(0) 编辑
摘要: Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题。与Kafka、RabbitMQ用于服务间的消息队列不同,disruptor一般用于线程间消息的传递。基于Disruptor开发的系统单线程能支撑每秒600万订单。因为在SOFAJRaft中使用了该框 阅读全文
posted @ 2023-01-23 17:08 Akai-yuan 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 本篇文章旨在分析SOFAJRaft中jraft-example模块的启动过程,由于SOFAJRaft在持续开源的过程中,所以无法保证示例代码永远是最新的,要是有较大的变动或者纰漏、错误的地方,欢迎大家留言讨论。 @Author:Akai-yuan 更新时间:2023年1月20日 写在前面: SOFA 阅读全文
posted @ 2023-01-22 10:38 Akai-yuan 阅读(39) 评论(0) 推荐(1) 编辑
摘要: 1.CPU缓存 要了解什么是伪共享,首先得了解CPU缓存架构与缓存行的知识 (1)CPU缓存架构 主内存RAM是数据存在的地方,CPU和主内存之间有好几级缓存,因为即使直接访问主内存相对来说也是非常慢的。如果对一块数据做相同的运算多次,那么在执行运算的时候把它加载到离CPU很近的地方就有意义了,避免 阅读全文
posted @ 2023-01-21 14:37 Akai-yuan 阅读(61) 评论(2) 推荐(0) 编辑
摘要: 本篇文章将会以redis集群为例,分享在主从集群中会导致数据丢失的一个问题:BrainSplit-集群脑裂 1.什么是集群脑裂 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个主节点写入数据,结果就是不同的客户端会往不同的主节点上写 阅读全文
posted @ 2023-01-19 16:10 Akai-yuan 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 1.概述 Gossip 协议,顾名思义,就像流言蜚语一样,利用一种随机、带有传染性的方式,将信息传播到整个网络中,并在一定时间内,使得系统内的所有节点数据一致。对你来说,掌握这个协议不仅能很好地理解这种最常用的,实现最终一致性的算法,也能在后续工作中得心应手地实现数据的最终一致性。 2.直接邮寄 就 阅读全文
posted @ 2023-01-18 12:52 Akai-yuan 阅读(4) 评论(1) 推荐(0) 编辑
摘要: 1.哈希算法的局限性 通过哈希算法,每个 key 都可以寻址到对应的服务器,比如,查询 key 是 key-01,计算公式为 hash(key-01) % 3 ,经过计算寻址到了编号为 1 的服务器节点 A。 但如果服务器数量发生变化,基于新的服务器数量来执行哈希算法的时候,就会出现路由寻址失败的情 阅读全文
posted @ 2023-01-18 12:51 Akai-yuan 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 1.强一致性与最终一致性 1.1强一致性 强一致性能保证写操作完成后,任何后续访问都能读到更新后的值;强一致性可以保证从库有与主库一致的数据。如果主库突然宕机,我们仍可以保证数据完整。但如果从库宕机或网络阻塞,主库就无法完成写入操作。 1.2最终一致性 最终一致性只能保证如果对某个对象没有新的写操作 阅读全文
posted @ 2023-01-18 12:51 Akai-yuan 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 1.Basic Paxos 假设我们要实现一个分布式集群,这个集群是由节点 A、B、C 组成,提供只读 KV 存储服务。你应该知道,创建只读变量的时候,必须要对它进行赋值,而且这个值后续没办法修改。因此一个节点创建只读变量后就不能再修改它了,所以所有节点必须要先对只读变量的值达成共识,然后所有节点再 阅读全文
posted @ 2023-01-18 12:49 Akai-yuan 阅读(4) 评论(0) 推荐(0) 编辑