zoukankan      html  css  js  c++  java
  • netflix ribbon概述

    LB方案分类

    目前主流的LB方案可分成两类:一种是集中式LB, 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;另一种是进程内LB,将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于后者,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

    1. Ribbon是什么?它解决了什么问题?

    Ribbon is a client side IPC library that is battle-tested in cloud. It provides the following features

    • Load balancing
    • Fault tolerance
    • Multiple protocol (HTTP, TCP, UDP) support in an asynchronous and reactive model
    • Caching and batching

    2.它的模块有哪些?功能分别是什么?

    • ribbon: APIs that integrate load balancing, fault tolerance, caching/batching on top of other ribbon modules and Hystrix
    • ribbon-loadbalancer: Load balancer APIs that can be used independently or with other modules
    • ribbon-eureka: APIs using Eureka client to provide dynamic server list for cloud
    • ribbon-transport: Transport clients that support HTTP, TCP and UDP protocols using RxNetty with load balancing capability
    • ribbon-httpclient: REST client built on top of Apache HttpClient integrated with load balancers (deprecated and being replaced by ribbon module)
    • ribbon-example: Examples
    • ribbon-core: Client configuration APIs and other shared APIs

    3.哪些模块应用到生产了?

    • ribbon-core: deployed at scale in production
    • ribbon-eureka: deployed at scale in production
    • ribbon-evcache: not used
    • ribbon-guice: not used
    • ribbon-httpclient: we use everything not under com.netflix.http4.ssl. Instead, we use an internal solution developed by our cloud security team
    • ribbon-loadbalancer: deployed at scale in production
    • ribbon-test: this is just an internal integration test suite
    • ribbon-transport: not used
    • ribbon: not used

    4.主要类及其层次结构

    说明:

    DynamicServerListLoadBalancer:A LoadBalancer that has the capabilities to obtain the candidate list of servers using a dynamic source. i.e. The list of servers can potentially be changed at Runtime. It also contains facilities wherein the list of servers can be passed through a Filter criteria to filter out servers that do not meet the desired criteria.

    IClientConfig:Defines the client configuration used by various APIs to initialize clients or load balancers and for method execution. The default implementation is {@link DefaultClientConfigImpl}

    IRuleInterface that defines a "Rule" for a LoadBalancer. A Rule can be thought of as a Strategy for loadbalacing. Well known loadbalancing strategies include Round Robin, Response Time based etc.

    IPing:Interface that defines how we "ping" a server to check if its alive

    ServerList:Interface that defines the methods sed to obtain the List of Servers

    ServerListFilter:This interface allows for filtering the configured or dynamically obtained List of candidate servers with desirable characteristics.

    ServerListUpdater:strategy for {@link com.netflix.loadbalancer.DynamicServerListLoadBalancer} to use for different ways of doing dynamic server list updates

    与Eureka结合使用

    当与Eureka组合使用Ribbon时,

    server使用DiscoveryEnabledServer实现,Servers that were obtained via Discovery and hence contain meta data in the form of InstanceInfo。

    ServerList接口会使用DiscoveryEnabledNIWSServerList实现,The server list class that fetches the server information from Eureka client. ServerList is used by {@link DynamicServerListLoadBalancer} to get server list dynamically.

    ServerListFilter使用DefaultNIWSServerListFilter实现,The Default NIWS Filter - deals with filtering out servers based on the Zone affinity and other related properties。

    ServerListUpdater使用EurekaNotificationServerListUpdater,A server list updater for the {@link com.netflix.loadbalancer.DynamicServerListLoadBalancer} that utilizes eureka's event listener to trigger LB cache updates。封装了LegacyEurekaClientProvider:A legacy class to provide eurekaclient via static singletons。

    IPing使用NIWSDiscoveryPing实现,"Ping" Discovery Client,i.e. we dont do a real "ping". We just assume that the server is up if Discovery Client says so。

    参考文章

    【1】https://github.com/Netflix/ribbon

    【2】http://blog.csdn.net/neosmith/article/details/53967330

  • 相关阅读:
    iOS 之 创建分类
    iOS 之 动画
    iOS 倒出spa文件 打包
    js闭包
    wampserver配置多站点
    js重定向
    php obstart
    php保存远程图片
    php获取前天的昨天的日期
    weixin js接口
  • 原文地址:https://www.cnblogs.com/davidwang456/p/6433200.html
Copyright © 2011-2022 走看看