以下是一个基于本地缓存 + Redis ZSet + 定时任务的榜单方案,适用于高并发场景:
方案概述
- 本地缓存 :在应用服务器本地缓存榜单数据,减少对 Redis 的访问频率,提高读取速度。
- Redis ZSet :使用 Redis 的有序集合存储榜单数据,利用其高效的排序和范围查询功能。
- 定时任务 :定期更新本地缓存和 Redis ZSet 中的榜单数据,确保数据的实时性和准确性。
数据存储架构
全局前 1000 名榜单存储在 Redis 中
More »Java, Spring Boot, Microservice, Cloud, Architecture and DevOps Tutorials
以下是一个基于本地缓存 + Redis ZSet + 定时任务的榜单方案,适用于高并发场景:
全局前 1000 名榜单存储在 Redis 中
More »在互联网领域,限流是指对进入系统的请求数量或频率进行控制的一种机制,以防止系统因流量暴增而过载,从而保障系统的稳定性和可用性。
当请求超过限流阈值时,系统可以采取不同的拒绝策略:
More »在实际项目中,区分偶发性超时和频繁超时的重试策略非常重要。偶发性超时可能是由于网络抖动或临时负载过高引起的,适合立即重试;而频繁超时则可能是系统过载或下游服务不可用,此时应避免重试,以免加剧问题。
在实际面试的过程中,经常会遇到类似的面试题目,这时候可以这样回答:
在处理大量请求时,我们经常会遇到超时的情况。为了合理控制重试行为,避免所谓的“重试风暴”,我设计了一个基于时间窗口的算法。在这个算法中,我们维护了一个滑动窗口,窗口内记录了每个请求的时间戳以及该请求是否超时。每当一个请求超时后,我们会统计窗口内超时的请求数量。如果超时请求的数量超过了设定的阈值,我们就认为当前系统压力较大,不适合进行重试;否则,我们认为可以安全地进行重试。
然而,随着并发量的增加,普通版的滑动窗口算法暴露出了一些问题。特别是在高并发场景下,窗口内需要维护的请求数量可能非常大,这不仅占用了大量内存,而且在判定是否需要重试时还需要遍历整个窗口,这大大增加了算法的时间复杂度。
为了解决这个问题,我们进一步设计了进阶版的算法。在这个版本中,我们引入了ring buffer 来优化滑动窗口的实现。具体来说,我们不再以时间为窗口大小,而是使用固定数量的比特位来记录请求的超时信息。每个比特位对应一个请求,用1表示超时,用0表示未超时。当所有比特位都被标记后,我们从头开始再次标记。
这种设计极大地降低了内存占用,因为无论并发量多高,我们只需要固定数量的比特位来记录请求的超时状态。同时,在判定是否需要重试时,我们只需要统计ring buffer中为1的比特数量,这大大简化了算法的实现并提高了效率。
More »
原文链接:https://blog.bytebytego.com/p/a-crash-course-on-domain-driven-design
为复杂领域开发软件是一项具有挑战性的任务。
随着问题领域的复杂性不断增长,创建准确表示业务概念、规则和流程的软件变得越来越困难。设计不良的软件很快就会变成难以理解、难以维护和扩展的混乱代码。
领域驱动设计(DDD)为这个问题提供了解决方案。
DDD 是一种软件开发方法,它通过强调对核心领域和业务逻辑进行建模的重要性并使用这些模型作为软件设计的基础来解决领域复杂性。
领域驱动设计的核心是:
近年来,领域驱动设计的需求愈发迫切。基于微服务和云计算的架构已导致系统由众多以复杂方式交互的小组件组成。如果没有清晰且定义明确的领域模型来指导其设计,此类系统很快就会变成“一团泥球”。
More »原文地址:https://mainul35.medium.com/oauth2-with-spring-part-1-knowing-the-basic-concepts-5c4aa17884a
在本系列关于 Spring 的 OAuth2的文章中,我将尝试介绍和解释与 OAuth2 相关的每一个问题以及如何在 Spring 框架中实现这些问题。请记住,OAuth2 完全是一个概念性的东西,在不同的框架中,它有自己的实现。此外,许多应用程序开发人员开发自己的 OAuth2 实现,而不使用 Spring 框架提供的 OAuth2 框架支持。因此,我将就这个主题撰写一系列文章。
More »免责声明:本文技术性很强,需要清楚了解本系列前几篇文章,特别是第 1 部分和第 3 部分。
带有代码交换证明密钥 (PKCE) 的授权代码流用于无法存储客户端机密的应用程序。此类应用程序包括:
More »原文链接:https://ably.com/topic/websockets-kafka
Apache Kafka 是目前最强大的异步消息传递技术之一。 Kafka 由 Jay Kreps、Jun Rao 和 Neha Narkhede 等团队于 2010 年在 LinkedIn 设计,并于 2011 年初开源。如今,该工具被众多公司(包括科技巨头,例如 Slack、Airbnb 或 Netflix 使用)为其实时数据流管道提供支持。
More »基于微服务的应用程序的主要特征在 微服务、单体和 NoOps 中定义。它们是功能分解或领域驱动设计、定义良好的接口、明确发布的接口、单一责任原则和潜在的多语言。每项服务都是完全自主和全栈的。
因此,更改服务实现不会影响其他服务,因为它们使用定义良好的接口进行通信。这种应用程序有几个优点,但它不是 免费的午餐,需要在 NoOps 方面付出大量努力。
但是假设您了解构建此类应用程序所需的工作或至少其中的一部分,并且愿意跳槽。你做什么工作?您构建此类应用程序的方法是什么?
是否有任何关于这些微服务如何相互协作的设计模式?
More »