微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当请求使用者数量很高且传入请求正在达到峰值时,原型或单例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 举报,一经查实,本站将立刻删除。