分类:编程语言

Protostuff序列化分析

前言 最近项目中需要将业务对象直接序列化,然后存数据库;考虑到序列化、反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文件,而且由Protobuf生成的对象用来作为业务对象并不是特别友好,往往业务对象和Protobuf对象存在一个互相转换的过程;考虑到我们仅仅是将业务对象直接序列化到数据库,发现Protobuf在这种情况下并不是特别的好; 这时候发现了Protostuff,protostuff不需要依赖.proto文件,可以直接对普通的javabean进行序列化、反序列化的操作,而效率上甚至比protobuf还快…

阅读全文 »

Disruptor和LinkedBlockingQueue性能对比以及分析

Disruptor和LinkedBlockingQueue简介 Disruptor是Java实现的用于线程间通信的消息组件,其核心是一个Lock-free(无锁)的Ringbuffer;LinkedBlockingQueue是java.util.concurrent包中提供的一个阻塞队列;因为二者之间有很多相同的地方,所以在此进行一次性能的对比。 压力测试 1.针对LinkedBlockingQueue的压测类 LinkedBlockingQueueTest 实现了一个简单的生产者-消费者模式,一条线程负责插入,另外一条线程负责读取。 LogEvent实体类,Disruptor的压测类中也同样…

阅读全文 »

Netty通过MBean监控流量

Netty流量统计 netty专门提供了一个traffic包用于流量的统计,如下图所示: 分别提供了全局的GlobalTrafficShapingHandler和针对channel的ChannelTrafficShapingHandler,同时提供了TrafficCounter用来记录实时的流量统计。 简单的使用: GlobalTrafficShapingHandler提供的方法trafficCounter()可以用来获取TrafficCounter对象, TrafficCounter提供了常用的一些方法: JMX的MBean JMX即Java Management Extensions(Ja…

阅读全文 »

log4j1,logback以及log4j2性能测试对比

环境 jdk:1.7.0_79 cpu:i5-4570@3.20GHz 4核 eclipse:3.7 操作系统:win7 准备 1.log4j:1.7.21 log4j.xml 2.logback:1.1.7 logback.xml 3.log4j2:2.6.2 log4j2.xml 测试 准备50条线程同时记录1000000条数据,然后统计时间 log4j1和logback的同步和异步分别修改为对应的appender就行了 log4j2的异步方式提供了2中模式: 1.全局开启 设置Log4jContextSelector系统属性为 org.apache.logging.log4j.core….

阅读全文 »

Nginx+Tomcat负载均衡

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好。 准备 nginx:nginx/Windows-1.10.1 http://nginx.org/en/download.html tomcat:apache-tomcat-6.0.45 准备2个tomcat服务器分别命名为: 同时修改server.xml文件中的端口号,有三个端口号需要修改,防止端口冲突: 修改tomcat默认首页:webapps/ROOT/inde…

阅读全文 »

正向代理和反向代理

经常看到代理和反向代理,但是一直没弄明白2者具体有什么区别,看下面2张图来区别一下: 正向代理(或者叫代理):一般指客户这一端,替客户收发请求,使真实客户端对服务器不可见。 反向代理:在服务器机房这一端,替服务器收发请求,也就是说请求和响应都先经过反向代理,使真实服务器对客户端不可见。具有缓存、安全、负载均衡等作用。

阅读全文 »

Java Instrumentation 热替换

使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和 Java 类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式,使得开发者无需对 JDK 做任何升级和改动,就可以实现某些 AOP 的功能了。 网上的基于Instrumentation的说明有很多,不想做过多的介绍,下面基于项目中遇到的一些需求,做的一个简单的例子。 做的项目是一个手机网络游戏,游戏的业务变更性很强,特别是项目开发中以及项目上线后的前…

阅读全文 »

Netty实现Shadowsocks客户端

Shadowsocks是什么 shadowsocks是基于socks5协议实现的代理方式,分为服务器和客户端,双端之间通过使用指定的加密方式(AES,BlowFish,Table等)进行数据传输,有效的突破了GFW。 整个流程可以看来自网上的一张流程图: 总体流程大致如上图所示,具体实现细节后面会介绍,今天要实现的是SS Local这个模块,数据传输都是基于socks5协议,所以有必要先了解一下socks5协议。 socks5协议 SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器…

阅读全文 »