1、Spring boot与Spring cloud 之间的关系

Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务 ​ Spring Cloud基于Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务消费,服务保护与熔断,网关,分布式调用追踪,分布式配置管理等。 ​ Spring Cloud是一个基于Spring Boot实现的云应用开发工具; ​ Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注全局的服务治理框架; ​ spring boot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置, ​ Spring Cloud很大的一部分是基于Spring boot来实现。

服务的框架那么多比如:dubbo、Kubernetes,为什么就要使用Spring Cloud的呢?

  • 产出于spring大家族,spring在企业级开发框架中无人能敌,来头很大,可以保证后续的更新、完善。比如dubbo现在就差不多死了(后面又卷土重来重新开始更新了)

  • 有spring Boot 这个独立干将可以省很多事,大大小小的活spring boot都搞的挺不错。(框架搭建快捷,几分钟就能跑起一个子项目,便于快捷开发。)

  • 作为一个微服务治理的大家伙,考虑的很全面,几乎服务治理的方方面面都考虑到了,方便开发开箱即用。(一站式构建微服务,对于中小型公司有利,不需要花费大量人力机器实现负载均衡,熔断等措施)

  • Spring Cloud 活跃度很高,教程很丰富,遇到问题很容易找到解决方案(源于Spring家族,用户基数大,技术分享帖也多)

  • 轻轻松松几行代码就完成了熔断、均衡负责、服务中心的各种平台功能(功能齐全)

Spring Cloud 也有一个缺点,只能使用Java开发,不适合小型独立的项目。

通俗来说,SpringCloud就像是一体机,拿回来就可以用,不需要开发人员去深入了解各个功能(服务注册(Eureka),API gateway(Zuul),熔断器(Hystrix)等等),但是缺点就是如果某些功能想用其他框架代替,开发者可能要去研究一下其他框架与Spring Could 的整合(DIY 组装电脑),需要了解其运行原理。

spring-cloud组件详解

  1. Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。

  2. Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

  3. Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

  4. Netflix Eureka:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障 转移。

  5. Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

  6. Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。

  7. Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调 机制等功能。

  8. Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS 云平台。

  9. Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。

  10. Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。

  11. Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。

  12. Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。

  13. Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。


项目架构的演变历程

 
 
 
 
 
集中式架构
垂直拆分
分布式服务
SOA面向服务架构
微服务架构
 

2. 微服务架构说明

目标:了解SOA与微服务架构的区别以及说出微服务架构的特点

SOA使用了ESB组件的面向服务架构:ESB自身实现复杂;应用服务粒度较大,所有服务之间的通信都经过ESB会降低通信速度;部署、测试ESB比较麻烦。

微服务架构:是一套使用小服务或者单一业务来开发单个应用的方式或途径。

微服务架构特点:

  • 单一职责

  • 服务粒度小

  • 面向服务(对外暴露REST api)

  • 服务之间相互独立

与使用ESB的SOA架构的区别:微服务架构没有使用ESB,有服务治理注册中心;业务粒度小。

spring cloud 概述

Eureka注册中心

Eureka的主要功能是进行服务管理,定期检查服务状态,返回服务地址列表。Eureka是服务注册中心,只做服务注册;自身并不提供服务也不消费服务。

  • 服务注册:在服务提供工程user-service上添加Eureka客户端依赖;自动将服务注册到EurekaServer服务地址列表。

    • 添加依赖;

    • 改造启动引导类;添加开启Eureka客户端发现的注解;

    • 修改配置文件;设置Eureka 服务地址

  • 服务发现:在服务消费工程consumer-demo上添加Eureka客户端依赖;可以使用工具类根据服务名称获取对应的服务地址列表。

    • 添加依赖;

    • 改造启动引导类;添加开启Eureka客户端发现的注解;

    • 修改配置文件;设置Eureka 服务地址;

    • 改造处理器类ConsumerController,可以使用工具类DiscoveryClient根据服务名称获取对应服务地址列表。

spring-cloud微服务总体流程

高可用配置**:

  • 将Eureka Server作为一个服务注册到其它Eureka Server,这样多个Eureka Server之间就能够互相发现对方,同步服务,实现Eureka Server集群。

负载均衡Ribbon

  1. 负载均衡是一个算法,可以通过该算法实现从地址列表中获取一个地址进行服务调用。

  2. Ribbon提供了轮询、随机两种负载均衡算法(默认是轮询)可以实现从地址列表中使用负载均衡算法获取地址进行服务调用。

  3. 在实例化RestTemplate的时候使用@LoadBalanced,服务地址直接可以使用服务名。

熔断器Hystrix

Hystrix是一个延迟和容错库,用于隔离访问远程服务,防止出现级联失败。

线程隔离

用户请求不直接访问服务,而是使用线程池中空闲的线程访问服务,加速失败判断时间。

服务降级

及时返回服务调用失败的结果,让线程不因为等待服务而阻塞。

Feign应用

自动根据参数拼接http请求地址。

Feign负载均衡及熔断

  • 负载均衡

  • 服务熔断

  • 请求压缩

  • 日志级别

Spring Cloud Gateway网关

Spring Cloud Gateway的核心就是一系列的过滤器,可以将客户端的请求转发到不同的微服务。主要作用:过滤和路由。

路由:

  1. 面向服务的路由;只需要在配置文件中指定路由路径类似: `lb://user-service;;lb 之后编写的服务名必须要在eureka中注册才能使用

  2. 客户端的请求地址与微服务的服务地址如果不一致的时候,可以通过配置路径过滤器实现路径前缀的添加和去除。

过滤器

  • 用法:在配置文件中指定要使用的过滤器名称;

  • 类型:局部、全局;

  • 使用场景:请求鉴权、异常处理、记录调用时长等。

Gateway网关一般直接给终端请求使用;Feign一般用在微服务之间调用。

Spring Cloud Config分布式配置中心

服务注册中心yml配置

 server:
  port: 12000
 spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/goheima/heima-config.git
   # 配置rabbitmq信息;如果是都与默认值一致则不需要配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
 eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
 management:
  endpoints:
    web:
      exposure:
         # 暴露触发消息总线的地址
        include: bus-refresh

spring cloud详解的更多相关文章

  1. spring cloud 详解

    https://www.cnblogs.com/qdhxhz/p/9601170.html SpringCloud(8)---zuul权限校验.接口限流 https://blog.csdn.net/c ...

  2. [推荐]spring cloud 详解

    http://blog.csdn.net/column/details/15197.html

  3. spring事务详解(二)简单样例

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  4. Spring配置文件详解 – applicationContext.xml文件路径

    Spring配置文件详解 – applicationContext.xml文件路径 Java编程                 spring的配置文件applicationContext.xml的默 ...

  5. spring配置文件详解--真的蛮详细

    spring配置文件详解--真的蛮详细   转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5的实现原理,感觉非常 ...

  6. 【转载】Spring AOP详解 、 JDK动态代理、CGLib动态代理

    Spring AOP详解 . JDK动态代理.CGLib动态代理  原文地址:https://www.cnblogs.com/kukudelaomao/p/5897893.html AOP是Aspec ...

  7. J2EE进阶(四)Spring配置文件详解

    J2EE进阶(四)Spring配置文件详解 前言 Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Java EE程 ...

  8. Spring RestTemplate详解

    Spring RestTemplate详解   1.什么是REST? REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格 ...

  9. spring事务详解(五)总结提高

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.概念 ...

随机推荐

  1. 为React绑定事件,并修改state中的值

    import React from 'react' export default class ClickS extends React.Component { constructor () { sup ...

  2. ansible start canal

    - name: Start canal server shell: source /etc/profile && nohup /opt/canal/bin/startup.sh

  3. pycharm的安装流程

    以windows版本举例: 1.首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#section=windows,下载P ...

  4. 扛把子组Scrum立会报告+燃尽图 07

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/8684 一.小组情况组长:迟俊文组员:宋晓丽 梁梦瑶 韩昊 刘信鹏队名:扛把 ...

  5. KubeCon 2019 北美会议完美落幕 | 云原生生态周报 Vol. 29

    作者 | 陈俊.张晓宇.徐迪 业界要闻 KubeCon 2019 北美会议召开 业界最隆重的盛会 KubeCon+CloudNativeCon 今年在圣地亚哥举办,超过 12000 名参会者以及 10 ...

  6. ctf中关于图片的隐写随笔(不全)

    ①JPG图片的结束符,十六进制常为FFD9 ②binwalk的原理是:检查常见的文件头信息,如果不符合,一定有隐藏信息.③JPG是有损压缩,PNG是无损压缩,BMP是不压缩. 隐写的基本原理:图片查看 ...

  7. 转帖:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    地址:http://www.ihref.com/read-16422.html

  8. 小白学 Python 爬虫(11):urllib 基础使用(一)

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  9. Integer的比较==和String的比较==总结

    一.序言 今天发现了一个很有趣的问题,在群里和朋友们讨论的也比较激烈,我现在给大家阐述一下问题. 二.发现问题 上代码... package com.hzwealth.test.question; p ...

  10. k8s 上使用 StatefulSet 部署 zookeeper 集群

    目录 StatefulSet 部署 zookeeper 集群 创建pv StatefulSet 测试 StatefulSet 部署 zookeeper 集群 参考 k8s官网zookeeper集群的部 ...