具有共享数据库的单体到微服务



我正在尝试慢慢地将应用程序从整体式移动到微服务,但第一步是移动到更像微服务就绪的状态。

我有一个整体式系统 SA,需要将大量数据推送到 Cassandra 表 TB 和使用 TB 表的服务 SB,这是否违反了微服务原则?

基本上,我想要大量数据推送到服务 SB,但如果它通过 rest api 推送,那就太大且耗时了。

好吧,也许这是一个基于意见的问题,但我坚信每个微服务都应该尽可能独立于其他系统执行其任务。

在您的情况下,您应该问自己,如果应从SA中删除保存的数据的属性,会发生什么情况?它对SB有影响吗? 另请注意,如果大量写入和读取同一数据源,则服务 SA 将导致 SB 出现性能问题,反之亦然。

关于微服务之间的通信,REST不是你唯一的选择;你也可以考虑使用asynchronous communication - Messaging(RabbitMQ,Kafka..(,让SA作为发布者和SB订阅者。

但起点应该是:

"我的 SA 和 SB 是否需要独立部署和扩展 彼此?

如果没有,绝对没有理由提供两项服务。

Oliver Gierke有一个很棒的系统重构演讲,关于你需要什么,提到了常见的陷阱和有用的建议,我只能推荐。 还请检查每个服务的数据库和Chris Richardson的其他模式。

最新更新