众所周知 ribbon 是一款客户端负载均衡软件,今天我添加了一个修饰词, 基于统计学的, 因为 ServerListFilter 和 IRule.choose 都是基于 ServerStats 和ZoneSnapshot等统计信息做出决策的。
LoadBalancerStats 作为存储仓库 ,维护了两个Map
volatile Map<String, ZoneStats> zoneStatsMap = new ConcurrentHashMap<String, ZoneStats>(); 每个zone的统计信息 volatile Map<String, List<? extends Server>> upServerListZoneMap = new ConcurrentHashMap<String, List<? extends Server>>(); 每个zone的up状态的server。
内存缓存。。。 将所有ServerStats存于其中。 LocalLoadingCache
private final LoadingCache<Server, ServerStats> serverStatsCache = CacheBuilder.newBuilder() .expireAfterAccess(SERVERSTATS_EXPIRE_MINUTES.get(), TimeUnit.MINUTES) .removalListener(new RemovalListener<Server, ServerStats>() { @Override public void onRemoval(RemovalNotification<Server, ServerStats> notification) { notification.getValue().close(); } }) .build( new CacheLoader<Server, ServerStats>() { public ServerStats load(Server server) { return createServerStats(server); } });
来源:oschina
链接:https://my.oschina.net/qidis/blog/4456524