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

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

分布式微服务相关概念【分布式微服务笔记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 版本
                        org.springframework.boot            spring-boot-dependencies            2.2.2.RELEASE                        pom            import      
  1.     <dependency>
  2.         <groupId>org.springframework.cloud</groupId>
  3.         <artifactId>spring-cloud-dependencies</artifactId>
  4.         <version>Hoxton.SR1</version>
  5.         <type>pom</type>
  6.         <scope>import</scope>
  7.     </dependency>
  8.     <dependency>
  9.         <groupId>com.alibaba.cloud</groupId>
  10.         <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  11.         <version>2.1.0.RELEASE</version>
  12.         <type>pom</type>
  13.         <scope>import</scope>
  14.     </dependency>
  15. </dependencies>
复制代码
RestTemplate

基本介绍

  • RestTemplate 是Spring 提供的用于访问Rest 服务的模板类
  • RestTemplate 提供了多种便捷访问远程Http 服务的方法【访问接口/方法】
  • 通过RestTemplate, 我们可以发出http 请求(支持Restful 风格), 去调用Controller 提供的API 接口, 就像我们使用浏览器发出http 请求,调用该API 接口一样.
  1. //配置注入 RestTemplate
  2. @Configuration
  3. public class CustomizationBean {
  4.     @LoadBalanced //赋予 restTemplate 负载均衡 的能力
  5.     @Bean
  6.     public RestTemplate getRestTemplate() {
  7.         return new RestTemplate();
  8.     }
  9. }
复制代码
本文学习内容来自韩顺平老师的课程
仅供个人参考学习

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表