RichardX2023
V2EX  ›  Java

问个 Java 微服务的问题,大佬速进

  •  
  •   RichardX2023 · Jan 31, 2024 · 6480 views
    This topic created in 1006 days ago, the information mentioned may be changed or developed.

    java 微服务的问题,如果目前有 5 个模块,每个模块都需要进行 [查询] 和 [数据导出] 。 那 [数据导出] 一旦有需求变动,就会导致各个模块来回改, 但是如果单独把导出业务作为一个模块来处理,就需要各个模块把查询返回的数据,传输给导出模块。

    一边是需要来回改,一边是远程调用的花销和性能影响,如何权衡。

    20 replies  •  2024-02-01 16:42:48 +08:00
    dayeye2006199
    dayeye2006199
    Jan 31, 2024
    1
    做成一个包,各个模块引入一下不可以吗?
    有变动就更新一下包
    c3de3f21
    c3de3f21
    Jan 31, 2024
    2
    - 首先,改肯定是得改的,这属于正常的版本迭代
    - 其次,个人认为提 单独模块(API 也好其他的调用方式也好) 总好过 各个模块来回改
    - 在者,个人认为微服务首先应有 CI ,后续应有健全的版本发布,部署机制才可以搞,不然手动操作太麻烦
    - 微服务本身就停消耗资源的
    fengpan567
    fengpan567
    Jan 31, 2024
    3
    各个模块的导出功能是独立的,啥需求每次都要把所有的导出都改了?不同服务导出的数据内容又不是一样的
    RichardX2023
    RichardX2023
    OP
    Jan 31, 2024
    4
    @dayeye2006199 是个思路
    RichardX2023
    RichardX2023
    OP
    Jan 31, 2024
    5
    @c3de3f21 是的,有 DevOps
    v2zzzzz
    v2zzzzz
    Jan 31, 2024❤️1
    6
    我们是导出服务直接多数据源连读库
    RichardX2023
    RichardX2023
    OP
    Jan 31, 2024
    7
    @fengpan567 不是每次,不频繁。比如这次,由原先的实时导出改为做成一个导出中心,通过用户下载的方式实现。
    改动就是把每次请求返回导出的 excel ,切换为导出推送到 oss ,并产生一个推送记录,用户通过推送记录获取 oss 的 url 来下载
    yaodao
    yaodao
    Jan 31, 2024
    8
    如果导出的功能比较单纯,不涉及到连接数据库和其他中间件,那么一楼给出的建议是最好的,直接以 jar 包的方式依赖( maven or gradle )进需要的工程中是最好的方式
    1018ji
    1018ji
    Jan 31, 2024
    9
    做成二方库 要不就 RPC ,咋简单咋来呗
    ALongRanger
    ALongRanger
    Jan 31, 2024
    10
    比较同意一楼和八楼的说法,在功能较为单一的情况下,将导出功能抽离为一个公共导出 jar ,各个子模块直接依赖,通过实现接口提供需要导出数据,由公共 jar 完成数据组装,格式处理、相关上传推送的处理是会比较合适的。

    导出请求直接通过网关或者直接打到对应服务模块完成。
    jfds
    jfds
    Jan 31, 2024
    11
    这种场景 rpc 调用开销可以忽略不计
    sivl6p
    sivl6p
    Jan 31, 2024
    12
    所有,作者最终选择了哪种方案
    matepi
    matepi
    Jan 31, 2024
    13
    大数据量处理,若考虑处理效率,实现应就近数据节点、而不是就近计算节点;计算找数据,而不是数据找计算。

    所以你想想最好么,当然是在数据本地(如数据库本地)做。真考虑效率的场景,导出根本轮不到 java ,就在数据库当场做了。

    那么,更偏激一点的说法,既然你都不在数据库当场做了,那么选择是否多一个 rpc 很可能也没啥区别了。
    wu00
    wu00
    Jan 31, 2024
    14
    我们服务只做查询,数据给到前端不管是生成 excel 还是 csv 都在前端生成,撑死在 bff 层做下聚合;
    超量数据不给实时导
    nanjingwuyanzu
    nanjingwuyanzu
    Jan 31, 2024
    15
    我们把导出的功能单独做了个服务,各模块通过消息发送给这个服务,这个服务能连所有的微服务,收集完数据后导出
    qiyilai
    qiyilai
    Jan 31, 2024
    16
    这个和微服务没啥关系吧,一个 jar 包的事
    wushigejiajia01
    wushigejiajia01
    Jan 31, 2024
    17
    1. 简单处理,就是导出功能做成 jar 包给其他服务调用
    2. 导出功能做一个模块,多数据源取数
    G2bN4dbX9J3ncp0r
    G2bN4dbX9J3ncp0r
    Jan 31, 2024
    18
    别搞微服务
    kanepan19
    kanepan19
    Jan 31, 2024
    19
    导出其实也是比较耗开销的东西,在导出中心,做一些限制, 比如最多 6 个线程可以导出, 其他排队等待状态。
    怎样导出不 oom ,等等。这些才是关注点。
    pengxiaoyu
    pengxiaoyu
    Feb 1, 2024
    20
    个人理解 数据导出是上游服务 对接各个数据提供服务 数据导出流程 应该是 浏览器请求->数据导出服务->查询数据提供服务(订单服务等)-> 生成文件 -> 上传到 oss ->返回前端 url
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5446 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 02:50 · PVG 10:50 · LAX 18:50 · JFK 21:50
    ♥ Do have faith in what you're doing.