后台管理系统导出数据拖死业务, 是否应该彻底分开两块系统?

2020-06-01 20:15:00 +08:00
 leaderhyh
场景如下:
SpringCloud 全套, 数据库未分库,主从读写分离;

网关进来根据 api 进 微信微服务 手机 app 微服务, 后台微服务 等, 由这些微服务调用底层的 订单微服务 会员微服务等来完成业务逻辑或者组装数据;

现在后台微服务中的导出会员接口没有控制条数, 一下导出 30w+的会员数据(每个会员还要统计订单情况等), 导致会员微服务挂掉, 进而导致微信微服务无法获取会员信息,无法完成业务(业务要求可用性较高)

我的疑问是: 底层的订单微服务 会员微服务等 是否应该拆成两个, 一个给业务使用, 一个给后台管理系统使用, 且部署分开. 现在比如会员微服务下 MemberController 里面就既有后台增删改查的 又有业务上比如支付时扣减用户余额的, 是否拆开好一点(再次强调:业务要求可用性较高!)?求解答, 谢谢!
4947 次点击
所在节点    Java
35 条回复
snappyone
2020-06-01 20:17:47 +08:00
30 万分成每次 1000 条就好了
matrix67
2020-06-01 20:18:47 +08:00
分页
leaderhyh
2020-06-01 20:22:18 +08:00
@snappyone 导出可以做成异步的, 是目前的解决方案
optional
2020-06-01 20:26:13 +08:00
再加一台 slave 为后台专用。
leaderhyh
2020-06-01 20:29:51 +08:00
@optional 底层微服务也拆开吗?
levelworm
2020-06-01 20:36:33 +08:00
说分页的未必合乎后台业务需求啊,有时候后台的确需要批量处理,你分页是方便你自己了,但是后台就得写脚本自己抓数据了。对我就这么干过。最好还是分开来,后台专门有台机器。
Jooooooooo
2020-06-01 20:38:39 +08:00
拆分数据库, 实时交易库和导出类的库分开

然后再去优化业务
857681664
2020-06-01 20:39:52 +08:00
导出可以异步放消息队列里,用独立服务处理,我的想法是这样
leaderhyh
2020-06-01 20:45:35 +08:00
@Jooooooooo 目前数据库不是痛点且架构师不想动数据库
CoderGeek
2020-06-01 20:54:20 +08:00
运营与对外分离
night98
2020-06-01 20:55:10 +08:00
可以起两个服务,但是可以使用分批写入的方式,一次读取一千条左右,写到文件中,参考 http://poi.apache.org/components/spreadsheet/how-to.html#sxssf
如果说内存足够的话,只是说数据库容易被拖死的话,可以单独起一个从库专门用于后台管理系统的导出,然后使用 mysql 自带的 sql 导出到硬盘目录,再用服务器转移到对象存储等文件服务上面
Jooooooooo
2020-06-01 22:01:16 +08:00
@leaderhyh 不是动架构. 只需要多一个从库然后导出专门连这个从库就行.
yeqizhang
2020-06-01 22:11:41 +08:00
数据库倒不用分离吧,毕竟后台系统不就是操作对外的一些数据。
不针对你现在的问题来说,系统也最好分开两个系统部署不同的机器,这是前期规划没做好呀!
arrow8899
2020-06-01 22:43:19 +08:00
你这里的导出可以看做是一种报表业务吧,每次导出再去计算成本太大了。通常的做法是用流式处理框架 Flink,Strom 等实时汇总,把计算成本分摊到每一次业务处理上,导出的时候直接读取就行。
namelosw
2020-06-01 23:05:58 +08:00
微服务挂掉,不用 SQL 全读到内存计算了?那假如你是因为内存计算卡死的话
0. 看看能不能把内存计算变成 SQL query,如果不能看下面
0. 看看能不能改成异步 Job,如果不能看下面
1. 最简单的建议单独分微服务出去
2. 如果分出去微服务接着发现数据库也是瓶颈,把数据库用 CDC 之类的弄一个同步,只用来做查询
3. 再不行就 Flint 或者 Spark,这些是大量内存计算的正规军
leaderhyh
2020-06-01 23:42:26 +08:00
@Jooooooooo 这个已经做了
leaderhyh
2020-06-01 23:44:09 +08:00
@yeqizhang 设计阶段是有想过, 当时大家都说先简单做, 所以代码就都揉到一起了
leaderhyh
2020-06-01 23:45:53 +08:00
@arrow8899 ecs 的预算都有点吃紧,暂时不考虑这块
leaderhyh
2020-06-01 23:47:08 +08:00
@namelosw 嗯 所以现在的方案是改成异步的
wangyzj
2020-06-01 23:57:47 +08:00
微服务挂掉?
内存炸了?
少量多次吧

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

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

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

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

© 2021 V2EX