开发者社区 > 云原生 > 微服务 > 正文

微服务架构中列表和导出的问题

*架构介绍:

image.png

前端页面http请求gateway,usercore和filecore均是两个独立的dubbo服务,暴露rpc接口,gateway网关rpc请求usercore和filecore两个模块

问题:

现在有一个管理后台,后台中有一个列表,这个列表分别有这样几个字段

image.png

表格中班级编号字段和班级名称字段是从“班级表”中取得,其他字段均是从“学习时长表”、“学生表”等各个表中获取数据进行计算得来的,并且还需要根据“参与度百分比”排序

基于现有的架构,我们在usercore的模块中开发了一个service,在service中先通过mybatis请求了各个表,然后在代码中将数据汇总、计算、排序、分页,得到一个列表,然后将这个列表返回给前端,前端进行展示

现在还有一个需求,就是需要将个列表进行excel导出,由于整个列表的数据量大,导出时的文件处理非常占内存和io,所以我们设计了filecore来做文件相关的处理

但是这个地方的问题在于,由于列表中的数据需要请求多张表,然后进行计算、汇总、统计、排序等一系列复杂的操作,并且这些操作已经在usercore实现过了

难题: 1、如果在filecore做文件导出,势必需要在写一遍usercore已经有的计算统计逻辑,重复代码难维护 2、如果在usercore做文件导出,那么非常占io和内存,对usercore这样一个在线服务的压力太大 3、如果在usercore将数据查询出来,再请求到filecore,那数据的传输太大,非常占网络带宽 4、如果在usercore将数据查询出来并且存储到缓存中,再由filecore来读取并生成文件,这样对redis的压力过大,可能导出的数据有几十万,如果遇到多个人同时导出,那么压力会成倍增加

so

求解,,,感谢

展开
收起
wang-jg 2019-09-17 10:12:10 1349 0
1 条回答
写回答
取消 提交回答
  • 主要从事 Java 后端开发。

    有一种方法就是定时任务。

    1. 将列表需要进行计算、汇总、统计、排序等一系列复杂的操作放在定时任务中,而定时任务可以避开用户高峰期,选择在半夜进行执行。
    2. 将计算结果放在一张表中,供需要相关数据的服务进行读取。

    当然这个方法的前提是,这张表不需要实时计算。

    2019-09-17 16:17:33
    赞同 展开评论 打赏

为微服务建设降本增效,为微服务落地保驾护航。

相关电子书

更多
微服务治理技术白皮书 立即下载
微服务与Serverless 立即下载
EDAS4.0 助力企业一站实现微服务架构转型与 K8s 容器化升级 立即下载