ZK&Netty
文章平均质量分 80
ZK&Netty
Tacy0213
不积跬步无以至千里
展开
-
Netty核心源码剖析
为了尽可能的避免锁竞争带来的性能损耗,可以通过串行化设计,即消息的处理尽可能在同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。Netty的NioEventLoop读取到消息之后,直接调用ChannelPipeline的fireChannelRead(Object msg),只要用户不主动切换线程,一直会由NioEventLoop调用到用户的Handler,期间不进行线程切换,这种串行化处理方式避免了多线程操作导致的锁的竞争,从性能角度看是最优的。原创 2023-11-06 18:06:28 · 164 阅读 · 0 评论 -
netty实战-手写通信框架
消息定义包含两部分:消息头;消息体。在消息的定义上,因为是同步处理模式,不考虑应答消息需要填入请求消息 ID,所以消息头中只有一个消息的 ID。如果要支持异步模式,则请求消息头和应答消息头最好分开设计,应答消息头中除了包括本消息的 ID 外,还应该包括请求消息 ID,以方便请求消息的发送方根据请求消息 ID 做对应的业务处理。消息体则支持 Java 对象类型的消息内容。原创 2023-11-02 14:35:48 · 99 阅读 · 0 评论 -
Netty 使用和常用组件
每个事件都可以被分发给 ChannelHandler 类中的某个用户实现的方法,既然事件分为入站和出站,用来处理事件的 ChannelHandler 也被分为可以处理入站事件的 Handler 和出站事件的 Handler,当然有些 Handler 既可以处理入站也可以处理出站。它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或者多个不同的 I/O 操作的程序组件)的开放连接,如读操作和写操作。Netty 使用不同的事件来通知我们状态的改变或者是操作的状态。原创 2023-10-30 14:55:01 · 84 阅读 · 0 评论 -
深入Linux内核理解epoll事件轮询机制
当某一进程调用 epoll_create 方法时,Linux 内核会创建一个 eventpoll 结构体,在内核cache 里建了个红黑树用于存储以后 epoll_ctl 传来的 socket 外,还会再建立一个 rdllist 双向链表,用于存储准备就绪的事件,当 epoll_wait 调用时,仅仅观察这个 rdllist 双向链表里有没有数据即可。有数据就返回,没有数据就 sleep,等到 timeout 时间到后即使链表没数据也返回。原创 2023-10-25 07:05:23 · 393 阅读 · 0 评论 -
BIO实战、NIO编程与直接内存、零拷贝深入剖析
客户端 Socket 类的实例发起连接操作,ServerSocket接受连接后产生一个新的服务端 socket 实例负责和客户端 socket 实例通过输入和输出流进。启动一个新的Client 程序实例,会发现尽管新的 Client实例连接上了服务器,但是ServerSingle。动一个 Client 程序实例,并让这个 Client 阻塞住,位置就在向服务器输出具体请求之前,再。所以在 BIO 通信里,我们往往会在服务器的实现上结合线程来处理连接以及和客户端的。bio 的阻塞,主要体现在两个地方。原创 2023-10-16 12:04:59 · 1025 阅读 · 0 评论 -
Zookeeper分布式一致性协议ZAB源码剖析
ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议,ZAB是Paxos算法的一种简化实现。ZAB 协议定义:ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 原子广播 的协议。下面我们会重点讲这两个东西。原创 2023-10-11 18:00:09 · 553 阅读 · 0 评论 -
Zookeeper集群Leader选举源码剖析
开源项目找入口类一般都是从启动脚本去找,可以从bin目录下的zkServer.sh或zkServer.cmd里找到启动主类运行即可。1、将conf文件夹里的zoo_sample.cfg文件复制一份改名为zoo.cfg,将zoo.cfg文件位置配置到启动参数里。源码导入idea后,org.apache.zookeeper.Version类会报错,需要建一个辅助类。原创 2023-10-10 11:59:38 · 84 阅读 · 0 评论 -
Zookeeper经典应用场景实战(二)
在单体的应用开发场景中涉及并发同步的时候,大家往往采用Synchronized(同步)或者其他同一个JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中,就需要一种更加高级的锁机制来处理跨机器的进程之间的数据同步问题,这种跨机器的锁就是分布式锁。基于数据库的分布式锁。这种方案使用数据库的事务和锁机制来实现分布式锁。虽然在某些场景下可以实现简单的分布式锁,但由于数据库操作的性能相对较低,并且可能面临锁表的风险,所以一般不是首选方案。基于Redis的分布式锁。原创 2023-10-07 18:01:19 · 422 阅读 · 0 评论 -
Zookeeper经典应用场景实战(一)
而一旦流量洪峰过去了,就需要下线大量的节点。在 Curator 中,可以使用 create 函数创建数据节点,并通过 withMode 函数指定节点类型(持久化节点,临时节点,顺序节点,临时顺序节点,持久化顺序节点等),默认是持久化节点,之后调用 forPath 函数来指定节点的路径和数据信息。5.MongoDb的ObjectId:MongoDB是一个分布式的非结构化NoSQL数据库,每插入一条记录会自动生成全局唯一的一个“_id”字段值,它是一个12字节的字符串,可以作为分布式系统中全局唯一的ID。原创 2023-10-06 08:04:52 · 4001 阅读 · 0 评论 -
Zookeeper特性与节点数据类型详解
ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来解决分布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。官方:https://zookeeper.apache.org/ZooKeeper本质上是一个分布式的小文件存储系统(Zookeeper=文件系统+监听机制)。原创 2023-10-05 13:10:40 · 577 阅读 · 0 评论