从一项服务到另一项服务的大数据传输

问题描述

在我的一次采访中,有人问我一个问题,当您需要将一个数据库中的数百万数据传输到另一个服务时,您将如何有效地设计系统?

在不影响可扩展性和吞吐量的情况下,最有效的设计方式应该是什么?

解决方法

我会说更多的是检查思维方式,然后寻找生产就绪的解决方案。

作为顾问,我会从“视情况而定”开始。 :)

首先 - 需要更多细节。它到底有多大?该操作多久发生一次?它有多重要?有人可以访问服务器吗?

如果事情真的很大 - https://aws.amazon.com/snowmobile/

如果这种情况发生一次,并且可以访问两个服务器 - 也许是简单的解决方案 - 有人可以复制它吗?

但我的假设是这个问题是关于用 Java 做的。 TCP / TLS 在安全性、数据完整性方面是否足够好?对我来说是可以的,但问题是展示思维方式......下一步是实际处理。这需要时间 - 如何知道我们是同步的?我们可以使用关系数据库,这是一个有点旧的解决方案,但是......广泛使用,经过良好测试。然后使用序列化隔离启动事务将完成这项工作。还有一个问题是如何重新启动整个操作?除此之外,持久的事务对于数据库来说并不完美。所以,如果有可能使用队列 - 我会使用它。这有点复杂,需要更多资源,但如果该操作至关重要,和/或经常发生?

,

这涉及到很多因素,但是考虑到您谈论的是从数据库到服务的数据移动,我们谈论的是服务。所以在这里我会做什么:- 通过引入队列机制来设计异步进程或框架。该框架将能够根据使用情况进行扩展和缩减。在应用程序和将要传输数据的主机系统之间引入一个集成层。让它成为 AWS SQS / Google PUBSUB 或其他什么。让您的主机系统将其数据流式传输到它,然后让您的框架从那里提取数据并将其异步移动到服务。根据负载等扩展您的服务