.NET服务重启数据丢失问题预防方案咨询
.NET服务指标聚合低损失落盘实现方案
1. 进程终止事件兜底覆盖常规关闭场景
用.NET原生生命周期事件覆盖所有可控的进程退出场景,确保优雅关闭、系统关机、服务重启时的全量数据落盘:
- 注册
AppDomain.CurrentDomain.ProcessExit事件:.NET Framework和.NET Core全版本支持,所有正常进程终止流程都会触发该事件,可在回调中执行全量聚合数据落盘逻辑。 - 补充
AssemblyLoadContext.Default.Unloading事件:.NET Core 3.0+专属,覆盖单文件部署、容器环境下的程序集卸载场景,补全ProcessExit可能不触发的边缘场景。 - 系统信号监听适配跨平台场景:Windows下用
Kernel32.SetConsoleCtrlHandler注册CTRL_CLOSE_EVENT、CTRL_SHUTDOWN_EVENT回调,Linux下用libc.signal注册SIGTERM、SIGINT信号处理函数,覆盖系统主动终止进程的场景。
示例代码:
// 全平台通用退出事件注册 AppDomain.CurrentDomain.ProcessExit += (_, _) => FlushAllAggregatedMetrics(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { // 监听系统终止信号 PosixSignalRegistration.Create(PosixSignal.SIGTERM, _ => FlushAllAggregatedMetrics()); PosixSignalRegistration.Create(PosixSignal.SIGINT, _ => FlushAllAggregatedMetrics()); }
2. 轻量写前日志(WAL)兜底异常宕机场景
无需提高全量数据的落盘频率,仅新增极小开销的WAL日志,即可将异常宕机的数据损失控制在秒级:
- 每次更新内存聚合数据前,先写一条仅包含
指标ID、增量值、时间戳的WAL记录,采用顺序追加写模式,单文件达到预设大小(比如100MB)自动滚动。 - WAL刷盘间隔可设为1秒,顺序写的IOPS占用仅为全量小时级落盘的0.1%不到,完全不会带来存储压力。
- 服务启动时优先读取最近未过期的WAL日志,恢复内存聚合数据后再开始新的指标计算,异常宕机场景下最多损失1秒的指标数据。
- 每日全量聚合数据落盘完成后,自动清理所有过期的WAL文件,避免磁盘空间占用过高。
3. 条件触发式增量落盘控制内存与存储开销
不需要固定时间周期落盘,根据实际运行状态触发冷数据落盘,平衡内存占用和存储开销:
- 监听进程内存占用阈值,当内存使用率超过预设值(比如80%)时,仅将最近1小时无更新的冷聚合数据落盘并从内存释放,热数据继续保留在内存计算,不会产生大量存储写入。
- 也可设置聚合条目数阈值,当内存中未落地的聚合条目超过预设值(比如1000万条)时触发部分落盘,避免内存溢出。
示例代码:
var memoryThreshold = GC.GetTotalMemory(false) * 0.8; Task.Run(async () => { while (!_stoppingToken.IsCancellationRequested) { if (GC.GetTotalMemory(false) > memoryThreshold) { await FlushColdMetricsAsync(TimeSpan.FromHours(1)); } await Task.Delay(TimeSpan.FromMinutes(1), _stoppingToken); } }, _stoppingToken);
4. 同机共享内存兜底多实例场景
如果是同机部署多服务实例的场景,可借助内存映射文件共享聚合快照:
- 用
System.IO.MemoryMappedFiles将聚合快照写入本机共享内存,每5分钟更新一次,读写性能和普通内存一致,无IO开销。 - 单个实例异常宕机重启后,优先从共享内存读取最近的快照,再结合WAL日志补全数据,几乎不会有数据损失。
效果说明
上述方案整体保持天级全量落盘的基础频率,仅新增秒级WAL顺序写、不定时冷数据落盘的极小开销,可将数据损失占比控制在0.001%以内,完全避免小时级全量落盘带来的存储暴增问题,同时覆盖了优雅关闭、异常宕机等所有场景。
内容的提问来源于stack exchange,提问作者Shridhar R Kulkarni
相关产品推荐
相关产品推荐

