📄🦌🙌🐟🏖️
日志记录
Where there is a where there is a way
随机文章
按住 Shift 横向滚动
热门文章
按住 Shift 横向滚动
RabbitMQ基础

RabbitMQ基础

本文介绍了微服务架构中同步调用与异步调用的区别。同步调用(如OpenFeign)会导致调用者阻塞,存在拓展性差、性能低、级联失败等问题。异步调用通过消息队列(MQ)解耦服务,发送者仅需向Broker发送消息,接收者从队列订阅处理,具有耦合度低、性能高、易于扩展、故障隔离等优势。常见MQ包括RabbitMQ、RocketMQ、Kafka等。文章以RabbitMQ为例,讲解了其核心概念:交换机负责路由消息,队列存储消息,生产者与消费者通过绑定关系交互。同时介绍了虚拟主机实现数据隔离,以及通过管理控制台进行用户、队列、绑定等操作。RabbitMQ基于Erlang开发,支持AMQP协议,适合追求可靠性和低延迟的场景。

Java操作ES

Java操作ES

本文介绍了使用Elasticsearch Java RestHighLevelClient进行索引库和文档操作的方法。初始化客户端后,可通过CreateIndexRequest、DeleteIndexRequest、GetIndexRequest实现索引库的创建、删除与存在性判断。文档操作包括新增、查询、删除、修改及批量导入(BulkRequest)。DSL查询支持全文检索(match、multi_match)、精确查询(term、range)及复合查询(bool、function_score),并提供排序、分页和高亮功能。RestClient查询通过SearchRequest构建query、sort、from/size和highlight,并解析响应结果。数据聚合支持按字段分组(terms)和统计(stats),可结合过滤条件实现带查询的聚合。核心流程围绕request参数构建、client方法调用与响应解析展开。

Elasticsearch基础

Elasticsearch基础

Elasticsearch是elastic公司开发的搜索引擎技术,属于ELK技术栈的核心,用于数据存储、搜索和计算。它通过倒排索引实现高效模糊搜索:将文档分词为词条,建立词条到文档ID的映射,搜索时先查词条再获取文档,性能远优于MySQL的模糊查询。ES采用JSON文档存储,每个索引(类似数据库表)包含映射(字段约束)。IK分词器支持中文智能分词,可扩展词典。ES与MySQL互补:MySQL保障事务安全,ES擅长海量数据分析,两者常结合使用,并通过同步保证数据一致性。

微服务面试题

微服务面试题

本文围绕分布式系统核心问题展开:**分布式事务**方面,阐述了CAP定理(一致性、可用性、分区容错性不可兼得)与BASE理论(基本可用、软状态、最终一致性),介绍了AT模式(通过全局锁解决脏写)和TCC模式(人工编码实现Try/Confirm/Cancel,需处理空回滚与悬挂),以及最大努力通知方案。**注册中心**部分对比了Nacos与Eureka:Nacos支持配置管理、更频繁的心跳检测、主动推送服务变更,而Eureka倾向于不误杀故障服务、依赖客户端拉取。**远程调用**中分析了OpenFeign负载均衡原理,基于Spring Cloud LoadBalancer,默认轮询,可切换为NacosRule实现同集群优先及权重负载。**服务保护**讲解了Sentinel的线程隔离(信号量方式)、滑动窗口计数器、令牌桶与漏桶算法,分别用于限流和流量整形。全文从理论到实践,系统总结了分布式系统关键技术的原理与选型。

分布式事务

分布式事务

分布式事务的核心问题在于多个分支事务互不知晓执行状态,Seata通过事务协调者(TC)统一管理全局事务。Seata包含三个角色:TC(事务协调者)维护全局状态,TM(事务管理器)定义全局事务范围,RM(资源管理器)管理分支事务。Seata支持XA、TCC、AT、SAGA四种模式。XA模式基于数据库两阶段提交,一阶段执行但不提交,锁定资源,二阶段统一提交或回滚,保证强一致性但性能较差。AT模式一阶段直接提交并记录数据快照(undo-log),二阶段成功则删除快照,失败则根据快照恢复数据,实现最终一致,性能更好且无业务侵入。实际应用中需部署TC服务,微服务集成Seata并添加对应数据库表,通过@GlobalTransactional注解标记事务入口。企业90%的分布式事务可用AT模式解决。

微服务保护

微服务保护

本文介绍了微服务保护中的核心问题与解决方案。微服务调用存在雪崩问题(级联失败)和跨服务事务问题。服务保护方案主要包括三种:**请求限流**控制并发流量,避免服务因突增流量故障;**线程隔离**限定接口可用线程数,防止某个接口耗尽服务器资源;**服务熔断**统计异常比例并在过高时拒绝请求,配合降级逻辑返回默认数据或友好提示。Sentinel是阿里巴巴开源的微服务保护框架,可与Spring Cloud整合,通过控制台配置限流、线程隔离、熔断等规则。文章详细演示了OpenFeign整合Sentinel、配置线程隔离、编写降级逻辑(FallbackFactory)以及基于慢调用比例的熔断策略,提升服务健壮性。

统一配置管理

统一配置管理

本文介绍了使用Nacos解决微服务配置管理中的三个问题:网关路由写死需重启、业务配置修改需重启、重复配置维护成本高。首先,通过Nacos实现配置共享,将JDBC、日志、Swagger等公共配置抽取到Nacos,微服务通过`bootstrap.yaml`拉取。其次,利用Nacos配置热更新功能,如购物车数量上限,通过`@RefreshScope`注解实现修改后即时生效。最后,针对网关动态路由,通过监听Nacos配置变更,使用`RouteDefinitionWriter`动态更新路由表,避免重启服务。这三大功能显著提升了微服务配置的灵活性和可维护性。

网关路由

网关路由

微服务架构中,网关作为统一入口,解决前端多入口维护及服务列表实时更新问题,并实现路由转发和登录校验。SpringCloudGateway支持路由断言过滤,通过`GlobalFilter`自定义登录校验,解析JWT后存入请求头传递给下游微服务。微服务利用SpringMVC拦截器从请求头获取用户信息并存入`ThreadLocal`,实现统一鉴权。微服务间通过OpenFeign调用时,借助`RequestInterceptor`自动传递用户信息,确保用户身份在跨服务调用中持续可用。

OpenFeign

OpenFeign

OpenFeign 通过 SpringMVC 注解声明请求方式、路径、参数和返回值,基于动态代理自动生成远程调用代码,使远程调用像本地方法一样简单。使用时需引入依赖、在启动类添加 @EnableFeignClients、编写 FeignClient 接口(如 @FeignClient("item-service")),然后直接调用接口方法即可。Feign 默认使用不支持连接池的 HttpURLConnection,可引入 feign-okhttp 并开启配置以使用 OKHttp 连接池提升性能。日志方面,需定义 Logger.Level(如 FULL)并在 FeignClient 或全局配置中启用,才能输出请求明细。

注册中心

注册中心

本文介绍了微服务架构中注册中心的必要性及核心原理。由于服务多实例部署,需解决实例地址管理、负载均衡、动态扩展和故障处理等问题。注册中心作为中间层,服务提供者启动时注册自身信息(服务名、IP、端口)并定期发送心跳;服务消费者订阅服务,获取实例列表并通过负载均衡算法(如随机、轮询)调用。当实例宕机或新增时,注册中心通过心跳检测或主动通知更新列表。Nacos作为国内常用的注册中心,具备配置管理功能,提供了搭建步骤(基于Docker及MySQL支持)、服务注册(引入依赖、配置Nacos地址)和服务发现(通过DiscoveryClient获取实例并负载均衡)的具体实现。

© 2026 日志记录