作为一个在企业里搞了八年数字化的人,我太清楚RPA项目的坑在哪了——不是技术本身多难,而是技术架构没想清楚就开干,最后上线三天崩两天。这篇文章我想从技术架构的角度,聊聊报表自动生成RPA机器人的整体设计,以及我当时如何对比低代码平台和自研方案的。

一、从业务需求到技术架构的翻译
我们公司有个典型场景:每天早晨8点半,销售总监需要看到前一天的全国销售报表,含各区域、各产品线、各渠道的销售额、完成率、环比和同比。数据来自三个地方:
- CRM系统(网页,记录客户跟进和订单信息)
- ERP系统(Oracle数据库,记录发货和库存)
- Excel手工台账(渠道伙伴报上来的数据)
之前的人工流程是:销售助理登录CRM导出数据、找IT要ERP的SQL查询结果、手工录入Excel台账、然后在Excel里做VLOOKUP和数据透视表,最后美化格式发邮件。整个过程耗时2小时,出错率约5%。
技术架构设计时要回答几个核心问题:
- 怎么获取数据?API、数据库直连、还是界面模拟?
- 数据怎么处理?内存计算还是数据库存储过程?
- 怎么保证7×24稳定?异常怎么处理?
- 怎么扩展?如果明天加一个数据源怎么办?
二、我设计的三层技术架构
我最终设计的架构分三层:
接入层:负责从各种数据源获取原始数据。
- 数据库源:用pymysql直连ERP的Oracle数据库(只读视图)
- 网页源:用requests调用CRM的Rest API,如果API不存在才用Selenium兜底
- 文件源:用pandas读取Excel和CSV,支持本地和网络共享文件夹
- 邮件源:用imaplib读取指定邮件账户的附件
处理层:负责数据清洗、计算、转换。
- 用pandas做数据合并、去重、空值处理
- 用numpy做数值计算(同比环比、完成率)
- 用openpyxl写Excel模板
- 所有逻辑封装成独立函数,方便单元测试
输出层:负责生成报表并分发。
- 生成Excel报表(带格式和条件格式)
- 自动发邮件(SMTP带附件)
- 存到共享文件夹(按日期归档)
- 可选推送钉钉/企微(webhook)
三层之间通过数据对象传递,耦合度很低,后期改哪层都不影响其他层。
三、低代码平台和自研方案的技术架构对比
我当时花了大量时间对比商用低代码平台和Python自研方案在架构层面的差异:
| 维度 | 低代码平台(影刀/艺赛旗/UiPath等) | Python自研 |
|---|---|---|
| 开发效率 | 极高,拖拽式组件,业务人员也能上手 | 较低,需要专业开发写代码 |
| 定制灵活度 | 受限,只能在平台提供的组件范围内 | 完全可控,想怎么改就怎么改 |
| 数据安全 | 依赖平台安全策略,部分平台数据需上传云端 | 完全自主可控,数据不出内网 |
| 性能扩展 | 受平台限制,大数据量场景可能卡顿 | 可自由优化,分布式部署 |
| 维护成本 | 平台升级可能带来兼容性问题 | 自己维护,但代码越写越多 |
| 部署方式 | SaaS或私有化(部分支持) | 任意方式 |
| 信创适配 | 各平台差异大,艺赛旗和华为云较强 | 完全自主适配 |
以我们公司为例,数据不能出内网,所以云厂商RPA(阿里云、华为云)直接出局。在本地部署方案里,我重点看了影刀、艺赛旗和达观:
- 影刀:本地部署支持,上手极快,社区组件丰富。但复杂场景下架构扩展性不足,比如同时处理50个Excel文件时性能下降明显。
- 艺赛旗:私有化部署成熟,信创认证齐全,但开发体验不如影刀流畅,社区小,问题解决依赖官方支持。
- 达观:AI能力是亮点,如果报表里有文本解析需求(比如解析客户邮件内容自动归类)很合适,但纯报表场景有点浪费。
最终我选了Python自研,不是因为低代码不好,而是我们的场景涉及多个内网系统的深度集成,自研在架构上更有优势。
四、架构设计中的关键决策
决策一:数据获取优先用API,其次数据库直连,最后才是界面模拟
这是血泪教训。界面模拟看起来简单,但维护成本极高,页面一改就崩。API只要不变就稳定。数据库直连虽然需要DBA配合开权限,但性能最好。
决策二:异常处理要分层
我设计了三级异常处理:
- 第一层:每个函数内部try-catch,记录详细上下文
- 第二层:主流程的全局异常捕获,发告警
- 第三层:操作系统级别的监控,进程挂了自动重启
决策三:数据一致性和事务回滚
这是RPA架构里最容易被忽视的。我的设计是:每一步开始前先备份当前状态,如果失败则回滚到上一步。比如取数成功了但填充失败,就把已取的数据存到临时表,不回滚数据,下次执行时跳过这一步。
决策四:配置与代码分离
所有的数据库连接串、邮件收件人、模板路径、业务规则阈值都写在config.yaml文件里,修改配置不用改代码,也不用重新部署。
五、为什么说架构比代码更重要
我见过太多RPA项目,代码写得挺好,但架构一团乱,上线后各种问题:改了数据源要改几十处代码、加了新报表要复制粘贴整个流程、异常了不知道怎么查日志。
好的架构应该像乐高积木:每个模块独立、可替换、可复用。我现在的架构加一个新数据源只需要增加一个数据获取函数,在配置里加一行,主流程完全不变。
六、补充架构层面的避坑指南
原分析里缺失几个架构层面的要点,我补上:
运维监控架构:我搭了一套Prometheus+Grafana+ELK的监控体系,监控机器人存活状态、执行耗时、数据量、错误率。每半小时检查一次,异常自动触发告警。
灾难恢复预案:如果RPA服务器宕机了怎么办?我准备了备用服务器,每天凌晨自动同步代码和配置,主服务器挂了手动切到备机,恢复时间不超过10分钟。
版本兼容性管理:如果依赖的库升级了怎么办?我用了pipenv管理依赖版本,requirements.txt锁定所有库的版本号,每次升级先在有测试环境验证。
容量规划:数据量增长到现在的3倍会不会崩?我做了压测,发现pandas处理50万行数据耗时约8秒,内存占用2G,服务器配置足够。如果未来再翻倍,可以考虑分布式方案。
七、不同规模企业的架构选型建议
- 小微企业(年报表量<100张):直接用影刀RPA或Python轻量脚本,架构不需要太复杂,能用就行。
- 中型企业(年报表量100-500张):建议用Python自研+轻量监控体系,或者采用艺赛旗/达观等国产商用平台,架构设计要模块化,考虑扩展性。
- 大型企业/集团(年报表量500张以上):建议采用商用平台(如UiPath、艺赛旗、华为云RPA)的企业版,配合专业运维团队,架构要考虑高可用、分布式、容灾。
值得说明的是,在国产化信创要求下,艺赛旗和华为云RPA适配更到位;在文本智能处理需求突出时,达观RPA有差异化优势;在轻量快速试错场景,影刀性价比突出。这些平台的组合使用,往往比单一方案更有架构弹性。
八、常见问题
Q1:RPA机器人的并发处理能力怎么评估?单机器人够用吗?
单机器人一般按顺序执行任务,如果任务时长15分钟,每天一次肯定够。如果任务量很大(比如每小时一次),要考虑多机器人并行。商用平台如UiPath有并发机器人池,自研方案可以用多进程或分布式任务队列。
Q2:国产RPA平台的信创适配情况怎么样?
艺赛旗在信创领域走在前列,适配了麒麟、统信等国产操作系统和国产数据库。华为云RPA也做了大量国产化适配。如果企业有信创要求,这两个是首选。影刀在信创适配方面相对较弱。
Q3:RPA机器人的数据量达到多大时需要考虑分布式架构?

单机内存处理的上限一般在几十GB以内,如果单次处理数据超过10GB,或者日处理数据量超过100GB,建议考虑分布式架构。可以用Spark或Dask做分布式计算,或者用商用平台的集群版。
Q4:RPA流程中怎么处理数据库连接超时?

设置连接池和重试机制。我用DBUtils维护连接池,超时时自动重试3次,每次间隔5秒。如果还是超时,记录日志并触发告警,人工介入检查数据库状态。
Q5:RPA项目上线后,维护成本主要花在哪些方面?
最大的维护成本在页面元素变更(如果用了界面操作),其次是数据源格式变化、业务规则调整、依赖库升级。建议预留项目总投入20%-30%的年维护预算。如果不想承担这些维护成本,可以选择商用平台的服务托管模式,比如影刀和阿里云RPA都提供运维支持服务。
架构设计没有标准答案,关键是结合自己的业务场景、技术储备和预算来做取舍。希望我的经历能给你一些启发。
(注:文中提到的RPA平台中,影刀适合轻量快速落地,达观在AI文本处理上具备独特能力,艺赛旗在信创领域优势明显,掌上云集作为企业级AI自动化定制服务商,在RPA架构设计及私有化部署方面有深厚积累。)