考虑具有两个组件的应用程序,可能在不同的机器上运行:
执行通知的最佳方式是什么,假设生产者在高峰时间每秒会向数据库中插入10-100条记录?数据库技术目前是MySQL,但这不一定是一成不变的。我可以看到几种不同的方式:
就耦合而言:让两个相对独立的应用程序组件对共享数据库执行直接查询是一个好主意,还是一个组件“拥有”数据库而另一个组件通过另外的组件间接地与数据库交互调用拥有组件?
答案 0 :(得分:1)
我喜欢第二个提出的解决方案(中间层),因为它将通知与数据库工作分开,并且可能是两阶段提交XA事务的一部分。如果消费者除了通知之外还需要数据库内容,那么可以通过MySQL复制来完成。这也可以解决耦合问题,因为消费者组件可以具有对其复制实例的只读访问权。
使用消息传递解决方案还可以解决仅数据库解决方案中的任何潜在瓶颈问题,因为它会将通知和存储分离到单独的进程中。
根据语言的不同,您可以选择多种消息。如果您正在使用Java,我实际上建议使用JGroups而不是JMS,因为它更容易配置。
如果Java不是您选择的语言,那么Apache的Active MQ支持多种语言进行接口连接。 Apache的Qpid是一个AMQP实现,它还支持多种语言(Java,C ++,Python,Ruby等)。
其他消息传递选项可能包括XMPP,STOMP或RestMS实现。