加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用iControl获取F5负载均衡配置信息(二)

(2011-12-07 10:05:22)
标签:

杂谈

 

作者:杨洋

在"第一版"中, 由于SOAP请求次数过多, 导致获取配置信息的耗时较长, 获取一台有400组配置信息的设备耗时在5分钟左右.

 

后来经过研究, 在调用iControl API的时候, 传入List就可以通过一次SOAP请求, 批量获取数据. 流程如下:

 

1.调用LocalLB.VirtualServer下的get_list方法, 获取当前F5的VirtualServerList.

 

2.通过VirtualServerList调用LocalLB.VirtualServer下的get_destination方法, 取出结果中的Address和Port, 与VirtualServerList组成key/value格式的VirtualAddressList.

 

3.通过VirtualServerList调用LocalLB.VirtualServer下的get_object_status方法, 取出结果中的Status, 与VirtualServerList组成key/value格式的VirtualServerStatusList.

 

4.通过VirtualServerList调用LocalLB.VirtualServer下的get_default_pool_name方法, 取出结果中的PoolName, 与VirtualServerList组成key/value格式的DefaultPoolList.

 

5.通过VirtualServerList调用LocalLB.VirtualServer下的get_rule方法, 取出结果中的RuleName, 与VirtualServerList组成key/value格式的RuleList.

 

6.通过RuleList调用LocalLB.Rule下的query_rule方法, 取出结果中的RuleDefinition, 与RuleList组成key/value格式的DefinitionList.

 

7.循环遍历DefinitionList, 取出每一个Definition中的所有PoolName, 排重后组成RulePoolList.

 

8.将DefaultPoolList与RulePoolList合并, 排重后组成PoolList.

 

9.通过PoolList调用LocalLB.PoolMember下的get_ratio方法, 取出结果中的Address、Port和Ratio(同HAProxy的Weight), 与PoolList组成key/value格式的PoolMemberList.

 

10.通过PoolList调用LocalLB.Pool下的get_object_status方法, 取出结果中的Status, 与PoolList组成key/value格式的PoolStatusList.

 

11.经过以上10个步骤, 取出了所需要的配置信息, 循环遍历VirtualServerList, 通过VirtualServer为key, 可以取出VirtualAddress, RuleName, DefaultPool, VirtualServerStatus. 通过RuleName为key, 可以取出Definition. 通过PoolName为key, 可以取出PoolMember,和PoolStatus. 最终将每次的循环结果存放到对应的数据类型内.

 

 

该版本的获取流程只通过8次SOAP请求就取出了相关的配置信息, 只需要把这些配置信息组合成我们想要的格式即可.

 

使用该版本获取一台有400组配置信息的设备耗时在20秒内, 与上一版相比, 耗时缩短了N倍.

 

最终得到一个结论, 更多的去使用CPU和内存, 以减少网络请求的次数, 从而达到更高的性能.

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有