一、如何设计适合的方案
不同的数据场景,切入角度不同,设计出来的方案也会很不一样,始终有更好的,我们只要在有限的资源下,设计出适合的方案即可。
下面贴出一份,批量处理数据的大致思路:
二、参考案例(仅供参考)
2.1、案例1:10天处理完1300w+文档资源的内容提取
2.1.1、背景:
根据要求,从数仓圈中1300w+的文档资源ID,想要重新对其提取正文内容,最终数据汇总到数仓中。
2.1.2、准备阶段(成本评估、环境准备)
- 思路说明:
(1)根据输入输出的要求,制定对应的处理脚本(一般都是支持多进程,或者多线程的方式)
(2)先把单线程/进程的任务跑起来,初步估算小单位的处理速度(speed:单位时间内处理多少条)
(3)再找一台机器运行进行批量运行测试,观察机器运行情况(count:大致估算,一台指定配置机器可以跑多少个线程/进程)
(4)根据任务要求时间(time)和单位处理速度(speed),估算需要申请的机器数量(size)和所需配置(一般为求稳定,会稍加些配置)
(5)找到华为云:ECS·购买弹性云服务器,查看所需机器配置的购买方案:包月/小时,了解资源释放费用结算方式,评估不同方案的价格。
- 操作步骤:
- 输入输出梳理:
- 1300w+原数据在数仓,需要同步到文库的业务库
- 提取到的试读文本最终需要到数仓,而且由于内容较多,文库这边不愿意存储到数据库,最终选择存到文件中,即最终汇总到OBS,再汇总到数仓表中。
- 编写文档试读内容提取脚本:
- 针对不同文件类型的文档文件,需要不同的解析插件(需要调研后选定,安装到运行环境中)
抽样测试,拿到处理速度,预估所需机器:
- 针对不同文件类型的文档文件,需要不同的解析插件(需要调研后选定,安装到运行环境中)
- 不同处理场景,因执行依赖种类、体量、性能上限不同,最终执行速度差别很大,需要以实测数据为准。
- 从1300w中抽取部分(比如:1000个文档),找机器做测试,拿到处理速度,估算所需机器:
- 估算成本:https://console.huaweicloud.com/ecm/?agencyId=8de25fe71d41471fb811bf92bd443298®ion=cn-north-4&locale=zh-cn#/ecs/createVm
- 从1300w中抽取部分(比如:1000个文档),找机器做测试,拿到处理速度,估算所需机器:
- 申请机器(走OA单)和共享磁盘
- 申请机器的种类选型:
- OSS高频读写:用阿里云机器
- OBS高频读写:用华为云机器
- 阿里云和华为云之间有专属通道,整个公司目前都在用,特殊处理场合,会高频占用带宽,而且产生额外的流量费用。
- 申请共享磁盘,并挂载:
机器申请下来,部署环境,调试- ⚠️ 注意:
- 不要一次性全部申请下来,先申请一台,安装环境,公共配置等,找运维以此机器备份个镜像,然后后续的机器以此镜像作为初始化,剩下了重复安装配置的繁琐过程。
- ⚠️ 注意:
- 申请机器的种类选型:
- 挂载共享磁盘(没有则申请)
共享磁盘有多种类型:按使用量收费,按包月包年等计时收费,此处为按量收费,用完后需要清理,减少支出- 优点:
- 同一份文件或者脚本,直接放在共享磁盘中即可,无需多次复制,省时省力。
- 结合linux系统的crontab定时触发机制,可以方便完成每个机器的监控。
- 可以收集汇总每个机器上生成的文件,汇总到一起,统一再上传到OBS上。
- 缺点:
- 因为是挂载的磁盘,读写速度比较慢,不适合高频的I/O操作。
- 优点:
2.1.3、设计方案(编码)
部署模式:
- 根据实际处理场景,自行决定即可
- 我这里采用的是:多机部署+多进程(单线程),我需要细粒度观到每个任务处理状态,并且灵活启停处理。