- 博客(108)
- 收藏
- 关注
原创 深入解析Java日志框架:Logback、Log4j 2与SLF4J的区别与使用指南
深入解析Java日志框架:Logback、Log4j 2与SLF4J的区别与使用指南
2024-11-29 22:43:05
1308
原创 高性能调度系统实现:preview
调度系统本质上是**时间驱动的任务分发器**。其核心挑战包括:1. **高精度**:任务触发时间需要尽量精准,尤其在毫秒级甚至更高精度需求的场景下。2. **高可用**:系统需要具备容灾能力,确保任务不会遗漏或重复。3. **高并发**:支持大规模任务的并发调度,例如推送系统每天可能需要触发数亿条消息。4. **弹性与可扩展性**:在任务量波动时,能够动态扩展,避免资源浪费或性能瓶颈。
2024-11-23 20:50:11
774
原创 Web 开发必知必会:WebP、JPG、PNG 和 SVG
在现代 Web 开发中,选择合适的图像格式对于提升网站性能和优化用户体验至关重要。**WebP**、**JPG**、**PNG** 和 **SVG** 是常用的图像格式,它们各自有不同的特点和适用场景。以下是对这些图像格式的详细解析。
2024-11-23 16:34:41
3457
原创 深入解析 Tengine:高性能 Web 服务器与反向代理的企业级应用
### **Tengine 的目的**Tengine 是由淘宝技术团队(现阿里巴巴)基于 Nginx 开发的一款高性能 Web 服务器和反向代理服务器。它的主要目的是在 Nginx 的基础上增强性能、扩展功能、提升稳定性,并为大规模、高并发的互联网应用提供更高效的解决方案。
2024-11-23 16:30:57
1500
原创 数百万容器的负载均衡:Uber 的动态子集化之旅
子集化是大规模分布式系统负载均衡中使用的一种常用技术。在这篇博文中,我们将简要介绍 Uber 当前的服务网格架构,自 2016 年以来,该架构一直在为 Uber 中数千个关键微服务提供支持。然后,我们将讨论在尝试扩展网格中的任务数量时面临的挑战,以及初始子集方法的问题。最后,我们将介绍我们如何提出实时动态子集解决方案及其在生产中的结果。
2024-11-22 23:48:07
1028
原创 2024PKU计算机学院推免上机考试
echo 'IHBrdeeahOS/neeglOS5n+Wwsei/memavuW6puS6hu+8jOeglOeptueUn+aenOeEtuaYr+aEiOadpeaEiOawtOS6hg=='| base64 --decode
2024-11-22 00:17:14
942
原创 手撕 LSM 树:从基础实现到优化策略的全面剖析与应用
手撕 LSM 树(Log-Structured Merge Tree)是一种将 LSM 树的核心思想和实现原理进行详细解释和手工编写的过程。LSM 树是用于高效写入和查询的存储结构,广泛应用于现代数据库系统(如 Cassandra、HBase、LevelDB 等)中。它通过分层设计,将写入操作转化为顺序写入,从而提高写入效率,并通过定期合并操作来优化读取性能。
2024-11-21 22:20:55
1355
原创 20 个常用的 Linux 终端工具:全面监控系统资源,提升性能与效率
在 Linux 系统中,资源监控是系统管理员和开发者的重要任务。了解系统性能,识别瓶颈,确保服务器稳定运行,需要借助各种工具来实时监控 CPU、内存、磁盘、网络等资源的使用情况。以下是 20 个常用的终端工具,可以帮助你监控 Linux 系统的资源使用情况。
2024-11-21 22:12:06
991
原创 从 SSE 到 gRPC:提升 Uber 实时消息系统的性能与可扩展性
迁移到 gRPC 是一个复杂而深远的变化,本文已经对这一过程的动机、架构设计、技术挑战以及未来展望进行了详细的介绍。为了进一步扩展内容并达到所需的字数,我们可以更深入地探讨每个部分的细节,增加更多的技术背景、迁移中的具体实现、性能调优的策略以及对未来技术演进的期望等。
2024-11-21 21:07:45
944
原创 Java 21 虚拟线程死锁陷阱:Netflix 的一次排查实战
对于那些刚接触虚拟线程的人来说,它们被描述为“轻量级线程,可显著减少编写、维护和观察高吞吐量并发应用程序的工作量”。它们的强大之处在于,当阻塞操作发生时,它们能够通过 continuation 自动暂停和恢复,从而释放底层操作系统线程以重新用于其他操作。在适当的上下文中利用虚拟线程可以释放更高的性能。在本文中,我们将讨论在 Java 21 上部署虚拟线程的道路上遇到的一种特殊情况。
2024-11-21 00:18:00
1084
1
原创 Netflix 的 Key-Value 抽象:大规模数据访问的灵活性和效率
随着时间的推移,随着新的键值数据库的引入和服务所有者推出新的使用案例,我们遇到了数据存储滥用的许多挑战。首先,开发人员很难在这种跨多个商店的复杂全球部署中考虑一致性、持久性和性能。其次,开发人员必须不断重新学习新的数据建模实践和常见但关键的数据访问模式。这些挑战包括尾部延迟和幂等性、管理具有许多行的“宽”分区、处理单个大型“胖”列以及响应缓慢的分页。此外,与多个原生数据库 API(不断发展的 API,有时会引入向后不兼容的更改)的紧密耦合,导致组织范围内的工程工作来维护和优化我们微服务的数据访问。
2024-11-20 23:43:56
707
原创 构建高性能时序数据平台:Netflix 的 TimeSeries 设计与实践
随着 Netflix 不断扩展和多样化,进入视频点播和游戏等各个领域,以毫秒级访问延迟摄取和存储大量时态数据(通常达到 PB)的能力变得越来越重要。在之前的博客文章中,我们介绍了键值数据抽象层和数据网关平台,这两者都是 Netflix 数据架构不可或缺的一部分。Key-Value Abstraction 为存储和访问结构化 Key-Value 数据提供了灵活、可扩展的解决方案,而 Data Gateway Platform 则为保护、配置和部署数据层提供了必要的基础设施。
2024-11-20 22:15:46
702
1
原创 Airbnb 的 Flink 平台演进:终点是k8s?
本文将对Airbnb (全球民宿平台)的 Flink 平台演进进行更深入的详解,拆解每个阶段的关键技术选择和背后的考量,以及 Kubernetes 架构的各个组件如何协同工作。
2024-11-19 23:34:46
960
原创 Airbnb 的营销追踪与增长评估系统:每日系统设计
在这篇博文中,我将讨论 Airbnb 如何通过引入 C 参数跟踪以及用于分析和增长评估的系统来构建统一的跟踪衡量系统来支持营销活动。
2024-11-19 23:21:46
650
原创 深入解析 Envoy 追踪机制:原理、配置与代码实践
在当今的云原生架构中,分布式系统已成为主流,但随之而来的是系统复杂性和可观测性挑战。为了有效管理和监控这些复杂的微服务架构,分布式追踪技术显得尤为重要。Envoy 代理作为服务网格的数据平面,不仅在流量管理、安全性和可扩展性方面表现出色,还提供了强大的可观测性功能,特别是其分布式追踪能力。本文将深入探讨 Envoy 代理如何处理用户请求,实现分布式追踪,并与追踪系统集成,最终提升应用的可观测性。通过详细的配置示例和代码解析,我们将展示 Envoy 在分布式追踪中的关键角色和机制,帮助读者更好地理解和应用
2024-11-19 22:20:42
1220
原创 高效的 I/O 并发处理:双缓冲与 Exchanger 的使用
在高性能并发编程中,高效地处理 I/O 操作至关重要。**双缓冲**(Double Buffering)是一种通过使用两个缓冲区来提高 I/O 操作效率的并发技术。一个 `goroutine` 使用其中一个缓冲区进行写操作,另一个 `goroutine` 使用另一个缓冲区进行读操作,然后交换缓冲区。这样,两个 `goroutine` 可以并发执行,减少了它们之间的等待和阻塞,从而提高了程序的吞吐量。本文将介绍如何在 Go 中实现双缓冲技术,并提供一个类似于 Java 中 `java.util.conc
2024-11-18 23:17:50
663
原创 Redis 与 SQLite 的完美结合:深入探究 Redka 项目
随着数据存储和访问需求的不断增长,不同类型的数据库在各自的领域中发挥着重要的作用。Redis 以其高性能的内存数据库特性,广泛应用于需要快速响应的场景;SQLite 则以其轻量级的嵌入式关系数据库,被广泛应用于移动设备和小型应用中。那么,如果将两者的优点结合起来,会产生怎样的火花呢? [**Redka**](https://github.com/nalgeon/redka)就是这样一个旨在利用 SQLite 重新实现 Redis 优秀部分的项目,同时保持与 Redis API 的兼容性。
2024-11-18 22:51:47
1085
原创 从零搭建 Go kit 微服务:Consul 服务发现和负载均衡指南
深入理解 Go kit 服务发现:Consul 集成最佳实践Go kit 中的 Endpointer、Instancer 和 Balancer:Consul 服务发现解析
2024-11-18 22:12:01
834
原创 复杂查询,MyBatis 完胜 Hibernate?性能测试揭晓答案
电商场景下 Hibernate 和 MyBatis 性能对比:百万用户级订单查询海量数据下的 ORM 框架选择:Hibernate vs. MyBatis 性能实测复杂查询,MyBatis 完胜 Hibernate?性能测试揭晓答案别再用错 ORM 框架!高并发场景下 MyBatis 性能优势明显
2024-11-18 21:47:11
1220
原创 微服务架构的“显微镜”:Jaeger 分布式追踪全面解析与最佳实践
在微服务架构盛行的今天,应用程序的复杂性和服务交互的深度不断增加,如何快速定位性能瓶颈、追踪请求流、分析分布式系统中的问题,成为开发者和运维人员面临的重要挑战。**Jaeger**,作为一款开源的分布式追踪神器,正是应对这一挑战的理想工具。
2024-11-18 21:23:12
701
原创 全面揭秘 Go 语言超强 ORM 框架 Ent:高效构建数据库的终极武器!
全面揭秘 Go 语言超强 ORM 框架 Ent:高效构建数据库的终极武器!
2024-11-18 21:16:15
1536
原创 解锁Go并发性能:Ants库深度解析
在 Go 语言中,`ants` 是一个高性能的协程池(goroutine pool)库,能够帮助开发者更高效地管理和复用 goroutines,从而减少因大量 goroutines 创建和销毁所带来的性能开销。`ants` 是由 [Panjf2000](https://github.com/panjf2000) 开发的开源项目,托管在 GitHub 上,地址是:[ants GitHub](https://github.com/panjf2000/ants)。
2024-11-15 21:58:23
1136
原创 时间轮算法:定时任务之基
时间轮是一种高效的数据结构,专门用于管理定时任务,特别适用于间隔时间比较规则的任务。它通过将时间划分为多个槽,每个槽代表一个固定的时间段,从而实现定时任务的调度。下面我们详细探讨时间轮的基本原理及其在高精度长时间调度中的应用和局限性。
2024-11-11 23:07:42
1049
原创 LRU缓存算法调优:从经典到现代的演进之路
在计算机科学的浩瀚世界中,缓存机制犹如一位不知疲倦的幕后英雄,默默支撑着各种应用程序的高效运行。作为缓存淘汰策略的经典代表,LRU(最近最少使用)算法以其简洁高效的特性被广泛应用。然而,面对日益增长的数据量和愈发复杂的应用场景,传统的LRU算法也逐渐显露出其局限性。你是否曾思考过,如何进一步提升LRU算法的性能?如何让缓存更精准地预测未来的访问模式?如何在有限的内存空间内最大化缓存命中率?本文将带你深入探索LRU机制的调优之路,揭开那些隐藏在经典算法背后的“花样玩法”。我们将从基础的LRU算法原理出发
2024-11-11 22:38:55
1010
原创 设计之道:spring-boot-starter自动配置
springboot的设计解决了spring的一些问题,比如自动配置,打包等,说spring-boot-starter自动配置之前,一定要先回顾一次springboot的自动配置原理,它们之间的联系可谓十分紧密。
2024-11-11 22:25:13
1263
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人