关于Java应用集群部署解决方案

whisky9 2013-12-10 10:55:58
现在有一需求,有一java应用,运行环境安装JDK即可,运行应用中的启动main类,完成相应的业务功能。目前想把该应用做集群部署以提高性能,看了一些资料,有用Terracotta的,求教一下大概的解决方案,给个关键词方向。另外对于java web应用,运行于tomcat即可,如果要做集群,有什么不错的集群方案,关键词即可,能说下大致思路,更好!
...全文
854 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2013-12-12
  • 打赏
  • 举报
回复
引用 13 楼 whisky9 的回复:
个人疑惑的问题:
1.借助什么技术或工具?是否要改造该应用以适应集群部署。 —— 在你的集群应用没有状态保持(Session)的情况下,借助的工具比较简单;但因为你的协议种类太多,所以还不太清楚是否有一种工具可以解决所有的情况,也许要自己写一个分发工具。当然也有些工具可用,比如Nginx打上补丁后就可以支持TCP协议的负载均衡;此外还有HAproxy、KTCPVS 等都可以支持TCP连接的负载均衡。 —— 应用是否要改造取决于几个问题:有没有会话状态保持需要?有没有竞争资源需要管理?数据库层面有无互斥数据项目之类的问题。 2.应用在调用外部服务时,是根据数据库数据去构造请求的,如果单台机器,只需扫描表记录,构造请求调用即可,但是对于集群环境来说,可能存在重复扫描DB构造请求,节点机器发出的请求是重复的,收到的响应重复的,处理结果也就重复。因为对于各集群节点来说,不知道其他节点构造过这样的请求做过该数据的处理。如何能够让节点机器运行的应用分散调用服务,分散处理呢? —— 锁定记录,置标志位和处理时间。 —— 比如,某台机器决定要处理某条记录时,就可以用Update置上标志,包括:当前状态、当前负责节点、启动时间、失败重试次数。避免数据库层面重复处理。 3.应用在被外部调用时,如何分流这样的调用请求呢?比如外部发了10个请求,然后每个节点分担处理10个请求。 —— 需要使用分发服务,如果是HTTP请求,常用的就是借助Apache或Nignx之类的Web前置服务。 另外,从你的问题来看,你似乎对于负载均衡很不熟悉,建议至少应该去了解些基本信息。
whisky9 2013-12-12
  • 打赏
  • 举报
回复
引用 楼主 whisky9 的回复:
现在有一需求,有一java应用,运行环境安装JDK即可,运行应用中的启动main类,完成相应的业务功能。目前想把该应用做集群部署以提高性能,看了一些资料,有用Terracotta的,求教一下大概的解决方案,给个关键词方向。另外对于java web应用,运行于tomcat即可,如果要做集群,有什么不错的集群方案,关键词即可,能说下大致思路,更好!
可能我表述不清楚,这里再总结一下,把需求说明白些。 有一java应用系统,该应用和外部系统之间交互,会调用外部系统接口也会开放接口供外部系统调用,涉及的协议主要有TCP(长连接、短连接),SOAP,REST等。通过运行应用中启动类运行该应用,从而调用服务和启动服务工外部调用。 调用服务,主要是由应用本身去触发,比如扫描DB,获取DB数据信息,根据DB数据信息构造请求去调用外部服务,然后收到响应消息做相应的处理。暴露服务,主要是外部系统来调用应用的服务接口,该应用收到调用请求后,做处理然后返回响应。 由于与外部频繁通讯且通讯数据量稍大,应用做的逻辑处理也多,现想对该应用做集群,以提高性能。在这里和大家,讨论学习一下,求解一下集群方法、技术、工具。 个人疑惑的问题: 1.借助什么技术或工具?是否要改造该应用以适应集群部署。 2.应用在调用外部服务时,是根据数据库数据去构造请求的,如果单台机器,只需扫描表记录,构造请求调用即可,但是对于集群环境来说,可能存在重复扫描DB构造请求,节点机器发出的请求是重复的,收到的响应重复的,处理结果也就重复。因为对于各集群节点来说,不知道其他节点构造过这样的请求做过该数据的处理。如何能够让节点机器运行的应用分散调用服务,分散处理呢? 3.应用在被外部调用时,如何分流这样的调用请求呢?比如外部发了10个请求,然后每个节点分担处理10个请求。 素闻csdn是个神奇的地方,高手很多,希望各位不吝赐教!多谢!
whisky9 2013-12-12
  • 打赏
  • 举报
回复
引用 10 楼 zxcvbnm11920 的回复:
我看着都绕,重点呢,MiceRice给楼主建议个负载均衡的工具得了。 我猜楼主需要解决的实际情况不是特别复杂。
情况其实不复杂,但是我不知道用什么技术、工具或方法可以实现。
whisky9 2013-12-12
  • 打赏
  • 举报
回复
引用 8 楼 ldh911 的回复:
等下,给你绕的有点晕。 你的应用是以访问外部系统服务为主?还是被外部系统访问为主? 两者的解决方案不同。
调用外部系统服务接口和暴露服务接口被外部调用这个两个都有。有socket,长连接和短连接,rest,soap.
MiceRice 2013-12-11
  • 打赏
  • 举报
回复
粗略听起来可以不用。 这么说,如果你有10台电脑,把你的应用在10台电脑上都单独装好,但是数据库用一套;这种情况下,你的程序需要修改么? 如果不需要修改,那么剩下的问题就是如何让外界系统连接你10台电脑的时候,怎么均衡下每台电脑的连接数而已了。
MiceRice 2013-12-11
  • 打赏
  • 举报
回复
为啥我发的三楼被服务器偷吃了? 楼主可以加QQ群:229609257
whisky9 2013-12-11
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
Java应用自身想集群的,要想清楚应用场景。如果是大任务切分小任务,可以考虑用Hadoop;如果是海量任务,可以考虑用GridGain之类的网格运算。如果是最简单情况的话,你手工多启动几个JVM不就完事了? 另外:Tomcat本身就支持集群。
你好! 我这个应用与外界系统有协议通讯,有调用服务接口和暴露服务接口,长连接、短连接,与外界系统通讯比较频繁,获得数据量比较大,所以想做集群分流处理,以提高性能。如果做集群,需要改造应用本身吗?问了一些人,有的说改造,有的说用Terracotta,有的说还要用haproxy,迷茫了。恳请,提供个方法,几个关键技术或方法即可,我自己会根据这个方法去琢磨,多谢!
骑士的崛起 2013-12-11
  • 打赏
  • 举报
回复
我看着都绕,重点呢,MiceRice给楼主建议个负载均衡的工具得了。 我猜楼主需要解决的实际情况不是特别复杂。
MiceRice 2013-12-11
  • 打赏
  • 举报
回复
如果是以访问外部系统为主,那么首先明确下: ◎ 一台机器的情况下,你怎么保证所获取外部系统的数据不重复? 然后: ◎ 在此基础上,如果你开发的是并发程序(多线程处理),你怎么保证多个线程所获取数据不重复? 最后: ◎ 衍伸到多个机器的情况,如何保证? 总的来说是一定有招数的,无非是招数的复杂度或者说代价问题。但你沿着这个思路走,然后提出你觉得的方案及问题所在,就很容易探讨出最终方案了。
MiceRice 2013-12-11
  • 打赏
  • 举报
回复
等下,给你绕的有点晕。 你的应用是以访问外部系统服务为主?还是被外部系统访问为主? 两者的解决方案不同。
whisky9 2013-12-11
  • 打赏
  • 举报
回复
在线等帖好辛苦哇~~ 首先多谢! 你时候的这个情景,数据库共用没有问题。有个问题请教,10台机器都会和外部系统通讯,调用服务,获取数据,会有重复通讯,获得重复数据这个问题。如何能让10台机器启动应用时,不会重复通讯,即处理的数据均不重复。就是有个分发处理的问题。
whisky9 2013-12-10
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
Java应用自身想集群的,要想清楚应用场景。如果是大任务切分小任务,可以考虑用Hadoop;如果是海量任务,可以考虑用GridGain之类的网格运算。如果是最简单情况的话,你手工多启动几个JVM不就完事了? 另外:Tomcat本身就支持集群。
你好!感谢你的回帖。能否提供一下联系方式,邮箱、qq都行,想具体请教一下关于java应用集群方面知识。我的qq 573998122。
MiceRice 2013-12-10
  • 打赏
  • 举报
回复
Java应用自身想集群的,要想清楚应用场景。如果是大任务切分小任务,可以考虑用Hadoop;如果是海量任务,可以考虑用GridGain之类的网格运算。如果是最简单情况的话,你手工多启动几个JVM不就完事了? 另外:Tomcat本身就支持集群。

25,985

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧