分布式微服务相关概念【分布式微服务笔记01】
分布式微服务相关概念【分布式微服务笔记01】
什么是SpingCloud&SpringCloudAlibaba?
- SpingCloud 和 SpringCloudAlibaba 是一套标准化的微服务解决方案
- 微服务可以根据业务不同,将一个大项目拆解成不同的服务(搜索服务/网关服务/配置服务/存储服务/发现服务......)
- 各个服务通过分布式方式进行工作,从而可以高效、快速、稳定的完成复杂的功能
微服务的必要性以及演变过程:
- 在高并发时,要解决服务熔断降级问题,保证系统的高可用性 ------引出------熔断降级模块
- 在服务器使用集群时,要解决负载均衡问题 ------引出------负载均衡模块
- 在复杂的网络情况下,要保证数据存储的稳定性和一致性 ------引出------数据存储模块
- 提供网关服务 ------引出------网关模块
- 由于每家公司都是自己开发的模块用的不一样,最终Spring社区整合了优质组件【NetFlix + Alibaba + 自己开发】统一起来
- 熔断降级模块【Sentinel】
- 服务发现和注册【Nacos】
- 负载均衡【Ribbon】
- 网管组件【Gateway】
系统架构演变过程
↓单体架构
SpringMVC 和 SpringBoot 类似的单个应用服务器+数据库服务器
↓动静分离架构【静态缓存 + 文件存储】
动静分离:加上了Nginx服务器来判断请求的资源是动态还是静态的,动态放行,静态就让Nginx请求文件服务器直接返回,从而减轻应用服务器的压力
静态缓存:加入缓存产品,放入缓存服务器,不会直接去DB操作,从而减少对数据库服务器的压力
↓分布式事务【业务拆分+负载均衡】
业务拆分:将应用服务器拆分为多个应用服务器
负载均衡:Nginx需要进行负载均衡,均衡的分配给服务器
数据库主从分离:数据库分为一个主数据库和多个从数据库,主服务器对业务修改,从服务器对业务分别查询
↓微服务架构【SpringCloud】
SpringCloud介绍
- SpringCloud 来源于Spring, 是更高层次的、架构视角的综合性大型项目, 目标旨在构建一套标准化的微服务解决方案, 让架构师在使用微服务理念构建系统的时, 面对各环节的问题都可以找到相应的组件来处理
- Spring Cloud 是Spring 社区为微服务架构提供的一个"全家桶" 套餐。套餐中各个组件之间的配合, 可以减少在组件的选型和整合上花费的精力,可以快速构建起基础的微服务架构系统,是微服务架构的最佳落地方案
- Spirng Cloud 天然支持Spring Boot(有版本对应要求),使用门槛较低
- 解决与分布式系统相关的复杂性– 网络问题,延迟开销,带宽问题,安全问题
- 处理服务发现的能力– 服务发现允许集群中的进程和服务找到彼此并进行通信
- 解决冗余问题– 冗余问题经常发生在分布式系统中
- 解决负载平衡– 改进跨多个计算资源(例如计算机集群,网络链接,中央处理单元)的工作负载分布
SpringCloud核心组件
SpringCloud
- Spring Cloud 是微服务的落地
- Spring Cloud 体现了微服务的弹性设计
- 微服务的工作方式一般是基于分布式的.
- Spring Cloud 仍然是Spring 家族一员,可以解决微服务的分布式工作方式带来的各种问
题 - Spring Cloud 提供很多组件,比如服务发现, 负载均衡, 链路中断, 分布式追踪和监控,
甚至提供API gateway 功能.
SpringCloud和SpringBoot版本的对应
SpringCloud组件选型
- 服务注册中心【Erueka(现在使用较少了)、Nacos(主流)、Zookeeper、Consul】
- 服务负载均衡【Ribbon、LoadBalancer】
- 服务熔断降级【Hystrix(现在使用较少了)、Sentinel(主流)】
- 服务调用 【Feign(现在使用较少了)、Open Feign(主流)】
- 服务网关 【Zuul(现在使用较少了)、GateWay(主流)】
- 服务配置 【Config、Nacos(推荐)】
- 服务总线 【Bus、Nacos(推荐)】
SpringCloud Alibaba 基本介绍
● Spring Cloud 原生组件的几大痛点
- Spring Cloud 部分组件停止维护和更新, 给开发带来不便
- Spring Cloud 部分环境搭建复杂,没有完善的可视化界面,我们需要大量的二次开发和定
制 - Spring Cloud 配置复杂,难以上手
● Spring Cloud Alibaba 的优势
- 阿里使用过的组件经历了考验[高并发,高性能,高可用],性能强悍,设计合理,现在开源出来供大家使用
- 搭配完善的可视化界面, 给开发运维带来极大的便利搭建简单,学习曲线低
● 分布式微服务技术选型建议
- Spring Cloud Alibaba 组件为主、
- Spring Cloud 为辅, 比如(SpringCloud- Ribbon∶ 负载均衡、SpringCloud-OpenFeign∶ 调用远程服务、SpringCloud-Gateway∶ API 网关、SpringCloud-Sleuth∶ 调用链监控等) 还是非常不错的.
微服务基础环境搭建
创建父项目【去管理多个子模块/微服务模块】【编码设置/jdk设置/删src/配置pom.xml】
dependencyManagement 说明
- Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。通常在项目packaging 为POM, 中使用dependencvManadement 元素。
- 使用pom.xml 中的dependencyManagement 元素能让所有在子项目中只引用一个依赖, Maven 会沿着父子层次向上走, 直到找到一个拥有
- dependencyManagement 元素的项目, 然后它就会使用这个dependencyManagement 元素中指定的版本号。
- 好处∶如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,当升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要分别在子项目的修改;另外如果某个子项目需要另外的一个版本,只需要声明version 就可。
- dependencyManagement 里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
- 如果不在子项目中声明依赖,是不会从父项目中继承下来的; 只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version 和scope 都读取自父pom
- 如果子项目中指定了版本号,那么会使用子项目中指定的jar 版本
<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
基本介绍
- RestTemplate 是Spring 提供的用于访问Rest 服务的模板类
- RestTemplate 提供了多种便捷访问远程Http 服务的方法【访问接口/方法】
- 通过RestTemplate, 我们可以发出http 请求(支持Restful 风格), 去调用Controller 提供的API 接口, 就像我们使用浏览器发出http 请求,调用该API 接口一样.
//配置注入 RestTemplate
@Configuration
public class CustomizationBean {
@LoadBalanced //赋予 restTemplate 负载均衡 的能力
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
本文学习内容来自韩顺平老师的课程
仅供个人参考学习