存储资源

更新时间:

存储资源是指用于存储和管理数据的硬件和软件资源,包括节点的本地磁盘、分布式文件存储、数据库和缓存等。存储资源的主要作用是存储和管理系统的数据。存储资源需要提供数据的持久性、可靠性和高效性,以满足系统的数据存储和访问需求。存储资源的性能直接影响计算资源的处理能力,存储资源的可靠性直接影响数据的准确性。以下详细介绍5个计算资源风险点和应对的容错策略。

本地磁盘满

节点的本地磁盘空间不足,无法存储或处理更多的数据。常由日志配置不合理,磁盘容量不足等原因造成的,是比较常见的问题。可能造成数据丢失、系统崩溃等影响。常见的容错策略如下:

  • 使用率预警:定期监控计算节点的磁盘空间使用情况,并设置告警机制。当磁盘空间即将满时,系统可以发送警报通知运维人员,以便及时处理。

  • 定期清理归档:对于不再需要或冗余的数据,及时进行清理和归档。可以通过定期清理临时文件、删除过期的日志和备份文件等方式,释放磁盘空间。

  • 数据压缩:对于需要长期存储的数据,可以采用数据压缩和存储优化技术。通过压缩数据文件、使用更高效的存储格式,减少数据的存储空间占用。

  • 日志异步写入:在磁盘满的情况下,如果服务应用日志同步写,会造成线程阻塞,从而造成服务无响应等问题。需要将应用日志改为异步写入,防止因磁盘满对在线服务造成影响。

磁盘IO负载高

磁盘IO操作非常频繁或负载过大,导致磁盘IO性能下降或系统响应变慢的情况。磁盘性能下降,读写速度变慢,任务执行时间增加,系统的实时性降低,当磁盘IO负载过大无法承受时,可能导致磁盘故障、系统崩溃或数据丢失。常见的容错策略如下:

  • 数据缓存:将数据暂时存储在内存中,减少对磁盘IO的频繁访问。可以利用内存缓存系统或操作系统的文件缓存功能,提高数据的访问速度和磁盘IO的利用效率。

  • 分布式存储:将数据分布到多个计算节点的存储设备上,采用分布式存储系统或数据分片的方式。这样可以分散磁盘IO负载,平衡数据访问压力,并利用多个计算节点的磁盘IO资源,提高系统的并发能力。

  • 数据压缩:对需要存储的数据进行压缩和存储优化,减少磁盘IO的负载。通过压缩数据文件、使用更高效的存储格式等方式,减少磁盘IO的数据量和读写操作。

缓存穿透

大量的请求查询或访问不存在的数据,导致缓存无法命中,每次都需要访问后端数据源,从而增加了后端数据库的负载和响应时间。可能会造成系统性能下降,数据库压力增加等问题。常见的容错策略如下:

  • 布隆过滤器:使用布隆过滤器对请求进行预处理,过滤掉一部分可以明确判断不存在的请求。布隆过滤器是一种空间效率高、判断存在与否比较快速的数据结构,可以快速判断请求的key是否可能存在,从而减轻后续查询的压力。

  • 缓存空对象:对于查询结果为空的请求,将空结果也存入缓存中,并设置一个较短的过期时间,这样在一段时间内对于相同的请求不会再次查询数据源,减少了后端访问的负载。

  • 限流:可以采用限流策略,对频繁请求的来源进行限制,防止缓存穿透问题进一步扩大。

  • 异步加载:对于缓存无法命中的请求,可以异步加载数据,并将加载后的数据存入缓存中,以便后续的请求可以命中。

  • 预热:同时,可以通过缓存预热机制,在系统启动时提前加载热点数据到缓存中,减少缓存穿透的可能性。

数据库连接池满

在应用中使用的数据库连接池已经达到设置的最大连接数,无法再创建新的数据库连接的情况。数据库连接池满可能会造成响应延迟、请求阻塞、服务无法响应等问题。可以采用以下容错策略:

  • 配额管理:根据系统负载和需求,合理配置应用使用的最大连接数,防止因单应用服务数据库访问异常造成数据库连接池满,影响其他业务。

  • 超时回收:在连接池中设置连接超时时间,当连接在一定时间内没有被使用时,自动回收并释放连接。这可以避免长时间占用连接资源,增加连接可用性。

  • 连接复用:尽量使用连接复用的方式,即一个请求完成后,将连接释放回连接池,供其他请求复用。

  • 限流:可能因上游服务调用导致当前服务数据库访问频次增大,导致数据库连接数增加,超出当前服务处理的最大请求,需要当前服务具有限流能力,保障自身服务可用性。

数据库实例异常

是指数据库系统在运行过程中出现异常情况,导致数据库无法正常工作或提供服务的状态。可能原因包含数据库服务进程异常退出、数据库节点宕机、数据库网络异常等,常见的容错策略如下:

  • 自动重启:当数据库实例异常终止或崩溃时,可以设置自动重启和恢复机制,自动重新启动数据库服务,并进行必要的数据恢复操作,以确保数据库的可用性和数据完整性。

  • HA 切换:通过使用主备、集群、分布式等方式,确保数据库的冗余和故障切换。当主数据库实例出现异常时,可以自动切换到备用实例,保证系统的持续可用性。

  • 数据备份和恢复:定期进行数据库备份,并将备份数据存储到可靠的位置。当数据库实例发生异常时,可以通过备份数据进行恢复,避免数据丢失。

除以上五点外,常见的存储资源风险点还有“挂载卷无法访问”、“云盘读写IO Hang”、“依赖文件不存在”、“缓存雪崩”、“配置推送错误”、“数据库IO不足”、“数据库存储空间不足”、“数据库副本丢失”等。可以使用自动检测与恢复、依赖降级、故障迁移、多级缓存、配置验证与回滚、读写分离、分库分表、多副本等容错策略分别应对以上风险点。