【小也的Java之旅系列】01 分布式、集群、微服务的区别
前言
做Java开发多年,一直以来都有想把Java做成一个系列的想法,最近整理自己的笔记发现有很多值得写的内容,但这些内容又往往杂乱不堪。CSDN上有很多高质量的Java博客,但大多不是从一个人成长的角度去写的。而我们——一个技术人员——一个人,是在不断的学习中成长的,这样的过程如果能体现在系列博客中那真的就太好了。于是,终于下定决心,想花一段时间整理成册——或许是几个月,或许是半年,或许是一年不止。希望自己能坚持下去。
为什么叫小也
孩子是我们之所以还努力的原因。
本系列适合什么样的人阅读
阅读本文最好有一定基础,最优人群是:
- 了解Java的基础语法
- 自己本身已经写过代码
- 对Java架构、大数据、轻代码等进阶有兴趣
如果你是个初出茅庐的初学者,对Java技术内容都不甚了解,也不用特别担心,我的另外一个系列你肯定感兴趣——《Java8系列博文合集》(或者访问我的博客园也可以阅读)。
为什么用比喻方式写技术内容
大家会发现技术从来都不是枯燥的,枯燥的是工作:)。
鉴于读者可能有刚刚开始学习的同行,所以类比的方式讲解内容就非常有用。
在整个系列中,我们追随小也的步伐一步步成为熟悉,甚至精通Java的技术人员。
系列准备写哪些内容
你没看错,原本的想法甚至包括了我的笔记的所有内容:Java、AI、前端等等。但由于太过庞杂(我的笔记又太乱 T T),准备优先完成Java系列…的红色部分。
其余内容将在漫长时间里逐一补全——希望大家收藏转发关注,给予我坚持下去的信心。
为什么从架构开始做本系列第一章
我一直有两个疑惑:
为什么老师们教英语的时候不先教音标和构词法,而是直接开始学单词和短语?
为什么学校教技术的时候,都要先教HelloWord,而不是架构?
这两个有什么关系?
教了音标我们就可以开口说话,教了构词法我们就可以快速掌握单词。
教了架构,我们可以明白代码为什么要这么写,思考问题应该从哪开始琢磨,掌握解决一类问题而不是一个问题。
当然,有人会说初学者直接教架构是大了些,但我想反其道而行之——我认为,与其快速在屏幕显示出HelloWord而沾沾自喜,我更想知道如今司空见惯的、到处都是的APP网站们都是怎么跑起来的。
正文
叔叔的烦恼——单体服务
小也的叔叔是个厨师,他开了间饭馆,饭店里人来人往,特别是饭点,完全走不动道。小也的叔叔经常给小也说:“客人总是抱怨等得久,我自己也经常累得不行。”
小也很聪明,他首先将问题画出来,标记出问题的关键点。
小也的建议——集群
问题
叔叔一个人工作太累了,没法快速完成产品需求(出餐)。最要命的是,如果叔叔身体不舒服,那饭店就没人工作了。
(翻译:单体服务一旦崩溃,系统将彻底瘫痪。)
思考
如果店里面有更多的厨师和工作台,不就可以了?
解决
设置更多工作台,招聘更多厨师与叔叔一起工作,这样效率就提高了。
(翻译:将程序部署在多个设备上同时运行,再搭配负载均衡,就更能保证系统的稳定性)
小也的思考——分布式
有了更多厨师的帮助,叔叔总算不那么累了,出餐也更快,过了没多久,叔叔的店面扩张了,现在有更多的人来吃饭,而且叔叔还增加了菜品,种类更丰富。
但没过多久,新的问题又出现了。
由于增加了太多菜品,虽然增加了厨师但经常出现餐品来不及做的情况。
小也拿出笔重新开始分析。
问题
菜品太多,经常出现其中某几个菜抄的慢而影响到一桌子菜的进度。
(翻译:前后端、数据库端等对资源消耗不同,可能会相互影响。)
思考
根本原因是因为素菜和荤菜的资源消耗不同,往往一桌子菜有荤菜又有素菜,但素菜都吃完了荤菜还没上。
(翻译:同一个系统,不同环境消耗资源不同,可能由于某个环节过载而影响产品整体效果。)
解决
将荤菜和素菜分开,荤菜慢,素菜快,给荤菜更多资源(厨师和工作台),减轻压力,提高效率。
有没有一劳永逸的方法——微服务
自从荤素区分后,出餐快了,餐品相互也没有影响,如果其中某个厨师请假也不影响饭店运转。
但过了一段时间,叔叔又找到了小也:“我最近又加了西餐,还想把日式料理也加上去……厨子是越来越多了,我发现我自己做老板的都管不过来了,这可怎么办?”
小也拿出笔再次思考。
问题
之前的问题都是客人多厨师少导致的,但到了现在,厨师已经越来越多,发现问题反倒是在资源(厨师和工作台)使用上。
(翻译:分布式虽然解决了不同子系统之间的相互影响,但随着系统越来越庞杂,系统之间的交互和配合就会出现新的问题。)
思考
根本原因是对厨师的管理不足,叔叔作为老板,不能够有效利用每一个人,厨房现在乱作一团,需要赶快解决人员协作。
无论是中餐、西餐还是以后可能增加的新菜品,我们的目的都是为了出餐,我们需要抽象思考餐品的制作过程,安排人员紧密搭配。
解决
从餐品制作过程(功能流程)入手,分为洗菜、切菜和炒菜,不同集群的厨师只做好自己的本职工作。如果需要,以后还可以增加新的功能集群(煲汤集群、腌菜集群…)。每个集群相互独立,但又有关联,统一为一个目标——业务流程服务。
已经优化到了极限吗?
预制菜的出现——中台
新的时代,预制菜已经满大街都是。菜品不一定从厨房出,而是统一从一个指定的厂家出,再由不同饭店简单加工即可食用。这就是中台。
中台将主要服务打包,使用者不需要了解实现细节,只需调研API即可。
人工智能厨子——AI驱动架构
大模型技术正在深度融入微服务生命周期管理,形成「AI+微服务」的融合架构:
据说,字节跳动用大模型实现了Go到Rust的代码迁移,通过LLM分析项目依赖关系和接口调用,生成迁移脚本并保证兼容性。
AI可以基于历史数据的AI模型可识别微服务链路异常,自动执行熔断、降级或路由切换。
不断升级——无服务架构和云原生
维度 | Serverless | 云原生(Cloud Native) | 中台 |
---|---|---|---|
核心定义 | 无需管理服务器的计算模型,按需执行代码并按量付费。 | 基于云计算特性的应用开发方法论,强调容器化、微服务、自动化和弹性扩展。 | 企业级能力复用平台,整合通用业务/数据/技术能力以支撑多业务线协作。 |
技术特征 | 事件驱动(如HTTP触发器)、按需弹性伸缩、冷启动延迟。 | 容器化(Docker)、编排系统(Kubernetes)、服务网格(Istio)、持续交付(CI/CD)。 | API网关、微服务架构、统一配置中心、业务能力抽象化。 |
核心目标 | 消除服务器运维负担,降低资源闲置成本。 | 最大化云资源弹性,提升应用的可扩展性和可靠性。 | 避免重复建设,加速业务创新与协作。 |
运维复杂度 | 零运维(由云厂商管理资源)。 | 高复杂度(需管理容器集群、服务网格等)。 | 中等复杂度(需持续迭代中台能力)。 |
应用场景 | 突发流量处理(如秒杀)、轻量任务(如文件转换)、异步事件处理(如消息队列)。 | 高并发互联网服务(如电商平台)、分布式数据库、微服务架构的复杂系统。 | 多业务线共享能力(如用户中心、支付中台)、企业数字化转型中的能力沉淀。 |
典型技术/产品 | AWS Lambda、阿里云函数计算、Azure Functions。 | Kubernetes、Istio、Prometheus、Helm。 | 阿里业务中台、腾讯数据中台、微服务化的用户认证中心。 |
成本模型 | 按执行时间和资源使用量付费(后付费)。 | 按资源预留量付费(预付费+弹性扩缩容)。 | 前期建设成本高,长期通过复用降低业务线开发成本。 |
核心挑战 | 冷启动延迟、状态管理困难、调试复杂。 | 多集群管理复杂性、服务网格性能开销、跨云兼容性。 | 业务边界划分模糊、中台与业务线需求冲突、能力迭代速度匹配问题。 |
与微服务关系 | 可作为微服务的轻量化部署形式(如FaaS化微服务)。 | 微服务是云原生的核心架构模式之一。 | 中台通常基于微服务架构实现能力复用。 |
企业适用阶段 | 初创企业快速试错、中小型业务轻量化部署。 | 中大型企业复杂系统改造、需要长期技术沉淀的场景。 | 集团化企业或多业务线公司,需解决重复建设和资源浪费问题。 |
总结
以上内容是快速了解架构的关系和区别,并且了解了以后架构发展大趋势。至于什么是微服务,具体该怎么用代码实现,将在之后的章节详细讲解。