一、什么是微服务?
(1)单体架构(ALL IN ONE)
单体架构就是把业务所有功能都集中在一个项目中开发,最后的呈现方式就是打成了一个jar包。
优点是架构简单、部署成本低;缺点是无法应对高并发,并且耦合度高。
但随着用户量的增加,就把打好的包多在几台服务器上进行部署(集群架构)。
(2)分布式架构
分布式架构就是根据业务功能对系统进行拆分,每个业务模块作为单独的项目进行开发维护。
优点是降低了耦合度,方便服务升级和拓展。
例如:双11、618或春运时某些大型电商平台和购票平台的订单数量会急剧增加,但过去这段时间订单数量就会降低。如果服务器采用分布式架构就可以在特殊的时间段如618,双11动态地增加订单服务器的数量,春运增加售票服务的数量。这样就会有效的应对高并发的情况,避免服务器发生宕机。
(3)由此也引出了一些思考
①分布式将各个服务拆散,例如支付服务、订单服务、商品服务、直播服务、推荐服务等等……但是这些服务又是相互协作才使得项目整体正常运行,服务与服务之间如何协调工作?
②由于微服务把各个服务拆散,服务集群的地址是如何进行维护?
③服务于服务之间如何进行远程调用?
二.微服务解决方案Spring Cloud:构建分布式微服务架构的利器
Spring Cloud 是一套基于 Spring Boot 的微服务架构工具集,为开发者提供了快速构建分布式系统中常见模式的工具(如配置管理、服务发现、熔断器、路由控制等)。它通过简单的注解和配置,大幅降低了微服务基础设施的实现难度。
(1)核心功能概览
| 模块 | 功能说明 | 常用实现 |
|---|---|---|
| 服务注册与发现 | 管理微服务节点信息 | Eureka, Nacos, Consul |
| 配置中心 | 集中化管理分布式配置 | Config, Nacos, Apollo |
| 服务调用 | 服务间通信与负载均衡 | OpenFeign, RestTemplate |
| 服务熔断与降级 | 防止服务雪崩,提高系统弹性 | Hystrix, Sentinel |
| 网关路由 | 统一入口、权限控制、流量管理 | Gateway, Zuul |
| 消息总线 | 配置动态刷新 | Bus (RabbitMQ/Kafka) |
| 分布式链路追踪 | 监控请求调用链 | Sleuth + Zipkin |
基于自己的理解:
①首先用户使用应用程序进行操作,如下单。通常下单会有多台处理订单的服务器,用户下单时通过网关对请求进行转发,但具体转发到哪台服务器呢?需要用到注册中心
②服务分布在不同服务器上,比如说下单和订单服务,服务调用服务,此时就需要Nacos注册中心和配置中心,注册中心有两个功能:服务注册和服务发现。服务注册就是监控服务上下线,服务发现就是知道知道往哪里发送请求。配置中心:统一管理配置文件+变更配置,Nacos+OpenFeign
③如果服务之间调用失败,例如订单量过大,造成了服务器宕机,怎么办?答:熔断机制,也叫快速失败机制,直接返回给用户,下单失败或服务器繁忙等等,及时释放资源,防止资源耗尽。
④如果有多个服务需要操作数据库,如何保证数据库一致性?本科阶段我们学习关系型数据库时学习过ACID四大原则。事务有四个特性是原子性、一致性、隔离性和持久性。此时我们就需要用到分布式事务Seata
原子性(Atomicity)
事务被视为不可分割的最小操作单元,其包含的所有操作要么全部成功执行,要么全部失败回滚。例如转账操作中,扣款和收款必须同时完成,若任一操作失败则整体撤销
一致性(Consistency)
事务执行前后,数据库必须满足预定义的业务规则(如数据完整性约束)。例如转账前后账户总金额应保持不变,若事务中途失败,系统将自动恢复至初始一致状态。
隔离性(Isolation)
并发事务之间相互隔离,一个事务的执行不应影响其他事务。数据库通过锁机制或多版本并发控制(MVCC)实现不同隔离级别,避免脏读、幻读等问题。
持久性(Durability)
事务提交后,其对数据的修改将永久保存,即使系统崩溃也能通过日志恢复。例如银行转账成功后,数据会立即写入磁盘或日志,确保结果不可逆。
评论