ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

带着小白学习-微服务-1 先了解微服务基础知识

带着小白学习-微服务-1 先了解微服务基础知识

带着小白学习-微服务@[TOC](从零学习微服务)

一、先说说为什么要用微服务

我仍然想写一写微服务,主要就是我想用最简洁、最快速的方法给小白进行普及。

1.什么是微服务

当一个公司的业务是从最开始的小市场慢慢扩大到了一定规模,系统的功能也从最初的增删改查,上升到了用户量暴增、需求多种多样,谁都不想得罪(其中一个服务bug停止了,求求其他的正常运行啊),业务永远顺畅,某一开发人员离职了(系统等死???)等等等,那么你的系统就需要用微服务架构重新设计了。
那么微服务到底能帮我们实现什么?
(1)将一个复杂问题拆分成若干个简单的小问题,将一个大型的项目架构拆分成若干个微服务来协同完成。
(软件设计层面)。将一个庞大的工作拆分成若干个小步骤,分别由不同的人完成这些小步骤,最终将所有的结果进行整合实现大的需求(比如卖商品的电子商务网站)。
(2)一台服务器无法负荷高并发的数据访问量,那么就设置十台服务器一起分担压力,十台不行就设置一百台。
(物理层面)。很多人干同一件事情,来分摊压力。

2.是不是需要微服务(以下是AI说的)

3.如何把系统功能转换为或者拆解为合理的微服务?(以下是AI说的,我认为有道理)

4. 微服务需要的技术

要想了解这里的技术栈,就得先用个例子搞清楚微服务如何设计。
假设现在做一个外卖平台,我们分为两种情况来分析,首先是:

(1)系统功能

  • 客户端:主要针对普通用户,用户注册、用户登录、菜单选购、查询订单
  • 后台管理系统:主要是针对管理员,管理员登录、管理员退出、添加菜品、查询菜品、修改菜品、删除菜品、订单处理、添加用户、查询用户、删除用户。

(2)转换为微服务

先有四个服务提供者:

  • account账户服务:用户和管理员的登录、退出。
  • menu菜品服务:添加菜品、删除菜品、修改菜品、查询菜品。
  • order订单服务:添加订单、查询订单、删除订单、处理订单。
  • user用户服务:添加用户、查询用户、删除用户。
    假设一位用户想点菜(服务消费者):那么他的路径就是:登录–>查询菜品–>添加订单。。。。他就只需要到上面的四个微服务中调用某个业务逻辑即可。
    此时的整个系统工作原理是:
    四个服务提供者和一个服务消费者都需要在注册中心进行注册,同时可以使用配置中心来对配置文件进行统一集中管理。
    下面一张图可以形象的说明关系:

    特别说明:此图来源于B站@Java大联盟,楠哥的视频“Spring Cloud从入门到实战”
    此时的重点就转移到了注册中心、配置中心等

(3)微服务方案就登场了

目前主流微服务方案:Spring Cloud Alibaba(基础微服务全家桶) + Spring Cloud 原生组件(OpenFeign、Loadbalancer) 。

5.Spring Cloud Alibaba 官方组件(阿里提供)

(1)Nacos(注册中心 + 配置中心)

  • 注册中心:微服务启动时把自己的地址注册到 Nacos;服务调用时从 Nacos 拉取可用服务实例,实现服务发现,替代 Eureka。
  • 配置中心:统一管理所有微服务的配置文件(yaml),改配置不用重启服务,实时推送更新,替代 Spring Cloud Config。
  • 特性:AP/CP 模式切换,支持集群,阿里主推,国内用得最多。

(2) Sentinel

  • 核心能力:限流、熔断降级、热点参数限流、系统保护、权限控制。
  • 作用:防止某个服务挂掉,连锁把整个微服务集群拖垮(雪崩保护)。
  • 和 Hystrix 对比:Hystrix 已停更,Sentinel 功能更强,控制台可视化,是 SC Alibaba 默认熔断方案。

(3)Seata

  • 场景:一次业务调用跨多个微服务、多个数据库,要么全部成功,要么全部回滚。
  • 模式:AT 模式(最常用,无侵入)、TCC、SAGA、XA。
  • 痛点:微服务天然没有本地事务,Seata 就是用来补这个短板。

(4)RocketMQ

  • 作用:异步解耦、削峰填谷、事件通知。比如订单创建后异步发消息通知库存扣减。
  • 微服务场景:异步通信,和同步 Feign 调用互补。
  • 同类:RabbitMQ、Kafka;RocketMQ 事务消息对分布式业务友好。

(5)Spring Cloud Gateway

  • 注意:Gateway 是 Spring Cloud 官方组件,不是 Alibaba 自研,但 SC Alibaba 项目标配网关。
  • 功能:路由转发、鉴权、限流、跨域、请求日志、负载均衡。
  • 位置:所有前端 / 外部请求先进网关,再转发到后端微服务。 旧版是 Zuul,现已淘汰,Gateway 是主流。

6. Spring Cloud 原生配套组件(和 SC Alibaba 一起搭配使用)

(1)OpenFeign

重要:OpenFeign 不属于 Alibaba 组件,属于 Spring Cloud 原生,但 SC Alibaba 项目几乎必用。

  • 作用:像调用本地方法一样调用远程微服务,不用手写 Http 请求。写接口加注解,底层自动帮你发起 HTTP 请求。
  • 底层负载均衡:新版 SpringCloud 移除 Ribbon,OpenFeign 默认搭配Spring Cloud Loadbalancer。
  • 搭配:Feign 调用异常时,可以交给 Sentinel 做熔断降级。

(2)Spring Cloud LoadBalancer

  • 替代旧的 Ribbon。从 Nacos 拿到多个服务实例列表,在客户端选一个节点发起调用(轮询、随机等策略)。
  • Feign、Gateway 底层都依赖它。

7. SPring boot与Spring Cloud与Spring Cloud Alibaba

这三者在我们开发过程中都要用到,那么他们的关系到底是什么?

  • Spring Boot:基础开发框架,快速开发单体 Java Web 应用;
  • Spring Cloud:基于 Spring Boot 的一套「微服务规范 + 原生组件全家桶」;注意:他主要是一个规范!!!!
  • Spring Cloud Alibaba(SCA):Spring Cloud 规范的实现实现方案,阿里提供的组件集,用来替换掉已经停更的 Spring Cloud Netflix(Eureka/Hystrix/Zuul)。
    Spring Boot(底座) → Spring Cloud(微服务标准) → Spring Cloud Alibaba(国内主流实现套件)。

8.开发版本兼容设定

做系统开发的时候,大家最头疼的就是版本兼容问题。所以在做这个项目的时候,也请务必搞清楚当前系统的最佳版本兼容。
一般不建议追求最新,尤其对于初学者来说,使用较为稳定的旧版本就完全可以掌握其中的原理。

(1)最新版本兼容可以上官网查看:

Spring Cloud Alibaba 版本说明

(2)之前版本兼容关系可以上阿里云开发者社区查看

Spring Cloud Alibaba 历史版本兼容关系

9.本次学习使用的nacos下载

Nacos 历史版本下载

返回列表