C#异步批量上传数据至远程数据库的标准实现方案咨询
适配需求的实现方案
方案1:结构化日志组件直接实现(代码量最少)
- 前端ASP.NET MVC项目接入
Serilog日志组件,先配置Serilog.Sinks.File将访客分析事件以结构化JSON格式写入本地滚动日志文件,写入操作开销极低,不会阻塞主业务请求流程,只要本地磁盘正常就不会丢失数据。 - 额外引入
Serilog.Sinks.Http扩展包,开启其内置的离线缓冲、失败重试配置,无需自行实现异步传输、重试逻辑,组件会在后台自动批量将本地缓冲的事件推送至中央WebAPI,服务不可用时会按指数退避规则自动重试,直到推送成功后才会清理本地的缓冲记录,所有配置均可直接写在Web.config中,业务层仅需要按规范打日志即可,几乎不需要额外自定义代码。
建议配置本地日志按大小/日期滚动,开启已上传成功日志的自动清理规则,避免占用过多磁盘空间。
方案2:分布式事件传输组件实现(扩展性更强)
如果后续还有其他跨服务事件传输需求,可以接入.NET生态成熟的分布式事件库CAP:
- 配置CAP使用本地SQLite或者磁盘文件作为持久化存储,业务代码仅需要调用一行事件发布方法,CAP会自动将事件持久化到本地存储,不会阻塞主业务流程。
- 配置CAP的目标接收端为你的中央WebAPI或者直接对接中央数据库,CAP会自动在后台异步执行事件推送、失败重试逻辑,只有推送成功后才会删除本地的事件记录,天然保证数据不丢失,所有重试规则、传输逻辑都已经封装完成,不需要自行开发。
方案3:无侵入采集Agent实现(无需修改业务代码)
如果不想改动现有业务代码,可以采用独立进程的采集Agent方案:
- 现有业务逻辑保持不变,正常将访客事件写入本地结构化日志文件即可。
- 每台前端服务器部署轻量级采集Agent,配置Agent实时监控本地日志目录的新增内容,自动增量读取日志事件后批量推送至中央WebAPI,可配置Agent的本地缓冲规则、重试策略,服务不可用时Agent会本地缓存待推送数据,服务恢复后自动补传,Agent为独立进程,完全不会影响ASP.NET应用的运行稳定性,全程不需要修改业务代码。
内容的提问来源于stack exchange,提问作者Brady Moritz
相关产品推荐
相关产品推荐

