- 博客(169)
- 收藏
- 关注
原创 网络代理详解
代理是一种通过中间服务器来帮助客户端访问目标服务器的技术。代理服务器位于客户端与服务器之间,充当两者的中介,从而实现客户端和服务器之间的隔离。用户的所有请求经过代理后,再发往目标服务器,而目标服务器的响应则返回代理,再由代理传递给用户。
2024-11-05 15:23:28 1014
原创 常用的限流算法
如果需要简单的实现,且对突发流量不敏感,可以选择计数器法。如果希望平滑流量、避免突发效应,可以选择滑动窗口法。如果需要限制流量处理速率并允许少量突发流量,可以选择令牌桶算法。如果系统压力较大,且需要稳定处理流量,可以使用漏桶算法。如果系统错误率较高,可能需要通过熔断器保护系统。
2024-10-30 14:36:03 1015
原创 分布式锁实现方式
实现方式优点缺点适用场景数据库简单实现,适用小规模系统性能较低,易造成死锁低频、小规模分布式锁需求Redis高性能、自动过期、支持 Redlock 算法锁误释放风险,数据一致性受主从架构影响高并发、高性能场景ZooKeeper高可靠性、自动释放,支持选主和分布式队列性能略低,复杂性高长时间锁和一致性要求高场景。
2024-10-30 14:01:17 760
原创 Java中常用的监控命令
Java 提供了多种监控工具,这些工具包含了许多命令行工具,用于监控、诊断和管理 Java 应用程序的性能。这些工具主要位于 Java 安装目录下的bin。
2024-10-30 13:49:13 829
原创 矩阵基本的计算规则
矩阵的加法和减法可以看作向量的分量逐个相加或相减的推广。矩阵中的元素本质上可以看作是数据或者空间中的某些点的坐标,因此加减矩阵就是在对应的点上叠加或抵消这些坐标。例如在空间中的二维向量,每个分量按相同的比例缩放,结果是一个按比例放大或缩小的新矩阵。:对于表示向量集合的矩阵,转置操作会把数据的横向和纵向结构进行对调。:转置操作把矩阵的行变成列,列变成行。:在几何上,可以理解为对每个数据点或坐标点的“拉伸”或“压缩”操作。:矩阵的每个元素都乘以该数,得到一个新的矩阵。:将矩阵的行和列对换,得到转置矩阵。
2024-10-29 15:42:24 1305
原创 矩阵和向量关系
假设我们在分析一个用户购买行为的数据集,每个用户的特征包括年龄、收入、购买频率等,可以用一个向量表示每个用户的数据,例如。通过选择合适的线性组合系数,这两个基向量可以生成该平面上的任意点,因此矩阵的列空间实际上就是由所有列向量的线性组合所构成的向量空间。总体而言,矩阵和向量关系紧密:向量可以看作是矩阵的基本单位,矩阵操作可以实现对向量的线性变换,而矩阵的列空间和行空间又可以定义向量空间。矩阵的列向量或行向量可以被视为一个向量空间的“基向量”,它们的线性组合构成了该空间的列空间或行空间。
2024-10-29 15:07:27 1017
原创 矩阵现实中使用的场景
矩阵在现实中的应用广泛,涉及图像处理、计算机科学、物理、工程、经济等多个领域。矩阵主要用于表示数据、描述变换和计算复杂关系,以下是矩阵在各个领域的具体应用场景和例子。
2024-10-28 16:02:58 950
原创 树型数据结构
节点是树中的基本组成单位。节点的定义是树结构的核心。通过节点之间的引用关系,可以构造出复杂的层次结构。根节点是树结构的入口,位于树的最顶层。树中只有一个根节点,它没有父节点,所有其他节点可以通过根节点直接或间接访问。例如,在文件系统中,根节点通常代表文件系统的根目录,所有文件和文件夹都是从根目录派生出来的。父节点是直接连接到一个或多个子节点的节点。它是子节点的上一级节点。在文件系统中,父节点可以是文件夹,而文件夹中的文件和子文件夹就是它的子节点。子节点是父节点下的直接后代。
2024-10-25 10:38:15 790
原创 常用的数据结构
数组是最基本的数据结构之一,它是具有固定大小、同类型数据的集合,所有元素的地址在内存中是连续的,可以通过索引(下标)直接访问每个元素。: 链表是由一系列节点组成的,每个节点包含数据域和指针域,指针域指向下一个节点。: 哈希表是一种通过哈希函数将键映射到数组中的一个位置的结构,可以实现快速的查找、插入和删除操作。: 栈是一种线性数据结构,遵循“先进后出”(LIFO)的规则,即最后一个被插入的元素最先被取出。: 树是一种分层的、非线性的数据结构,由节点和边组成,每个节点可以有多个子节点。
2024-10-25 10:27:52 693
原创 Go 语言的 GMP 模型
Go 语言的 GMP 模型是 Go 语言实现高并发的基础,它包含了 Goroutine(G)、操作系统线程(M)、调度器上下文(P)三个关键部分。每个组件各司其职,共同协作完成 Goroutine 的高效调度。我们来详细剖析每个组件及其工作原理。
2024-10-24 17:28:23 281
原创 如何设计一个消息队列
设计一个消息队列系统需要从多个维度进行考虑,包括性能、可扩展性、可靠性、一致性等。以下是一些关键点和设计思路:消息队列的核心功能是支持生产者发送消息,消费者接收消息,并确保消息的可靠传递。通常的架构如下:假设需要设计一个类似于RabbitMQ的系统,可以采用以下模块:
2024-10-24 15:49:25 556
原创 Websocket协议
WebSocket 连接后,数据传输无需请求:一旦 WebSocket 握手完成,连接建立,客户端和服务器都可以主动向对方发送数据,不需要发起新的请求。与 HTTP 的区别:在传统的 HTTP 中,客户端只能向服务器发送请求,服务器只能在收到请求后发送响应,通信是半双工的,每次通信都是短暂的。WebSocket 则只需一次握手,之后的通信开销很小,特别适合高频低延迟的应用。HTTP 是半双工:在 HTTP 中,客户端只能发送请求,服务器只能被动响应,请求响应之后连接就会关闭,每次请求都是一个独立的事务。
2024-10-24 14:03:01 921
原创 长轮询机制
这个请求与普通的HTTP GET或POST请求没有本质区别,通常会携带某些参数以告知服务器当前客户端的状态或希望接收的消息类型。相反,服务器会在有数据产生之前,保持这个请求的连接,使得客户端“等待”新的数据。总结来说,长轮询是一种通过保持HTTP连接来实现近实时数据推送的技术,具有兼容性好、易于实现的特点,但在高并发和资源开销方面存在一定的局限。当服务器有了新数据或事件(例如一条新消息,或者数据库中的数据有更新),它会立即生成响应并将其返回给客户端。客户端在收到响应后,立即发出新请求,更新。
2024-10-24 11:19:26 502
原创 布隆过滤器
布隆过滤器是一种高效、低存储的概率性数据结构,特别适用于需要快速判断元素是否存在的大规模数据场景。它通过多个哈希函数和位数组实现高效查询,但也存在误判和无法删除元素的缺点。在缓存系统、去重操作、数据库索引加速等场景中,布隆过滤器得到了广泛应用,同时可计数布隆过滤器和可伸缩布隆过滤器等扩展版本也进一步增强了它的功能和适用性。
2024-10-24 09:40:52 723
原创 数据结构之BKD树
BKD 树是一种专为处理大规模、多维数据设计的高效索引结构,通过分块存储和空间分割的方式,极大提高了范围查询和空间查询的性能。BKD 树 vs. K-D 树:K-D 树是 BKD 树的基础思想,但传统的 K-D 树在面对大规模数据和磁盘访问时效率不佳,而 BKD 树通过优化磁盘访问和块的存储方式,解决了这些问题。分割数据块:在选定的维度上,选择中值作为分割点,将数据块分成两部分。支持大规模数据:BKD 树通过块的分区存储方式,能够支持海量的多维数据索引和查询,适合大规模的数值型、空间型数据的处理。
2024-10-24 01:30:00 483
原创 跳跃表数据结构
跳跃表是一种高效的、基于链表的数据结构,通过多级索引层实现了快速查找操作。它以简单的随机算法代替了复杂的平衡树结构,提供了接近 O(logn)的查找性能,并且在数据库、全文搜索等场景中有广泛应用。特别是在倒排索引中,跳跃表的跳跃查找机制可以加速大规模数据的查询操作。
2024-10-23 20:37:57 948
原创 倒排索引详解
倒排索引是一种专为快速全文检索设计的数据结构,它通过将词语映射到包含该词的文档集合来加速查询。它的高效性来源于避免了逐个扫描文档内容,而是通过预先构建好的词汇表和倒排列表来直接定位相关文档。在Elasticsearch等搜索引擎中,倒排索引与其他优化技术(如跳跃表、缓存等)结合使用,大大提高了文本检索的速度和效率。
2024-10-23 20:36:12 694
原创 Elasticsearch查询速度快的原因
Elasticsearch 的快速搜索性能得益于其精心设计的倒排索引、分布式架构、缓存机制、Lucene 优化、多级数据结构、并行处理、近实时搜索以及压缩和优化等多个技术的综合作用。这些技术和机制相辅相成,使得 Elasticsearch 能够在大规模数据集上提供极快的搜索响应时间。
2024-10-23 20:34:47 645
原创 kafka
Kafka 提供副本机制,每个分区可以有多个副本。Topic 的分区设计使得 Kafka 天然支持水平扩展,不同的分区可以分布在不同的 broker 上,多个生产者和消费者可以并行处理同一个 topic 的消息。当某个 broker 故障时,Kafka 集群会重新分配分区的 leader,通过 Zookeeper 选举新的 leader,确保系统的高可用性。Zookeeper 保存了 Kafka 集群的所有元数据信息,比如哪些 broker 在线,topic 的分区和副本分布情况,消费者的消费偏移量等。
2024-10-23 16:51:45 880
原创 Rocketmq
RocketMQ 的消息模型基于发布-订阅模式,主要角色包括(生产者)、(消费者) 和(消息中间件),其中消息通过 Topic 进行分类,Queue(队列) 用于存储消息。
2024-10-23 16:01:20 563
原创 Java中线程池参数如何设置
如果任务在执行过程中,发现处理速度主要受限于CPU计算能力,且较少等待I/O操作,说明是CPU密集型。如果任务是CPU密集型的(例如计算任务),设置过多的核心线程数会导致线程过度竞争CPU资源,增加上下文切换次数,从而降低整体效率。对于I/O密集型任务,核心线程数设置过小会限制并发任务的处理能力,无法充分利用系统的I/O带宽,导致系统整体性能下降。:任务主要依赖I/O操作,CPU使用率较低,I/O等待较多(如磁盘读写、网络请求)。:任务主要依赖于CPU进行复杂计算,CPU使用率高,I/O等待较少。
2024-10-23 10:29:00 655
原创 RabbitMQ
集群模式提供了横向扩展和容错能力。镜像队列确保队列及其消息在多个节点上复制,防止单点故障。队列分片(Quorum Queues)提供了高效的队列管理和更高的容错性。网络分区管理帮助处理集群中网络故障时的分区问题。心跳检测与自动恢复确保节点或客户端故障时的快速检测和恢复。负载均衡和自动重连提供了客户端侧的高可用支持。持久化机制确保队列和消息在 RabbitMQ 重启时不丢失。
2024-10-23 01:15:00 1980
原创 Redis处理速度快的原因
Redis 之所以能在处理数据时表现出极高的速度,是通过多个层面的优化设计实现的,包括内存存储、单线程模型、高效的数据结构、持久化机制等。
2024-10-22 17:21:51 809
原创 Redis的数据结构
Redis 的数据结构是其高性能和灵活性的重要基础。每种数据结构都针对不同的场景和需求设计,了解每种结构的细节能帮助我们更好地使用 Redis。
2024-10-22 17:10:27 813
原创 Redis的部署架构详解
单机模式适用于简单应用,对高可用性和扩展性要求低。主从复制和哨兵模式适用于有高可用性需求的场景,特别是哨兵模式可以实现自动化故障转移。集群模式适用于需要水平扩展和高并发访问的场景。云服务Redis适用于希望免去运维复杂性的用户,尤其是在云环境下的应用。
2024-10-22 17:02:05 305
原创 jvm中是如何判断对象是否存活的
JVM中判断对象是否存活的机制通过多种方法共同作用。引用计数法虽然简单,但在处理复杂引用时存在局限性。可达性分析算法作为JVM主要的垃圾回收机制,通过GC Roots的追踪有效解决了循环引用问题。三色标记法和SafePoint等机制则进一步优化了并发GC的效率,减少了GC对系统性能的影响。而代际假说则基于对象生命周期的不同特点,优化了GC的执行流程。这些机制和技术点在大型应用项目中,特别是在高并发、实时响应等要求较高的场景中,都有着非常重要的应用。
2024-10-22 14:18:11 743
原创 JVM中垃圾回收
JVM中的垃圾回收是通过对堆内存进行管理、清理无用对象,从而确保应用的高效运行。整个垃圾回收过程包括对象的分代存储、不同的垃圾回收算法(标记-清除、复制、标记-整理等),以及多种垃圾回收器(Serial GC、Parallel GC、CMS GC、G1 GC等)来适应不同的应用场景。优化垃圾回收是一个综合的过程,需要根据应用的特性选择合适的垃圾回收器,并通过合理的内存分配、减少对象创建与销毁、调优对象晋升策略等方法减少GC对应用性能的影响。
2024-10-22 10:28:38 1675
原创 linux kvm虚拟化原理
KVM是Linux原生的虚拟化解决方案,它通过利用硬件虚拟化扩展在内核层面实现了高效的虚拟机管理。KVM本身不负责I/O虚拟化,而是依赖于QEMU等用户态工具来提供完整的虚拟化环境。相比传统的虚拟化技术,KVM提供了更好的性能、更低的开销,同时保持了与Linux生态系统的紧密集成。
2024-10-22 00:15:00 610
原创 电商系统中,如何保证扣减库存高并发性能,有保证不会出现库存超卖的情况
在电商系统中,为了在高并发场景下有效处理库存扣减并避免库存超卖,可以采用一个完整的方案,包括缓存、数据库、消息队列和锁机制等技术的组合。:使用 Redis 等缓存系统将库存数据放入内存中,利用缓存的高读写性能来提升扣减库存的并发性能,并定期同步缓存与数据库的数据一致性。:如果用户支付成功,系统会从 Redis 中的冻结库存中正式扣减库存,同时在数据库中执行库存同步操作。锁成功后,再执行库存操作,确保在高并发情况下,多个请求不会同时扣减同一个商品的库存。如果支付失败或订单超时,系统需要释放冻结的库存。
2024-10-21 17:35:46 782
原创 Redis中雪崩,穿透,击穿
缓存雪崩是指大量缓存在同一时间内失效,或者缓存服务不可用,导致所有请求直接打到数据库,造成数据库压力激增,甚至可能导致系统崩溃。原因缓存集中过期(例如,大量缓存数据设置了相同的过期时间)。Redis 服务不可用。缓存穿透指的是请求的某些数据在缓存和数据库中都不存在,由于缓存不命中,直接将请求打到数据库,且恶意请求往往会通过大量查询不存在的 key,造成数据库压力。原因恶意请求(如请求大量不存在的 ID)。用户误操作,导致大量查询不存在的数据。缓存击穿是指某个热点数据的缓存失效。
2024-10-21 17:19:26 484
原创 Kubernetes 中使用服务网格(如 Istio)实现微服务整体链路追踪
通过上述步骤,你可以在 Kubernetes 中利用 Istio 实现微服务的整体链路追踪。Jaeger 提供了可视化的监控界面,使得团队能够实时跟踪和优化微服务的调用链,提升系统的可观测性和可维护性。
2024-10-21 13:57:20 370
原创 架构设计输出的文档
系统架构图通过图形化展示系统的整体结构,让开发人员、运营人员和利益相关者可以快速了解系统的组成和交互方式。系统的架构设计文档为开发团队提供一个全局视角,明确系统的主要模块及其相互作用关系。它是系统健壮性和用户体验的重要保障。数据库设计文档描述数据库的设计和架构,确保数据存储层的设计符合项目需求,具有良好的性能、扩展性和安全性。风险评估文档帮助识别项目中的潜在风险,并为每个风险提供应对策略,确保项目不会因不可预见的问题而失败。部署和运维文档提供系统的部署、配置和维护指南,确保系统在生产环境中的稳定运行。
2024-10-21 10:56:39 767
原创 蓝绿部署和金丝雀部署
系统架构:蓝绿部署更适合单体应用,金丝雀部署更适合微服务架构。用户影响:如果需要快速反馈和小范围风险,金丝雀部署是理想选择;如果希望在用户无感知的情况下切换版本,蓝绿部署更合适。资源可用性:蓝绿部署需要更多的基础设施支持,而金丝雀部署可以在不增加额外资源的情况下实现逐步发布。
2024-10-21 10:09:46 456
原创 Istio详解
Istio是一个开源的服务网格平台,旨在简化微服务之间的连接、管理和安全性。它提供了一种透明的方式来控制微服务之间的通信,而无需对应用程序代码进行更改。通过 Istio,开发者可以集中管理流量、实施安全策略、收集遥测数据,以及监控和日志记录,使得微服务架构更可靠和可管理。Istio 是一个强大的服务网格解决方案,通过提供流量管理、安全性和监控等功能,能够显著简化微服务之间的通信。
2024-10-19 00:30:00 548
原创 Kubernetes 中的服务网格详解
服务网格是一种基础设施层,用于管理微服务之间的通信。在微服务架构中,服务之间的交互可能变得复杂,而服务网格通过在应用程序和网络之间提供透明的代理层,帮助简化这些交互。服务网格的核心理念是将微服务的网络管理与业务逻辑分离,确保开发者可以专注于业务功能而不必担心底层通信的复杂性。服务网格为 Kubernetes 中的微服务架构提供了一种强大的通信管理和监控机制。它可以显著简化服务之间的交互,提高系统的可用性和安全性。
2024-10-19 00:15:00 437
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人