KANG's BLOG

Let's have some fun

OSI七层协议

OSI七层协议 物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人。 数据链路层: 决定访问网络介质的方式。在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。 网络层: 使用权数据路由经过大型网络 相当于邮局中的排序工人。 传输层: 提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员。 会话层: 允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书。 表示层: 协商数据交换格式 相当公司中简报老板、替老板写信的助理。 应用层: 用户的应用程序和网络之间的接口。 四层交换 通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器

Redis Cluster集群方式

1 部署方式 至少为3主3从,以保证可靠性,比如下面这种部署架构: 2 如何负载均衡 cluster采用hash槽方式进行key和redis实例的匹配,共2^14个槽,即16384个槽。 集群中,每个redis主节点都负责一部分槽,从节点仅冷备作用。 当redis设置值时,槽公式如下: slot = CRC16(key) & 16383 每个节点和槽的映射关系手动配置,如:

Redis支持的数据类型

String(字符串) set key value get key 底层是SDS(Simple Dynamic String),以字符数组储存,也记录了长度,所以属于二进制安全。 Hash(哈希) hset key field value hget key field

Redis的主从复制过程

主从复制过程 slave 服务启动,slave 会建立和 master 的连接,发送 sync 命令。 master 启动一个后台进程将数据库快照保存到 RDB 文件中 注意:此时如果生成 RDB 文件过程中存在写数据操作会导致 RDB 文件和当前主 redis 数据不一致,所以此时 master 主进程会开始收集写命令并缓存起来。 master 就发送 RDB 文件给 slave slave 将文件保存到磁盘上,然后加载到内存恢复 master 把缓存的命令转发给 slave 后续 master 收到的写命令都会通过开始建立的连接发送给 slave。 当 master 和 slave 的连接断开时 slave 可以自动重新建立连接。如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。

Redis过期处理和内存清除

常用命令 1. 设置过期时间 expire pexpire expireat pexpireat p开头代表以毫秒为单位 at结尾代表在某一刻过期 非at结尾代表多长时间后过期

RocketMQ如何实现事务

RocketMQ的事务 RocketMQ保证的是本地事务和发送消息这二者,要么都成功,要么都失败。 如何实现 producer端 producer发送一个“半消息”到broker 然后执行本地事务,调用endTransaction()方法,根据执行结果发送单向rpc请求通知broker完成事务提交或者回滚 broker端 接收到消息根据消息类型,如果是“半消息”,则存放在单独队列中,并定时轮询这些消息去反查producer的本地事务的结果 接收到事务提交或回滚的通知,或者完成反查后,把“半消息”标记为已处理 如果提交,则把消息复制到其真正的主题和队列中去;如果回滚则直接结束事务。

SpringBoot内置Tomcat对请求数的设置

1. accept-count:最大等待数 当所有的请求处理线程都在使用时,所能接收的连接请求的队列的最大长度。当队列已满时,任何的连接请求都将被拒绝。accept-count的默认值为100。 详细的来说,当调用HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。 2. maxThreads:最大线程数 每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数决定了Web服务容器可以同时处理多少个请求。maxThreads默认200,肯定建议增加。但是,增加线程是有成本的,更多的线程,不仅仅会带来更多的线程上下文切换成本,而且意味着带来更多的内存消耗。JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。线程数的经验值为:1核2g内存为200,线程数经验值200;4核8g内存,线程数经验值800。 3. maxConnections:最大连接数 这个参数是指在同一时间,tomcat能够接受的最大连接数。对于Java的阻塞式BIO,默认值是maxthreads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中maxthreads的值。对于Java 新的NIO模式,maxConnections 默认值是10000。

ThreadLocal的原理及内存泄漏问题

一、ThreadLocal概念 ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用。 主要用途: 保存线程上下文信息,在任意需要的地方可以获取 线程安全的,避免某些情况需要考虑线程安全必须同步带来的性能损失 二、ThreadLocalMap ThreadLocal内部有一个内部类ThreadLocalMap,类中用于存储数据的entry定义为: static class Entry extends WeakReference<ThreadLocal<?

tomcat加载jar包的顺序

jar包的加载顺序依次为: $java_home/lib 目录下的java核心api $java_home/lib/ext 目录下的java扩展jar包 java -classpath/-Djava.class.path所指的目录下的类与jar包 $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载 $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载 $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

tomcat加载jar包的顺序

jar包的加载顺序依次为: $java_home/lib 目录下的java核心api $java_home/lib/ext 目录下的java扩展jar包 java -classpath/-Djava.class.path所指的目录下的类与jar包 $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载 $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载 $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载