
亿级流量架构实战:高可用与高并发设计方案
文章平均质量分 95
以实战为线索,逐步深入高可用和高并发系统设计的各个环节,掌握系统性能优化的思路与技巧,打造健壮的架构,提升工程化思维能力和实际开发水平。
我心向阳iu
优快云专家博主、阿里云开发者社区专家博主、51CTO社区专家博主、360书馆认证博主、知乎掘金B站等平台受邀作者。
如遇开发、程序等需求,博客首页下拉加入公众号,私信博主
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一、亿级流量系统设计原则——高可用原则
高可用性的衡量通常使用SLA(Service Level Agreement,服务等级协议)中的可用性百分比。一般来说,高可用性系统的SLA要求为99.9%甚至更高。如下图SLA可用性与故障时间对应表流量高峰期间例如在购物节或促销活动期间,系统可能面临大量订单请求。通过异步处理和数据优先级管理,可以确保核心功能(如下单和支付)的正常运行,同时将非核心功能降级或延迟处理。系统维护和升级在系统维护或升级过程中,可能需要减少处理负载。原创 2024-08-19 13:00:00 · 2614 阅读 · 0 评论 -
一、亿级流量系统设计原则——业务设计原则
流程可定义的设计旨在使系统能够灵活地定义、管理和优化业务流程,以适应不同的业务需求和变化。例如当前有,保险公司的理赔流程的业务:假设我们有一家保险公司,该公司提供多种保险产品,每种保险产品的理赔流程可能有所不同。例如,一种保险产品可能需要多步骤审核,而另一种保险产品可能只需简单的核实。因此,我们需要一个灵活的系统来处理这些不同的理赔流程。业务场景:保险产品 A理赔申请提交初步审核(是否符合理赔条件)资料审核(是否提供了所有必需的文件)理赔决定(批准或拒绝理赔)理赔支付保险产品 B。原创 2024-08-19 13:30:00 · 418 阅读 · 0 评论 -
业务设计原则——状态机
待付款:订单已创建,等待用户付款。已付款:用户已付款,订单待发货。已发货:商家已发货,订单待用户收货。已完成:用户已收货,订单结束。取消:订单被取消,所有操作终止。状态机是一种强大的工具,能够帮助管理复杂的状态变迁和业务流程。通过定义明确的状态、状态转移规则以及事件触发条件,状态机可以有效地简化状态管理、确保一致性,并提供清晰的流程控制。在实际应用中,如订单处理系统,状态机的应用能够提高系统的稳定性和可维护性,使得系统能够按照预定义的规则进行操作。原创 2024-08-07 17:30:38 · 1068 阅读 · 0 评论 -
一、亿级流量系统设计原则——高并发原则
高并发系统的设计是一个复杂而系统化的过程。通过无状态设计、系统拆分、服务化等原则,可以有效应对高并发场景,提高系统的性能和稳定性。在实际应用中,合理的架构设计和不断的迭代优化是关键。在后续的文章中,我们将深入探讨每个设计原则的具体实现和优化方法,帮助您在实际项目中应用这些原则,打造高性能、高可用的系统。原创 2024-08-19 14:00:00 · 1978 阅读 · 0 评论 -
二、负载均衡与反向代理——upstream 配置
负载均衡和反向代理是实现高可用性和高性能系统的重要技术。通过 Nginx 的upstream配置,可以实现多种负载均衡策略,处理上游服务器的故障重试,并进行健康检查。理解和正确配置这些功能,对于确保系统的稳定性和用户体验至关重要。在实际应用中,选择合适的负载均衡器和配置方法,将有助于应对不断增长的用户请求,提升系统的吞吐量和可靠性。原创 2024-08-19 15:00:00 · 1102 阅读 · 0 评论 -
二、负载均衡与反向代理——负载均衡算法
一致性哈希算法基于请求的某个属性(如 URI 或参数)计算哈希值,将请求分配到上游服务器。这样可以保持会话的一致性,使得来自同一 IP 的请求始终被转发到相同的上游服务器。权重较高的服务器会接收到更多的请求,同时也会根据连接数的情况来调整。请求将根据服务器的权重值进行分配,高权重的服务器会接收到更多的请求。哈希算法通过对请求的某个属性(如 URI 或请求参数)进行哈希,将请求分发到上游服务器。通过选择合适的负载均衡算法,可以根据实际业务需求和服务器性能优化请求的分发,提高系统的整体性能和用户体验。原创 2024-08-19 16:00:00 · 665 阅读 · 0 评论 -
二、负载均衡与反向代理——失败重试
为了确保网站在高负载时能够保持稳定性和高可用性,你需要配置负载均衡和失败重试机制,以应对上游服务器可能出现的故障。当请求遇到配置的错误类型(如连接错误、超时等)时,Nginx 会自动将请求转发到下一个可用的上游服务器。在负载均衡和反向代理配置中,处理上游服务器故障是至关重要的。,可以指定当一个上游服务器在指定时间内失败一定次数后被认为不可用,并从负载均衡列表中暂时移除。和其他相关选项,Nginx 可以在遇到特定错误时自动尝试将请求转发到下一个上游服务器。,该服务器将被认为不可用,并从负载均衡列表中移除。原创 2024-08-19 18:30:00 · 777 阅读 · 0 评论 -
二、负载均衡与反向代理——健康检查
假设你运营一个电商网站,网站的前端服务器需要与多个后台服务进行交互,如订单服务、用户服务和库存服务。为了确保用户在购物过程中能够获得持续的服务,配置健康检查以监控这些后台服务的状态是至关重要的。通过这样的配置,Nginx 能够实时监控后台服务的健康状态,并在检测到服务不可用时自动进行故障转移,确保电商网站的高可用性。通过这些步骤,可以确保健康检查配置正确,并且 Nginx 能够按照配置进行有效的健康检查。同时可以检查 Nginx 和上游服务器的日志,以确认健康检查的结果和服务器的状态。原创 2024-08-19 22:00:00 · 1090 阅读 · 0 评论 -
二、负载均衡与反向代理——其他配置:域名、备份、不可用上游服务器
在负载均衡和反向代理的配置中,除了健康检查,还有一些重要的配置选项可以帮助优化系统的性能和可靠性。指令直接引用域名会使 Nginx 在每次请求时解析域名,从而获取最新的 IP 地址。这种方式适用于需要动态更新 IP 地址的场景。这些配置选项可以帮助你根据不同的需求优化 Nginx 的负载均衡和反向代理功能,确保系统的高可用性和稳定性。原创 2024-08-19 22:00:00 · 478 阅读 · 0 评论 -
二、负载均衡与反向代理——长连接
指令配置与上游服务器的长连接数量。此配置会影响每个 Worker 进程与上游服务器之间的连接池,而不限制 Worker 进程与上游服务器的总连接数。在负载均衡和反向代理的配置中,长连接的设置可以有效地减少连接建立和关闭的开销,提高系统的性能和响应速度。通过合理配置和使用长连接,可以显著提高系统的性能,减少连接建立和关闭的开销,提高请求的处理效率。下面介绍如何在 Nginx 中配置长连接,以及 Nginx 的长连接实现细节。为了确保 Nginx 与上游服务器之间使用长连接,客户端请求也需要配置正确。原创 2024-08-19 23:30:00 · 1398 阅读 · 0 评论 -
二、负载均衡与反向代理——HTTP反向代理与动态负载均衡
动态负载均衡允许 Nginx 自动发现和注册 upstream 服务,而无需手动修改配置。Consul 是一个开源的服务注册与发现系统,支持动态服务发现和负载均衡。Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛用于负载均衡和缓存。启用 Gzip 压缩可以显著减少通过 Nginx 处理的请求和响应的数据大小,从而提高传输效率和性能。反向代理不仅实现负载均衡,还提供缓存功能来减轻上游服务器的压力。块中,全局配置意味着这些设置将影响所有的。块中,或根据需要调整现有配置。,其中的配置项可以放在。原创 2024-08-20 00:00:00 · 1025 阅读 · 0 评论 -
二、负载均衡与反向代理——Nginx四层负载均衡
Nginx 的四层负载均衡提供了 TCP 和 UDP 协议的负载均衡功能,通过stream模块可以进行静态和动态负载均衡配置。静态配置适用于简单场景,而动态负载均衡可以通过开源模块如实现自动更新上游服务器的配置,提升灵活性和扩展性。根据实际需求选择合适的方案,确保系统稳定性和性能。原创 2024-08-20 02:00:00 · 1632 阅读 · 0 评论 -
三、系统隔离术——读写隔离与动静隔离
读写隔离是一种将读操作和写操作分配到不同数据库实例中的策略,以提高系统的性能和可靠性。通过这种方式,主数据库负责处理所有的写操作(如插入、更新和删除),而从数据库则处理读操作(如查询)。主从数据库模式是实现读写隔离的一种常见方式,其中主数据库负责写操作并将数据同步到从数据库,而从数据库则处理读取请求,减轻了主数据库的负担。在数据库里,读写隔离就是把读操作分到从数据库上,把写操作留给主数据库。这两种隔离技术可以帮助提升系统的性能和可靠性,通过合理的配置和实施策略,可以显著改善系统的用户体验和稳定性。原创 2024-08-20 06:00:00 · 1376 阅读 · 0 评论 -
三、系统隔离术——线程隔离与进程隔离
在业务逻辑中,我们需要定义异步方法,这些方法会使用配置的线程池来处理。使用@Async注解来将方法标记为异步执行。// 处理高优先级任务的代码 } @Async("noneLevelThreadPool") public void processLowPriorityTask() {// 处理低优先级任务的代码 } }// 处理高优先级任务的代码 } @Async("noneLevelThreadPool") public void processLowPriorityTask() {原创 2024-08-20 08:00:00 · 1820 阅读 · 0 评论 -
三、系统隔离术——爬虫隔离、热点隔离与资源隔离
在实际业务中,尤其是页面型应用中,爬虫的访问量往往可能远超正常用户流量。例如,爬虫与正常用户流量的比例可能达到5:1,甚至更高。这种情况下,过多的爬虫访问会导致系统负载过重,可能会引发服务不可用或性能下降的问题。因此,采取有效的爬虫隔离和管理措施变得尤为重要,以确保系统的稳定性和正常用户体验。在实际应用中,热点问题常常发生在某些操作或数据上,例如秒杀活动、抢购促销或突发事件。热点会导致系统的压力集中在特定服务或资源上,从而影响整体系统的稳定性。原创 2024-08-20 11:00:00 · 1135 阅读 · 0 评论 -
三、系统隔离术实战——使用Hystrix实现隔离
Hystrix(英 [hɪst’rɪks]) 是 Netflix 开源的一个库,专门用于解决分布式系统中的延迟和容错问题。它通过提供一系列机制来增强系统的弹性,确保服务在出现问题时仍然能够稳定运行。线程隔离:避免某个服务的故障影响到其他服务。信号量隔离:限制并发请求数,防止系统过载。优雅降级:在服务失败时提供备用方案,避免系统崩溃。熔断机制:快速失败以保护系统,防止故障蔓延。请求缓存和合并:减少重复请求,提高性能。原创 2024-08-20 15:00:00 · 1609 阅读 · 0 评论 -
三、系统隔离术——基于Servlet 3实现请求隔离
特别是在像京东这样的大型电商平台中,商品详情页系统及相关的服务,如库存服务、图书相关服务、延保服务等,都需要处理大量的并发请求。在传统的请求处理模型中,所有请求处理操作都在一个线程中完成,包括请求解析、业务处理和响应生成。例如上图,Tomcat 6 在处理请求时需要在一个线程中完成所有的操作,这种处理方式在高并发情况下容易导致线程池的耗尽,影响系统的响应速度和处理能力。在这个过程中,每个请求都需要一个独立的线程来处理,所有操作必须在同一个线程中完成,这导致了线程资源的紧张和处理能力的瓶颈。原创 2024-08-20 19:00:00 · 1263 阅读 · 0 评论 -
四、高并发系统限流机制——限流算法:令牌桶算法
请求处理时间指系统从接收到请求到处理完成的时间,包括令牌的生成和消耗过程。此指标衡量系统响应速度。系统吞吐量指单位时间内系统能够处理的请求数量。高吞吐量表明系统能在高负载下维持良好性能。延迟指请求从提交到开始处理的时间,包括等待令牌的时间。延迟高时会影响用户体验。原创 2024-08-06 21:12:21 · 1243 阅读 · 0 评论 -
四、高并发系统限流大法——限流算法:漏桶算法
漏桶算法是一种用于流量控制的算法,通过一个“漏桶”来处理请求。请求被放入桶中,桶以固定速率“漏出”请求。如果桶满了,新请求将被丢弃或延迟。漏桶算法适用于需要平稳输出请求速率的场景,能够有效控制流量和负载。原创 2024-08-20 23:00:00 · 1050 阅读 · 0 评论 -
四、高并发系统限流大法——限流算法:滑动窗口算法
1.1 滑动窗口算法的定义滑动窗口算法是一种用于流量控制的算法,通过在时间窗口内统计请求数量来限制请求频率。与令牌桶算法不同,滑动窗口算法更关注于时间上的连续性,可以更精确地控制请求的流量。1.2 滑动窗口算法的工作机制滑动窗口算法通过维护一个固定时间长度的窗口来计算请求的数量。当窗口移动时,新的请求会被计入窗口内,而过时的请求则被移出窗口。这种机制确保了请求的平滑分布,避免了突发流量对系统的冲击。1.3 滑动窗口算法的优点精准控制:通过时间窗口的动态调整,可以精确控制请求的速率。平滑流量。原创 2024-08-20 23:30:00 · 2326 阅读 · 1 评论 -
四、高并发系统限流大法——应用级限流
令牌桶算法是一种常用的平滑限流算法,它允许在短时间内处理一定量的请求,从而应对突发流量。连接池中的连接数是有限的,超出最大连接数的请求会被等待或抛出异常,从而防止系统资源被过度使用。在高并发环境中,为了更好地控制请求流量并处理突发流量,可以使用平滑限流算法,如令牌桶算法和漏桶算法。在高并发应用系统中,处理请求的能力是有限的。在高并发环境中,对特定接口的请求量进行控制是必要的,以防接口因请求过多而崩溃。不仅指定了每秒允许的请求数,还设置了一个预热时间,允许令牌生成速率逐渐增加,以适应逐渐增加的请求负载。原创 2024-08-21 10:30:00 · 1089 阅读 · 0 评论 -
四、高并发系统限流大法——分布式限流
然而,对于高流量场景,分布式限流可以有效分担压力,避免单点故障。Nginx+Lua 提供了一个高效的分布式限流方案,利用 Nginx 的高性能和 Lua 的灵活性,可以有效地控制请求流量。: 如果使用 Redis 进行限流,可以根据请求的 IP 地址进行一致性哈希,将不同 IP 的请求分配到不同的 Redis 节点,从而避免单个 Redis 节点的压力过大。: 当 Redis 实例出现故障或达到其最大并发处理能力时,应用层可以采用更简单的限流策略,如基于内存的计数器,以保证基本的流量控制功能。原创 2024-08-21 11:30:00 · 820 阅读 · 0 评论 -
四、高并发系统限流大法——接入层限流
命令后,第二次请求将再次尝试发出,但由于时间间隔为 0.3 秒,桶可能已被重新填充,具体结果会受到速率限制和网络状况的影响。节流用于限制重复事件的处理频率,确保同一事件在特定时间窗口内只被处理一次,或限制连续相同事件的最小间隔时间。桶容量为 3,这意味着在突发模式下,最多可以有 3 个请求同时处理,而超过的请求将会被延迟。: 限制事件处理的最早时间点,使得只有第一个事件在设定时间窗口内被处理,之后的事件将被忽略。: 限制事件处理的超时时间,即在设定的时间窗口内,事件处理的最小间隔时间。原创 2024-08-21 20:30:00 · 912 阅读 · 0 评论 -
五、高并发系统降级巧计——降级预案理论分析
例如,电子商务平台的降级策略包括首先降级页面的非核心部分(如广告和推荐模块),接着降级页面的异步请求(如实时库存查询),最后如果压力仍然过大,则启动服务级降级(如限制订单处理功能),以保护核心购物流程的稳定性。通过合理设计和实施降级策略,结合有效的监控与告警系统、详尽的文档和培训、以及平衡的降级与恢复策略,可以有效保护高并发系统的核心功能,提高系统在面对突发情况时的稳定性和可靠性。例如,社交网络应用中,系统会将用户评论暂存到缓存中,并异步更新到数据库,减少对数据库的即时写入压力,保证用户评论功能的可用性。原创 2024-08-22 09:00:00 · 931 阅读 · 0 评论 -
五、高并发系统降级巧计——自动开关降级与人工开关降级
在现代高并发系统中,如何确保系统在面临高流量和复杂问题时的稳定性和可用性是一个核心问题。系统在处理大规模请求时,常常会遭遇各种挑战,如服务响应超时、服务故障、资源过载等。为了应对这些挑战,降级策略成为确保系统稳定性的重要手段。降级策略能够帮助系统在问题发生时,自动或手动地切换到备用方案,从而减少对用户体验的影响,并保持系统核心功能的正常运行。本文将深入探讨高并发系统中的降级策略,重点分析自动开关降级和人工开关降级的实现与应用。我们将以 Spring Boot 和 Spring Cloud 的实现为例,详细讨原创 2024-08-22 11:00:00 · 739 阅读 · 0 评论 -
五、高并发系统降级巧计——读服务降级与写服务降级
在高并发系统中,如何有效地管理系统负载和保证服务的可用性是至关重要的。降级策略是高并发系统中保护核心业务的有效手段之一。降级策略可以分为读服务降级和写服务降级,这些策略可以帮助系统在高负载或故障情况下保持可用性,避免完全崩溃。读服务降级是指在读操作遇到性能问题或服务不可用时,采取措施降低对核心服务的压力,从而保护系统的整体稳定性。常见的读服务降级策略包括:切换到缓存、静态化处理和屏蔽读请求等。当读请求的主要服务出现性能问题或不可用时,将请求切换到缓存中是一个有效的降级策略。这种方法可以减少对核心服务的依赖,原创 2024-08-22 14:00:00 · 1049 阅读 · 0 评论 -
五、高并发系统降级巧计——使用Hystrix实现降级与熔断实战
Hystrix是一个用于处理分布式系统中的服务降级和熔断的库,可以有效地提高系统的容错能力。Hystrix的熔断功能可以帮助你在服务故障时迅速响应,防止问题扩大化,从而保证系统的整体可靠性。Hystrix通过超时配置和降级机制来处理这种情况,确保系统的稳定性和用户体验。通过这种方式,即使在系统负载过高或网络延迟的情况下,你的应用程序也可以提供合理的用户反馈,保持系统的稳定性和可用性。一旦熔断器被触发,所有的请求将被快速失败并调用降级方法,防止对故障服务的进一步请求,从而保护系统的稳定性。原创 2024-08-22 17:00:00 · 844 阅读 · 0 评论 -
六、超时与重试机制——代理层超时与重试
在实际开发过程中,未设置或设置不当的超时机制常常导致故障。例如,应用未设置超时可能导致请求响应缓慢,慢请求累积引发连锁反应,甚至引发应用雪崩。中间件或框架有时会在超时后进行重试(如设置重试两次),读操作通常适合重试,但写操作(如订单写入)大多不能重试。重试次数过多可能引发请求流量激增,模拟DDoS攻击,因此需要合理设置重试机制,并与熔断和快速失败机制配合。在代码审查时,务必检查超时与重试机制。本章将从Web应用和服务化应用的角度,介绍如何设置超时与重试。系统层面的超时设置不在本文讨论范围内。原创 2024-08-23 09:00:00 · 836 阅读 · 0 评论 -
六、超时与重试机制——Web容器超时与中间件客户端超时与重试
在高并发和高负载的生产环境中,Web容器的超时配置对系统性能和稳定性至关重要。Tomcat 8.5 是广泛使用的 Java Web 容器,以下是对其主要超时设置参数的详细解析,以帮助优化和调整系统的性能。在中间件系统中,如 Dubbo,超时和重试机制对于确保系统的稳定性和性能至关重要。以下是详细的配置说明及不同场景下的配置建议。以下是针对常见场景的全面配置示例,以及如何根据实际需求调整这些配置参数。Tomcat 的超时设置对不同场景的应用性能和稳定性具有重要影响。原创 2024-08-23 11:00:00 · 1000 阅读 · 0 评论 -
六、超时与重试机制——数据库超时处理集合
如果需要更灵活的事务超时控制,可以自定义。代码实现@Override// 自定义超时获取逻辑,例如从事务定义中获取超时设置说明:从获取事务超时时间。如果未配置,则使用默认值。:将超时时间设置到对象中,单位为秒。原创 2024-08-23 19:00:00 · 2533 阅读 · 0 评论 -
六、超时与重试机制——业务超时
在服务调用型超时的处理过程中,优化策略主要集中在合理配置超时时间和实施有效的重试机制上。在处理任务型超时时,优化策略的目的是确保任务超时后能够得到及时有效的处理,同时减少系统资源的浪费,提高系统的稳定性和性能。通过合理配置超时时间和实施有效的重试机制,可以显著提高服务调用的可靠性,优化系统性能,并确保用户体验的稳定性。在服务调用过程中,超时或失败是不可避免的,因此设计有效的重试机制是非常重要的。:在调用远程服务时,如果超出指定的时间未收到响应,需要采取相应的处理措施,如重试操作或记录失败信息。原创 2024-08-23 21:00:00 · 2176 阅读 · 0 评论 -
七、回滚机制——事务回滚
在 Spring Boot 和 Spring Cloud 中实现事务回滚,可以根据系统的复杂性选择合适的事务管理策略。对于单库事务,使用 Spring 的注解即可实现事务管理和回滚。对于分布式事务,可以选择使用两阶段提交(2PC)、三阶段提交(3PC)、TCC 模式或 Sagas 模式等方法来保证事务的一致性和完整性。原创 2024-08-24 09:00:00 · 1667 阅读 · 0 评论 -
七、回滚机制——代码、数据和部署的回滚策略
静态资源(如 JavaScript 和 CSS 文件)的版本回滚机制主要依赖于资源的版本化和缓存控制策略。这确保在新版本出现问题时,能够迅速恢复到旧版本并保证用户获得稳定的体验。通过以上方法,能够有效管理数据的版本,确保系统在数据问题发生时能够迅速回滚到稳定状态。在系统部署过程中,确保能够快速回滚到稳定版本是非常重要的。对数据进行版本化可以确保在出现数据问题时能够回滚到历史版本。在分布式系统和开发过程中,回滚机制是确保系统稳定性和可靠性的关键措施。在出现故障时,自动将流量引导回旧版本,保证系统的可用性。原创 2024-08-24 11:00:00 · 1153 阅读 · 0 评论 -
八、系统测试——压测与预案
压力测试是一种通过施加超出系统设计负载的压力来评估其稳定性和性能的测试方法。不同于常规的性能测试和负载测试,压力测试的目标是逼迫系统进入极限状态,从而发现其在异常条件下的表现。识别系统瓶颈:在高负载条件下,系统的哪些部分会出现性能瓶颈,从而影响整体性能。评估系统稳定性:在极端条件下,系统是否会崩溃或出现其他严重问题。测试容错能力:系统在面对超出预期的负载时,是否能够有效处理并恢复正常运行。在压力测试中,有几个关键指标需要关注,包括响应时间、吞吐量(TPS/QPS)、错误率、CPU和内存使用率等。原创 2024-08-25 00:00:00 · 811 阅读 · 0 评论 -
九、应用级缓存——应用级缓存总述
缓存的核心目的是将数据尽可能地靠近使用者,以提高访问速度。其工作机制是:首先尝试从缓存中读取数据,如果缓存中没有,则从慢速设备(如磁盘或网络)中读取数据,并将数据同步到缓存中。缓存通常用于存储频繁访问的数据、热点数据、计算昂贵的数据、符合“5分钟法则”的数据等。及时更新:频繁访问的数据在5分钟内应及时更新缓存,以保持数据的最新状态。优先缓存热点:优先缓存那些在短时间内被频繁访问的数据,确保热点数据始终在缓存中。减少失效:定期检查和更新缓存,特别是可能短时间内变化的数据,以减少缓存失效,提高数据准确性。原创 2024-08-24 13:00:00 · 720 阅读 · 0 评论 -
九、应用级缓存——总结缓存使用模式实践
在应用级缓存的实际使用中,理解并应用缓存使用模式可以极大地提升系统性能和一致性。以下是几种主要的缓存使用模式,以及如何在实际项目中使用它们。首先,定义一个Copier@Override// 进行 Copy-On-Read 操作,创建键的副本// 示例实现@Override// Copy-On-Write 通常不需要键的副本return key;@Override// 进行 Copy-On-Read 操作,创建值的副本// 示例实现@Override。原创 2024-08-25 07:00:00 · 877 阅读 · 0 评论 -
九、应用级缓存——应用级缓存实现方法
在使用缓存时,可能会遇到查询数据库结果为空的情况。如果频繁地对这些空数据进行查询,仍会给数据库带来不必要的负载。为了解决这个问题,可以引入 NULL Cache 策略。NULL Cache 通过在缓存中存储一个特殊的 NULL 对象来标记没有数据的情况。当再次遇到相同查询时,直接从缓存中返回 NULL,而不需要再次访问数据库。实现逻辑定义 NULL 对象并处理首先,定义一个特殊的对象来表示缓存中的空值。在没有数据时存入 NULL 对象。原创 2024-08-25 08:00:00 · 1117 阅读 · 0 评论 -
十、HTTP 缓存——HTTP 缓存与HttpClient客户端缓存
在日常开发中,浏览器缓存是一个非常常见但又容易被忽视的优化手段。许多开发者在面对浏览器缓存相关问题时可能会感到困惑,因此本章内容专门用来解答这些常见问题,并帮助你更好地理解如何在 Java 应用中控制浏览器缓存。浏览器缓存是指在用户使用浏览器访问网站页面或 HTTP 服务时,根据服务器端返回的缓存控制响应头,将响应内容缓存到本地浏览器。这样,下次访问相同资源时,浏览器可以直接使用缓存内容,或者仅与服务器验证内容是否过期,从而减少网络传输的数据量,提升网站性能。public。原创 2024-08-25 10:00:00 · 836 阅读 · 0 评论 -
十、HTTP 缓存——Nginx HTTP 缓存
时间为 2024年8月16日 11:00:00,Nginx 将返回 304 状态码,因为资源的最后修改时间早于客户端的请求时间。:对于不常变化的异步数据(如商品详情页的评论),可以考虑设置较长时间的缓存(如 1 个月)。:对于静态资源(如 JS、CSS、图片),可以设置较长时间的缓存(如 1 个月或 1 年),通过版本号控制缓存过期。:对于不需要强一致性的页面(如商品详情页的库存信息),可以设置较短的缓存时间。通过这种配置,你可以灵活地管理 Nginx 的缓存内容,确保缓存的有效性和更新的及时性。原创 2024-08-25 14:00:00 · 847 阅读 · 0 评论 -
十一、多级缓存——多级缓存实战详解
多级缓存是在系统的不同层级进行数据缓存的一种策略,旨在提高数据访问效率。接入 Nginx将请求负载均衡到应用 Nginx。常见的负载均衡算法有轮询和一致性哈希。轮询可均衡负载,一致性哈希则能提升缓存命中率。应用 Nginx 本地缓存读取本地缓存(可以是 Lua Shared Dict、Nginx Proxy Cache 等)。如果命中,则直接返回缓存数据。这种缓存可以提升吞吐量,降低后端压力,特别是应对热点数据时非常有效。分布式缓存如果本地缓存未命中,则查询分布式缓存(如 Redis)。原创 2024-08-27 15:29:50 · 1573 阅读 · 0 评论