当请求使用者数量很高且传入请求正在达到峰值时,原型或单例spring bean会更好

问题描述

一个外部源将发布请求-> Kafka-> Kafka消费者调用Mycomputation的业务逻辑。假设将它们部署在云中(AWS或Azure,无论我们能使用什么云),我们都有4个节点的Kafka集群,和4个节点的 [注意:ConcurrentMessageListenerContainer用于Kafka消费者服务选项] 。所有8个Linux VM具有2个核心,2GB RAM(仅供参考,这对我的问题并不重要)

选项1:

  1. spring bean中有一个称为Mycomputation.java的复杂业务逻辑单元(cpu & Memory intensive,but not IO intensive)(具有spring bean作用域prototype),可以防止并发问题或使其具有线程安全性。
  2. 我们有Kafka客户可以接收来自外部服务的请求
  3. Kafka使用者有一个逻辑,该逻辑在运行时调用org.springframework.context.ApplicationContext getBean()以获取Mycomputation.java的原型bean,并在其中执行复杂的业务逻辑。

选项2:

  1. spring bean中有一个称为Mycomputation.java的复杂业务逻辑(cpu & Memory intensive,but not IO intensive)单元(具有spring bean作用域singleton),并使用某种线程安全处理机制来构造我们的逻辑。
  2. li>
  3. 我们有Kafka客户可以接收来自外部服务的请求
  4. Kafka使用者有一个逻辑,该逻辑将自动装配Mycomputation.java类认情况下为singleton),并调用业务逻辑,并避免每个请求创建整个bean对象。

现在,我怀疑哪个选项1或2更好?当计算执行时间的速率低于传入请求的速率时。我被要求从上述2个选项中选择一项,而不是我们可能想要增加的硬件。但是问题的目的是选择上面提到的更好的选择。

请向我建议哪个选项更好#1或#2?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)