前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。
一、什么是微服务?
微服务是一种架构风格,它是将一个大型的单体应用程序拆分成一组小型的、相互独立的服务,每个服务都专注于完成一个特定的业务功能,并且可以独立地进行开发、部署、扩展和维护。举个例说,微服务就类似于一个公司架构,每个服务好比与每个独立部门,每个部门有着特定的职能,且能够独立运作。
二、微服务的特点
- 单一职责:
- 每个微服务都只负责一项明确的业务功能。例如在电商系统中,有专门负责订单管理的微服务,其只聚焦于处理订单的创建、查询、修改、删除等与订单直接相关的操作,而不会去处理商品库存管理、用户注册登录等其他不相关业务。这样使得每个微服务的功能边界清晰,易于理解和维护。
- 独立部署:
- 每一个微服务可以单独进行部署,不会因为某个微服务的更新而影响到整个应用系统中的其他服务。比如某个新功能添加到xxx服务中,开发团队完成开发和测试后,就能直接将这个服务部署上线,无需等待其他服务的变动,大大提高了部署的灵活性和效率,能够更快地实现功能的迭代和发布。
- 轻量级通信:
- 微服务之间通过轻量级的通信机制进行交互,常见的有基于 HTTP 的 RESTFUL API 或者消息队列(如 RabbitMQ、Kafka 等)。这种通信方式相对简单且易于实现跨语言、跨平台的交互。
- 独立的数据存储:
- 各个微服务通常都有自己独立的数据库,数据的存储方式和结构可以根据服务自身的业务需求进行选择。比如用户服务可能采用关系型数据库 MySQL 来存储用户的基本信息、登录凭证等结构化数据,而图片处理微服务可能使用对象存储(如阿里云的 OSS、腾讯云的 COS 等)来存放图片文件等非结构化数据,这样能更好地隔离数据,避免不同业务逻辑的数据相互干扰。
三、开发中常用的微服务组件
目前学习了解的主要是两类:Spring原生系列和(AliBaBa)阿里系。
- Spring原生系列:
- 注册中心:
Eureka(停更,官方地址:https://github.com/Netflix/eureka/wiki),Zookeeper(没学过),Consul(主流)- 服务配置:config(没学过,consul也支持服务配置)
- 负载均衡:
Ribbon(停更,没学过),LoadBalancer(主流)- 服务调用:
Feign(停更,没学过),RestTemplate,OpenFeign(主流)- 熔断降级:Hystrix(spring社区不推荐),Circuit Breaker(主流,实际落地Resilience4J)
- 链路追踪:Sleuth(主流,改为 Micrometer Tracing)
- 服务网关:
Zuul(停更,没学过),Gateway(主流)
- (AliBaBa)阿里系:
- 注册中心:Alibaba Nacos(主流,重中之重)
- 服务配置:Alibaba Nacos
- 负载均衡:无,延用Spring原生组件
- 服务调用:无,延用Spring原生组件
- 熔断降级:Alibaba sentinel(主流,重中之重)
- 链路追踪:无,延用Spring原生组件
- 服务网关:无,延用Spring原生组件
- 分布式事务:Alibaba seata(主流,重中之重)
四、SpringCloud学习的前期准备
在学习相关知识时,主要有两条线路可供选择,其一是原生系列,其二是阿里系列。这两条线路并没有严格的先后顺序要求,大家完全可以依据自身工作的实际需要,直接开始学习 SpringCloud Alibaba。
所用到的学习软件以及对应版本如下:
- IDEA版本:2024.2.3
- Java版本:jdk17+
- Maven版本:3.9+
- SpringCloud版本:2023.0.0
- SpringBoot版本:3.2.0
- MySQL版本:8.0+
- Spring Cloud AliBaBa版本:2023-0.0-RC1
五、总结
此次学习围绕着一个小案例展开,该案例具体为 “下订单 ——> 调用支付” 这样的业务流程,旨在通过对这一案例的剖析与实践,实现对微服务常用组件的学习,让学习者能够更加深入且直观地掌握微服务相关组件的知识与运用方法。
ps:努力到底,让持续学习成为贯穿一生的坚守。学习笔记持续更新中。。。。