深入netty之Pipeline 设计原理 通过上图我们可以看到,一个 Channel 包含了一个 ChannelPipeline,而 ChannelPipeline 中又维护了一个由 ChannelHandlerContext 组成的双向链表。这个链表的头是 HeadContext,链表的尾是 TailContext,并且每个 ChannelHandlerContext 中又关联着一个 ChannelHandler
深入netty之BootStrap源码分析 BootstrapBootstrap 是 Netty 提供的一个便利的工厂类, 我们可以通过它来完成 Netty 的客户端或服务器端的 Netty 初始化。 下面我先来看一个例子, 从客户端和服务器端分别分析一下 Netty 的程序是如何启动的。首先,让我们从客户端的代码 片段开始
深入netty之核心类关系梳理 业务中 Netty 的使用场景netty是属于更底层的东西,主要用于构建高性能、低时延的各种 Java 中间件,例如 MQ、分布式服务框架、ESB 消息总线等,Netty 主要作为基础通信框架为消息中间件、RPC 框架等产品提供高性能、低时延的通信服务;例如阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,dubbo的服务提供者、服务消费者和性能统计等节点之间使用 Netty 进行异步/同步通信
深入kafka之副本机制 分区的副本(Replica)机制我们已经知道Kafka的每个topic都可以分为多个Partition,并且多个partition会均匀分布在集群的各个节点下。虽然这种方式能够有效的对数据进行分片,但是对于每个partition来说,都是单点的,当其中一个partition不可用的时候,那么这部分消息就没办法消费。所以kafka为了提高partition的可靠性而提供了副本的概念(Replica),通过副本机制来实现冗余备份每个分区可以有多个副本,并且在副本集合中会存在一个leader的副本,所
深入kafka之消息分区策略原理 kafka消息消费原理在实际生产过程中,每个topic都会有多个partitions,多个partitions的好处在于,一方面能够对broker上的数据进行分片有效减少了消息的容量从而提升io性能。另外一方面,为了提高消费端的消费能力,一般会通过多个consumer去消费同一个topic ,也就是消费端的负载均衡机制,也就是我们接下来要了解的,在多个partition以及多个consumer的情况下,消费者是如何消费消息的
InnoDB 中事务的解决方案 InnoDB 中事务的解决方案我们知道单机事务中事务的解决方案有两个层面:其一是事务本身需要满足的条件:也就是事务的ACID四大特性,数据库需要采用什么措施来保证其二是并发事务带来的问题:也就是脏读,不可重复读和幻读,数据库应该如何来解决这些问题
Redis Cluster的分布式实现机制 Redis ClusterRedis Cluster 是在 Redis 3.0 的版本正式推出的,用来解决分布式的需求,同时也 可以实现高可用。跟 Codis 不一样,它是去中心化的,客户端可以连接到任意一个可用 节点Redis Cluster 可以看成是由多个 Redis 实例组成的数据集合。客户端不需要关注数 据的子集到底存储在哪个节点,只需要关注这个集合整体。 以 3 主 3 从为例,节点之间两两交互,共享数据分片、节点状态等信息
Tomcat架构设计 tomcat功能我们知道如果要设计一个系统,首先是要了解需求。 Tomcat 要实现本质是2个核心功能处理 Socket 连接,负责网络字节流与 Request 和 Response 对象相互转化加载和管理 Servlet,以及具体处理 Request 请求
RocketMQ的整体架构 rocketmqrocketmq天然支持高可用,它可以支持多主多从的部署架构,这也是和kafka最大的区别之一原因是RocketMQ中并没有master选举功能,所以通过配置多个master节点来保证rocketMQ的高可用。和所有的集群角色定位一样,master节点负责接受事务请求、slave节点只负责接收读请求,并且接收master同步过来的数据和slave保持一直。当master挂了以后,如果当前rocketmq是一主多从,就意味着无法接受发送端的消息,但是消费者仍然能够继续消费
使用zookeeper作为注册中心实现RPC 我们使用netty作为底层通讯机制,结合zookeeper实现RPCNetty 基本上是作为架构的技术底层而存在的,主要用于完成高性能的网络通信,我们可以使用要完成基于netty去重构RPC框架,首先要明白RPC完成了什么工作?其次要明白netty完成了什么工作
深入探究synchronize锁机制 思考锁是如何存储的我们以对象在 jvm 内存中是如何存储作为切入点,去看看对象里面有什么特性能够实现锁锁的状态标识就是存放在对象的存储空间中,虚拟机中对对象的存储分为三部分:对象头、实例数据、对齐填充
MyCat分片策略 MyCat分片策略分片的目标是将大量数据和访问请求均匀分布在多个节点上,通过这种方式提升数据服务的存储和负载能力Mycat 分片策略总体上分为连续分片和离散分片,还有一种是连续分片和离散分片的结合,例如先范围后取模
mycat分库分表 Mycat是数据库分库分表的中间件,Mycat使用最多的两个功能是:读写分离和分库分表功能,支持全局表和E-R关系(这两个比较实用)mycat相当于是一个代理,可以将多个实际数据库组合成一个完整的虚拟数据库我们可以直接访问mycat的端口,其使用的是mysql原生的协议连接数据库进行通信mycat主要用来解决水平拆分的问题,因为水平拆分和架构无关数据量大了就必须要做,而垂直拆分更多的是架构设计的问题
mycat分库分表 Mycat是数据库分库分表的中间件,Mycat使用最多的两个功能是:读写分离和分库分表功能,支持全局表和E-R关系(这两个比较实用)mycat相当于是一个代理,可以将多个实际数据库组合成一个完整的虚拟数据库我们可以直接访问mycat的端口,其使用的是mysql原生的协议连接数据库进行通信mycat主要用来解决水平拆分的问题,因为水平拆分和架构无关数据量大了就必须要做,而垂直拆分更多的是架构设计的问题
InnoDB 内存结构和磁盘结构 一条更新 SQL 是如何执行的 update 操作其实包括了更新、插入和删除。如果有看过 MyBatis 的源码,应该知道 Executor 里面也只有 doQuery()和 doUpdate()的方法,更新流程和查询流程有什么不同呢?基本流程也是一致的,也就是说,它也要经过解析器、优化器的处理,最后交给执行器。区别就在于拿到符合条件的数据之后的操作
mySql架构 mysql架构分层总体上,我们可以把 MySQL 分成三层,跟客户端对接的连接层,真正执行操作的服务层,和跟硬件打交道的存储引擎层(参考 MyBatis:接口、核心、基础)连接层我们的客户端要连接到 MySQL 服务器 3306 端口,必须要跟服务端建立连接,那么管理所有的连接,验证客户端的身份和权限,这些功能就在连接层完成