找回密码
 FreeOZ用户注册
查看: 2163|回复: 18
打印 上一主题 下一主题

构建一个轻量级的服器平台: JNDI + JMS + JMX

[复制链接]
跳转到指定楼层
1#
发表于 6-10-2009 20:22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
我的目标是这样:

通过组合一些开源系统,构建成一个小规模的、轻量级的服务器Java开发及运行平台。
这个平台可以提供下面几个重要的J2se/J2ee业务:
1. Naming Server / JNDI
2. Message Queue Service / JMS
3. Management / JMX

同时考虑到扩展性、移植性、伸缩性的东西,这包括:
1. 平台本身是轻量的,只需要很小的基础平台JAR文件构建,所有的服务器都可以通过embedded的方式进行控制运行
2. 平台可以轻易打包到任何支持Java/J2se平台上,而不需要特别的J2ee平台支持。(所有的基础组件都被打包到很小的JAR文件中去就可以确保这样的要求)
3. 开发出来的代码没有平台依赖性,也就是说,开发出来的代码可以随时放到其他有相同功能的基础组件平台上运行,不需要定制开发(配置文件当然需要改一下,尽量少改点配置吧)

本文的目标就是要构建这样的Pure Java服务器。

评分

参与人数 2威望 +60 收起 理由
coredump + 30 谢谢分享!
ubuntuhk + 30 你太有才了!

查看全部评分

回复  

使用道具 举报

2#
 楼主| 发表于 6-10-2009 20:38:09 | 只看该作者

缘由

构建这个基础平台,主要是用于建立我现在手上的一套软件产品。

这套产品的首个版本已经开发了一些满足业务要求的功能,但在架构上采用了简单的
定制网络服务器模式,整套业务建立在原始的TCP服务器上。

类似这样的服务器实现,我估计很多人都做过。如果放在8/9年前,这样做是非常不错的。
自己写ServerSocket也是很有意思的事。然而,在现在,如果能更多依赖Java现有的标准
业务协议/组件来构建我们的服务器平台,不但能达到事半功倍的效果,而且能轻易达到
服务的伸展性、扩展性,而且由于多年来Java建立的一系列标准平台组件/服务,已经可以
帮助我们更好地对系统进行模块化,避免了业务开发的零乱。一些复杂的网络服务器逻辑
交由标准组件去完成,我们就可以把精力集中在真正“挣钱”业务上来(这一大段东西
就是j2ee平台的广告词,不过的确说得有道理)。

试想一下,如果要你实现一个服务器,可以确保High Availability、Scalability,
基本上一个小团队半年的时间就耗进去了。我前面有个小文是讨论怎样建立FailOver Server的,
但事实上,即使象我那个文章一样做了很多简化和假设,我单单实现一个这样的Server就需要
我至少一个半月时间(而且只是出来一个Alpha版)。至于其他功能,那还没有开始呢。

现在,找一个JMS服务器,可以通过简单的配置达到基本的High Availability了。
就更不要说JNDI + JMS + LDAP + DB可以建立一个强大无比的24x7的业务系统。

当然,本文并不打算建立这样的系统。我的目的只是要建立一个比我们原先自己编写的
服务器强大一点点的服务器平台。但这样的服务下开始下来的东西是可以移植到一个
超级无敌Java平台上的——这才是我的最终目的。

评分

参与人数 1威望 +40 收起 理由
ubuntuhk + 40 期待ing~~

查看全部评分

回复  

使用道具 举报

3#
发表于 6-10-2009 21:01:56 | 只看该作者
又一个Java EE的掘墓者
回复  

使用道具 举报

4#
 楼主| 发表于 6-10-2009 21:24:19 | 只看该作者

J2ee 还是 J2se

J2ee与J2se这个问题有点象姓资姓社的问题。J2ee是一定要用的,JNDI/JMS这些东西都是j2ee的东西。
现在的问题是:是否需要用Application Server,是否要写Message Driven Bean和引入ejb这些heavy weight
的组件。

从我的需要来看,我觉得不适宜引入Application Server。我对App Server的了解不是太多,
如果有谁知道有Light Weight的App Server,而且口碑比较好的,不妨介绍给我用。
如果动不动就几百M的东西打包在一起,内存动不动就以G来计算,那就没有必要了。

就我自己所知道的,JBoss还是不错的。它采用了JMX作为系统的基础架构,通过简单的配置
加载相应的服务组件。只可惜JBossMQ口碑不是太好,速度好象有点慢(这个我没有证实),
我暂时不考虑采用整个JBoss来构建我需要的业务基础平台。不过晚点时候我有可能会在JBoss
上做一些实验,看是否能建成一个简单的基础平台。毕竟redistribute JBoss的部分组件,
比组合几个不同的开源组件要简单得多。但这是后话了。

Message Driven Bean是有吸引力的。如果没有这东西,全由自己写Consumer/Producer
还是有点低层。不知道没有了App Server,MDB还能不能跑呢?不过基础平台一旦定形,
我会采用MetaData/Annotation等技术写一个尽可能loosely coupled的东西,
让消息提供和处理更多简单,以弥补这个不足之处。

Ejb就没有必要了。管理Ejb的LifeCyle不是件容易的事,App Server为此付出太多,
得不偿失。
回复  

使用道具 举报

5#
 楼主| 发表于 6-10-2009 21:25:23 | 只看该作者
回复  

使用道具 举报

6#
发表于 6-10-2009 22:53:53 | 只看该作者
Java 开发者喜欢用java解决所有问题。。。

如果从单服务器性能上看,要提升性能需要借助OS的API,比如提高网络吞吐,异步Proactor模式的IO读取。。。
Linux /freebsd虽然没有那么强的API但也有相当不错的解决方案(epoll/kqueue)...

服务的failover,和scaleble, 有更多的方案,F5,LVS等等,我也不是很熟悉。。。

就我所知,java的解决方案,是昂贵的,效率不高的。。。

java的长处在类库,在社区,在企业支持。。。决不再运行效率。。。

评分

参与人数 2威望 +45 收起 理由
花生太软不好吃 + 15 不错
ubuntuhk + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

7#
发表于 6-10-2009 23:11:58 | 只看该作者
在这个页面里搜“性能”,第一次出现在6楼

在这个页面里搜“效率”,第一次出现在6楼

6楼说的太好了,很想知道前面的5层楼那句话触发了6楼的感慨
回复  

使用道具 举报

8#
 楼主| 发表于 7-10-2009 10:34:17 | 只看该作者

Version 0.0.1 - The Simple Server

This is the first version.

1. An in-memory JNDI server extracted from JBoss 3.2.7: JNP server.
2. An embedded activeMQ server from ActiveMQ 5.2.0
3. A development library package of MX4J.
4. A runtime environment with ant build.xml

Usage:
1. Extract simple-server-0.0.1.tgz to the current directory.
2. Set up your working environment, especially with JAVA_HOME, PATH environment variables
3. Execute the server with:
ant
   or
ant run

Test:
N/A now. But you can run examples from the full package of ActiveMQ 5.2.0 to test ActiveMQ.

Summary:
simple-server-0.0.1 is a basic release of the server runtime environment.
I'm not saying that it a solution for your project. Actually, what I want to do with
simple-server is a development environment which could be set up easily and tested
easily.

Download:
I can't attach the file with this post. Please follow this link to download the package.
http://sydtrans.googlecode.com/files/simple-server-0.0.1.tgz

[ 本帖最后由 key 于 7-10-2009 10:43 编辑 ]

评分

参与人数 1威望 +50 收起 理由
ubuntuhk + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

9#
 楼主| 发表于 7-10-2009 11:03:33 | 只看该作者
原帖由 mash 于 6-10-2009 22:53 发表
Java 开发者喜欢用java解决所有问题。。。

如果从单服务器性能上看,要提升性能需要借助OS的API,比如提高网络吞吐,异步Proactor模式的IO读取。。。
Linux /freebsd虽然没有那么强的API但也有相当不错的解决方案 ...


Yes, you're right.

I'm not going to solve all of the issues of my project with inherent
characteristics from Java. And that's the reason I don't want to rely on a
specific J2EE platform, but a bunch of Java standards like JNDI, JMS, and JMX.

Please note that JNDI, JMS, and JMX are Java standards regarding communication
protocols, system architectures/design patterns (not GoF ones), and system
integrate models. They are not underlying platform, nor infrastructure components.
The performance might mainly base on the underlying system, which I am
not going to worry about at this moment.

I would like to call my solution as a simple, lightweight server development
platform. When someone is going to develop a server using custom protocol
based on ServerSocket/SocketFactory, he might think about my solution:
develop a simple server on Java standards and make use of the standards.
That's what I want to do.
回复  

使用道具 举报

10#
 楼主| 发表于 8-10-2009 21:47:57 | 只看该作者
已经有一个朋友试用了这个系统,评价还可以。
也给了一些反馈,希望有更多朋友能试用我这个系统,提出改进意见。

我自己接下来会在上面进行一些初步的开发,可能会提供更多平台组件,以便于
任何开发者快速建立自己的业务平台。

考虑到JMS这个通信模式存在一定的效率问题,我接下来会把一个embedded web server
加到里面去,作为数据传输的另一个选择。暂时还没有想好具体的工作模式,
哪里同学有兴趣,不妨多给我一些建议。

谢谢

原帖由 key 于 7-10-2009 10:34 发表
This is the first version.

1. An in-memory JNDI server extracted from JBoss 3.2.7: JNP server.
2. An embedded activeMQ server from ActiveMQ 5.2.0
3. A development library package of MX4J.
4. A r ...
回复  

使用道具 举报

11#
发表于 8-10-2009 23:38:55 | 只看该作者

回复 #9 key 的帖子

Apache/Mina or JBoss/netty is a good framework to develop a server software in Java...

JMS:  a very heavy protocol...If I plan to implements  a message framework, I prefer lots of STOMP server...the protocol is much simple  than JMS...I found JMS starting to support STOMP as well.

JNDI: funny protocol...they want to use one protocol unify the access of different resources...when they do it, the most popular way to use is based on memory implements....same JVM same classloader...

JMX:  creating a new wheel.....so many hardwares...softwares support a existing industry...the name is....

In my personal experience, these three specifications are rubbish compared with JDBC, Servlet...

评分

参与人数 1威望 +30 收起 理由
key + 30 谢谢分享!

查看全部评分

回复  

使用道具 举报

12#
 楼主| 发表于 9-10-2009 09:51:45 | 只看该作者
Thanks Mash for sharing with us the Apache/Mina and JBoss/Netty projects, as well as STOMP.
They're fantastic!

I'm not good at JMS and JMX so far. However, I could not agree with you on your reckoning on
them. Could you give me some prove of your suggestions?

JNDI is a naming service for Java applications. As you mentioned above, JNDI is funny.
Actually I would rather not reckon that JCP want JNDI to unify the access of different resources,
they just want to reuse the current storage technologies, like LDAP, NIS, to save the
information. However, JNDI is designed for distributed configuration purpose.
When we're going to deploy a system across a complex environment with many computers/servers,
JNDI should be use for configuration accessing.

I don't know why you would like to suggest same JVM same classloader, and in-memory solutions.

Nice discussion. Thank you very much for your information. It's helpful.

原帖由 mash 于 8-10-2009 23:38 发表
Apache/Mina or JBoss/netty is a good framework to develop a server software in Java...

JMS:  a very heavy protocol...If I plan to implements  a message framework, I prefer lots of STOMP server...th ...
回复  

使用道具 举报

13#
发表于 9-10-2009 14:43:51 | 只看该作者
Hi key,
Nice to discuss with you...

Actually, I was a Java fans as well...
I program Java most of time...
Do you know Google App Engine? That is a good, free and convenient platform for developing on server sides...
I developed a website www.jnix.com on it...
You can search my messages about it in freeoz...there is an account for seller...so you can try the functions of the website and GAE's abilities...
回复  

使用道具 举报

14#
 楼主| 发表于 10-10-2009 06:33:53 | 只看该作者
我有申请Google Application Engine的Java服务但不成功

原帖由 mash 于 9-10-2009 14:43 发表
Hi key,
Nice to discuss with you...

Actually, I was a Java fans as well...
I program Java most of time...
Do you know Google App Engine? That is a good, free and convenient platform for developi ...
回复  

使用道具 举报

15#
发表于 10-10-2009 23:34:29 | 只看该作者
google appengine 有很多限制,我年初的时候申请了google 的java 环境, 研究后发现连使用用关系型数据库都不行。 基本上,如果你用google app engine 开发应用的话,就只能在google app engine 环境下使用了。
回复  

使用道具 举报

16#
发表于 11-10-2009 20:06:16 | 只看该作者

回复 #15 bfox 的帖子

That is not right...
Dear Friend, please search "www.jnix.com" messages in freeoz, there is a seller account, you can try this website and get some feeling about what GAE provides for you.

In general, GAE provides a JDO interface in his BigTable storage engine. Developers use jdo to develop their websites...

In my website includes following libaries:

SpringFramework...
JSON-Lib
Google Picasa API
Compass Search libaray(Lucene)
JQuery
....

In my view, GAE provides most things for website developments...
回复  

使用道具 举报

17#
发表于 22-10-2009 22:11:02 | 只看该作者
jndi,jms,jmx用到任何一个都不能算是lightweight了,呵呵。ejb3因为脱离了jndi才貌似轻量一些。。
回复  

使用道具 举报

18#
发表于 22-10-2009 22:42:22 | 只看该作者
说到轻量级的东西,还是别整JAVA了吧,PHP比JAVA来的短平快、而且效率更高
回复  

使用道具 举报

19#
发表于 24-10-2009 21:53:57 | 只看该作者

现在感觉没什么可讨论,能满足老板要求的就可以。

accounting, civil,lawer.doctor这些都可以干一辈子,越老越吃香。就是IT,妈的过了30就玩完(国内的话28就到头了就是毕业后干四五年光景不如空姐了)。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 2-11-2024 04:29 , Processed in 0.047546 second(s), 35 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表