我一直在对 Azure 数据块和 Azure 数据工厂进行一些修补,我想知道当你只想通过调用这些服务 API (Rest( 从几个服务获取数据时,这些是否矫枉过正,然后使用 Rest API 将这些数据推送到服务 X。
我已经看到数据工厂可以调用 rest API(但似乎不支持 Oauth2(,但我还没有发现任何关于将数据推送到另一个 rest API 的信息(此时将所有内容整合到 Azure 数据库中并不真正有意义(
那么,我应该使用数据工厂,还是编写 python 脚本并使用 Azure 函数调用它更适合解决此问题?
问候
只有当数据可以非常简单地从一个数据库(或文件(移动到另一个数据库时,我才更喜欢使用数据工厂。当你需要更多逻辑来与 API 交互时(例如在你的情况下(,使用数据工厂几乎没有额外的价值,因为你已经需要一些计算(例如 Azure Functions(。
如果你的数据摄取是某种工作流(例如,你需要按特定顺序排列 A、B 和 C,然后才能推送到 X(,那么我可以建议使用具有函数链和扇出/扇入模式的持久函数。我也有一些视频内容来解释这一点。
下面是一个使用函数链的业务流程的小伪代码示例:
var id = input.GetInput<string>();
var a = await context.CallActivityAsync<DataA>("CallApiAActivity", id);
var b = await context.CallActivityAsync<DataB>("CallApiBActivity", id);
var c = await context.CallActivityAsync<DataC>("CallApiCActivity", id);
var combined = Builder.CombineABC(a, b, c);
return await context.CallActivityAsync<bool>("PushToApiXActivity", combined);
如果对 A、B 和 C 的调用不相关,那么我建议你做一个扇出/扇入,这样这些函数就可以并行调用。
持久函数的好处是业务流程是有状态的,并且对每个活动函数调用执行存储检查点操作。这将启用使用CallActivityWithRetryAsync
方法的自动重试。这在处理不受控制的服务时特别有用,并使解决方案更具弹性。