zoukankan      html  css  js  c++  java
  • SpringCloud 基础

     

    SpringCloud是一个微服务框架,用于搭建分布式应用。

    SpringCloud是在SpringBoot的基础上,集成了多种技术,是一系列技术的集合,为微服务提供了一站式解决方案。

    因为是建立在SpringBoot的基础上,所以具有SpringBoot的所有特点。

    SpringCloud的特点:

    • 约定优于配置
    • 开箱即用
    • 部署环境多样,可以部署到PC Server、Docker、云端。
    • 组件轻量级,功能全面
    • 选型中立,并不是一定要用自带的组件,因为有spring强大的整合能力,也可以使用其它组件,比如服务发现不一定要用自带的Eureka,也可以用Zookeeper,但SpringCloud对Eureka的支持最好。 

    SpringCloud的技术栈 | 组件 | 全家桶:

    • Eureka  服务发现
    • Ribbon  负载均衡器,分发负载
    • Feign  声明式服务调用
    • Hystrix  断路器,容错保护、熔断,保护自己、被调者
    • Zuul   网关(API Gateway),路由转发+过滤器
    • Config  配置中心,集中管理配置
    • Bus  总线
    • Sleuth+Zipkin  分布式链路追踪

    Eureka、Ribbon、Feign、Hystrix都是netflix的开源项目,SpringCloud都将它们集成进来了。

    SpringCloud的组件很多,以上只是常用的。

    网关:

    比如请求时/api/product/...就转发给产品服务处理,如果请求时/api/order/....就转发给订单服务处理,如果请求时/api/user...就转发给用户服务处理,这就是路由转发。

    如果多个服务都要做相同的请求过滤,比如验证权限、是否登录,不用写在多个服务中,抽出来在网关过滤请求。

    链路追踪:

    一次业务处理中,往往要调用多个服务,比如订单服务->商品服务->用户服务->积分服务,这就形成了一个链路,追踪链路分析调用情况、每个服务调用花费的时间、性能,方便后续优化。

    SpringCloud的版本

    其它框架的版本都是1.x,2.x这样命名走的,SpringCloud的版本是Axx、Bxx、Cxx这样命名走的。

    ga是稳定版;snapshot是正在开发的版本,不稳定。

      


     

    微服务使用服务治理组件:

    服务的各节点将节点信息(提供的服务、ip+port)注册到Eureka上,并通过心跳机制(ping,发送心跳包)维护服务注册表。

    所谓心跳,是指节点每几十秒就向服务发现组件发送一段消息,像心跳一样稳定、有规律,表示该节点还在工作(活着);如果一个节点连续几次都没发送心跳,心不跳了,说明这个节点挂了,Eureka会自动删除该节点的信息。

    服务消费者查询Eureka来获取(发现)该服务的所有提供者的信息。


    Eureka只是登记好服务节点的信息,并不知道要调用哪个节点来处理,还需要使用Ribbon来做负载均衡

    比如服务A的a1节点要调用服务C:

    (1)a1节点向Ribbon发送负载均衡请求

    (2)Ribbon查询Eureka,拿到提供服务C的所有节点的信息表,根据指定的算法(比如轮询、加权轮询、随机等)来确定要使用c1节点

    (3)Ribbon将c1节点的信息(ip)返回给a1节点

    (4)a1节点根据ip向c1节点发起请求,调用服务C


    feign

    feign用于向服务提供者传递大量参数,自带Ribbon负载均衡的功能。


    微服务容错

    1、雪崩效应

    服务往往存在嵌套调用,比如服务A调用服务B,服务B要调用服务C:

    服务A -> 服务B -> 服务C

    如果C出现什么问题,B一直阻塞着等C搞好;A一直阻塞着等B搞好,即雪崩效应。

    请求越积越多,负载越来越大,,最终导致服务A、B、C都不可用。

    2、容错

    容错:当依赖出现问题时,对系统的影响程度,影响大——容错低,影响小——容错高。

    提升微服务容错有3种方式:

    • 增加节点数量

    这是通用的。

    • 为请求设置超时

    多少秒内没有完成,就直接返回出错提示,这个请求就算处理完了,开始处理下一个请求。

    • 设置断路器

    对某个服务的请求,一段时间内,失败个数达到指定值或者失败率达到指定值,就会熔断链路,返回我们自定义的数据(比如错误提示、空值等)。

    熔断只是半熔断,断路器是半开状态,会放行一小部分对此服务的请求进行检测,如果请求成功率达到指定值,就认为此服务已被修复,会重新打开链路。

  • 相关阅读:
    用Instant client批量安装Oracle客户端安装配置
    Oracle case when 用法(转)
    C# 读写ini文件 【转】
    oracle数据库删除数据Delete语句和Truncate语句的对比
    C#使用instantclient连接 Oracle 10g (转)
    SQL Server CONVERT() 函数
    c#格式化数字(转)
    InstantClient安装使用 (转)
    C# 四个字节十六进制数和单精度浮点数之间的相互转化
    oracle case when的使用方法
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12294628.html
Copyright © 2011-2022 走看看