JdonFramework-6.6.2发布

13-03-13 banq
                   

自从基于Disruptor的Jdon框架6.4版本发布以来,经过一年多持续不断调优,JdonFramework迎来了成熟稳定的6.6.2版本

6.6.2版本主要有两处改进:

1. 使用Guava Cache 替代原先的EHcache,替换以后吞吐量throughput大大提高。

Google的Guava是一种函数风格的集合Collection和事件功能库包,经过初步分析,Guava比EHcache性能提升的原因:可能是因为EHCache使用了锁,虽然保证了读写安全,但也牺牲了读写性能,特别是吞吐量;而Guava Cache读吞吐量相当高,但是同时读写有些堵塞。

在实际应用中,支持大量并发读是使用缓存的主要目的。业界正在通过不断地努力,寻找无锁却能大幅度提高吞吐量的算法和技术,最新布谷鸟算法:

用于并发读密集型的乐观Cuckoo(布谷鸟)哈希

如果有移除读锁的布谷鸟Java库推出,Jdon框架将率先立即切换使用,保证Jdonframework始终跟踪业界最先进技术。也能保证基于Jdon框架开发的各种应用无缝享受最新科技发展成果。

2.JdonFramework 6.6.2引入了Disruptor 最新2.10.4版本。

该版本删除了BlockingWaitStrategy中的numWaiters,该BUG导致繁忙时CPU负载增高几十倍,由于解道Jdon网站使用基于其开发的JiveJdon,故运行一段时间后,常常因为CPU负载被numWaiters死循环推得很高,uptime 20分钟数据高峰能够达到1.50,修复BUG后最高不过是0.15左右,经常为零。CPU负载大幅度降低。

线程高并发且无锁,且占CPU少,这是业界正在不断追求的极致完美目标。Jdon框架对读写操作分离的高并发性能追求保证了基于其开发的CQRS质量。

下图是Jdon框架6.4和6.6.2在jivejdon中两张测试图比较,虽然6.6.2采样线程多了,吞吐量throughput还是明显比以前增加很多,特别是写操作(add/update):

6.4:

6.6.2:

[该贴被admin于2013-03-19 16:53修改过]


                   

23
banq
2013-03-13 09:32

Guava提供了简单的事件编程,而Jdon框架也基于Disruptor提供了基于模型对象的事件编程,两种区别在于:Disruptor的线程切换是无锁并发性能高,且能够指定事件订阅器顺序执行。

但是,Guava事件模型用在除了模型事件以外的组件事件领域还是很方便的。举例两者结合案例:

下面是Jdon框架响应模型(Prodcuer)事件的消费者(Consumer)代码:

@[author]Consumer[/author]("subscriptionSender")
public class SubscriptionSender implements DomainEventHandler {
	private AsyncEventBus eventBus;

	public SubscriptionSender(SubscriptionNotify subscriptionNotify) {
		eventBus = new AsyncEventBus(Executors.newScheduledThreadPool(1));
		eventBus.register(subscriptionNotify);
	}

       //该方法将类似观察者模式disruptor立即激活
	public void onEvent(EventDisruptor event, boolean endOfBatch) throws Exception {

		try {
			Subscribed subscribed = (Subscribed) event.getDomainMessage().getEventSource();
      //注意这是Guava的事件发生者
			eventBus.post(subscribed);
			//可实现其他事务性关键业务
		} catch (Exception e) {
		}

	}
}
<p>

Guava的事件的订阅响应者代码如下:

@Component("subscriptionNotify")
public class SubscriptionNotify {

	@Subscribe   //这是Guava的事件订阅者元注解
	public void sendSub(Subscribed subscribed) {
		          //可实现业务上真正异步的操作。
	}
  ....
}
<p>

这两种事件使用有什么区别?

在Jdon框架的事件响应器Consumer中主要实现关键操作,比如当前模型状态的持久化,由于Disruptor强有力支持,Consumer中的动作将可靠快速完成。

而推迟到Guava的事件订阅者中执行,主要适合那些耗时动作,比如发送微博 发送Email通知等等,这样这些耗时的操作摆脱Disruptor的控制之外,节省CPU占用量(Disruptor的BLOCK策略)。

总之,Jdonframework不断致力于将最新架构技术和最新建模思想完美结合在一起,打造国人自己的极客开源作品。让我们尽情享用科技带来的快感!

Jdonframework 6.6.2 下载地址:

http://www.jdon.com/jdonframework/download.html

[该贴被admin于2013-03-19 16:54修改过]

lostalien
2013-03-14 10:00

祝贺一下~

banq
2013-03-16 09:41

谢谢。

今天周六上午测试一下网站速度:

经过@360网站安全检测,我的网站 http://www.jdon.com 响应时间为:0.217 秒,打败了全国 75% 的网站,你也来试试吧,地址: http://webscan.360.cn/tools/http

相关主题:

为什么解道访问速度这么快

abbasky
2013-03-17 18:54

一直有个问题困惑着我,那就是服务端如何实现异步操作。例如客户端提交了查询数据的请求,该请求不管是从数据库读数据,还是从Cache读数据,都必须要返回数据给客户端的。能不能说服务端收到了请求,然后说知道了你等着通知呢?

如果用Disruptor来构建数据查询请求的序列,该如何做呢?另我查看了jdon6.2的源码,没找到象我说的这种用法。

数据库读写的竞争如何通过Disruptor来实现协调呢?Disruptor构建Ringbuffer时,其事件类型是一个类型的,即一类操作实现顺序化。我认为读和写要整合到一个顺序序列中才能解决读写竞争问题。

请大神们帮忙解惑。

[该贴被abbasky于2013-03-17 18:56修改过]

3Go 1 2 3 下一页