- 博客(56)
- 收藏
- 关注
原创 [微服务进阶场景实战] - 如何处理好微服务之间千丝万缕的关系
本文探讨了微服务架构中依赖关系复杂化的挑战及解决方案。通过分析商品、订单等核心服务的交互场景,揭示了聚合接口归属混乱和服务依赖网状化两大痛点。项目组引入API层和BFF模式进行架构优化:API层负责数据聚合与业务编排,BFF为不同客户端定制专属接口。技术实现采用Spring Cloud三层架构(网关、BFF、后台服务),并通过公共库、独立服务或容忍重复等策略解决代码复用问题。最终形成垂直领域团队与水平BFF团队的矩阵分工模式,在保持架构清晰的同时提升开发效率。该方案有效降低了微服务间的耦合度,为复杂业务系统
2026-01-06 01:53:25
910
原创 [微服务进阶场景实战] - “微服务数据依赖症”
本文探讨了微服务架构中服务间数据依赖问题的解决方案。针对供应链系统中商品、订单、采购服务间的数据查询需求,传统跨服务调用方案存在性能低下、服务过载和依赖链雪崩三大问题。提出数据冗余方案,通过同步或异步方式更新冗余数据,但面临同步更新导致核心流程被绑架、消息异步更新带来订阅泛滥和逻辑重复等问题。最终采用基于Bifrost的数据同步方案,将商品主数据实时同步至下游服务数据库,实现业务逻辑解耦。该方案具有配置简单、维护成本低等优势,但需注意同步延迟、只读原则和监控等关键事项,避免在核心流程中依赖同步数据。
2026-01-05 09:56:04
766
原创 [微服务进阶场景实战] - 数据一致性
本文探讨了微服务架构中的数据一致性问题及解决方案。针对最终一致性场景,提出基于消息队列的异步补偿方案,通过消息持久化和重试机制确保数据最终一致;对于强一致性需求,对比分析了TCC模式与Seata AT模式,重点推荐Seata AT方案,其通过自动生成回滚日志实现低侵入式分布式事务管理。实践表明,这两种方案能有效解决数据不一致问题,且不会显著增加开发负担,为微服务架构提供了可靠的数据一致性保障。
2025-12-31 17:18:48
950
原创 [微服务进阶场景实战] 微服务痛点 - 用实际经历告诉你它有多少陷阱
文章摘要: 本文深入探讨了微服务架构的核心概念与实践挑战。通过对比单体架构与微服务架构在新零售系统中的实现差异,揭示了微服务在精准扩展、独立发布、技术异构和持续优化等方面的优势。同时重点剖析了微服务落地的四大痛点:服务边界划分困难(受康威定律支配)、服务粒度失控、系统全貌难以掌握以及代码重复问题。文章指出微服务拆分本质上是一个需要平衡技术、业务和组织因素的持续治理过程,而非纯粹的技术决策。这些见解为后续微服务实战提供了重要的理论基础和风险预判。
2025-12-31 10:51:02
817
原创 微服务场景实战 - 限流 - 如何让服务器在亿级流量冲击下“活下去”
本文探讨了在高并发秒杀场景下的限流技术。首先分析了亿级流量冲击的业务场景,指出限流是保证系统存活的关键策略。接着详细介绍了四种限流算法:固定时间窗口计数算法存在边界临界问题;滑动时间窗口算法通过子窗口划分提高精度但仍面临机器人抢购问题;漏桶算法通过恒定速率处理请求但无法解决瞬时峰值;令牌桶算法通过控制令牌生成速率和桶容量,既能平滑流量又能增加真实用户成功率。最后重点推荐了令牌桶算法在秒杀场景下的优化实现方案,通过限制瞬时可用令牌数量来有效缓解流量洪峰。
2025-12-30 15:40:10
842
原创 [从程序员到架构师] 微服务场景实战 - 熔断
摘要: 本文探讨了微服务系统中的熔断机制应用场景与解决方案。通过新零售系统中用户服务的两个核心接口案例,揭示了慢请求和流量洪峰如何引发系统级雪崩效应。针对线程隔离和快速失败恢复的需求,对比了Hystrix和Sentinel两种主流熔断框架的特性差异,最终选择Hystrix作为解决方案。文章强调熔断机制的核心在于"异常不访问"和"超时不硬等"原则,并区分了熔断与限流的关键特征,为构建弹性微服务系统提供了实践指导。
2025-12-30 10:32:32
1058
原创 [从程序员到架构师] 微服务场景实战 - 全链路日志
本文探讨了微服务架构下全链路日志管理的挑战与解决方案。通过真实案例揭示了传统日志方式的不足,提出采用OpenTracing标准实现日志串联,并选择SkyWalking作为技术方案。文章详细分析了技术选型标准,包括数据结构支持、存储系统适配、性能影响控制等核心考量,最终推荐SkyWalking作为兼顾性能与功能的优选方案。同时强调了异步日志收集机制的重要性,避免业务系统与日志系统的强耦合。该方案能有效提升故障排查效率,为微服务系统提供完整的调用链追踪能力。
2025-12-29 11:05:46
1046
1
原创 [从程序员到架构师] 微服务场景实战 - 注册发现
接下来咱们要聊点硬核又好玩的东西——微服务。放心,不急着“飞天”,咱还是老老实实从最接地气的场景开始,一步步拆解、慢慢铺开。带大家轻松搞懂几个核心组件的实现逻辑,最后笑着看透微服务架构那点儿“本质”。怎么样,准备好一起盘它了吗?😉
2025-12-26 21:08:44
993
原创 【大数据高并发核心场景实战】 设计秒杀架构必知必会的那些事
之前的文章中我们已经演练了缓存的三种“招式”:用读缓存化解数据库查询压力,靠写缓存扛住流量洪峰,再通过消息队列从容同步数据。这套组合拳——先缓冲、再异步、平稳落库——正是接下来面对真刀真枪的秒杀场景时,我们要继续运用的核心战术。
2025-12-04 15:37:59
1001
原创 【大数据高并发核心场景实战】缓存层 - 日亿万级请求日志收集
上一章咱们给数据库装了个“写缓存”,相当于在市中心车库外建了个临时停车场。确实,车流(写操作)不堵门了。但问题是——这停车场是露天的,且只有三个车位。一旦遇上“双十一”式的高频数据洪流(想象一群饿疯了的吃货同时涌向自助餐厅),这方案立刻露出短板:缓存写满的速度比手机掉电还快,数据要么排队等到天荒地老,要么面临丢失风险。显然,临时方案扛不住持久战。接下来咱们关掉美颜,直面痛点,一步步拆解如何为持续的高频写入设计一个既扛得住、又稳得起的系统方案。道路就在前方,咱们开始铺路。
2025-12-04 10:52:06
914
原创 【大数据高并发核心场景实战】缓存层 - 写缓存
上一篇文章讲到我们通过读缓存以减少数据库读操作的压力,却也存在着不足,比如写操作并发量大时,这个方案不会奏效。那该怎么办呢?本篇就来讨论怎么处理写操作并发量大的场景。
2025-12-02 16:05:17
1119
原创 【大数据高并发核心场景实战】缓存层 - 读缓存
前面已经完成了数据持久层的讲解,接下来将围绕数据库数据频繁读写的问题探讨缓存层的实战,本篇文章,我们就来聊聊缓存界的“头号网红”——读缓存。这玩意儿大家常用到都快用出“包浆”了,所以基础操作就此掠过,着重对比下常见缓存方案的优劣。
2025-12-01 17:52:29
972
原创 【大数据高并发核心场景实战】 数据持久化层 - 分表分库
我们在上一章讲到,查询分离的方案存在三大不足,其中一个就是:当主数据量越来越大时,写操作会越来越缓慢。这个问题该如何解决呢?可以考虑分表分库。今天我们会先介绍一下真实的业务场景,而后依次介绍拆分存储时如何进行技术选型、分表分库的实现思路是什么,以及分表分库存在哪些不足。
2025-11-30 21:51:33
726
原创 [源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
“在AI可以自动生成代码的今天,为什么还要读源码?因为理解原理才能让我们从代码的’使用者’变成’创造者’!” 最近AI的崛起确实让技术圈发生了翻天覆地的变化,博主之前的源码解析栏目也因此沉寂了一段时间。不过,在经历了更多生产问题复盘和真实架构设计的实战后,我愈发觉得:理解底层原理才是应对技术变革的不变法宝。
2025-11-26 23:48:51
487
原创 【大数据高并发核心场景实战】 数据持久化层 - 查询分离
上一章中我们介绍到冷热分离,旨在快速交付。但是他仍存在一些问题,并不是完美的方案,比如限制了业务的操作,必须再特定的业务场景下(冷数据不允许修改、冷数据查询慢、不适合复杂查询)。本章将介绍新的方案,支持千万数据的快速查询
2025-10-29 11:41:52
911
原创 一个字符串替换引发的性能血案:正则回溯与救赎之路
文档导入服务因自研SQL拦截器性能问题崩溃,经排查发现replaceFirst()方法消耗89% CPU时间。源码分析显示该方法每次调用都从头扫描字符串,导致O(n²)复杂度。优化方案改用StringBuilder单次遍历,将时间复杂度降至O(n),实测性能提升210倍,内存占用减少73%。该案例揭示了字符串处理中正则替换的高成本与StringBuilder的优化价值。
2025-06-24 10:57:35
614
原创 【大数据高并发核心场景实战】 - 数据持久化之冷热分离
大数据场景下的冷热数据分离实战 本文针对工单系统日均10万增长、数据量超1.5亿导致的性能问题,提出了冷热分离解决方案。核心痛点在于热数据(最近3个月)仅占20%却承担80%访问。通过分析数据库分区方案的缺陷,详细阐述了冷热分离实施策略:采用定时扫描触发迁移、批量处理与并发控制相结合、设计精妙的锁机制确保数据一致性,最终实现查询响应从2.1s降至0.2s。对于亿级冷数据,进一步介绍了迁移至HBase的优化方案,包括RowKey设计和存储架构。文章还总结了冷热分离的适用场景与实施原则,为高并发大数据系统
2025-06-20 16:05:09
900
原创 当Kafka化身抽水马桶:论组件并发提升与系统可用性的量子纠缠关系
那次OOM事故教会我们:系统设计就像在雷区跳华尔兹,单纯提升某个组件的并发能力,相当于给舞者换上火箭助推器——除非你确定他的舞伴也能同步进化成钢铁侠。最后分享一个防秃小贴士:每当想要优化组件时,请先对着架构图唱一遍《爱我中华》——“五十六个组件,五十六支花,五十六个兄弟姐们是一家…”(毕竟架构师的头发就是这样一根根掉光的)本文不承诺根治系统故障,但保证能让您在报错日志中找到黑色幽默。毕竟,能用段子解决的故障,何必动感情呢?
2025-03-27 11:21:11
872
原创 客户端“自废武功”背后的深层秘密——CORS跨域是怎么回事?
你一定遇到过这样的情景:你在写一个 Web 应用,开发得有声有色,一切都很完美,直到你开始发送跨域请求,突然间,客户端给你抛出了一个“CORS 错误”。
2024-11-29 15:30:41
727
原创 [每日算法 - 阿里机试] leetcode739. 每日温度
给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。
2024-04-07 13:56:42
1011
1
原创 [每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点 「 详细图释一看就懂!」
使用快慢指针的方式,快指针与慢指针相差n-1,即快指针比慢指针超前了n个节点。 两个指针同时遍历链表,当快指针指向null时,此时慢指针正好指向倒数第n个元素的前一个元素。
2023-10-06 22:57:27
1088
1
原创 [源码系列:手写spring] AOP第一节:切点表达式
在本专栏之前的文章中已经带大家熟悉了Spirng中核心概念IOC的原理以及手写了核心代码,接下来将继续介绍Spring中另一核心概念AOP。AOP即切面编程是Spring框架中的一个关键概念,它允许开发者在应用程序中优雅地处理横切关注点,如日志记录、性能监控和事务管理。在切面编程中,切点表达式是一项关键技术,它定义了在何处应用切面的逻辑。本章将深入探讨Spring切点表达式的实现原理,为读者提供对这一重要概念的深刻理解。
2023-09-24 18:28:00
859
2
原创 [源码系列:手写spring] IOC第十四节:容器事件和事件监听器
现实中的观察者(Observer)往往是主动方,这是由于目标主题(Subject)缺乏主观能动性造成的,其状态的更新并不能主动地通知观察者,这就造成观察行为的持续往复。而在软件设计中我们可以将目标主题作为主动方角色,将观察者反转为被动方角色,建立反向驱动式的消息响应机制,以此来避免做无用功,优化软件效率,请参看观察者模式的类结构,如图所示。
2023-09-10 19:11:44
1691
8
原创 [源码系列:手写spring] IOC第十三节:Bean作用域,增加prototype的支持
在Spring中,Bean的作用域(Scope)定义了Bean的生命周期和可见性。包括单例和多例,在本章节中我们将为Bean添加多例的支持,下面是PrototypeBean的prototype作用域表示每次从容器中获取该Bean时都会创建一个新的实例。每个请求或依赖注入都会导致创建一个全新的Bean对象。prototype作用域的Bean实例不受Spring容器的管理,容器在创建Bean之后不会再跟踪它。这意味着Spring容器不会负责释放或销毁prototype作用域的Bean。
2023-09-06 18:14:07
751
原创 [源码系列:手写spring] IOC第十二节:FactoryBean
在getBean方法中添加BeanFactory的逻辑,当bean属于BeanFactory类型的,就拿他的getObject方法返回的对象,并根据isSingleton()方法返回时决定是否加入缓存。....用于缓存单例的BeanFactory提供类try {//singleton作用域bean,从缓存中获取}else{//prototype作用域bean,新创建beanreturn obj;....
2023-09-05 23:16:59
455
原创 [源码系列:手写spring] IOC第十一节:Aware接口
...//执行BeanPostProcessor的前置处理........@Override//创建BeanFactory,并加载BeanDefinition//添加ApplicationContextAwareProcessor,让继承自ApplicationContextAware的bean能感知bean....
2023-09-05 01:00:17
494
原创 [每日算法 - 华为机试] leetcode690. 员工的重要性
当遇到一个问题描述中涉及到多个个体之间存在层级关系,且这些关系可以看作是一个从顶层到底层的结构时,很可能你正在处理一个树结构问题。例如公司的组织结构、文件系统、家谱等等。这道题就是一个典型的树结构问题...
2023-08-21 23:49:34
283
原创 [每日算法 - 华为机试] leetcode463. 岛屿的周长
解题思路:通过遍历每个陆地格子,然后检查它的上、右、下、左四个相邻格子,🌟🌟🌟如果越界或者相邻格子是水域,就认为当前格子的周长增加了1 🌟🌟🌟
2023-08-20 19:38:51
316
原创 [每日算法 - 华为机试] leetcode680. 验证回文串 II
回文字符串定义:"正读和反读都一样,中心对称的字符串"。贪心思想的最优子结构:贪心字符串边缘两个位置的字符串相同与否,相同可以继续运算,不同则非回文字符串。
2023-07-21 11:39:06
268
原创 [每日算法 - 华为机试] leetcode172. 阶乘后的零
解题思路:可以直接想到的是当一个数字*10的时候,乘积的结果必然包含一个0,当和两个10相乘那么乘积肯定包含两个0.
2023-07-12 16:13:36
355
原创 [每日算法 - 华为机试] 剑指 Offer 57 - II. 和为s的连续正数序列 「滑动窗口」
解题思路:用两个指针代表窗口的左右边界,指针移动代表窗口滑动,记录窗口内的数字和sum,窗口滑动同时更改sum。
2023-07-12 15:12:53
317
原创 [每日算法 - 华为机试] LeetCode 475. 供暖器
思路:对一每一个房间,要么利用左边的取暖器,要么利用右边的取暖器,利用二分查找的方式查询出距离房间最近的左右两边的取暖器,取两者的最小值即当前房间取暖所需取暖器最小半径,最后取所有的房间所需最小半径的最大值即可!
2023-07-06 15:05:54
426
原创 [每日算法 - 华为机试] LeetCode1160. 拼写单词
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。返回词汇表 words 中你掌握的所有单词的 长度之和。输入:words = ["cat","bt","hat","tree"], chars = "atach"输出:6。
2023-07-04 13:55:56
586
原创 [每日算法 - 华为机试] 剑指 Offer 10- II. 青蛙跳台阶问题
简单递归缺点: 多了很多重复计算(如红框圈出来的地方),记忆递归的讲每次计算结果存储,不再重复计算。
2023-07-03 16:36:59
432
原创 [每日算法 - 华为机试] leetcode53 :最大子数组和 「算法中的哲学」
解题思路:「阿德勒心理学中的目的论 」我不会受过去影响,我选择了现在的我,只有过去是正向的,才会是我的一部分!
2023-07-03 14:54:20
419
原创 [每日算法 - 华为机试] leetcode20 :有效的括号 「栈」
[每日算法 - 华为机试] leetcode20 :有效的括号 「栈」方法一解题思路...
2023-06-28 23:39:59
113
原创 [每日算法 - 华为机试] leetcode345 :反转字符串中的元音字母「双指针」
方法一:双指针 思路与算法 我们可以使用两个指针 i 和 j 对字符串相向地进行遍历...
2023-06-28 22:37:10
206
1
原创 [源码系列:手写spring] IOC第十节:bean的初始化和销毁方法
自动注册的beanDefinition工厂类添加方法,支持注册有销毁方法的bean(即继承自DisposableBean或有自定义的销毁方法并在xml定义的Bean。当用户没有实现DisposableBean接口但是注册了自己的销毁方法在xml时,将利用此方法将beanDefinition中的方法名称提取,通过上面定义的DisposableBeanAdapter的方式在创建bean的时候存入单例beanFactory的容器中。...try {//填充属性。
2023-06-28 15:38:46
721
1
原创 [源码系列:手写spring] IOC第九节:应用上下文ApplicationContext
在Spring中应用上下文ApplicationContext是相较于BeanFacotry更为先进的IOC容器,BeanFacotry是Spring实现IOC最基础最核心的接口,使得Spring管理不同Java对象成为可能。而ApplicationContext是建立在ApplicationContext的基础上,提供了更多面向应用的功能。
2023-06-13 11:01:11
394
原创 [源码系列:手写spring] IOC第八节:BeanFactoryPostProcessor和BeanPostProcessor
内容介绍:BeanFactoryPostProcessor和BeanPostProcessor是spring中具有重量级地位的两个接口,理解了这两个接口的主要作用,基本就理解Spring的核心原理了。为了便于理解将分成两篇文章介绍。BeanFactoryPostProcessor: BeanFactoryPostProcessor是spring容器的后置处理器,是spring提供的容器扩展机制,它的调用时机是在spring容器实例化任何一个bean之前,也就是说在容器完成BeanDefinition读取之
2023-04-22 18:47:41
518
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅