【问题标题】:How to share models across different services/repos using postgres/knex.js/objection.js in node.js?如何在 node.js 中使用 postgres/knex.js/objection.js 在不同的服务/repos 之间共享模型?
【发布时间】:2018-06-12 10:54:22
【问题描述】:

在标准的微服务架构中,每个服务都对自己的数据负责,并设置了边界。处理这些数据的唯一方法是通过服务提供的 RESTful 端点。

我有一个独特的案例,我希望运行一些集群的爬虫进程,用原始数据填充一个表。这些抓取过程也可以针对特定情况进行配置,比如一个抓取文本、一个抓取图像等。

然后,原始数据将被另一个进程使用并聚合到另一个表中的规范化结构中。我想将所有这些流程拆分为可部署的小型组件,但这意味着我必须以某种方式在多个存储库/项目之间共享模型定义,因为聚合逻辑必须消耗所有原始数据。

聚合逻辑可能会向每个集群爬虫进程发出请求,但其状态控制会比仅查询表复杂得多。

我知道可以在隔离的 repo 中定义模型定义,然后作为依赖项导入其他项目,但这是正确的架构吗?

【问题讨论】:

    标签: node.js database postgresql knex.js objection.js


    【解决方案1】:

    何时使用微服务的最佳情况是当您的问题域中有非常不同的有界上下文时。当您像您所描述的场景那样具有重叠的上下文边界时,微服务可能会花费您超过您获得的收益。尽管存在这个问题,您是否觉得通过将应用程序解构为微服务来提高生产力? 如果不更好地了解您的应用程序,就很难给出明确的答案,但是当您一开始就遇到这样的问题时,很有可能这对于微服务架构来说不是一个好案例。请记住,这只是我的两分钱。 为配置共享物理存储库听起来相当繁琐,如果可能的话,我会避免这样做!

    【讨论】:

    • 我相信由于共享配置或模型我会获得更高的生产力,但在部署阶段会很困难。我正在编写一个 AI 服务,它将成为用户的主要入口点,但我将构建专门的抓取程序进程,该进程将针对特定来源以获取训练数据,在这种情况下是多个论坛或博客网站。跨度>
    • 晚上想了想,我认为处理这个问题的最简单方法是让每个进程向培训服务发出 POST 请求。仍然会有共享模型,但我猜训练服务和入门服务在上下文中比其他服务有更多的重叠。
    猜你喜欢
    • 2017-10-30
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2011-08-24
    • 2018-08-09
    • 2017-11-23
    相关资源
    最近更新 更多