springcloud

1.子系统的分布式部署和集群部署
  集群:同一个业务部署到多个服务器上,也叫水平部署
  分布式:一个业务拆分为多个子业务,部署在不同的服务器上(垂直的)

2.引入SOA架构:
  SOA 代表面向服务的软件架构,将应用程序根据不同的职责划分为不同的模块,
  不同的模块之间通过特定的协议和接口进行交互。这样使整个系统切分成很多单个组件服务来完成请求。

3.微服务架构的引入:
  从本质上还是SOA架构(面向服务架构),但它不绑定技术,在一个微服务系统中可以有java,python等语言编写的子服务一同构成
  是靠restful架构风格统一构成的系统,扩展性强,更加强调服务个体的独立性,拆分粒度更小.

4.java语言相关的微服务架构:
  Spring Cloud(一个系列框架的合集,基于HTTP的RETS服务构建服务体系,它能够帮我们构建一套完整的微服务架构技术生态链。)
  Dubbo:由阿里巴巴开源的分布式服务化治理框架,通过RPC请求方式访问.
  Dropwizard:将java生态系统中的各个问题域里最好的组建集成于一身,能够快速打造一个Rest风格的后台,还可以整合Dropwizard核心以外的项目
  Akka:Akka是一个用Scala编写的库,可以用在有简化编写容错,高可伸缩性的java和Scala的Actor模型,使用Akka能够实现微服务集群.

5.微服务的通信机制
  微服务之间通过一些轻量级的通信机制进行通信,例如 REST API 或者 RPC。

5.SpringCloud简介:
  Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙
地简化了分布式系统基础设施的开发,服务发现注册、配置中心、消息总线、负载
均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起
实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配
置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开
发工具包。

6.SpringCloud的组成:
  1)Netflix Eureka:服务中心,云端服务发现,一个基于REST的服务,用于定位服务,
    以实现云端的负载均衡和中间层服务器的故障转移.springcloud中最重要的组件
  2)Netflix Hystrix:熔断器,容错管理工具,旨在通过控制服务和第三方库的节点,
    从而对延迟和故障提供更强大的容错能力
  3)Netflix Zuul:边缘服务工具,提供动态路由,监控,弹性,安全等的边缘服务.
  4)Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性,
    线程安全配置操作,轮询框架,回调机制等功能
  5)SpringCloudConfig:配置管理开发工具包,可以让你把配置放到远程服务器
    目前支持本地存储,Git以及Subversion.
  6)SpringCloudBus:事件,消息总线,用于集群(例如:配置变化事件)中传播状态变化,
    可与SpringCloudConfig联合实现热部署.(比如更改代码时,检测到代码改变,自动打包重新部署)
  7)SpringCloudDataFlow:大数据操作工具,通过命令行方式操作数据流
  8)SpringCloudSecurity:安全工具包,为你的应用程序添加安全控制
  9)SpringCloudZookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现
  10)SpringCloudStream:数据流操作开发包,封装了与Redis,Rabbit,Kafka等发送接收消息
  11)SpringCloudCluster:提供选举,集群的状态一致性,全局锁,tokens等常见状态模式的抽象和实现
  12)SpringCloudTask:主要解决短命微服务的任务管理和任务调度的工作
  13)SpringCloudstarter:SpringBoot的启动项目,为SpringCloud提供开箱即用的依赖管理

7.注册中心Eureka(也称为服务中心,管理各种服务的注册,发现,熔断,负载,降级等.
  Eureka是Netflix开源的一款提供注册和发现的产品,它提供了完整的ServiceRegistry和ServiceDiscovery实现,
也是springcloud体系中最重要最核心的组件之一

Eureka 由两个组件组成:Eureka 服务器和 Eureka 客户端。Eureka 服务器提供微服
务的注册功能和发现功能。Eureka 客户端是一个 java 客户端(微服务项目),用来简化与
服务器的交互。

8.Eureka的基本架构中,由3个角色组成:
1)Eureka Server
  提供服务注册和发现
2)Service Provider
  服务提供方,将自身服务注册到Eureka,从而使服务消费方能够找到
3)Service Consumer
  服务消费方,从Eureka获取注册服务列表,从而能够消费服务

9.Eureka Server(服务中心)的搭建:
1)pom文件:
  加入spring-cloud-starter,spring-cloud-starter-eureka-server两个依赖包
2)在springboot的启动类中添加注解@EnableEurekaServer
  此注解:表示该项目启用Eureka服务器
3)修改application.properties配置文件:
  1)spring.application.name 指定当前项目的名称,如果当前项目要在服务中心注册的
    话,这个名字就该项目在服务中心注册后的名称。
  2)server.port:指定项目启动后的服务器端口号
  3)eureka.client.register-with-eureka表示是否将自己注册到EurekaServer,默认为true,但此项目为EurekaServer,所以为false
  4)eureka.client.fetch-registry 表示是否从 Eureka Server 中获取注册的其他服务信息,默认为true,同上
  5)eureka.client.serviceUrl.defaultZone 指定 eureka 客户端和 eureka 服务器交互的地址,默认为http://localhost:8761/eureka/
  注意:因为服务注册中心会默认将自己注册,所以要默认行为改为false
4)运行:
  1)maven插件:spring-boot:run
5)补充:
  1)给Eureka Server添加用户验证:
    1)pom中添加spring-boot-starter-security依赖
    2)application.properties中加入
      security.user.name=用户名
      security.user.password=密码
    3)注意:给服务器这么配置的话,客户端进行注册的时候也要进行认证.
  2)服务中心进行集群部署
    1)项目名称设为一样
    2)每个服务中心的端口设置为不同
    3)将自己注册进其他的服务中心中
    4)注意:
      1)生成了注册中心为特定名称的有多个节点提供服务,到底是哪个节点提供具体的服务,服务中心会自动做负载均衡.
      2)微服务注册到服务中心的名字默认为 主机名:服务名:端口号 比如:wood:springcloud-eureka:8001

10.Eureka Client:服务提供者
1)pom文件:
  添加spring-cloud-starter-eureka依赖
2)在application.properties中指定Eureka Server的地址
  eureka.client.serviceUrl.defaultZone=http://admin:admin@localhost:8001/eureka/
  中admin代表服务中心的验证用户名和密码
3)springboot的启动类:加入新的注解@EnableDiscoveryClient:代表可以不同服务中心中获取注册的其他服务信息
  @EnableEurekaClient注解代表服务中心一定是Eureka

11.微服务的调用方式:
1)Ribbon+RestTemplate
1)Ribbon 是什么
  Ribbon 是 Netflix 发布的开源项目,主要功能是提供客户端的软件负载均衡算法
  就是在配置文件中列出 Load Balancer(简称 LB)后面所有的机器,Ribbon 会自动的帮助你基于某种规则(如简单轮询,
  随即连接等)去连接这些机器。我们也很容易使用 Ribbon 实现自定义的负载均衡算法。
2)主流LB分为两类
  1)集中式LB:通过独立的LB设施,由该设施负责把访问请求通过某种策略转发至服务的提供方
  2)进程内LB:将LB逻辑集成到消费方,消费方从注册中心选择一个合适的服务器
  3)Ribbon就是一个类库,集成于消费方进程
3)Ribbon提供的负载均衡策略:
  1)简单轮询负载均衡(RoundRobin):以轮询的方式依次将请求调度不同的服务器
  2)随机负载均衡 (Random):随机选择状态为 UP 的 Server。
  3)加权响应时间负载均衡 (WeightedResponseTime):根据响应的时间来选,时间越长,weight越小,被选中的可能性越低
  4)区域感知轮询负载均衡(ZoneAvoidanceRule):复合判断 server 所在区域性能和 server 的可用性选择 server。
4)RestTemplate 是什么?
传统情况下在 java 代码里访问 restful 服务,一般使用 Apache 的 HttpClient。不过此种方法使用起来太过繁琐。spring 提供了一种简单便捷的模板类来进行操作,
这就是 RestTemplate。(微服务之间的调用其实就是 RestAPI 的调用)。就是对rest风格的封装
5)具体操作步聚
  1)引入了spring-cloud-starter-eureka依赖,里面就包含了ribbon的依赖
  2)application.properties跟服务提供方差不多
  3)在SpringBoot的启动类中,配置RestTemplate
    @Bean //让spring扫描进容器
    @LoadBalanced //将来在使用 RestTemplate 对象调用其他微服务的时候,可以使用微服务在服务中心的 ServiceID 来调用,并且自动做负载均衡
    public RestTemplate restTemplate(){
      return new RestTemplate();
    }
  4)然后在写服务时,将RestTemplate从spring容器中注入进来,然后就可以使用rest风格的mapping了
  然后返回restTemplete.getForObject("http://SPRINGCLOUDPRODUCER/hello?name=tom",String.class);
  这样直接调用的服务提供方在服务中心的ServiceId,而不用关心在哪个主机上部署运行了,起到了集群(水平)部署且会自动做负载均衡的作用.

2)Feign
  1)Feign 是什么?
    Feign 是一个声明式 Web Service 客户端。使用 Feign 能让编写 Web Service 客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS 标准的注解。Feign 也支持可拔插式的编码器和解码器。Spring Cloud对 Feign 进行了封装,使其支持了 Spring MVC 的注解。Feign 默认还集成了Ribbon,并可以和 Eureka 结合,默认实现了负载均衡的效果。

  2)具体操作步聚
    1)pom文件
      1)新增spring-cloud-starter-eureka依赖
      2)新增spring-cloud-starter-feign依赖
    2)application.properties配置文件不变,同上
    3)springboot启动类新增注解@EnableFeignClients,启用feign进行远程调用
    4)新增 Feign 注解的接口,进行远程服务的映射,目的是为了更方便的调用
      //利用Feign提供的服务,在接口中映射其他微服务中的具体服务
      @FeignClient(name='springcloud-producer')
      public Interface HelloRemote{
      @GetMapping("/hello")
        public String helloR...
        }
    5)重写服务,在controller中写服务

12.熔断器Hystrix
1)熔断器的由来:"雪崩效应"
  雪崩效应:在微服务架构中通常会有多个服务之间进行相互调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种情况被服务称为"雪崩效应"
2)熔断器是什么?
  熔断器使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。熔断器就是保护服
务高可用的最后一道防线。(即使服务不可用了,也可以快速返回一个固定的值)
3)操作步聚:
  1)pom文件引入新的依赖:spring-cloud-starter-eureka,spring-cloud-starter-netflix-hystrix两个依赖
  2)application.properties配置文件不变
  3)Springboot 启动类中加入注解@EnableHystrix,表示开始熔断器
  4)接口中注释@HystrixCommand(fallbackMethod="consumerError")表示对当前的 consumer方法设置熔断器,
当这个方法不可用的时候,会启动熔断器并调用指定方consumerError 快速返回结果

13.熔断监控Hystrix Dashboard(作为熔断器的数据监控和友好的图形化界面)
14.熔断器聚合监控 Hystrix Turbine
  在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix 提供了一个开源项目(Turbine)来提供把多个hystrix.stream 的内容聚合为一个数据源供 Dashboard 展示。
15.路由网关 zuul
16.配置中心 config

原文地址:https://www.cnblogs.com/nyhhd/p/12547188.html