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

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

相关文章:

  • BeckHoff_FB --> SET_SNB 功能块
  • Halcon案例(三):C#联合Halcon识别排线
  • 【RAG召回】bge实现向量相似度索引
  • 四.抽象工厂模式
  • 如何在Spring Boot中使用注解动态切换实现
  • Kubernetes 节点资源驱逐策略详解:evictionHard 与 evictionSoft
  • remote display server is not supported (e.g. Wayland)
  • Vue中虚拟DOM的原理与作用
  • 【RTP】Intra-Refresh模式下的 H.264 输出,RTP打包的方式和普通 H.264 流并没有本质区别
  • python批量将文件夹下的excel转word文件
  • 海思Hi3798MV310_V39_HMS DDR3_安卓9.0_外贸盒update升级包
  • 深入了解NIO的优化实现原理
  • Linux运维新人自用笔记(乌班图apt命令和dpkg命令、两系统指令区别,rpm解决路径依赖、免安装配置java环境)
  • 发送文件脚本源码版本
  • 【Go语言基础【17】】切片:一种动态数组
  • 漏洞检测方案如何选工具?开源与商业工具适用环境大不同
  • Ubuntu系统用户基本管理
  • 栈和队列的奇妙冒险:用栈实现队列
  • (每日一道算法题)验证二叉搜索树
  • Jinja2深度解析与应用指南
  • 学做古典家具网站/百度快照优化培训班
  • 做网站哪家公司比较好而且不贵/苏州seo关键词优化方法
  • 建设网站以后怎么让百度收录呢/工作手机
  • 给客户做网站建设方案/百度网址大全旧版
  • 做网站怎么收费/seo学院
  • 武汉建设信息网站/宁波seo排名公司