当前位置: 首页 > ds >正文

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

目录

1.认识微服务

1.1 单体架构

1.2 集群和分布式

1.3 微服务架构

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

1.5 小结

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

2.1 什么是Springcloud

2.2 SpringCloud版本

2.3 SpringCloud实现方案

Spring Cloud Netflix

Spring Cloud Alibaba

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 NetflixSpring Cloud Alibaba
服务注册/发现
EurekaEurekaNacos
服务调⽤
OpenFeignFeignDubbo
配置中⼼
SpringCloudConfigArchaiusNacos
服务网关SpringCloudGatewayZuulSpringCloudGateway
负载均衡SpringCloudLoadBalanceRittonDubbo

3.总结

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

http://www.xdnf.cn/news/13042.html

相关文章:

  • [深度学习]搭建开发平台及Tensor基础
  • 第23讲、Odoo18 二开常见陷阱
  • SQL导出Excel支持正则脱敏
  • AtCoder AT_abc409_c [ABC409C] Equilateral Triangle
  • Agent短期记忆的几种持久化存储方式
  • 时间序列预测的机器学习方法:从基础到实战
  • HTML前端开发:JavaScript 获取元素方法详解
  • 5. TypeScript 类型缩小
  • 【JVM】Java虚拟机(三)——类加载与类加载器
  • synchronized 关键字​​ 和 ​​Lock 接口(ReentrantLock)​​ 的详细说明及示例,涵盖核心概念、使用场景、代码实现及两者对比
  • 【Elasticsearch】映射:fielddata 详解
  • 【C++特殊工具与技术】优化内存分配(三):operator new函数和opertor delete函数
  • Linux多线程---线程池实现
  • STM32CubeMX-H7-20-ESP8266通信(下)-双单片机各控制一个ESP8266实现通信
  • LLMs 系列科普文(13)
  • 【Java实战】反射操作百倍性能优化
  • MyBatis原理剖析(一)
  • 人工智能学习08-类与对象
  • Python BeautifulSoup解析HTML获取图片URL并下载到本地
  • word中表格线粗细调整
  • 基于单片机的病房呼叫系统(源码+仿真)
  • Linux知识回顾总结----进程状态
  • 什么是ANSYS ACT? ACT又可以分为哪几类?
  • yaklang 中的各种 fuzztag 标签及其用法
  • 跟我学c++中级篇——多线程中的文件处理
  • Java网络编程:构建现代分布式应用的核心技术
  • day50 随机函数与广播机制
  • 基于Java Web的校园失物招领平台设计与实现
  • Redis——主从哨兵配置
  • ckeditor5的研究 (9):写一个自定义插件,包括自定义的toolbar图标、插入当前时间,并复用 CKEditor5 内置的 UI 组件