问题描述
有一个外部源将发布请求-> Kafka-> Kafka消费者调用Mycomputation的业务逻辑。假设将它们部署在云中(AWS或Azure,无论我们能使用什么云),我们都有4个节点的Kafka集群,和4个节点的 [注意:ConcurrentMessageListenerContainer
用于Kafka消费者服务选项] 。所有8个Linux VM具有2个核心,2GB RAM(仅供参考,这对我的问题并不重要)
选项1:
- spring bean中有一个称为Mycomputation.java的复杂业务逻辑单元(
cpu & Memory intensive,but not IO intensive
)(具有spring bean作用域prototype
),可以防止并发问题或使其具有线程安全性。 - 我们有Kafka客户可以接收来自外部服务的请求
- Kafka使用者有一个逻辑,该逻辑在运行时调用
org.springframework.context.ApplicationContext
getBean()以获取Mycomputation.java的原型bean,并在其中执行复杂的业务逻辑。
选项2:
- spring bean中有一个称为Mycomputation.java的复杂业务逻辑(
cpu & Memory intensive,but not IO intensive
)单元(具有spring bean作用域singleton
),并使用某种线程安全处理机制来构造我们的逻辑。 li>
- 我们有Kafka客户可以接收来自外部服务的请求
- Kafka使用者有一个逻辑,该逻辑将自动装配Mycomputation.java类(默认情况下为
singleton
),并调用业务逻辑,并避免每个请求创建整个bean对象。
现在,我怀疑哪个选项1或2更好?当计算执行时间的速率低于传入请求的速率时。我被要求从上述2个选项中选择一项,而不是我们可能想要增加的硬件。但是问题的目的是选择上面提到的更好的选择。
请向我建议哪个选项更好#1或#2?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)