Spring Cloud Netflix OSS 学习总结

摘要: 本篇博客是使用SpringCloud框架开发微服务时候的一篇技术分享

正文:

Spring Cloud Netflix OSS

Spring Cloud Eureka

提供了对Netflix开源项目的集成,使我们可以以Spring Boot编程风格使用Netflix旗下相关框架,只需要在程序里添加注解,就可以使用成熟的Netflix组件(EurekaHystrixZuulRibbonSidecar)

Eureka客户端

  • Eureka注册服务
  • 高可用(HA)
    • 多注册中心主机 如果配置了多个Eureka注册服务器,那么默认情况只有一台可用的服务器,存在注册信息。如果Down掉了,则会选择下一台可用的Eureka服务器。
  • 配置
    • 应用间隔 registry-fetch-interval-seconds:30 去服务端获取注册信息的间隔时间
    • 同步间隔 instance-info-replication-interval-seconds:30 更新实例信息的变化到服务端的间隔时间

    参考链接

  • 注意
    • 端口不要使用0
    • Eureka缓存
      1. Eureka Server对注册列表进行缓存,默认时间为30s。
      2. Eureka Client对获取到的注册信息进行缓存,默认时间为30s。
      3. Ribbon会从上面提到的Eureka Client获取服务列表,将负载均衡后的结果缓存30s。

Eureka服务端

  • 注册中心对比

Feature

Consul

zookeeper

etcd

euerka

服务健康检查

服务状态,内存,硬盘等

(弱)长连接,keepalive

连接心跳

可配支持

多数据中心

支持

kv存储服务

支持

支持

支持

一致性

raft

paxos

raft

cap

ca

cp

cp

ap

使用接口(多语言能力)

支持http和dns

客户端

http/grpc

http(sidecar)

watch支持

全量/支持long polling

支持

支持 long polling

支持 long polling/大部分增量

自身监控

metrics

metrics

metrics

安全

acl /https

acl

https支持(弱)

spring cloud集成

已支持

已支持

已支持

已支持

  • CAP
    • C 数据一致性 一致性是指数据的原子性,在经典的数据库中通过事务来保障,事务完成时,无论成功或回滚,数据都会处于一致的状态,在分布式环境下,一致性是指多个节点数据是否一致 raft
    • A 服务可用性 服务一直保持可用的状态,当用户发出一个请求,服务能在一定的时间内返回结果
    • P 网络分区故障的容错性 在分布式应用中,可能因为一些分布式的原因导致系统无法运转,好的分区容忍性,使应用虽然是一个分布式系统,但是好像一个可以正常运转的整体
  • Consul
    • 服务发现
    • 健康检查
    • 键值存储
    • 多数据中心

    官网 Spring Cloud Consul 参考文档

  • Eureka Server高可用配置 12345678910111213141516171819---spring: profiles: peer1eureka: instance: hostname: peer1 client: serviceUrl: defaultZone: http://peer2/eureka/---spring: profiles: peer2eureka: instance: hostname: peer2 client: serviceUrl: defaultZone: http://peer1/eureka/ 参考文档

Spring Cloud Ribbon

主要功能是为REST客户端实现负载均衡

Netflix Ribbon

  • 依赖 1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId></dependency>
  • Ribbon 客户端 12345678910@SpringBootApplication@RibbonClients({ @RibbonClient(name = "service-provider")})public class Application { @Bean public RestTemplate restTemplate(){ return new RestTemplate(); }}
  • 配置 application.properties 12service-provider.ribbon.listOfServers = \ http://${host}:${port}

Netflix Ribbon 整合 Eureka

  • Ribbon 客户端 123456789101112@SpringBootApplication@RibbonClients({ @RibbonClient(name = "service-provider")})@EnableDiscoveryClientpublic class Application { @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); }}
  • 配置

Spring Cloud OpenFeign

  • 发展 9.0.0版本之后groupId io.netflix.feign更改为io.github.openfeign 对应依赖spring-cloud-starter-feign–>spring-cloud-starter-openfeign
  • 依赖 1234<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId></dependency>
  • feign 客户端 Application.java 123456789@SpringBootApplication@EnableFeignClientspublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }} feignClient.java 12345@FeignClient(value = "ms-business-task-engine-server")public interface ITaskEngineService { @RequestMapping(value = "/TaskQueue/addTaskToQueue",method = RequestMethod.POST) BaseResponse addTaskToQueue(@RequestBody List<SubTaskDTO> subTaskDTOList);}
  • 配置参考ribbon

Spring Cloud Hystrix

hystrix可帮助隔离每个服务,使单个服务的响应失败,避免微服务架构中因个别服务出现异常而引起级联故障蔓延。

特性

  • 断路器机制(断路–>半开–>恢复)
  • 资源隔离
  • 熔断降级

Hystrix Dashboard 监控

Spring Cloud Zuul

在没有网关的时候,随着系统不断庞大,运维维护越来越复杂,接口校验逻辑的冗余越来越多,校验逻辑升级更为复杂。

ZuulFilter

过滤器类型

  • pre 路由之前执行
  • route 路由请求时被调用
  • post 在route和error过滤器之后被过滤
  • error 处理请求发生错误时候被调用

过滤器执行顺序

  • order越小,优先级越高

过滤器是否被执行

  • shouldFilter = true(结合yaml控制开启)

过滤器具体逻辑

  • run()

Routes

路由规则与列表

Spring Cloud Sidecar

非JVM语言接入SpringCloud的两种方案

  • Sidecar
    • 必须去实现一个健康检查接口
    • 只有状态,服务治理只能从网关层控制流量
  • 自己实现注册中心API Http接口(推荐)

示例代码-github

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LanceToBigData

Flume(一)Flume原理解析

前言   最近有一点浮躁,遇到了很多不该发生在我身上的事情。没有,忘掉这些。好好的学习,才是正道! 一、Flume简介   flume 作为 cloudera ...

8485
来自专栏Danny的专栏

【EJB学习笔记】——EJB开发环境搭建(Eclipse集成JBoss)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

1423
来自专栏史上最简单的Spring Cloud教程

史上最简单的SpringCloud教程 | 第十篇: 高可用的服务注册中心

文章 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 介绍了服务注册与发现,其中服务注册中心Eureka Serv...

2317
来自专栏世界第一语言是java

springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

6053
来自专栏FreeBuf

如何防御“神器”Mimikatz窃取系统密码?

Mimikatz是一款能够从Windows中获取内存,并且获取明文密码和NTLM哈希值的神器,本文将介绍如何防御这款软件获取密码。 Mimikatz介绍 M...

2009
来自专栏蓝天

Zookeeper C++编程实战之主备切换

默认zookeeper日志输出到stderr, 可以调用zoo_set_log_stream(FILE*)设置输出到文件中 还可以调用zoo_...

973
来自专栏Core Net

Ios8之后, 定位的delegate不能触发的问题

2918
来自专栏bboysoul

体验一键php/java环境安装工具oneinstack

这个东西其实我很早之前就听说了,但是一直没有去尝试使用,我一直使用的是lnmp一键安装包,但是lnmp一键安装包是安装java环境的,oneinstack更强大...

2252
来自专栏编程微刊

vue踩坑-Error: listen EADDRNOTAVAIL 192.168.1.122:8081

每天上班,重启电脑,按照下面的步骤,打开vue的项目,开始编写代码,但是,今天一如往常一般操作: 1:cd /项目名称 下面就是运行项目了,cd /项目名称...

3913
来自专栏Flutter入门到实战

优化Android Studio/Gradle构建

    经过测试,编译速度有很大提升,比较大的项目从之前的5-8分钟可以减少到1-2分钟。

1471

扫码关注云+社区

领取腾讯云代金券