[讨论]如何提高平台效率?

刀哥哥 2014-05-21 08:39:04
加精
用httpservet实现了一个信息转发平台。

平台功能主要为:
1:从A端接入移动设备信息:
2:进行一些业务处理(分业务码处理,可能会访问数据库)
3:转发给B端,与其他系统的数据交互(发送+应答)
4:返回给A端移动设备报文。

有几个问题如下:

1:本身平台并不需要JSP、html等展现层,所以有没有必要引入HttpServlet,有些同事建议自建服务器,摆脱对容器(tomcat、weblogic)的依赖,这样想法有没有可行性?哪种更合适?

2:由于A端并发量会比较大,而B端其他系统处理效率有限,所以想引入消息队列。(只实现排队功能,异步通信,宕机重发暂时不考虑),但我觉得平台已经有线程池、NIO的概念(可通过配置容器实现),还有没有必要引入消息队列??实际会有优化效果么?


希望大牛指点。谢谢!

...全文
1334 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahhmdwg 2014-12-04
  • 打赏
  • 举报
回复
长知识了,学习学习
刀哥哥 2014-05-27
  • 打赏
  • 举报
回复
引用 7 楼 ygycomon 的回复:
[quote=引用 3 楼 fengshenju2018 的回复:] [quote=引用 1 楼 ygycomon 的回复:] 1、可行。容器在性能上肯定没有自定义的高(前提是要有一定的水平),它包含了一些不需要的模块,并且不能为特定的业务做特定的优化,所以面对大并发的服务器,很多都是自己写接入层 2、AB既然是同步的交互,引入消息队列意义不大,队列本身是异步解耦的架构上的优化思路,拿一个同步的业务去套这个思路,没什么意义,再怎么排队也无法突破性能瓶颈在B上,并且业务是同步这个事实
谢谢 回复。 针对2的回答,我想继续深究下。 1:队列的引入,会不会是为了数据处理的安全性,而不只是效率,防止A端并发高于B端,出现了漏处理、没处理的情况。 2:针对同步机制,从哪些方面考虑,去提高处理效率呢?[/quote] 首先,队列不是用来保证安全的,是用来做异步解耦的,适用于业务可以被分拆于异步的场景 然后,你要理解消息队列这个东西其实也就是一个内存+分发,并不能防止生产者生产消息速率远大于消费者消费效率。一旦出现这样的情况,不管你用不用队列都会出问题。不用队列你的请求响应就会非常慢,用队列你的队列服务器就会因为内存爆满而挂掉,或者丢失大部分消息。 最后,你的问题不在于用不用队列,你要解决的问题是生产者的生产速率大于消费者的消费速率的问题。 思路: 1、在B端做扩展,提高消费者的消费速率 2、在A端做控制,当并发达到一定程度的时候主动拒绝请求 到AB端产生/消费消息的速度达到一个和谐(不会因为并发太大撑爆消费者)的时候,再来考虑你的业务是不是可以拆分为异步,然后引入消息队列[/quote] 谢谢回复。 如果需求允许我对A、B端进行修改,那么这个问题就不是问题了哦。
blxb123 2014-05-25
  • 打赏
  • 举报
回复
为什么SHIZHEYANGNEN ?
showjim 2014-05-22
  • 打赏
  • 举报
回复
解决了生产与消费的平衡关系(至少需要在一定 时间/业务量 范围内存在一个平衡点),才能谈效率。 如果内存足够的话(能够容纳平衡点的业务量),异步模式就不需要自己处理队列了。 否则可能需要辅以物理储存设备队列,而不是单纯的内存队列了。
hugh_z 2014-05-22
  • 打赏
  • 举报
回复
learning
致知Fighting 2014-05-22
  • 打赏
  • 举报
回复
引用 3 楼 fengshenju2018 的回复:
[quote=引用 1 楼 ygycomon 的回复:] 1、可行。容器在性能上肯定没有自定义的高(前提是要有一定的水平),它包含了一些不需要的模块,并且不能为特定的业务做特定的优化,所以面对大并发的服务器,很多都是自己写接入层 2、AB既然是同步的交互,引入消息队列意义不大,队列本身是异步解耦的架构上的优化思路,拿一个同步的业务去套这个思路,没什么意义,再怎么排队也无法突破性能瓶颈在B上,并且业务是同步这个事实
谢谢 回复。 针对2的回答,我想继续深究下。 1:队列的引入,会不会是为了数据处理的安全性,而不只是效率,防止A端并发高于B端,出现了漏处理、没处理的情况。 2:针对同步机制,从哪些方面考虑,去提高处理效率呢?[/quote] 首先,队列不是用来保证安全的,是用来做异步解耦的,适用于业务可以被分拆于异步的场景 然后,你要理解消息队列这个东西其实也就是一个内存+分发,并不能防止生产者生产消息速率远大于消费者消费效率。一旦出现这样的情况,不管你用不用队列都会出问题。不用队列你的请求响应就会非常慢,用队列你的队列服务器就会因为内存爆满而挂掉,或者丢失大部分消息。 最后,你的问题不在于用不用队列,你要解决的问题是生产者的生产速率大于消费者的消费速率的问题。 思路: 1、在B端做扩展,提高消费者的消费速率 2、在A端做控制,当并发达到一定程度的时候主动拒绝请求 到AB端产生/消费消息的速度达到一个和谐(不会因为并发太大撑爆消费者)的时候,再来考虑你的业务是不是可以拆分为异步,然后引入消息队列
云满笔记 2014-05-22
  • 打赏
  • 举报
回复
做服务器的啊 哈哈哈 顶一个
good82 2014-05-22
  • 打赏
  • 举报
回复
看看怎么解决
刀哥哥 2014-05-21
  • 打赏
  • 举报
回复
引用 1 楼 ygycomon 的回复:
1、可行。容器在性能上肯定没有自定义的高(前提是要有一定的水平),它包含了一些不需要的模块,并且不能为特定的业务做特定的优化,所以面对大并发的服务器,很多都是自己写接入层 2、AB既然是同步的交互,引入消息队列意义不大,队列本身是异步解耦的架构上的优化思路,拿一个同步的业务去套这个思路,没什么意义,再怎么排队也无法突破性能瓶颈在B上,并且业务是同步这个事实
谢谢 回复。 针对2的回答,我想继续深究下。 1:队列的引入,会不会是为了数据处理的安全性,而不只是效率,防止A端并发高于B端,出现了漏处理、没处理的情况。 2:针对同步机制,从哪些方面考虑,去提高处理效率呢?
刀哥哥 2014-05-21
  • 打赏
  • 举报
回复
谢谢 回复。 针对2的回答,我想继续深究下。 1:队列的引入,会不会是为了数据处理的安全性,而不只是效率,防止A端并发高于B端,出现了漏处理、没处理的情况。 2:针对同步机制,从哪些方面考虑,去提高处理效率呢?
致知Fighting 2014-05-21
  • 打赏
  • 举报
回复
1、可行。容器在性能上肯定没有自定义的高(前提是要有一定的水平),它包含了一些不需要的模块,并且不能为特定的业务做特定的优化,所以面对大并发的服务器,很多都是自己写接入层 2、AB既然是同步的交互,引入消息队列意义不大,队列本身是异步解耦的架构上的优化思路,拿一个同步的业务去套这个思路,没什么意义,再怎么排队也无法突破性能瓶颈在B上,并且业务是同步这个事实
suciver 2014-05-21
  • 打赏
  • 举报
回复
楼主的需求明显是WebService来做是最好的。WebService本身就不依赖于Servlet,没有jsp这些显示层的东西,提供数据的交互处理。不要自建服务器,因为tomcat或weblogic都提供很好的可配置并发处理请求,以及消息队列。
yn799890274 2014-05-21
  • 打赏
  • 举报
回复
飘过,学习,再顶
刀哥哥 2014-05-21
  • 打赏
  • 举报
回复
希望有人能解答疑问

81,094

社区成员

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

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