简介在分布式系统架构中,负载均衡是很有必要的.当有负载均衡的系统中,可以将请求均匀的分布在多个主机中,不至于一个所有的请求都一股脑到了一个主机中,会导致假的分布式系统.因此就有了负载均衡的出现.有两种负载均衡.一种是硬件的负载均衡,比较好的有F5负载均衡,这里就不说了.一种是软件提供的负载均衡.目前有集中主流的比较好的软件负载均衡算法.这里简单说一下. 负载均衡算法加权随机算法思想: 很多服务器,都有自己的权重,将权重平铺到一个一维坐标上.比如有3个服务器A,B,C,权重分别为5,3,2.总权重为10.之后,选一个随机数出来,落在区间[0,5)就是A服务器的区间.[5,8)就是B,[8,10) ...
Mysql-InnoDB行记录格式
InnoDB行记录格式InnoDB存储引擎是面向列的,就是说数据是按照行进行存放的. 每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200行的记录.这里主要介绍两种行记录格式.Compact和Redundant格式. Compact行记录格式 首先首部是一个非NULL变长字段长度列表,并且是按照列的顺序逆序放置的,其长度为: 若列的长度小于255字节,用1字节表示 若大于255字节,用2字节表示 变长字段的长度最大不可以超过2字节,因为在MySQL数据库中varchar类型的最大长度限制为65535.也就是列表中的最后一个数据就是表中第一个变长字段的数据列的数据的长度. 变 ...
MYSQL-InnoDB索引
索引索引在Mysql中是很有用的,通过索引能够很快速的找到我们所要查询的数据.这里讲一下InnoDB存储引擎中的索引实现. B+索引在InnoDB引擎中,索引是通过B+树来实现的.并且是聚集索引.B+树不理解的可以去搜一下,网上教程挺多的.B+树索引在数据库中有一个特性就是高扇出性,在数据库中,树的高度一般都是2-4层.这也就是说一般查找某一个键值的记录只需要进行2-4次IO就可以. 在InnoDB引擎中中B+树索引可以分为聚集索引和辅助索引,他们两个不同的地方在与聚集索引的叶子节点中存放的是行记录,辅助索引中存放的是主键值.在B+树中,非叶子节点也就是索引节点,非叶子节点是真正存储数据 ...
InnoDB表存储格式
InnoDBInnoDB引擎作为现在mysql的默认引擎,支持事务处理与外键约束,并且有很高的性能.今天这里来说一下InnoDB存储引擎中表的存储格式. 索引组织表在InnoDB中,表都是根据主键顺序组织存放的.在InnoDB引擎中,每个表都有一个主键,如果在创建表的时候没有显示定义,则将表中的第一个非空唯一索引设为主键,如果没有这样的索引,则会自动创建一个6字节大小的指针.看一个例子: mysql> create table t( a int not null, unique key(a) ); mysql> insert into t select 1; mysql> ...
Netty之ChannelHandler事件
ChannelHandler事件Netty是一款基于事件驱动的异步I/O框架.因此有很多事件.有时候不清楚事件是什么时候触发的,这里总结一下. inbound事件入站事件,在Netty中入站事件是相对于被动发生的一些事件.比如说可读,写事件改变.是从管道的头部向尾部流动.public class TestMethodHandler extends ChannelInboundHandlerAdapter { // 在将此handler添加到管道中的时候会触发此事件. @Override public void handlerAdded(ChannelHand ...
Netty之unsafe
unsafe简介Unsafe接口实际上是Channel接口的辅助接口,它不应该被用户代码直接调用,实际上的I/O操作都是有Unsafe接口负责完成的. API定义 方法名 返回值 说明 localAddress() SocketAddress 返回本地绑定的Socket地址 remoteAddress() SocketAddress 返回通信对端的Socket地址 register(EventLoop eventLoop, ChannelPromise promise) void 注册Channel到多路复用器上,一旦注册操作完成,通知ChannelFuture bin ...
Netty之Channel
Channel简介Channel是Netty网络操作的抽象类,聚合了一组功能包括但不限于网络的读写,客户端发起连接,主动关闭连接等.也包括了Netty框架相关的功能,比如获得该Channel的EventLoop和pipeline等. 在Netty中Channel是和JDK的SocketChannel分开的. 通过自定义的Channel对网络的I/O操作,网络I/O相关联的其他操作封装起来.统一对外提供.并且为SocketChannel和ServerSocketChannel提供了统一的视图.由不同的子类实现不同的功能.公共功能在抽象父类实现.最大的实现了功能和接口的重用. Chann ...
Netty之事件传播机制
Netty事件传播机制使用过Netty应该都知道,Netty是通过在pipeline中设置一系列处理器来对数据进行一系列处理的.但是总是可能因为事件传播不过去而特别烦恼,也不知道是哪里出错了.今天这里来分析一下在Netty中的事件传播机制. 入站和出站.入站和出站首先要知道这三个类.ChannelHandler,ChannelOutboundHandler和ChannelInboundHandler.这两个一个是用来处理出站事件,一个处理入站事件.类文件结构图Netty对这两个接口都进行了一个适配.继承适配器之后只需要实现需要的方法就可以了,而不需要实现所有的方法.ChannelInbound ...
Netty服务端启动分析
Netty服务端大家都知道Netty启动服务端只需要配置好参数,然后调用bind()函数就可以启动了.下面这段代码就是普遍的的Netty中服务器的写法.我们从下面这段开始分析.bootstrapServer.group(bossGroup,workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override ...
Netty基本使用
NettyNetty就是封装了JDK的NIO网络库。用官网的话说是,Netty是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端。 为什么使用Netty而不用jdk JDK中使用的话需要对NIO编程有足够的了解,编程也比较复杂,不小心就会出现很多bug Netty底层的I/O模型可以随意更换,而不需要改变太多的代码,只需要改一些参数就可以了。 Netty解决了jdk的一些bug,比如select空轮询导致cpu100 Netty自带拆包解包,异常检测机制,可以让用户只关心业务逻辑 自带很多协议栈,比如http协议,google的protobuf协议 简单使用首先如果想 ...