分布式微服务相关概念【分布式微服务笔记01】

cnblogs 2024-07-16 15:39:00 阅读 98

分布式微服务相关概念【分布式微服务笔记01】

什么是SpingCloud&SpringCloudAlibaba?

  1. SpingCloud 和 SpringCloudAlibaba 是一套标准化的微服务解决方案
  2. 微服务可以根据业务不同,将一个大项目拆解成不同的服务(搜索服务/网关服务/配置服务/存储服务/发现服务......)
  3. 各个服务通过分布式方式进行工作,从而可以高效、快速、稳定的完成复杂的功能

微服务的必要性以及演变过程:

  1. 在高并发时,要解决服务熔断降级问题,保证系统的高可用性 ------引出------熔断降级模块
  2. 在服务器使用集群时,要解决负载均衡问题 ------引出------负载均衡模块
  3. 在复杂的网络情况下,要保证数据存储的稳定性和一致性 ------引出------数据存储模块
  4. 提供网关服务 ------引出------网关模块
  5. 由于每家公司都是自己开发的模块用的不一样,最终Spring社区整合了优质组件【NetFlix + Alibaba + 自己开发】统一起来
  6. 熔断降级模块【Sentinel】
  7. 服务发现和注册【Nacos】
  8. 负载均衡【Ribbon】
  9. 网管组件【Gateway】

系统架构演变过程

↓单体架构

SpringMVC 和 SpringBoot 类似的单个应用服务器+数据库服务器

↓动静分离架构【静态缓存 + 文件存储】

动静分离:加上了Nginx服务器来判断请求的资源是动态还是静态的,动态放行,静态就让Nginx请求文件服务器直接返回,从而减轻应用服务器的压力

静态缓存:加入缓存产品,放入缓存服务器,不会直接去DB操作,从而减少对数据库服务器的压力

↓分布式事务【业务拆分+负载均衡】

业务拆分:将应用服务器拆分为多个应用服务器

负载均衡:Nginx需要进行负载均衡,均衡的分配给服务器

数据库主从分离:数据库分为一个主数据库和多个从数据库,主服务器对业务修改,从服务器对业务分别查询

↓微服务架构【SpringCloud】

SpringCloud介绍

  1. SpringCloud 来源于Spring, 是更高层次的、架构视角的综合性大型项目, 目标旨在构建一套标准化的微服务解决方案, 让架构师在使用微服务理念构建系统的时, 面对各环节的问题都可以找到相应的组件来处理
  2. Spring Cloud 是Spring 社区为微服务架构提供的一个"全家桶" 套餐。套餐中各个组件之间的配合, 可以减少在组件的选型和整合上花费的精力,可以快速构建起基础的微服务架构系统,是微服务架构的最佳落地方案
  3. Spirng Cloud 天然支持Spring Boot(有版本对应要求),使用门槛较低
  4. 解决与分布式系统相关的复杂性– 网络问题,延迟开销,带宽问题,安全问题
  5. 处理服务发现的能力– 服务发现允许集群中的进程和服务找到彼此并进行通信
  6. 解决冗余问题– 冗余问题经常发生在分布式系统中
  7. 解决负载平衡– 改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布

SpringCloud核心组件

SpringCloud

  1. Spring Cloud 是微服务的落地
  2. Spring Cloud 体现了微服务的弹性设计
  3. 微服务的工作方式一般是基于分布式的.
  4. Spring Cloud 仍然是Spring 家族一员,可以解决微服务的分布式工作方式带来的各种问

  5. Spring Cloud 提供很多组件,比如服务发现, 负载均衡, 链路中断, 分布式追踪和监控,

    甚至提供API gateway 功能.

SpringCloud和SpringBoot版本的对应

SpringCloud组件选型

  1. 服务注册中心【Erueka(现在使用较少了)、Nacos(主流)、Zookeeper、Consul】
  2. 服务负载均衡【Ribbon、LoadBalancer】
  3. 服务熔断降级【Hystrix(现在使用较少了)、Sentinel(主流)】
  4. 服务调用 【Feign(现在使用较少了)、Open Feign(主流)】
  5. 服务网关 【Zuul(现在使用较少了)、GateWay(主流)】
  6. 服务配置 【Config、Nacos(推荐)】
  7. 服务总线 【Bus、Nacos(推荐)】

SpringCloud Alibaba 基本介绍

● Spring Cloud 原生组件的几大痛点

  1. Spring Cloud 部分组件停止维护和更新, 给开发带来不便
  2. Spring Cloud 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定

  3. Spring Cloud 配置复杂,难以上手

● Spring Cloud Alibaba 的优势

  1. 阿里使用过的组件经历了考验[高并发,高性能,高可用],性能强悍,设计合理,现在开源出来供大家使用
  2. 搭配完善的可视化界面, 给开发运维带来极大的便利搭建简单,学习曲线低

● 分布式微服务技术选型建议

  1. Spring Cloud Alibaba 组件为主、
  2. Spring Cloud 为辅, 比如(SpringCloud- Ribbon∶ 负载均衡、SpringCloud-OpenFeign∶ 调用远程服务、SpringCloud-Gateway∶ API 网关、SpringCloud-Sleuth∶ 调用链监控等) 还是非常不错的.

微服务基础环境搭建

创建父项目【去管理多个子模块/微服务模块】【编码设置/jdk设置/删src/配置pom.xml】

dependencyManagement 说明

  1. Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常在项目packaging 为POM, 中使用dependencvManadement 元素。
  2. 使用pom.xml 中的dependencyManagement 元素能让所有在子项目中只引用一个依赖, Maven 会沿着父子层次向上走, 直到找到一个拥有
  3. dependencyManagement 元素的项目, 然后它就会使用这个dependencyManagement 元素中指定的版本号。
  4. 好处∶如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,当升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要分别在子项目的修改;另外如果某个子项目需要另外的一个版本,只需要声明version 就可。
  5. dependencyManagement 里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
  6. 如果不在子项目中声明依赖,是不会从父项目中继承下来的; 只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version 和scope 都读取自父pom
  7. 如果子项目中指定了版本号,那么会使用子项目中指定的jar 版本

org.springframework.boot

spring-boot-dependencies

2.2.2.RELEASE

pom

import

<code> <dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>Hoxton.SR1</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-alibaba-dependencies</artifactId>

<version>2.1.0.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

RestTemplate

基本介绍

  1. RestTemplate 是Spring 提供的用于访问Rest 服务的模板类
  2. RestTemplate 提供了多种便捷访问远程Http 服务的方法【访问接口/方法】
  3. 通过RestTemplate, 我们可以发出http 请求(支持Restful 风格), 去调用Controller 提供的API 接口, 就像我们使用浏览器发出http 请求,调用该API 接口一样.

//配置注入 RestTemplate

@Configuration

public class CustomizationBean {

@LoadBalanced //赋予 restTemplate 负载均衡 的能力

@Bean

public RestTemplate getRestTemplate() {

return new RestTemplate();

}

}

本文学习内容来自韩顺平老师的课程

仅供个人参考学习



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。