自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 微服务可观测性:让系统不再黑盒

维度解决什么问题常用工具链路追踪请求经历了什么、慢在哪日志聚合具体报错信息是什么ELK、Loki指标监控系统整体健康状况三个维度不是竞争关系,而是互相补充:提出需求要三个维度配合:监控指标发现“接口慢了”,链路追踪定位“慢在库存服务”,日志聚合查出“库存服务查询超时的具体原因”。三者串联起来,可以在几分钟内定位过去可能要查几个小时的问题。微服务架构把系统复杂度打散了,可观测性则把被打散的复杂度重新可视化地呈现出来。没有可观测性的微服务体系,就像一个没有仪表盘的飞机驾驶舱,你敢飞吗?

2026-05-11 20:26:17 346

原创 Elasticsearch集群:高可用与水平扩展的基石

摘要:Elasticsearch集群通过分布式架构解决单机性能瓶颈,核心机制包括:1)节点角色分离(主节点管理集群、数据节点存储计算、协调节点处理请求);2)分片机制(主分片存储数据,副本分片保障高可用);3)自动容错(主节点选举和故障转移)。生产环境建议3节点起步,分片大小控制在30GB左右,主节点与数据节点分离部署。理解分片和副本机制是使用ES集群的关键,分片数量创建后不可修改,副本数可动态调整以提升读性能。

2026-05-08 19:10:50 352

原创 分布式搜索引擎:Elasticsearch 从入门到实战

本文介绍了Elasticsearch(ES)在微服务架构中的应用。ES是基于Lucene的分布式搜索引擎,擅长海量数据快速检索,解决了MySQL等数据库在全文搜索上的不足。文章详细解析了ES的核心概念(索引、文档、倒排索引)、分片机制与副本策略,以及典型应用场景(全文搜索、日志分析、数据聚合)。重点探讨了MySQL与ES的数据同步方案,推荐使用Canal方案实现零侵入同步。针对中文搜索需求,介绍了IK分词器和拼音分词器的使用。最后讲解了SpringBoot集成ES的方法,包括版本匹配、配置连接和Reposi

2026-05-07 19:15:44 380

原创 MySQL主从复制:读写分离的数据基石

MySQL主从复制是实现数据库读写分离的核心技术,通过主库记录二进制日志、从库拉取并重放日志实现数据同步。文章详细介绍了主从复制的工作原理(三步骤流程)、三种日志格式(语句/行/混合模式)以及常见架构(一主一从/一主多从)。同时指出复制延迟、主从切换一致性等关键问题,建议采用半同步复制、中间件路由等解决方案。最后强调主从复制是以最终一致性换取读扩展能力的典型工程权衡,适合读多写少场景,但需业务接受短暂数据不一致。

2026-05-07 08:11:58 244

原创 分布式事务:微服务的数据一致性之困

分布式事务是微服务架构中最复杂的课题,没有之一。它的难度不在于技术实现,而在于理论限制——CAP 定理决定了在分布式系统中无法同时兼顾一致性和可用性。我们能做的不是消除分布式事务,而是在具体业务场景中选择合适的方案,在一致性、性能、可用性之间做出合理的取舍。对于大多数业务场景,最终一致性已经足够。通过可靠消息、本地消息表等方案,可以在不牺牲太多可用性的前提下,保证数据最终会一致。只有资金、库存等极少数对一致性要求极高的场景,才值得考虑 TCC 或 Saga 这类更复杂但一致性更强的方案。

2026-04-28 16:22:35 442

原创 消息队列:微服务的异步通信枢纽

消息队列是微服务架构中实现异步通信的核心组件。它的价值可以概括为四个关键词:解耦、削峰、异步、最终一致。但引入消息队列不是没有代价的。它带来了消息丢失、重复消费、顺序保证等新问题,需要生产端、Broker、消费端多方配合解决。是否使用消息队列,取决于业务场景。同步能解决的问题不用异步,简单的调用关系不用消息队列。但当系统规模变大、依赖变复杂、流量有波峰时,消息队列是必不可少的治理工具。

2026-04-27 19:07:05 386

原创 API包独立拆分:微服务的契约治理

微服务架构中API包独立拆分的核心价值在于将接口定义从业务代码抽离,形成共享契约。API包仅包含接口声明、参数类和响应类,不涉及实现逻辑,实现服务间解耦。这种拆分带来三大优势:统一管理接口变更、调用方无需了解实现细节、清晰版本控制。典型项目结构包含独立的API模块,服务提供方实现接口,消费方依赖接口。规范管理需注意依赖轻量化、接口标准化和版本控制。该实践提升了开发效率、类型安全性和测试便利性,但需防范API包膨胀、版本碎片化和循环依赖问题。API包拆分是微服务治理的关键实践,适用于复杂调用场景,能显著改善代

2026-04-25 21:26:59 393

原创 服务间的依赖管理:微服务的协作之道

微服务架构中服务依赖管理的核心在于平衡独立性与协作性。文章系统梳理了服务依赖的三种形态(强依赖、弱依赖、循环依赖)及其应对策略,详细介绍了服务发现、负载均衡、超时控制等八大核心管理手段。重点强调了熔断机制、降级策略和舱壁隔离等容错设计,提出通过版本控制、数据库拆分等方式解决接口变更和数据耦合问题。这些方法的本质是通过超时、重试、熔断等机制构建弹性系统,确保单个服务故障不会引发系统性崩溃,实现故障隔离与优雅降级,最终保障整体系统的可用性。

2026-04-24 14:50:17 397

原创 负载均衡器:微服务的流量分发中枢

负载均衡是分布式系统的关键组件,其核心功能是将用户请求均匀分配给多台服务器,避免单点过载。文章通过奶茶店和停车场的生动比喻,解释了负载均衡的工作原理:就像叫号机引导顾客分流,负载均衡器根据轮询、最少连接、IP哈希等算法分配请求。同时介绍了软件(Nginx)和硬件(F5)两种实现方式,以及在微服务架构中的双重应用(网关层和服务间调用)。此外还强调了健康检查、会话保持等关键技术点。最终指出负载均衡器通过统一入口、自动容错和均匀分配,为系统提供了可扩展性和高可用性保障。

2026-04-23 14:46:04 371

原创 微服务的统一大门:SpringCloud Gateway

《微服务架构中的网关角色解析》摘要: 微服务架构中,网关作为系统的"守门人"发挥着关键作用。它像购物中心的总服务台,统一处理所有入口请求,解决了三大核心问题:路由转发(智能引导请求到正确服务)、统一认证(避免各服务重复验证)和流量管控(限流熔断保护后端)。网关采用"路由-断言-过滤器"机制工作,其中路由决定转发方向,断言匹配请求条件,过滤器处理认证、日志等通用逻辑。作为微服务架构的标配组件,网关既隐藏了后端服务的复杂性,又提供了统一的安全防护和监控能力,使数十个分散服

2026-04-22 15:17:29 508

原创 Nacos 配置中心:微服务的配置管家

集中管理:所有配置放在一个地方,不再分散在各个服务里动态生效:改配置不需要重启,发布即生效高可用设计:本地缓存兜底,配置中心挂了服务照样跑回到酒店公告牌的比喻:有了 Nacos 这个"电子公告牌",总部改一次价格,所有分店瞬间同步。不需要打电话,不需要暂停营业,不会出错。在微服务架构中,配置管理看似是小事,但服务多了就是大事。Nacos 让这件"大事"变得简单可靠。无论你用的是 Spring Cloud Alibaba 全家桶,还是只是想找一个好用的配置中心,Nacos 都是一个值得考虑的选择。

2026-04-21 15:57:07 396

原创 微服务架构解析:从单体到分布式

微服务是一种架构风格,把一个大型应用拆分成一组小型的、独立的服务。单一职责:一个服务只做一件事。订单服务只管订单,用户服务只管用户。独立部署:改订单服务的代码,只需要重启订单服务,其他服务不受影响。独立数据:每个服务有自己的数据库,不跟别人共用。技术异构:订单服务用 Java,用户服务用 Go,完全可以。微服务是一种把大系统拆成小服务的架构思想。维度单体应用微服务部署一个包几十个包扩展整体扩展按需扩展开发一个仓库多个仓库故障影响整个系统单个服务复杂度低高。

2026-04-20 18:45:19 410

原创 JWT 到底什么?

JWT 是一种把用户信息直接打包在令牌里的认证方案。它不像 Session 那样需要服务器记录状态,而是让客户端自己拿着“身份证”,服务器只负责验证身份证的真伪。它的核心优势是无状态、自包含、适合分布式;核心劣势是无法主动失效、体积较大。回到小区保安的比喻:JWT 就是那张写着信息、盖着印章的卡片。保安不用翻登记本,看一眼卡片就知道你是谁——前提是你能保护好这张卡片不被别人拿走。理解了这个比喻,你就理解了 JWT 的本质。

2026-04-18 19:26:07 368

原创 SpringBoot 性能优化实战

阶段做什么写代码时注意索引、分页、缓存、异步测试时压测、定位瓶颈上线前检查清单过一遍出问题时用工具定位,针对性优化过早优化是万恶之源,但不优化是更大的恶。优先搞定数据库和缓存,其他地方按需优化就好。

2026-04-17 18:39:12 451

原创 SpringBoot 异步处理与线程池实战

《SpringBoot异步编程最佳实践指南》 摘要:本文详细讲解了SpringBoot中异步编程的正确实现方式。首先指出直接new Thread()的危险性,推荐使用线程池方案。通过@EnableAsync和@Async注解可快速实现异步方法,但需注意三个常见坑点:内部调用失效、private方法无效和返回值限制。生产环境必须自定义线程池,文章给出了核心参数配置建议(线程数5-20,队列容量100-500)。特别强调了异常处理的必要性,建议实现AsyncUncaughtExceptionHandler。对于

2026-04-16 19:46:45 217

原创 SpringBoot 项目结构实践

清晰:看包名就知道放什么规范:团队所有人都遵守相同规则可扩展:加新功能不影响现有代码可测试:各层可以独立 Mock 测试这套结构不是唯一的答案,但经过大量项目验证,是一套平衡了简洁性和可维护性的实践方案。你可以在此基础上根据项目需求调整,但核心思想——分层、解耦、职责单一——是不变的。

2026-04-15 19:18:09 382

原创 JSP 内置对象解析:功能、作用域与常用方法

页面作用域 (: 仅在当前 JSP 页面执行期间有效。对象在页面执行完毕后销毁。请求作用域 (request: 在一次 HTTP 请求和响应过程中有效。适用于请求转发 () 中的页面间数据传递。请求结束后对象销毁。会话作用域 (session: 在用户与服务器的一次会话期间有效。用于存储用户级别的状态信息。会话超时或调用后销毁。应用作用域 (: 在整个 Web 应用运行期间有效。被所有用户共享。用于存储全局数据。应用停止或重启后销毁。

2025-12-10 19:08:50 814

原创 Java函数式接口详解

函数式接口(Functional Interface)是Java 8引入的核心概念,指仅包含一个抽象方法的接口。这类接口可通过编译器会对带有此注解的接口进行抽象方法数量校验,若不符合要求则报错。定义接口Lambda实现// 输出"HELLO"函数式接口是Java函数式编程的基石,支持Lambda和方法引用内置接口覆盖了90%的常见场景,优先考虑复用自定义接口需严格遵循单抽象方法原则结合Stream API可实现声明式数据处理注:Java 8允许函数式接口包含default方法和。

2025-12-08 18:40:07 324

原创 POST 与 GET:HTTP 请求方法的本质区别

特性GETPOST用途获取资源提交数据,可能改变服务器状态数据位置URL 查询字符串 (Query String)HTTP 请求体 (Request Body)数据可见高 (URL 暴露)低 (在请求体内)安全性低 (敏感数据不应使用)相对较高 (仍需 HTTPS)数据长度受限 (浏览器/服务器 URL 长度限制)理论无限制 (受服务器配置限制)可缓存性是否 (默认)幂等性是否后退/刷新安全可能触发重新提交警告。

2025-12-08 18:31:51 869

原创 Lambda 表达式

Lambda 表达式是现代编程语言中的重要特性,能够显著提升代码的简洁性和可读性。合理使用 Lambda 表达式可以简化函数传递、集合操作和事件处理等场景,但也需要注意其作用域限制和调试复杂性。

2025-12-08 17:19:49 323

原创 Servlet 生命周期详解

init()一次:用于初始化。多次:用于处理请求(核心)。destroy()一次:用于清理。Web 容器负责精确管理这个生命周期。开发者应遵循这个模型,在正确的方法中编写相应的代码(初始化在init(),业务逻辑在等,清理在destroy()),并特别注意 Servlet 单例特性带来的线程安全问题。理解并合理利用 Servlet 生命周期是构建稳定 Java Web 应用的基础。

2025-12-03 19:10:16 807

原创 内存溢出与内存泄露:原理、区别与预防

内存溢出是资源不足的急性病症,内存泄露则是资源浪费的慢性疾病。预估内存需求边界:$M_{alloc} \leq 0.7 \times M_{max}$建立内存监控体系遵循资源释放规范可显著提升系统稳定性。

2025-12-02 08:20:16 229

原创 深入理解 Java 类加载机制

Java类加载机制是JVM的核心组件,负责动态加载.class文件并创建对应的Class对象。该过程分为三个阶段:加载(读取字节码)、连接(验证、准备、解析)和初始化(执行静态代码)。类加载器采用分层模型(启动类、扩展类、应用类和自定义类加载器),遵循双亲委派原则确保安全性和唯一性。理解该机制有助于解决类加载异常、实现热部署和类隔离等功能,是Java高级开发的重要基础。

2025-12-02 08:17:29 684

原创 JVM垃圾回收机制

JVM垃圾回收(Garbage Collection, GC)是Java虚拟机自动管理内存的核心机制,负责回收不再使用的对象以释放内存空间。其核心目标是高效识别并回收“垃圾对象”(即不可达对象),同时尽量减少对应用性能的影响。理解JVM垃圾回收机制有助于优化应用性能。根据场景选择合适回收器,结合监控工具分析GC行为,是解决内存问题的关键。随着ZGC等新技术成熟,Java在低延迟场景的能力进一步提升。

2025-11-29 08:16:51 314

原创 JVM调优

JVM调优的主要目标是提高应用程序性能、减少延迟、优化资源利用率,并避免因内存不足导致的崩溃。调优需结合具体业务场景,平衡吞吐量、响应时间和系统稳定性。通过系统化的监控、测试和渐进式调整,JVM调优能显著提升Java应用性能。关键是根据实际负载特征选择针对性策略,并建立持续优化的长效机制。调整,默认值为2(老年代占2/3)。(最大堆大小)参数避免频繁GC。堆内存是调优的重点区域,通过调整。新生代与老年代比例通过。

2025-11-27 19:36:49 331

原创 Spring框架AOP技术解析

面向切面编程(AOP)是Spring框架的核心特性之一,用于将横切关注点(如日志、事务、安全等)与核心业务逻辑分离。通过AOP,开发者可以避免代码重复,提高模块化程度。

2025-11-26 15:45:18 298

原创 什么是I/O复用

I/O复用(I/O Multiplexing)是一种高效的输入/输出处理技术,广泛应用于网络编程和操作系统中。它允许单个进程或线程同时监控多个I/O源(如套接字、文件描述符),并在其中任何一个准备就绪时进行处理。这种技术显著提高了系统的并发性能和资源利用率,特别适合高负载场景,如Web服务器处理大量客户端连接。本文将逐步解释I/O复用的原理、常见实现方式、优缺点和应用场景,帮助您深入理解这一关键技术。

2025-11-24 08:35:51 539

原创 Spring框架核心IoC技术解析

IoC通过将控制权交给容器,实现了依赖关系的解耦。结合依赖注入和注解驱动开发,Spring IoC显著提升了代码的模块化和可测试性。理解其核心机制和高级特性,有助于设计更灵活的应用程序架构。

2025-11-21 09:33:31 274

原创 什么是多线程安全

多线程安全指在多线程环境下,程序或系统能够正确、稳定地处理共享资源,避免因线程并发操作导致的数据不一致、死锁或其他异常问题。多线程安全的代码需要确保在不同线程同时访问共享数据时,依然保持逻辑正确性和数据完整性。

2025-11-20 13:42:35 287

原创 MySQL 基础

MySQL 是一个开源的关系型数据库管理系统(RDBMS),广泛应用于 Web 开发和数据存储。它支持多种操作系统,包括 Linux、Windows 和 macOS,并提供高性能、可靠性和易用性。MySQL 是一个功能强大且易于使用的关系型数据库管理系统。通过掌握基本操作、数据管理、优化和安全措施,可以有效利用 MySQL 进行数据存储和处理。

2025-11-17 09:25:09 200

原创 深入解析Java线程状态及其转换机制

深入理解Java线程状态对于编写高效、稳定的并发程序至关重要。掌握状态转换机制有助于:准确诊断线程相关问题优化线程资源使用避免死锁和资源竞争设计合理的线程生命周期管理在实际开发中,建议结合线程转储分析和适当的监控工具,全面掌握应用程序的线程行为,从而构建更加健壮的并发系统。

2025-11-14 19:18:49 839

原创 MyBatis框架

MyBatis的适用场景总结未来版本特性预览学习资源推荐(文档、社区)

2025-11-13 13:56:12 134

原创 程序、进程与线程的定义

进程是操作系统分配资源的基本单位,代表一个正在执行的程序实例。每个进程拥有独立的地址空间、内存、文件句柄等系统资源。在Java中,启动一个main方法会创建一个独立的进程。进程间通信(IPC)通常通过管道、套接字或共享内存实现。线程是进程内的执行单元,共享同一进程的资源(如堆内存),但拥有独立的栈空间和程序计数器。Java通过类或Runnable接口实现多线程。线程分为用户线程和守护线程,轻量级且切换成本低,适合并发任务。

2025-11-13 13:51:28 355

原创 java常用集合与区别

介绍Java集合框架(Java Collections Framework, JCF)的核心接口和类,包括CollectionMap两大根接口及其子类,简要说明集合框架的设计目标和优势(如数据存储、操作的高效性)。

2025-11-10 10:16:06 280

原创 HashMap深层结构

【代码】HashMap深层结构。

2025-11-10 10:10:32 419

原创 常用的Java集合以及区别

简要介绍Java集合框架的作用、核心接口(Collection、Map)以及常见分类(List、Set、Queue、Map)。

2025-11-06 19:12:42 291

原创 Java集合

集合框架的定义与核心作用集合与数组的对比集合框架的体系结构(Collection vs. Map)

2025-11-06 19:10:04 245

原创 throw与throws的区别

作用位置:throw在方法内部,throws在方法声明。异常对象:throw需实例化异常对象,throws仅声明异常类型。处理责任:throw通常伴随逻辑判断,throws委托调用方处理异常。

2025-11-05 08:59:04 441

原创 编程世界的基石:深入理解面向对象编程

面向对象编程是现代软件开发的核心范式,通过封装、继承、多态和抽象四大特性实现代码模块化。它将现实世界抽象为对象,以对象交互模拟问题解决,提高代码可维护性、复用性和扩展性。封装保护数据安全,继承实现代码复用,多态提供接口统一,抽象定义规范要求。这些特性使系统更灵活健壮,是软件开发者的必备技能。典型的OOP案例中,父类定义通用属性和方法,子类继承并实现特定行为,通过多态展现不同对象对同一方法的不同响应。

2025-11-04 11:42:01 510

原创 深入浅出Java序列化:概念、应用与最佳实践

Java序列化是将对象转换为字节序列的过程,用于存储或传输对象数据,反序列化则将字节序列还原为对象。通过实现Serializable接口实现序列化,适用于数据持久化、网络传输、会话复制和深度拷贝等场景。需要注意显式声明serialVersionUID、避免序列化敏感字段,并考虑性能优化选择替代方案如JSON或Protobuf。合理使用序列化技术有助于构建安全高效的Java应用程序。

2025-11-03 10:46:27 876

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除