微服务概述

简介: 本文对比单体与微服务架构,解析微服务定义、优缺点及技术实现方案。微服务通过业务拆分、独立部署、轻量通信提升系统扩展性与维护性,虽带来运维复杂度,但仍是现代分布式架构演进方向。

1.单体应用与微服务架构区别

如上图左侧为单体应用架构。在传统单体应用中,所有功能模块都在一个工程中编码、部署,即使是集群部署,也只是单体应用的水平复制。

如上图右侧为微服务架构。在微服务架构的项目中,每个应用会按照领域模型划分进行业务、功能聚合,由此拆分后聚合的应用往往:模型高度统一、职责清晰且收敛、应用与应用(领域与领域)之间边界清晰,并且提升了每个应用的独立性、扩展性。

除了应用拆分维度,微服务架构也保证了每个应用可以使用独立语言开发、独立数据存储技术,只要能保持对外统一交互语言即可,存储模型差异如下:

见上图,应用拆分之后对应每个应用会独立、或共享一个数据库,数据库的拆分维度除了要考虑领域边界,还要更多的考虑每个数据库的QPS、TPS,避免高频写操作集中在一个DB,由此起到给数据库减压的功效。

基于上述分析,单体架构存在的问题主要集中在:功能混淆、边界模糊、维护成本高、可靠性差等角度,对于后续应用的升级、扩展同样存在瓶颈。因此随着互联网的发展,我们必须解决上述问题,而微服务就是这样一种架构模式。

2.什么是微服务

自2014年起,微服务架构由Martin Fowler、Adrain Cockcroft、Neal Ford等人接力进行介绍、完善、演进、实践后,一直维持着较高的热度直到现在,内容如下:

微服务架构是一种架构模式,它提倡将原本独立的单体应用,拆分成多个小型服务。这些小型服务各自独立运行,服务与服务间的通信采用轻量级通信机制(一般是基于HTTP协议的RESTful API),达到互相协调、互相配合的目的。被拆分后的服务都围绕着具体的业务进行构建,每个服务都能独立地进行开发、部署、扩展。由于相互独立,且采用轻量级通信机制,各个小型服务也能够使用不同的语言开发,也可以使用不同的数据存储技术。

微服务是一套经过漫长的架构演进、良好架构设计的分布式架构方案。从传统单体应用到分布式独立应用,从应用数据服务到引入缓存优化性能,从反向代理和CDN加速网站响应等等,技术架构不断演进的过程中,逐步出现前后端分离,数据读写分离,云原生、DDD领域驱动,最终孵化出如SpringCloud、SpringCloud Alibaba等成熟稳定的微服务架构方案。

微服务其主要特征:

  • 服务自治:团队独立、技术独立、数据独立、部署独立
  • 面向服务:微服务对外暴露业务接口,如RESTful API调用
  • 单一职责:每个应用领域边界清晰,功能职责单一,无重复工作

3.微服务优缺点

3.1 优点

①易于开发维护

微服务基于领域模型拆分的应用,其内部模型高度统一,功能相对内聚,开发人员只需要对固定模型进行领域业务接口封装即可。

②技术栈开放

微服务因独立部署、独立开发,因此开发团队可以根据资深团队特点进行技术选型。如团队擅长关系型数据库则MySQL,擅长图形计算则Neo4j。

③升级错误隔离

A技术专项升级因单独部署,不再影响整个分布式架构中全部功能,只影响有接口交互的部分应用,而这种应用也可以通过灰度、服务降级、服务熔断的方式兼容和处理,不会因一个错误导致整个应用瘫痪。

3.2 缺点

①运维成本高

更多的服务意味着更多的运维投入,传统应用中只有一个应用,而为服务中,需要保障几十、上百个服务的正常运行和协作。

②调用链路复杂

微服务架构中,不可避免的会出现A服务依赖B服务,B服务依赖C服务,C继续依赖D服务的场景,一旦A调用异常,排查链路可能会从A->B->C->D,才能最终发现服务报错具体信息(后续skywalking可解决)。

③分布式事务问题

同上例A->B->C->D的长链路调用过程中,如果A先修改自己数据,但下游C却异常,此时预期是A回滚自己事务,这一点在单体应用因都是本地事务可以很好做到,但是分布式场景下却提升了复杂度(后续Seata可解决)。

④学习成本高

微服务学习除了需要一定基础之外:Spring、SpringMvc、MyBatis、SpringBoot、Maven、MySQL等,还需学习SpringCloud,中间件、缓存、Docker、文件服务器等多种技术,每一门学习都有很多难点需要克服。

4.如何实现微服务架构

至此我们了解了微服务的定义、优缺点,还总结了一些指导性的原则,下面我们进一步探讨下,如何实现微服务架构。

4.1 技术选型

1.开发框架

可使用SpringCloud作为微服务开发框架,因为SpringCloud为微服务架构提供了完整的解决方案,同时文档丰富,社区活跃,如下:

当然借助于SpringBoot+Nacos+Dubbo等其他技术架构也可以实现微服务架构,但因SpringCloud丰富且完整的解决方案体系,作为新手学习笔者在此更推荐依此学习,此学习过程中涉及的理论在今后的工作中也一定大有帮助。

2.运行平台

微服务并不绑定运行平台,将微服务部署在PC server、阿里云、AWS等云计算平台都是可以的。出于轻量、灵活、应用支撑及现在市场主流部署模式,笔者选择Docker作为部署容器。

4.2 通用微服务技术架构图

物理部署图、技术架构图、业务架构图、领域模型图、E-R图各自是什么?如何画?请移步:链接

5.总结

本文介绍了微服务基本概念、演变过程,主要的原则及优缺点,最后谈到了微服务的实现方案之一,作为引文此章节偏理论知识一些。后续笔者将借助具体技术实现带领读者一起逐步实现微服务架构体系。


思考问题

  • 什么是微服务?
  • 什么是微服务架构?
  • 微服务架构演进过程?

6.推荐阅读资料

相关文章
|
4月前
|
人工智能 UED
【下载安装】Adobe XD 免费下载与安装教程
Adobe XD 2025是一款专业的UI/UX设计工具,支持矢量绘图、交互原型制作与响应式布局,兼容PS、AI及Jira、Slack等协作平台。内置动画、语音交互功能,提升设计效率。安装前需关闭杀毒软件,解压后以管理员身份运行安装程序即可。
1557 0
|
15天前
|
存储 人工智能 固态存储
构建 AI 数据基座:思必驰基于 Apache Doris 的海量多模态数据集管理实践
面对海量多模态数据管理困境,思必驰通过构建以 Apache Doris 为核心的数据集平台,实现了数据从“散、乱、滞”到“统、明、畅”的转变。在关键场景中,存储占用下降 80%、查询 QPS 提升至 3w,不仅实现可量化的效率提升和成本优化,更系统化地提升了 AI 研发效率与模型质量。
118 0
构建 AI 数据基座:思必驰基于 Apache Doris 的海量多模态数据集管理实践
|
2月前
|
人工智能 数据可视化 API
给大模型装“眼睛”,让DeepSeek可以读网页,数眼智能上线网页解析API!
AI虽强大,却难直接读取网页。该链接阅读器通过智能提取、并行处理与结构化格式化,结合“数眼智能阅读器”精准识别主内容,让AI真正“看懂”网页,实现从链接到深度分析的自动化闭环,打通AI理解网络世界的最后一公里。
271 0
|
24天前
|
存储 数据采集 弹性计算
面向多租户云的 IO 智能诊断:从异常发现到分钟级定位
当 iowait 暴涨、IO 延迟飙升时,你是否还在手忙脚乱翻日志?阿里云 IO 一键诊断基于动态阈值模型与智能采集机制,实现异常秒级感知、现场自动抓取、根因结构化输出,让每一次 IO 波动都有据可查,真正实现从“被动响应”到“主动洞察”的跃迁。
255 56
|
2月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细讲解了Nacos作为配置中心的核心功能与实践应用,涵盖配置管理、热更新、共享配置及优先级规则,并通过搭建Nacos集群实现高可用部署,帮助开发者掌握微服务环境下配置的集中化管理方案。
 Nacos配置中心
|
2月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是微服务架构的综合解决方案,由Spring团队推出,具备约定大于配置、组件丰富、开箱即用等特点。为解决Netflix组件停更问题,阿里推出Spring Cloud Alibaba,集成Nacos、Sentinel、Seata等高性能中间件,成为主流技术栈选择。
|
2月前
|
存储 人工智能 自然语言处理
阿里云万小智AI建站尝鲜价39元:自动网站上线、AI图片生成、AI员工客服及内容创作全流程
阿里云万小智AI建站,39元起享特惠!支持自动建站、AI生成图片与内容、智能客服,集成云资源、免费CN域名。基础版698元/年,买2年9折、3年8折,SaaS模式免运维,通义大模型驱动,快速上线品牌官网。
212 0
|
6月前
|
存储 弹性计算 缓存
阿里云ECS通用算力型u2i服务器性能测评、CPU型号及配置参数解析
阿里云ECS通用算力型u2i实例,搭载Intel® Xeon® Platinum处理器,支持第五、六代至强平台,适用于Web、Java、中小型数据库等场景。提供1:1至1:8多种vCPU与内存配比,最大32vCPU,标配ESSD Entry云盘,网络性能随规格提升增强,支持IPv4/IPv6,适用于企业级应用、数据分析、缓存集群等业务,兼顾性能与成本效益。
545 157
|
10月前
|
人工智能 自然语言处理 算法
"一丹一世界"一等奖 | 曙光_麦橘超然 创作分享
"一丹一世界"一等奖 | 曙光_麦橘超然 创作分享
244 4
|
11月前
|
应用服务中间件 Linux 开发者
用的到linux-tomcat端口占用排查-Day5
通过本文的介绍,详细讲解了在CentOS 8系统上排查和解决Tomcat端口占用问题的方法。从使用 `netstat`、`lsof`和 `ss`命令检查端口占用情况,到使用 `ps`和 `top`命令查找和停止占用端口的进程,再到修改Tomcat端口配置,最后介绍了自动化脚本的方法。希望本文能帮助系统管理员和开发者有效地解决端口占用问题,确保Tomcat服务器的正常运行。
394 11