作者:zhaohui

Java CAS操作的ABA问题

CAS介绍 比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 CAS操作基于CPU提供的原子操作指令实现,各个编译器根据这个特点实现了各自的原子操作函数。来源维基百科: java.util.concurrent包完全建立在CAS之上的,借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 可以看一下AtomicInteger: 其中牵扯到3个值:current,next以及当前内存中的最新值,当且仅当curren…

阅读全文 »

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….

阅读全文 »

Eclipse连接Hadoop分析的三种方式

Hadoop一般都部署在linux平台上,想让Hadoop执行我们写好的程序,首先需要在本地写好程序打包,然后上传到liunx,最后通过指定命令执行打包好的程序;一次两次还可以,如果进行频繁的调试是很不方便的,所有最好是能直接通过IDE直接连接Hadoop;下面总结了三种方式连接Hadoop执行分析: 软件版本 操作系统:win7 64位 Eclipse:Indigo Service Release 2 Java:1.7 Hadoop:2.5.1 Linux:Centos7 一、利用Hadoop的本地模式,在Eclipse中执行本地数据计算 写好的程序在本地测试完之前再提交到远程服务器上进行数…

阅读全文 »

WebHDFS使用

WebHDFS提供HDFS的RESTful接口,可通过此接口进行HDFS文件操作。 配置 需要在hdfs-site.xml打开WebHDFS开关,此开关默认打开。 使用 连接NameNode的50070端口进行文件操作。 比如:查看知道目录文件列表 结果: 更多查看官方文档:https://hadoop.apache.org/docs/r2.4.1/hadoop-project-dist/hadoop-hdfs/WebHDFS.html

阅读全文 »

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张图来区别一下: 正向代理(或者叫代理):一般指客户这一端,替客户收发请求,使真实客户端对服务器不可见。 反向代理:在服务器机房这一端,替服务器收发请求,也就是说请求和响应都先经过反向代理,使真实服务器对客户端不可见。具有缓存、安全、负载均衡等作用。

阅读全文 »

Thrift代理Hbase

使用HBase的2种方式: 1.直接使用HBase客户端API,这样就限制了只能使用java语言 2.使用一些能够将请求转换成API的代理,这些代理将原始Java API包装成其他协议,这样客户端可以使用API提供的任意外部语言来编写程序。外部API实现了专门基于java的服务,而这种服务能够在内部使用由HTable客户端提供的API。 HBase本身对代理模式的支持也很广泛,比如支持的类型有:REST、Thrift、Avro等 关于代理的模式,可以看一张网上的架构图: 这里主要介绍一下Thrift作为HBase的代理对外提供服务,主要是Thrift在性能上的优势以及对各种主流语言的支持 1….

阅读全文 »