avatar
文章
77
标签
219
分类
31
首页
简历
技术文章
时间图
分类
标签
关于
高晓庄 札记
首页
简历
技术文章
时间图
分类
标签
关于

高晓庄 札记

从单体架构迁移到微服务,我是怎么设计的
发表于2026-01-08|ArchitectureMicroservices
从单体架构迁移到微服务,我是怎么设计的 架构演进从来不是”重写”,而是一场有节奏、可回滚、能持续交付的工程。本文复盘我在一个传统单体系统上做微服务化改造的完整设计思路。 为什么不直接重写接手时,系统是一个运行多年的单体应用,业务逻辑高度耦合,编译一次要十几分钟,任何小改动都要整体发版。团队第一反应是”推倒重写”。 但重写意味着:在很长一段时间内没有新功能产出,且新旧系统切换期的数据一致性几乎无法保证。最终我们选择了绞杀者模式(Strangler Fig Pattern)——在保留老系统运转的前提下,逐步把能力”绞杀”出来。 拆分原则:先按业务域,再按变更频率拆分粒度是最容易踩坑的地方。拆太细,分布式事务和运维成本爆炸;拆太粗,等于没拆。 我们的经验是两轮拆分: 第一轮按业务域:把系统切成若干个自治的领域边界(用户、订单、设备、GIS 等),每个域对应一个团队、一个独立的交付单元。 第二轮按变更频率:把”频繁变更”和”稳定不变”的模块再次分离,让高频模块能独立发布,不用拖着稳定模块一起回归。 判断边界是否合理的标准很简单:这个服务能不能独立演进、独立部署、独立扩容? 如果三个...
工厂方法与抽象工厂:别再混为一谈
发表于2026-01-07|基础
面试里经常出现这样的对话: “讲讲工厂模式。”“工厂模式有简单工厂、工厂方法、抽象工厂……” 然后就开始背定义。但背完往往自己也是糊的,因为这三个名字实在太像了。 其实它们的演进逻辑非常清晰,理清了就永远忘不掉。 起点:到处 new 的坏味道假设你在做一个支付系统,支持微信和支付宝两种支付方式。最初你可能会这么写: 12345if ("wechat".equals(type)) { return new WeChatPay();} else if ("alipay".equals(type)) { return new AliPay();} 问题来了:如果以后要加”银联支付”、”苹果支付”,这段 if-else 就得一直改,而且这样的判断散落在代码各处,改一处漏一处。 创建对象的逻辑,不应该和业务逻辑混在一起。这就是工厂模式要解决的问题。 第一站:简单工厂把创建逻辑抽到一个”工厂”里: 123456789public class PayFactory { public...
单例模式:饿汉、懒汉、双重检查锁,到底怎么选
发表于2026-01-05|基础
单例模式大概是每个学 Java 的人第一个接触的设计模式,也是面试里被问烂、但很多人其实没真懂的一个。 它的目标很简单:保证一个类在整个系统中只有一个实例,并提供一个全局访问点。 为什么需要单例?典型场景:配置管理、线程池、数据库连接池、日志器、Spring 容器里的 Bean(默认就是单例)。这些对象如果重复创建,要么浪费资源,要么状态不一致。 难的不是”理解目标”,是在并发下正确、安全地实现它。 写法一:饿汉式123456789public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; }} 类加载的时候就创建实例,所以叫”饿汉”——不管用不用,先造出来。 优点:简单,线程安全(由 JVM 类加载机制保证) 缺点...
设计模式入门:为什么需要它,以及三大分类
发表于2026-01-03|基础
刚学设计模式的人,最容易犯一个错:把它当成”要背下来的 23 个名词”,然后拿着锤子到处找钉子。 这完全跑偏了。 设计模式的价值,从来不在”记住”,而在理解它为什么出现。 设计模式到底解决什么问题写代码久了你会发现,很多问题会反复出现: 怎么保证一个类只有一个实例? 怎么在运行时切换不同的算法? 怎么让两个模块解耦、互不直接依赖? 怎么在不改老代码的前提下扩展新功能? 这些问题被无数工程师踩过、想过、总结过,最后沉淀成了一套”常见问题的常见解法”——这就是设计模式。 它本质上是一套经验的复用。你不需要自己重新发明轮子,前人已经替你想好了。 把设计模式当”通用语言”我真正体会到设计模式的价值,是在团队协作里。 假设你在代码评审时看到这样一段话: “这里建议用策略模式把这块 if-else 拆掉。” 如果你们团队都懂策略模式,这句话一句话就说清楚了,不用解释一大堆背景。 但如果没人懂,你就得说:”你看这里,我们有三种计费方式,现在是 if-else 判断,以后可能还会加第四种、第五种,而且每个分支的逻辑还很长……” 设计模式是工程师之间沟通问题的通用词汇表。它让”复杂的设计意...
写在最前面:关于这个博客的一些憧憬
发表于2026-01-01|随笔
写在最前面:关于这个博客的一些憧憬代码写久了,会慢慢发现它其实只是人生一条很窄的线。线之外是哲学、是经济学、是与人相处、是面对自己。 我很早就想有一个自己能”长”出来的地方。可以是把踩过的坑写下来留给未来的自己,可以是把看世界的角度摊开和陌生人共享,更可以是把那些天马行空的、未成形的、有点脆弱的念头老实留下来,看它们最终会变成什么形状。 这个博客,就是这块地。 这个博客想留住三样东西第一,把踩过的坑和想清楚的瞬间留下来。 今天以为搞明白的事,三个月后回看可能又是另一回事。把当时的判断原样存好,将来能看见自己走过的弧线,结果本身反而不那么重要。 第二,让视野从单纯的技术拓出去。 代码只是一种视角,世界还有很多视角值得用同等的耐心去理解。哲学不是用来装点门面的,是用来校正思维方式的;经济学不是用来算账的,是用来理解利益与选择背后逻辑的。我希望这个地方慢慢长出这些东西,和技术文章并列存在、互为参照。 第三,逼自己成为”想清楚再说话”的人。 公开地写有一个反向作用——它会让你在落笔之前多想一拍,在发布之前多校一稿。长此以往,思考的肌肉会比手速长得更结实。 对自己的几点奢望 五年后回来看,...
1…910
avatar
高晓庄
Java / Go / Python
AI / RAG / Agent
Cloud Native / Kubernetes
文章
77
标签
219
分类
31
Follow Me
最新文章
腾讯 Hy4 首发速评:770B 跑分该怎么读2026-11-04
众人熙熙,我独泊兮2026-10-25
本体论的学习:我们到底在学"什么"2026-10-18
把"想"这件事交给模型之后2026-10-14
当模型开始替你做决定2026-10-07
分类
  • AI33
    • Agent2
    • Architecture1
    • CV1
    • Dify1
    • LLM4
    • RAG1
  • Architecture3
标签
Dify API Spring 国产化 排序 混元 社会经济学 LangChain 虚拟化 本体论 注意力机制 数据结构 Kubernetes 个人成长 Go MetaGPT 向量检索 Spring Boot 容器化 智能问数 向量数据库 YOLOv5 认知 BFS Tool Use 回溯 CrewAI LLM Plan-and-Execute 算法 技术成长 TGI 大数据量 自由市场 AI编程 低代码 拓扑排序 佛学 BabyAGI 二叉树
归档
  • 2026-11 1
  • 2026-10 4
  • 2026-09 4
  • 2026-08 16
  • 2026-07 10
  • 2026-06 7
  • 2026-05 4
  • 2026-04 5
网站信息
文章数目 :
77
本站总字数 :
91.3k
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By 高晓庄