【发布时间】:2021-05-30 19:23:33
【问题描述】:
在我的一次采访中,有人问我一个问题,当您需要将位于一个数据库中的数百万数据传输到另一个服务时,您将如何有效地设计一个系统?
在不影响可扩展性和吞吐量的情况下,最有效的设计方式应该是什么?
【问题讨论】:
标签: java microservices event-sourcing system-design
在我的一次采访中,有人问我一个问题,当您需要将位于一个数据库中的数百万数据传输到另一个服务时,您将如何有效地设计一个系统?
在不影响可扩展性和吞吐量的情况下,最有效的设计方式应该是什么?
【问题讨论】:
标签: java microservices event-sourcing system-design
我会说更多的是检查思维方式,然后寻找生产就绪的解决方案。
作为一名顾问,我会从“视情况而定”开始。 :)
首先 - 需要更多细节。它到底有多大?该操作多久发生一次?它有多重要?有人可以访问服务器吗?
万一真的大事-https://aws.amazon.com/snowmobile/
如果这种情况发生一次,并且可以访问两个服务器 - 也许是简单的解决方案 - 有人可以复制吗?
但我的假设是这个问题是关于用 Java 做的。 TCP / TLS 在安全性、数据完整性方面是否足够好?对我来说没关系,但问题是展示思维方式......下一步是实际处理。这将需要一些时间 - 如何知道我们是同步的?我们可以使用关系数据库,这是一个有点旧的解决方案,但是......广泛使用,经过良好测试。然后使用序列化隔离启动事务将完成这项工作。还有一个问题是如何重新启动整个操作?除此之外,持久的事务对于 DB 来说并不完美。所以,如果有可能使用队列 - 我会使用它。这有点复杂,需要更多资源,但如果该操作至关重要,和/或经常发生?
【讨论】:
涉及许多因素,但是考虑到您正在谈论将数据从数据库移动到服务,我们正在谈论服务。所以在这里我会做什么:- 通过引入队列机制来设计异步进程或框架。该框架将能够根据使用情况进行扩展和缩减。在应用程序和从中传输数据的主机系统之间引入一个集成层。让它成为 AWS SQS / Google PUBSUB 之类的。让您托管系统将其数据流式传输给它,然后让您的框架从那里提取数据并将其异步移动到服务中。根据负载等扩展您的服务。
【讨论】: