Spring Cloud 微服务架构实战指南 -- SpringCLoud概述

目录

1.认识微服务

[1.1 单体架构](#1.1 单体架构)

[1.2 集群和分布式](#1.2 集群和分布式)

[1.3 微服务架构](#1.3 微服务架构)

[1.4 分布式架构和微服务架构区别](#1.4 分布式架构和微服务架构区别)

[1.5 小结](#1.5 小结)

[2.微服务解决方案 --- SpringCloud](#2.微服务解决方案 --- SpringCloud)

[2.1 什么是Springcloud](#2.1 什么是Springcloud)

[2.2 SpringCloud版本](#2.2 SpringCloud版本)

[2.3 SpringCloud实现方案](#2.3 SpringCloud实现方案)

[Spring Cloud Netflix](#Spring Cloud Netflix)

[Spring Cloud Alibaba](#Spring Cloud Alibaba)

[Spring Cloud 实现对比](#Spring Cloud 实现对比)

3.总结


1.认识微服务

下图表示了服务架构从单体应用逐渐转变为微服务应用的过程

1.1 单体架构

我们在一开始的学习过程中,在完成一个业务的时,通常会在一个项目中实现所有的功能模块,这个就是单体架构,业务的所有功能实现都打包在一个jar中,这个方式就称为单体架构.
⽐如我的上一篇博客中的在线oj的项目,前端+后端+数据库实现, 都在⼀个项⽬中, 这种架构就称为单体架构
以大家很熟悉的电商系统为例,一个电商系统包括了:用户管理,商品管理,订单管理,支付管理,库存管理等等,项目早期我们会把这些模块都写在一个web项目中,然后统一部署到一个web服务器中.

这种架构在开发起来很简单,一个项目中就包含了这个系统的所有的功能,省去了,多个项目之间的交互和调用消耗,直接部署在一个服务器中即可.
但是这种开发架构的弊端也很容易看的出来,当我们的网址的用户量越来越多的时候,需求也会越来越多,服务可能就会遇到下面的问题:
1.后端服务器压力会越来越大,负载会越来越高(功能都在一个jar中,所有的请求都针对着这一个云服务器),甚至会出现无法访问的情况;
2. 业务场景逐渐复杂. 为了满⾜⽤⼾的需求, 单体应⽤也会越来越⼤. 各个业务代码之间的耦合度也会 越来越⾼. 任何⼀个问题, 都需要整个项⽬重新构建,发布;
3.一个微小的问题,可能都会导致整个应用挂掉
后面程序猿们提出了两种优化方向
1.横向: 添加服务器 --- 集群
2.纵向: 把一整个业务划分为不同的模块 --- 分布式

1.2 集群和分布式

我们在上面的单体架构的弊端引出了两个名称,在下面我们先对这两个词解释一下

**集群(cluster):**是将一个系统完整的部署到多个服务器上,每个服务器都能提供系统的所有的访问,多个服务器通过负载均衡调度完成任务,每个服务器称为集群的节点(node)

**分布式:**将一个系统拆分为多个子系统,多个子系统都部署在多个服务器上,多个服务器上的子系统协同合作完成一个特定任务

我开了一家猫猫餐馆:
1.一开始人流量不大,我只请了一个厨师(牛马),整个厨师的工作内容为(洗菜,切菜,配菜,炒菜)
2.随着餐馆的生意起来了,人流量大了,现在一个厨师忙不过来了
1)横向:招聘一个厨师,两个厨师都可以独立做饭
2)纵向:招聘一个配菜师负责洗菜,切菜,配菜. 厨师就炒菜即可
3.生意更加火爆了,再招聘多个配菜师,多个厨师

分布式的节点可能是集群
集群和分布式区别和联系
1.从概念上,集群 是多个计算机做同样的事(相互之间可以进行替代),分布式是多个计算机做不同的事(相互之间不能替代-- 配菜师和厨师)

2.从功能上,集群的每一个节点功能是相同的,并且可以替代的;分布式也是多个节点组成的系统,但是每个节点完成的业务师不同的,一个节点出问题,这个业务就不可以访问了

3.从关系上,分布式和集群在实践中,很多时候是互相配合使用的,比如分布式的某一个节点,可能由一个集群来代替,分布式架构大多是建立在集群上的,所以实际的分布式架构设计中并不会把分布式和集群单独区分,而是统称: 分布式架构

1.3 微服务架构

在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,服务的调用关系也会越来越复杂.我们可以把一些通用的,会被多个上层服务调用的共享业务,提取成独立的基础服务,组成一个个微小的服务,这就是微服务.

简单来说,微服务就是很小的服务,小到一个服务只能对应一个单一的功能,只做一件事,这个服务可以单独部署运行 -- 一个微服务只做一件事,微服务之间可以采用RESTRPC协议进行通信

从这个角度来看,微服务架构是分布式架构的一种拓展,这种架构模式下它拆分粒度更小,服务更独立,可以理解为: 微服务是一种经过良好架构设计的分布式架构方案.

1.4 分布式架构和微服务架构区别

分布式架构特点就是:服务拆分,拆了就行
微服务:指非常微小的服务,更细粒度的垂直拆分,通常指不能再拆的服务
分布式架构侧重于压力的分散,强调的是服务的分散化;微服务侧重于能力的分散,会更强调服务的专业话和精细分工,从实践的角度来看,微服务架构通常是分布式服务架构,反之则未必成立,所以, 选择微服务架构通常意味着需要解决分布式架构的各种难题.

1.5 小结

上述我们简述了4种开发架构, 单体架构 --> 垂直架构 --> 分布式架构 --> 微服务架构 ,这里的所有的架构并没有什么哪种更加适合开发的,所有架构都是为了更好的服务产品,适合当前项目开发的架构才是最好的.

2.微服务解决方案 --- SpringCloud

2.1 什么是Springcloud

我们先来看一下官网的介绍

简单来说,SpringCloud就是分布式微服务架构的一站式解决方案,就是微服务架构落地的多种技术的集合, 比如:

  • Distributed/versioned configuration 分布式版本配置

  • Service registration and discovery 服务注册和发现

  • Routing 路由

  • Service-to-service calls 服务调用

  • Load balancing 负载均衡

  • Circuit Breakers 断路器

  • Distributed messaging 分布式消息

  • ......

2.2 SpringCloud版本

Spring Cloud 是⼀个由很多⼦项⽬组成的庞⼤项⽬, 这些⼦项⽬由各个公司来维护的, 所以发布阶段也 是不同的. 为了管理主项⽬和⼦项⽬的依赖关系, 以及为了避免和⼦项⽬版本的冲突, 主项⽬版本命名并没有采⽤ 和⼦项⽬数字版本化的形式, ⽽是采⽤了英⽂名称. 这个英⽂版本名称也⽐较有趣, Spring Cloud 采⽤了英国伦敦地铁站的名称来命名,并由地铁站名称字 ⺟A-Z依次类推的形式来发布迭代版本.

这里举一个买家电的栗子:
我们在装修时,需要购买电视,空调,洗衣机,冰箱等等
这个时候就又一个企业,推出了一些全家桶套餐
套餐1: 电视1 + 空调1 + 洗衣机3 + 冰箱4
套餐2: 电视2 + 空调1 + 洗衣机2 + 冰箱1
SpringCloud就类似于这个推销套餐的企业,子项目和主项目都有各自的版本,子组件的版本一定要和Spring的版本对应上SpringCloud和SpringBoot的版本也要对应上.

2.3 SpringCloud实现方案

在SpringCloud的规范下,有很多实现,其中最为出名的时 SpringCloudNetflix 和 SpringCloudAlibaba

Spring Cloud Netflix

Spring Cloud Netflix是 Netflix OSS(Netflix Open Source Software)在Spring Cloud规范下的实现.
包含的组件及其主要功能⼤致如下:

Eureka : 服务注册和发现
Zuul: 服务⽹关
Ribbon: 负载均衡
Feign: 服务调⽤组件
Hystrix: 断路器, 提供服务熔断和限流
Hystrix Dashboard: 监控⾯板
...
在之前的很长一段时间里 Spring Cloud ⼀度被泛指 Spring Cloud Netflix. Spring Cloud⼀直以来把 Netflix OSS 套件作为其官⽅默认的⼀站式解决⽅案,但是Netflix公司在2018前宣布了一些核心组件进入了维护状态.

Spring Cloud Alibaba

Spring Cloud Alibaba 是阿⾥巴巴集团下的开源组件和云产品在Spring Cloud规范下的实现.
虽然Spring Cloud Alibaba⽬前并不是Spring Cloud官⽅推荐的默认⽅案, 但是Spring Cloud Alibaba
是阿⾥中间件团队主导的⼀个新⽣项⽬,正处于⾼速迭代中. 甚⾄在Alibaba的开源组件还没有织⼊
SpringCloud⽣态之前, 就已经在各⼤公司⼴泛使⽤了.

Spring Cloud 实现对比

SpringCloud官方 Spring Cloud Netflix Spring Cloud Alibaba
服务注册/发现 Eureka Eureka Nacos
服务调⽤ OpenFeign Feign Dubbo
配置中⼼ SpringCloudConfig Archaius Nacos
服务网关 SpringCloudGateway Zuul SpringCloudGateway
负载均衡 SpringCloudLoadBalance Ritton Dubbo

3.总结

通过上面的文章学习,现在可能对于SpringCloud的概念和用法还会有点模糊,我们这个系列的下一篇文章我们就以实现一个电商平台为例(功能很简单的)去详细讲解,微服务架构开发到底是长什么样子的,如果有什么关于文章的问题欢迎到评论区进行留言哦

相关推荐
南玖yy26 分钟前
深入理解 x86 汇编中的符号扩展指令:从 CBW 到 CDQ 的全解析
开发语言·汇编·arm开发·后端·架构·策略模式
九卷1 小时前
微服务架构学习与思考(16):SOA架构与微服务架构对比分析?它们之间区别是什么?
微服务·微服务架构·soa
江梦寻2 小时前
软件工程教学评价
开发语言·后端·macos·架构·github·软件工程
美好的事情能不能发生在我身上2 小时前
苍穹外卖Day11代码解析以及深入思考
java·spring boot·后端·spring·架构
运维老司机2 小时前
Redis 安装实践:基于鲲鹏 ARM 架构 Ubuntu 环境
arm开发·redis·架构
shangjg33 小时前
Eureka 心跳续约机制
java·分布式·spring cloud·eureka
曼岛_4 小时前
[架构之美]深入优化Spring Boot WebFlux应用
spring boot·后端·架构
雨果talk4 小时前
【一文看懂Spring循环依赖】Spring循环依赖:从陷阱破局到架构涅槃
java·spring boot·后端·spring·架构
williamdsy4 小时前
【WebSocket】WebSocket架构重构:从分散管理到统一连接的实战经验
websocket·重构·架构·实战·统一管理
星垣矩阵架构师4 小时前
架构设计之存储高性能——非关系型数据库(NoSQL)
数据库·架构·nosql