亚马逊提供了一个负载均衡工具 Elastic Load Balancer,但针对的是终端用户 Web 流量服务器,而 Eureka 针对的是中间层服务器的负载均衡。AWS 固有的环境,对 IP 地址、主机名等传统的负载均衡支持并不好,并且需要更加复杂的注册/退出机制。Eureka 填补了这一空白。本文在前边几篇博客的基础上,较为系统地介绍一下 Eureka。
        Eureka 是什么
        官方给出的具体定义是"Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.",翻译过来就是:"Eureka 是一个基于 REST 的服务,它主要是用于定位服务,以实现 AWS 云端的负载均衡和中间层服务器的故障转移"。
        Eureka VS ELB
        亚马逊 ELB 针对的是终端用户 Web 流量服务器,Eureka 针对的是中间层服务器。
        Why Eureka?
        AWS 对 IP 地址、主机名等传统的负载均衡支持并不好,并且需要更加复杂的注册/退出机制。AWS 并没有提供一个中间层负载均衡器,Eureka 填补了这一空白。
        Eureka 的适用场景

  • AWS 的环境下有一个中间层服务,但不想将其注册到 ELB,或者不想将其暴露给外部世界
  • 不需要 session 绑定机制,没有粘性会话和在外部缓存(例如 memcached)载入会话数据的需要
  • 自己实现 LB 算法

Eureka 体系架构
        Eureka 的架构图如下所示

从图中我们可以看出,Eureka 组件分为两部分:Eureka 服务器和 Eureka 客户端。而客户端又分为 Application Service 客户端和 Application Client 客户端两种。
        Eureka 的工作机制
        每个 region 都有自己的 Eureka 服务器集群,每个 zone 至少要有一个 Eureka 服务器以应对 zone 瘫痪。
        Application Service 在启动时注册到 Eureka 服务器,之后每 30 秒钟发送心跳以更新自身状态。如果该客户端没能发送心跳更新,它将在 90 秒之后被其注册的 Eureka 服务器剔除。来自任意 zone 的 Application Client 可以查看这些注册信息(每隔 30 秒查看一次)并依此定位自己的侍服 Application Service 实例,进而进行远程调用。
        Q:我的 Application Service 和 Application Client 之间通信会不会受到 Eureka 限制
        A:不会。Eureka 只是帮你找到该次侍服主机实例,并不对你的 Application Service 和 Client 之间的通信协议和方法进行约束。
        Q:看了这些感觉好抽象,有没有可以开始的 demo
        可以查看 Eureka 的 github 以寻求 demo。有些 feature(比如 Eureka 和 Ribbon 的集成)并没有提供 demo,但我们可以从 Eureka 的 github 提供的单元测试代码中获得一些启示。
        另外,笔者也整理了很多 demo,都是自己动手验证通过的,读者可以放心参考:

这些 demo 都看完,相信你玩转 Eureka 不在话下。如果还有啥不懂的,可以看 Eureka API。作者建议直接看 Eureka 源码,源码并不多,也就几千行的样子,而且里边注释的很详尽,相比之下,在线  API 有很多方法只提供了一个方法名,并没有详细说明。
        Eureka 部署的测试
        你可以自己写脚本,然后手工将集群节点宕机,以验证 Eureka 部署的弹性效果 - Eureka 使用 servo 来跟踪客户端和服务器端的性能,并进行监控和报警,这些数据可用于 JMX 注册也可以输出给亚马逊的云监控。当然你也可以使用 Netflix 的另一个开源工具 - SimianArmy,这只调皮的小猴子会故意将你的服务节点搞下线以验证你的 Eureka 部署对随机的 Application Service 宕机的处理的弹性。
        Q:有没有一个真实的应用案例
        接下来以一个真实生产环境下的场景,来看一下 Eureka 在实际当中的应用。
        以下是流媒体服务器 Wowza 直播的部署架构图:

        Wowza 服务器侍服外部网络直播流量,但它需要去 CAS 服务器验证用户,还需要去 Relay 服务器读取直播流。CAS 和 Relay 就是两个中间层服务,不需要直接暴露给外界。以下是它们之间的时序交互图:

        参考资料

转载博客:http://blog.csdn.net/defonds/article/details/38067867

云端中间层负载均衡工具 Eureka的更多相关文章

  1. Spring Cloud(Dalston.SR5)--Ribbon 中间层负载均衡

    Spring Cloud 集成了 Ribbon 并结合 Eureka 可以实现客户端的负载均衡,使用 @LoadBalanced 修饰的 RestTemplate 类拥有了负载均衡功能,在 Sprin ...

  2. Spring Cloud Eureka 分布式开发之服务注册中心、负载均衡、声明式服务调用实现

    介绍 本示例主要介绍 Spring Cloud 系列中的 Eureka,使你能快速上手负载均衡.声明式服务.服务注册中心等 Eureka Server Eureka 是 Netflix 的子模块,它是 ...

  3. 基于Spring cloud Ribbon和Eureka实现客户端负载均衡

    前言 本案例将基于Spring cloud Ribbon和Eureka实现客户端负载均衡,其中Ribbon用于实现客户端负载均衡,Eureka主要是用于服务注册及发现: 传统的服务端负载均衡 常见的服 ...

  4. spring-cloud-feign负载均衡组件

    Feign简介: Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便.它具有可插拔注释支持,包括Feign注解和JAX-RS注解.Feign还支持可插拔编码器 ...

  5. SpringCloud Netflix Ribbon(负载均衡)

    ⒈Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负 ...

  6. SpringCloud学习(4)——Ribbon负载均衡

    Ribbon概述 SpringCloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. 简单的说, Ribbon是Netflix发布的开源项目, 主要功能是提供客户端软 ...

  7. Ribbon负载均衡(四)

    一.Ribbon定义 spring cloud Ribbon是基于Netflix Ribbon实现的一套客户端,负载均衡工具 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端 ...

  8. Spring Cloud:使用Ribbon实现负载均衡详解(上)

    1. 什么是 Ribbon? Spring Cloud Ribbon 是一套实现客户端负载均衡的工具.注意是客户端,当然也有服务端的负载均衡工具,我们后面再介绍.可以认为 Ribbon 就是一个负载均 ...

  9. Spring Cloud 客服端负载均衡 Ribbon

    一.简介   Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署, ...

随机推荐

  1. HDUOJ---hello Kiki

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. 何时使用copy,strong,weak,assign关键字 定义属性

    现在我们看看iOS5中新的关键字strong, weak, unsafe_unretained. 可以与以前的关键字对应学习strong与retain类似,weak与unsafe_unretained ...

  3. IOS开发之瀑布流照片墙实现

    想必大家已经对互联网传统的照片布局方式司空见惯了,这种行列分明的布局虽然对用户来说简洁明了,但是长久的使用难免会产生审美疲劳.现在网上流行一种叫做“瀑布流”的照片布局样式,这种行与列参差不齐的状态着实 ...

  4. 【JAVA】Exception in thread "main" java.lang.NoClassDefFoundError

    java新手经常会遇到这个问题. 环境变量配置正确,eclipse下可以正常编译运行,命令行下可以使用javac生成.class文件,但是在当前目录运行的时候提示: 分析报错,可以发现系统从Pack文 ...

  5. RabbitMQ消息队列(三):任务分发机制[转]

    在上篇文章中,我们解决了从发送端(Producer)向接收端(Consumer)发送“Hello World”的问题.在实际的应用场景中,这是远远不够的.从本篇文章开始,我们将结合更加实际的应用场景来 ...

  6. Eclipse智能提示设置

    最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...

  7. gulp#4.0 Did you forget to signal async completion?

    异常截图 解决方案: https://stackoverflow.com/questions/36897877/gulp-error-the-following-tasks-did-not-compl ...

  8. mysql 再查询结果的基础上查询(子查询)

    SELECT A.wx_name, A.wx_litpic, B . * FROM ( SELECT uid, COUNT( * ) AS daticishu FROM statements , ) ...

  9. django 模板使用静态文件

    1.新建项目 2.新建app,并在install_app中添加该app 3.和app文件夹并列新建static.和TEMPLATES  文件夹,分别放静态文件和模板 4.setting.py中设置 T ...

  10. scratch资源

    火柴人工作室:https://scratch.mit.edu/studios/170355/ 像素工作室:https://scratch.mit.edu/studios/3667398/ snap官网 ...