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

98 天前
 RichardX2023

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

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

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

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

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

那么,更偏激一点的说法,既然你都不在数据库当场做了,那么选择是否多一个 rpc 很可能也没啥区别了。
wu00
98 天前
我们服务只做查询,数据给到前端不管是生成 excel 还是 csv 都在前端生成,撑死在 bff 层做下聚合;
超量数据不给实时导
nanjingwuyanzu
98 天前
我们把导出的功能单独做了个服务,各模块通过消息发送给这个服务,这个服务能连所有的微服务,收集完数据后导出
qiyilai
98 天前
这个和微服务没啥关系吧,一个 jar 包的事
wushigejiajia01
98 天前
1. 简单处理,就是导出功能做成 jar 包给其他服务调用
2. 导出功能做一个模块,多数据源取数
lidashuang
98 天前
别搞微服务
kanepan19
98 天前
导出其实也是比较耗开销的东西,在导出中心,做一些限制, 比如最多 6 个线程可以导出, 其他排队等待状态。
怎样导出不 oom ,等等。这些才是关注点。
pengxiaoyu
97 天前
个人理解 数据导出是上游服务 对接各个数据提供服务 数据导出流程 应该是 浏览器请求->数据导出服务->查询数据提供服务(订单服务等)-> 生成文件 -> 上传到 oss ->返回前端 url

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1013114

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX