- 博客(18)
- 收藏
- 关注
原创 高并发环境下qps计算
1、若发现要创建新的bucket,则让一个线程去创建,别的线程则取出上一个bucket进行处理2、数据 striping 就是把逻辑上连续的数据分为多个段,使这一序列的段存储在不同的物理设备上。通过把段分散到多个设备上可以增加访问并发性,从而提升总体的吞吐量。3、Hystrix: Latency and Fault Tolerance for Distributed Systems
2016-07-27 22:16:15
16446
原创 kafaka-无限横向扩展消息中间件
kafka将每个partition数据复制到多个server上,任何一个partition有一个leader和多个follower(可以没有); leader处理所有的read-write请求,follower需要和leader保持同步 当所有的follower都将一条消息保存成功,此消息才被认为是"committed",那么此时consumer才能消费它.
2016-06-13 11:04:28
2829
原创 tcp连接Recv-Q、syn flood攻击及backlog监控
1、listen和非listen状态下,Recv-Q分别表示等待accept的连接个数和等待用户进程接收的字节数2、简单说SYN cookie就是将连接信息编码在ISN(initial sequence number)中返回给客户端,这时server不需要将半连接保存在队列中,而是利用客户端随后发来的ACK带回的ISN还原连接信息,以完成连接的建立,避免了半连接队列被攻击SYN包填满3、netstat -s //自系统启动开始到现在的统计和
2016-05-17 16:01:49
3379
原创 tcp连接及生命周期
最多有65535个端口同时在使用每个端口允许的最大连接数,和单个进程最大打开的文件数有关TCP连接建立需要三次握手,断开需要四次
2016-05-16 14:41:08
4729
原创 深入了解httpclient之初探
如果把现有的同步请求改成异步请求,那么业务里面则不需要再使用线程池,而且不必为每个请求再分配一个线程来执行,将大大减少业务线程的数量,节省不少的线程上下文切换开销,给机器性能提升不少。
2016-05-13 14:47:36
5080
原创 线程池之拒绝策略
ThreadPoolExecutor.execute(Runnable command)提供了提交任务的入口,此方法会自动判断如果池子满了的话,则会调用拒绝策略来执行此任务,接口为RejectedExecutionHandler,内置的4中策略分别为AbortPolicy(默认)、DiscardPolicy、DiscardOldestPolicy、CallerRunsPolicy。
2016-05-13 11:21:05
13451
原创 线程池之深度了解-ThreadPoolExecutor
优先启动corePoolSize个线程,然后多的任务放到队列里面等待corePoolSize的线程去执行,只有当队列满的时候,才会启动最多maximumPoolSize的线程去执行任务
2016-05-12 12:04:22
381
原创 JNAVI项目之用classloader实现热部署
JNAVI项目是我司开发的用于大规模分布式服务框架,能提供http,tcp,udp请求服务,并提供了大量的高效率、高性能、池化的请求底层服务的接口的框架。其中之一的特点就是类似于tomcat,支持部署多个业务模块,每个业务模块支持热部署,其就是利用classload实现的。先简单看图。整个项目分3层,第一层就是启动JNAVI的代码,即
2016-05-08 11:56:18
664
原创 classload之java程序入口sun.misc.Launcher源码分析
java程序的入口就是sun.misc.Launcher了,这个类里面又继承了ExtClassLoader和AppClassLoader和bootstrap的url路径可以看到Launcher类初始化时,先初始化了个ExtClassLoader,然后又初始化了个AppClassLoader,然后把ExtClassLoader作为AppClassLoader的父loader。ExtClassLoader没有指定父类,即表明,父类是BootstrapClassLoader。把初始化的AppClassLoa
2016-05-06 22:51:35
13612
原创 classloader之getresource,findClass深度分析
getResource优先返回父加载器里面的资源findResource直接而且只是从当前类加载器的url里面去查询资源(不请求父加载器)每个URLClassLoader 内部维护了一组url,初始化URLClassLoader和通过addUrl(url)可以添加url,然后findResource只是从这些url里面查找。URLClassPath里面会把每个url解析成一个load,然后查找资源的时候,就去每个load里面查找。load类有三个实现,分别是load(代表网络的jar包),FileL
2016-05-03 21:56:26
4864
原创 java利用classloader实现热部署
热部署,即需要jvm释放之前加载的业务class,且重新加载最新的业务class,并释放之前的class(卸载),其实类和普通对象一样都是对象,即如果从gc root除非,没有引用此类的别的对象存在,即会被jvm自动回收。
2016-05-02 22:34:47
13832
原创 JMX客户端及对commons-pool的监控
生产线上,我们的服务基本都是在linux环境下部署的,当高并发的时候,机器的负载是比较高的,所以我们只能在linux机器上执行一些简单的命令行工具,如jps,jstack,jinfo等,像重量级的jconsole,jvisualvm这些首先需要桌面环境才能观看,服务器肯定是没有开启X client的,所以只能通过jmx在远程客户端观看,但这种情况下,势必会对本机造成一些不必要的资源占用,如网络带宽
2016-05-02 11:17:43
3845
原创 apache commons pool之GenericObjectPool分析(通用对象池技术)
在高并发的环境下写程序时通常碰到线程安全的问题,当然,最能想到的就是加锁,再进一步想就是池子了,所谓池子就是,里面可以放置多个同样的对象,每个线程需要用时,就从池中取走,用完时再放回到池中,即可解决线程的安全问题,又可提高速度(预先初始化)。 当然若是自己写个对象池的话,也是可以的,不过现在有个通用的apache下的commons-pool框架,个人感觉真是不错,尤其是现在
2016-05-01 19:38:22
12423
原创 JMX-JAVA进程监控利器
Java 管理扩展(Java Management Extension,JMX)是从jdk1.4开始的,但从1.5时才加到jdk里面,并把API放到java.lang.management包里面。如果一个 Java 对象可以由一个遵循 JMX 规范的管理器应用管理,那么这个Java 对象就可以称为一个可由 JMX 管理的资源。要使一个 Java 对象可管理,则必须创建相应的 M
2016-05-01 17:46:41
11452
原创 redis sentinel(哨兵)模式
一、Sentinel作用1):Master状态检测 2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave3):Master-Slave切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.
2016-04-25 18:17:38
1030
原创 YK线上机器redis配置(没有主从,单点,一致性哈希)
在YK,redis机器环境默认都是8核128g内存,一般每个核启动一个redis实例,剩余内存不能太少。如我们这启动了8个进程,每个进程15g内存。由于我们这个业务使用的缓存,不需要那么高的可靠性,所以默认是存放在内存中的,不会flush到磁盘,这样可以有最好的速度如下:14:58 [logwatch@a01.redis.yks.b28.youku]$ cat /etc/red
2016-04-25 14:57:31
608
原创 tcpcopy浅谈
由于上次一台redis宕机,导致上层服务整体不可用,影响面积甚大(原因以后再说),现在线上只是用到了redis的单机模式,多个redis实例构成一致性哈希,供客户端调用。所以最近领导提出了redis的sentinel模式,让我们来研究研究。 在测试sentinel模式的时候,其中有一个技术细节,即需要把线上的流量导入到线下测试机上,用到了tcpcopy,本文主要讲述tcpcopy的
2016-04-25 07:47:16
1137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人