- 博客(362)
- 资源 (2)
- 收藏
- 关注
原创 模块三 进阶微服务
Docker是容器技术的一种,事实上已经成为业界公认的容器标准,要理解Docker的工作原理首先得知道什么是容器。容器翻译自英文的Container一词,而Container又可以翻译成集装箱。我们都知道,集装箱的作用就是,在港口把货物用集装箱封装起来,然后经过货轮从海上运输到另一个港口,再在港口卸载后通过大货车运送到目的地。这样的话,货物在世界的任何地方流转时,都是在集装箱里封装好的,不需要根据是在货轮上还是大货车上而对货物进行重新装配。
2025-09-18 21:29:08
263
原创 模块四 展望微服务
我认为是Service Mesh是一种新型的用于处理服务与服务之间通信的技术,尤其适用以云原生应用形式部署的服务,能够保证服务与服务之间调用的可靠性。在实际部署时,Service Mesh通常以轻量级的网络代理的方式跟应用的代码部署在一起,从而以应用无感知的方式实现服务治理。从我的理解来看,Service Mesh以轻量级的网络代理的方式与应用的代码部署在一起,用于保证服务与服务之间调用的可靠性,这与传统的微服务架构有着本质的区别,在我看来这么做主要是出于两个原因。1.跨语言服务调用的需要。
2025-09-18 21:28:13
387
原创 MySQL实战45讲之基础篇
同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做,这就像打烊以后掌柜做的事。而粉板和账本配合的整个过程,其实就是 MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘,也就是先写粉板,等不忙的时候再写账本。InnoDB的redo log是固定的,比如可以配置为一组4个文件,每个文件的大小是 1GB,那么这块“粉板”总共就可以记录 4GB 的操作。
2025-09-16 15:54:23
586
原创 分布式协议与算法实战-协议和算法篇
我们知道,议会选举中的领导者是有任期的,领导者任命到期后,要重新开会再次选举。Raft 算法中的领导者也是有任期的,每个任期由单调递增的数字(任期编号)标识,比如节点 A 的任期编号是 1。任期编号是随着选举的举行而变化的,这是在说下面几点。跟随者在等待领导者心跳信息超时后,推荐自己为候选人时,回增加自己的任期号,比如节点A的当前任期编号为0,那么在推荐自己为候选人时,会将自己的任期编号增加为 1。如果一个服务器节点,发现自己的任期编号比其他节点小,那么它会更新自己的编号到较大的编号值。
2025-09-15 01:41:05
896
原创 面试鸭Java八股之Kafka
Kafka是一种分布式流事件处理平台,核心功能包括消息队列、流处理和数据集成,具有高吞吐量、低延迟等特点。其基本架构由Producer、Consumer、Broker和Zookeeper组成,通过Topic对消息分类管理。消息通过分区机制保证顺序性,采用日志文件持久化存储,支持零拷贝技术提升性能。创建Topic可通过命令行工具或AdminClient API实现,消息消费进度通过Offset追踪,Consumer Group管理消费偏移量。Kafka广泛应用于日志收集、实时计算等场景。
2025-09-13 09:04:43
1019
原创 模块二 落地微服务
服务提供者发布服务之前首先要定义接口,声明接口名、传递参数以及返回值类型,然后把接口打包成JAR包发布出去。比如下面这段代码,声明了接口UserLastStatusService,包含两个方法getLastStatusId和getLastStatusIds,传递参数一个是long值、一个是long数组,返回值一个是long值、一个是map。
2025-09-11 09:56:12
981
原创 模块一 入门微服务
早些年,各大互联网公司的应用技术栈大致可分为LAMP(Linux + Apache + MySQL + PHP)和MVC(Spring + iBatis/Hibernate + Tomcat)两大流派。无论是LAMP还是MVC,都是为单体应用架构设计的,其优点是学习成本低,开发上手快,测试、部署、运维也比较方便,甚至一个人就可以完成一个网站的开发与部署。以MVC架构为例,业务通常是通过部署一个WAR包到Tomcat中,然后启动Tomcat,监听某个端口即可对外提供服务。
2025-09-10 23:17:50
333
原创 图解网络基础篇
电脑与电脑之间通常都是通过网卡、交换机、路由器等网络设备连接到一起,那由于网络设备的异构性,国际标准化组织定义了一个七层的OSI网络模型,但是这个模型由于比较复杂,实际应用中并没有采用,而是采用了更为简化的TCP/IP模型,Linux网络协议栈就是按照了该模型来实现的。TCP/IP 模型主要分为应用层、传输层、网络层、网络接口层四层,每一层负责的职责都不同,这也是Linux网络协议栈主要构成部分。
2025-09-10 19:28:07
1032
原创 深入剖析 MyBatis 核心原理模块一:快速入门
为了处理上述代码重复的问题以及后续的维护问题,我们在实践中会进行一系列评估,选择一款适合项目需求、符合人员能力的 ORM(Object Relational Mapping,对象-关系映射)框架来封装 1~6 步的重复性代码,实现对象模型、关系模型之间的转换。在绝大多数在线应用场景中,数据是存储在关系型数据库中的,作为一个 Java 开发者,几乎天天与关系型数据库打交道,在生产环境中常用的关系型数据库产品有 SQL Server、MySQL、Oracle 等。
2025-09-07 23:46:17
468
原创 知识扩展——探究当代分布式数据库
传统单机数据库向分布式数据库的转型尝试,它们一般经过分片、复制、分布式事务和物理时钟等过程的改造,从而打造以单体数据库为数据节点的分布式数据库。同时我们也讨论了此类数据库的天花板,因此应该从底层去构建分布式数据库,就像 NewSQL 类数据库,才是分布式数据库发展的正途。实现数据库中间件的几种技术,包括全局唯一主键、分片策略和跨分片查询。其中最重要的就是分布式事务。不同于分布式数据库,中间件的分布式事务多了很多应用服务的特色,比如客户单一阶段、TCC。
2025-09-07 22:30:19
1028
原创 分布式系统——分布式数据库的高扩展性保证
分布式算法根据目标不同可能分为下面几种行为模式,这些模式与对应的课时如下表所示。行为描述对应课时协调由一个节点来统一管理和协调其他工作节点领导选举:如何在分布式系统内安全地协调操作?合作多个节点合作共同完成一项工作是典型的并发处理模型再谈一致性:除了CAP之外的一致性模型还有哪些?分布式事务:“老大难”问题的最新研究与实践传播消息被快速可靠的传播到系统中的所有节点中再谈一致性:除了CAP之外的一致性模型还有哪些?数据可靠性传播:反熵理论如何帮助数据库可靠工作?共识。
2025-09-07 18:58:43
609
原创 存储引擎——分布式数据库的高性能保证
数据库的一个首要目标是可靠并高效地管理数据,以供人们使用。进而不同的应用可以使用相同的数据库来共享它们的数据。数据库的出现使人们放弃了为每个独立的应用开发数据存储的想法,同时,随着数据库广泛的使用,其处理能力飞速发展,演进出如现代的分布式数据库这般惊人的能力。那么,为了支撑抽象的多种场景。一般的数据库都会采用多模块或多子系统的架构来构建数据库,从而方便数据库项目团队依据现实的场景来组合不同的子模块,进而构造出一众丰富的数据库产品。
2025-09-07 15:16:02
869
原创 分布式数据库的历史演变与核心原理
分布式数据库集中式数据库由位于不同站点的多个数据文件组成由单个中央数据库文件组成允许多个用户访问和操作数据多个用户同时访问同一文件时发生瓶颈问题从离用户最近的位置快速传送文件文件传递给用户可能需要更长时间如果其中一个站点发生故障,数据可以恢复单站点意味着系统发生故障时停机来自分散数据库的多个文件必须同步在单一的中央系统中更简单地更新和管理数据从表中,我们可以总结出分布式数据库的核心——数据分片、数据同步。1. 数据分片该特性是分布式数据库的技术创新。
2025-09-06 14:35:13
672
原创 管理与监控(下)
所谓授权,一般是指对与信息安全或计算机安全相关的资源授予访问权限,特别是存取控制。具体到权限模型,常见的有四种。ACL:Access-Control List,访问控制列表。RBAC:Role-Based Access Control,基于角色的权限控制。ABAC:Attribute-Based Access Control,基于属性的权限控制。PBAC:Policy-Based Access Control,基于策略的权限控制。
2025-09-06 10:43:07
598
原创 关于Spring的一些理解
Spring整体结构:Spring实际运行场景:传统Spring:(1)初始化准备阶段(2)容器创建与注入(3)Bean工厂后置处理(4)Bean工厂后置处理(5)Bean实例化与依赖注入(6)容器启动完成Spring Boot应用:(1)启动类触发(@SpringBootApplication)(2)初始化SpringApplication(3)环境准备Environment(4)创建ApplicationContext(5)自动装配(@EnableAutoConfigurat
2025-09-03 23:52:12
964
原创 Java动态代理
相比于静态代理来说,动态代理更加灵活。我们不需要针对每个目标类都单独创建一个代理类,并且也不需要我们必须实现接口,我们可以直接代理实现类( CGLIB 动态代理机制)。从 JVM 角度来说,动态代理是在运行时动态生成类字节码,并加载到 JVM 中的。说到动态代理,Spring AOP、RPC 框架应该是两个不得不的提的,它们的实现都依赖了动态代理。动态代理在我们日常开发中使用的相对较小,但是在框架中的几乎是必用的一门技术。学会了动态代理之后,对于我们理解和学习各种框架的原理也非常有帮助。
2025-09-02 23:04:30
260
原创 面试鸭Java八股之Spring(下)
AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,它将程序中的横切关注点(cross-cutting concerns),即那些会影响到多个模块的功能,如日志记录、事务管理、权限控制、性能监控 等,从业务逻辑代码中分离出来,形成独立的切面(Aspect)。通过 AOP,开发者可以在不修改原有业务逻辑代码的基础上,将切面逻辑动态地织入到目标方法执行的特定连接点(Join Point,如方法调用、字段访问等)上。
2025-09-02 22:47:10
634
原创 应用场景案例分析
互联网电商为了吸引人气,经常会对一些商品进行低价秒杀售卖活动。比如几年前小米的不定期新品发售,又如当前每年定期举行双11、双12中的特价商品售卖。秒杀售卖时,大量消费者蜂拥而至,给电商带来了极大的人气,也给电商背后的服务系统带来了超高的并发访问负荷。在不同电商、不同的秒杀活动,秒杀系统售卖的商品、销售策略大不相同,但秒杀背后的秒杀系统却有很大的相似性,基本都有以下这些共同特点。首先,秒杀业务简单,每个秒杀活动售卖的商品是事先定义好的,这些商品有明确的类型和数量,卖完即止。其次,秒杀活动定时上架,而且会提供一
2025-08-31 13:11:21
726
原创 深入分布式缓存
随着互联网的发展,分布式系统变得越来越重要,当前的大中型互联网系统几乎都向着分布式方向发展。分布式系统简单说就是一个软硬件分布在不同机房、不同区域的网络计算机上,彼此之间仅仅通过消息传递进行通信及协调的系统。分布式系统需要利用分布的服务,在确保数据一致的基础上,对外提供稳定的服务。在分布式系统的发展中,影响最大最广泛的莫过于 CAP 理论了,可以说 CAP 理论是分布式系统发展的理论基石。早在 1998 年,加州大学的计算机科学家 Eric Brewer ,就提出分布式系统的三个指标。在此基础上,2 年后,
2025-08-31 13:07:20
704
原创 分布式Redis实战
为了避免单点故障,数据存储需要进行多副本构建。同时由于 Redis 的核心操作是单线程模型的,单个 Redis 实例能处理的请求 TPS 有限。因此 Redis 自面世起,基本就提供了复制功能,而且对复制策略不断进行优化。通过数据复制,Redis 的一个 master 可以挂载多个 slave,而 slave 下还可以挂载多个 slave,形成多层嵌套结构。所有写操作都在 master 实例中进行,master 执行完毕后,将写指令分发给挂在自己下面的 slave 节点。slave 节点下如果有嵌套的 s
2025-08-31 13:06:22
605
原创 Redis进阶(下)
对于 lfu,要选择使用频率最小的 key,为了沿用 evictionPool 的 idle 概念,Redis 在计算 lfu 的 Idle 时,采用 255 减去使用频率相对值,从而确保 Idle 最大的 key 是使用次数最小的 key,计算 N 个 key 的 Idle 值后,插入 evictionPool,最后选择 Idle 最大,即使用频率最小的 key,进行淘汰。这种策略适合的业务场景是,需要淘汰的key带有过期时间,且有冷热区分,从而可以淘汰最久没有访问的key。
2025-08-31 13:05:29
662
原创 Redis进阶(上)
编译时,会按照性能和系统平台,选择最佳的 IO 多路复用函数作为底层实现,选择顺序是,首先尝试选择 Solaries 中的 evport,如果没有,就尝试选择 Linux 中的 epoll,否则就选择大多 UNIX 系统都支持的 kqueue,这 3 个多路复用函数都直接使用系统内核内部的结构,可以服务数十万的文件描述符。Redis 在启动时,在 initServer 中对监听的 socket 注册读事件,事件处理器为 acceptTcpHandler,该函数在有新连接进入时,会被派发器派发读任务。
2025-08-31 13:04:47
884
原创 Redis原理、协议及使用
Redis 是一款基于 ANSI C 语言编写的,BSD 许可的,日志型 key-value 存储组件,它的所有数据结构都存在内存中,可以用作缓存、数据库和消息中间件。Redis 是 Remote dictionary server 即远程字典服务的缩写,一个 Redis 实例可以有多个存储数据的字典,客户端可以通过 select 来选择字典即 DB 进行数据存储。
2025-08-31 13:03:40
832
原创 分布式Memcached实战
因此,互联网系统的数据,有明显的冷热区分,而且这个冷热程度往往比 80⁄20 更大,比如微博、微信最近一天的数据,被访问的特别频繁,而一周前的数据就很少被访问了。另外,设置的内存,也不完全是存储有效数据,我上一节课讲到,每个 Item 数据存储在 chunk 时,会有部分字节浪费,另外 key 在过期、失效后,不是立即删除,而是采用延迟淘汰、异步 LRU 队尾扫描的方式清理,这些暂时没有淘汰的、过期失效的 key ,也会占用不少的存储空间。最后,再回收消息缓冲,以及消息结构体,供后续请求处理的时候复用。
2025-08-31 13:02:29
932
原创 Memcached进阶
会讲解 Mc 是如何进行 key 定位,如何淘汰回收过期失效 key 的,还将分析 Mc 的内存管理 slab 机制,以及 Mc 进行数据存储维护的关键机理,最后还会对 Mc 进行完整的协议分析,并以 Java 语言为例,介绍 Mc 常用的 client,以及如何进行调优及改进。,线程越多,构建的锁哈希表越大,对于 4 个线程,锁哈希表有 4096 个桶,对于 10 个线程,锁哈希表会有 8192 个桶,Item 锁哈希表最多有 32k 个桶,1k 是 1024,即最多即 32768 个桶。
2025-08-31 13:01:40
853
原创 Memcached的原理及架构剖析
一般情况下,Item 并不会将 chunk 填满,但由于每个 key/value 在存储时,都会根据 kev/value size,选择最接近的 slabclass,所以 chunk 浪费的字节非常有限,基本可以忽略。Mc 主要通过 LRU 机制,来进行冷数据淘汰的。当需要查找给定key的Item时,首先计算key的Hash值,然后对哈希表中与Hash值对应的bucket中进行搜索,通过轮询bucket里的单向链表,找到该key对应的Item指针,这样就找到了 key 对应的存储 Item,如下图所示。
2025-08-31 13:00:44
975
原创 7大缓存经典问题
实际上,在缓存系统的设计架构中,还有很多坑,很多的明枪暗箭,如果设计不当会导致很多严重的后果。设计不当,轻则请求变慢、性能降低,重则会数据不一致、系统可用性降低,甚至会导致缓存雪崩,整个系统无法对外提供服务。接下来将对缓存设计中的 7 大经典问题,如下图,进行问题描述、原因分析,并给出日常研发中,可能会出现该问题的业务场景,最后给出这些经典问题的解决方案。
2025-08-31 00:43:33
609
原创 缓存的原理、引入及设计
广义缓存时任何可以用于数据高速交换的存储介质都是缓存,可以是硬件也可以是软件。缓存存在的意义就是通过开辟一个新的数据交换缓冲区,来解决原始数据获取代价太大的问题,让数据得到更快的访问。前面介绍了缓存的基本思想、优势、代价以及读写模式,接下来一起看下互联网企业常用的缓存有哪些分类。
2025-08-31 00:41:47
1144
原创 《300分钟吃透分布式缓存》学习笔记
本文是一篇关于缓存技术的学习笔记,作者从基础原理到实战应用系统地整理了缓存相关知识。主要内容包括缓存原理与设计、7大经典缓存问题分析、Memcached和Redis的原理与架构剖析、分布式缓存实战等。文章以系列教程形式呈现,部分章节尚未完成更新。作者通过CSDN博客分享学习心得,旨在深入掌握缓存技术,提升系统性能优化能力。全文体现了作者对技术学习的热情和系统性思考。
2025-08-31 00:29:16
178
原创 《24讲吃透分布式数据库》学习笔记
本文系统介绍了分布式数据库知识体系,包含历史演变、核心原理、存储引擎和分布式系统等核心内容。文章重点探讨了分布式数据库的高性能与高扩展性保证机制,并延伸至当代分布式数据库技术发展现状
2025-08-31 00:23:54
187
原创 特别放送、结束语及测试
比如我们在专栏前面谈到的分区概念,分区在分布式系统设计中早就不是什么新鲜的概念了,早在上世纪六七十年代,就已经有行业专家在研究分区数据库的实现问题了。在学习过程中,我印象最深刻的是,胡夕老师在讲参数配置的时候,在第7讲和第8讲的标题中用了3个“最”字,即“最最最重要的集群参数配置”,并且在文章里分享了最重要、最核心的集群参数配置。你千万不要小看理论的价值,毕竟,列宁说过:“没有革命的理论,就没有革命的运动。要知道,很多技术大家之所以成为技术大家,不仅仅是因为理论掌握得很牢固,填过的“坑”多,更重要的是,
2025-08-31 00:15:49
673
原创 客户端实践及原理剖析
类似于Spring Interceptor(拦截器),其基本思想就是允许应用程序在不修改逻辑的情况下,动态地实现一组可插拔的事件处理逻辑链。它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。下面这张图展示了Spring MVC拦截器的工作原理:Kafka拦截器借鉴了这样的设计思路。你可以在消息处理的前后多个时点动态植入不同的处理逻辑,比如在消息发送前或者在消息被消费后。
2025-08-31 00:11:01
989
原创 Kafka的基本使用
Kafka线上集群部署方案摘要 操作系统:优先选择Linux,因其高效的I/O模型(如epoll)、零拷贝传输技术及更好的社区支持,而Windows仅适合测试环境。 磁盘规划:推荐使用普通机械硬盘,Kafka顺序读写特性可规避机械盘随机读写慢的缺点,性价比更高。RAID非必需,Kafka自身冗余机制已保障可靠性。 容量计算:需结合消息量、留存时间、副本数、压缩比等综合评估。例如,每日1亿条1KB消息保存两周需约2.25TB(压缩后)。 带宽规划:千兆网络下,单机建议预留70%带宽(约240Mbps),根据数
2025-08-31 00:06:14
879
原创 Kafka入门
笔者使用过kafka处理通知,但是未系统学习kafka,因此认真学习一遍《Kafka核心技术与实战》这门课程。课程作者也是《Apache Kafka实战》这本书的作者。消息:Record。Kafka是消息引擎嘛,这里的消息就是指Kafka处理的主要对象。主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
2025-08-31 00:04:59
1136
原创 《Kafka 核心技术与实战》学习笔记
本文概述了Kafka消息中间件的系列学习教程,包含从入门到高级应用的完整内容体系。教程分为8个章节,涵盖Kafka基础使用、客户端实践、内核原理、管理监控以及流处理等核心内容,并附有相关技术文章的CSDN链接。最后以"学习学习,我爱学习"的积极态度作结,展现了系统学习Kafka技术的完整路径。
2025-08-31 00:03:22
206
原创 高级Kafka应用之流处理
教科书中关于水位的经典定义通常是这样的:在时刻T,任意创建时间(Event Time)为T’,且T’≤T的所有事件都已经到达或被观测到,那么T就被定义为水位。“Streaming System”一书则是这样表述水位的:水位是一个单调增加且表征最早未完成工作(oldest work not yet completed)的时间戳。为了帮助你更好地理解水位,我借助这本书里的一张图来说明一下。
2025-08-29 17:43:38
1026
原创 关于MySQL的一些理解
MySQL 主要的线程包括主线程、连接处理线程、InnoDB I/O线程、Binlog线程、提交线程、复制线程和后台线程等,它们各司其职,负责数据库的初始化、接收客户端连接、处理数据读写、刷新日志、提交事务以及复制数据等工作,以确保数据库的稳定和高效运行。Read View(读视图)是 MySQL MVCC机制的核心组件,它是一个在事务执行“快照读”(即SELECT语句)时生成的数据结构快照,用于判断当前事务可以看到哪个版本的数据,从而实现事务的隔离性和一致性。
2025-08-28 14:20:10
637
自动刷新生安全教育系列课程
2019-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人