负载均衡备注二

Lvs或者F5的负载体系中,所有的请求需要请过dispatcher,从体系上说,它就是所谓的热点设备,无论这个设备的性能多么卓越,迟早会成为性能瓶颈。看过memcached的系统架构后,结合自身的系统特点,也可以做到客户端来实现负载。memcached虽然称为分布式缓存服务器,但服务器端并没有分布式功能,是完全由客户端程序库实现的。
[b]初步方案:[/b]
[img]http://dl.iteye.com/upload/attachment/226676/1e29cb8d-eafe-3161-b5bb-846d8cb9d320.png[/img]
如上图所示:
前提:
1.Cluster对外有多个固定IP(ClusterIP1,ClusterIP2)供访问,实际是映射到cluster中的某几台Server.
2.图中的每个Server,其实也是个1+N的cluster,同时只有一个服务器位于cluster中服务。
3.Server之间以组播心跳方式发送负载信息,使所有的server都知道cluster中每个server的负载情况,以及服务器的活动状态。

访问步骤:
1.初始状态,Client只知道固定的cluster地址(IP1),向其中任何一个发送请求,获取cluster的负载信息。
2.clusterIP对应的server获取负载信息,返回给Client.
3.Client以某些算法分析出最轻负载server。
4.Client转向连到负载最轻的server.再次重新dispatch之前,一直访问这台server。
5.Client定时获取cluster负载信息,转向重连,这个时候cluster地址(IP1)就不会用到了。

算法:
第三步的负载信息分析,可以用lvs的负载算法,也可以用memcached的取余散列算法。
根据服务器台数的余数进行分散。但是当添加或移除服务器时,缓存重组的代价相当巨大。添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率。基本不考虑。

问题:按照这个做法,在一定的时间内,client端上所有请求还是分发到一台server上,如果在这个时间段内,数据量特别大,就会造成server之间负载不均衡。要改进这个问题
1) 最好就是把转发过程平均到每个请求上去
2) Client端不需要反复地取负载信息,也就是负载算法可以根据最初获取的Server信息,均匀的分摊到所有的Server上去。

改进:采用memcached的Consistent Hashing算法。首先求出Server的哈希值,并将其配置到0~232的圆上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个Server上。如果超过232仍然找不到Server,就会保存到第一台Server上。
[img]http://dl.iteye.com/upload/attachment/226567/16063547-0cfd-3b17-9d0d-afcbd1880499.png[/img]
Consistent Hashing最大限度地抑制了键的重新分布。而且,有的Consistent Hashing的实现方法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点的分布非常不均匀。因此,使用虚拟节点的思想,为每个Server在continuum上分配100~200个点。这样就能抑制分布不均匀,最大限度地减小Server增减时的缓存重新分布。

因此可能的改进如下:
1.Client定时向ClusterIP请求最新的服务器列表,同时client也维护上一个服务器信息,以交集为准。
2.Client对于每次请求,根据Client端存储的服务器列表,按照Consistent Hashing算法分析出目标Server地址,然后发送请求道这台指定server.
3.Consistent Hashing消耗要比较低,速度要比较快。

哈希函数的测试数据:拷贝自[url]http://dennis-zane.iteye.com/blog/346682[/url]
测试场景:
从一篇英文小说(《黄金罗盘》前三章)进行单词统计,并将最后的统计结果存储到memcached,以单词为key,以次数为value。单词个数为 3061,memcached原来节点数为10,运行在局域网内同一台服务器上的不同端口,在存储统计结果后,增加两个memcached节点(也就是从10个节点增加到12个节点),统计此时的缓存命中率并查看数据的分布情况。
结果如下表格,命中率一行表示增加节点后的命中率情况(增加前为100%),后续的行表示各个节点存储的单词数。
CRC32_HASH表示采用CRC32 散列函数。
KETAMA_HASH是基于md5的散列函数也是默认情况下一致性哈希的推荐算法。
FNV1_32_HASH就是FNV 32位散列函数。
NATIVE_HASH就是java.lang.String.hashCode()方法返回的long取32位的结 果。
MYSQL_HASH是xmemcached添加的传说来自于mysql源码中的哈希函数。

CRC32_HASH KETAMA_HASH FNV1_32_HASH NATIVE_HASH MYSQL_HASH
命中率 78.5% 83.3% 78.2% 99.89% 86.9%
节点1 319 366 546 3596 271
节点2 399 350 191 1 233
节点3 413 362 491 0 665
节点4 393 364 214 1 42
节点5 464 403 427 1 421
节点6 472 306 299 0 285
节点7 283 347 123 0 635
节点8 382 387 257 2 408
节点9 238 341 297 0 55
节点10 239 375 756 0 586
范围 200~500 300~400 150~750 0~3600 50~650


结果分析:

1、命中率最高看起来是NATIVE_HASH,然而NATIVE_HASH情况下数据集中存储在第一个节点,显然没有实际使用价值。为什么会集中存储在 第一个节点呢?这是由于在查找存储的节点的过程中,会比较hash(key)和hash(节点IP地址),而在采用了NATIVE_HASH的情况下,所 有连接的hash值会呈现一个递增状况(因为String.hashCode是乘法散列函数),如:
192.168.0.100:12000 736402923
192.168.0.100:12001 736402924
192.168.0.100:12002 736402925
192.168.0.100:12003 736402926
如果这些值很大的会,那么单词的hashCode()会通常小于这些值的第一个,那么查找就经常只找到第一个节点并存储数据,当然,这里有测试的局限性, 因为memcached都跑在一个台机器上只是端口不同造成了hash(节点IP地址)的连续递增,将分布不均匀的问题放大了。

2、从结果上看,KETAMA_HASH维持了一个最佳平衡,在增加两个节点后还能访问到83.3%的单词,并且数据分布在各个节点上的数目也相对平均,难怪作为默认散列算法。

3、最后,单纯比较下散列函数的计算效率:

CRC32_HASH:3266
KETAMA_HASH:7500
FNV1_32_HASH:375
NATIVE_HASH:187
MYSQL_HASH:500

NATIVE_HASH > FNV1_32_HASH > MYSQL_HASH > CRC32_HASH > KETAMA_HASH
类别 用途 备注 数量 承载软件 数量 新技术规范ID 云平台底座 专有云基础组件 专有云企业版飞天底座 4台 包括云底座、中间件ECS、云盾管控服务、容器服务、运维编排服务、BMCP裸金属纳管、ASCM、ASO、WAF、安骑士等 17 A606-500139516-00033 专有云基础组件 专有云企业版飞天底座 13台 A606-500155128-00130 元数据库 元数据库 4台 云平台元数据库 A606-500155128-00129 中间件服务 中间件基础组件 tlog组件 3台 中间件依赖组件(EDAS/ARMS等) A606-500139516-00030 计算服务 云服务器(ECS) 共享计算集群 10台 计算-ECS计算集群(共享集群) 10 A606-500155128-00131 网络服务 专有网络VPC 专有网络VPC(专有云)基础网络服务包 2台 网络-阿里云专有网络软件(VPC) 1 A606-500155128-00141 负载均衡SLB软件(专有云)(slbserver节点) 负载均衡SLB(专有云)基础软件包-物理机版 2台 网络-阿里云服务器负载均衡管理软件(SLB) 1 A606-500155128-00141 负载均衡SLB软件(专有云)(slblvs节点) 负载均衡SLB(专有云)基础软件包-物理机版 2台 A606-500155128-00141 负载均衡SLB软件(专有云)(slbproxy节点) 负载均衡SLB(专有云)基础软件包-物理机版 2台 A606-500155128-00141 高速通道 高速通道 on 物理机 2台 专线接入(CSW) A606-500155128-00141 存储服务 对象存储 CDS_OSS 6台 存储-阿里云开放存储服务软件(OSS)-对象存储 6 A606-500139516-00030 日志服务 CDS_SLS 4台 日志服务 4 A606-500139516-00031 块存储(混闪) CDS-EBS混闪独立部署集群 6台 存储-块存储EBS(混闪) 6 A606-500139516-00030 数据库服务 云原生数据库PolarDB PostgreSQL PolarDB V2.0_PostgreSQL版 4台 数据库-云数据库RDS (polardb PG) 4 A606-500155128-00129 云数据库 Redis 版 云数据库 Redis 版_社区版 4台 数据库-云数据库kvstore(兼容Redis及Memcache) 4 A606-500155128-00129 大数据服务 elasticsearch elasticsearch 3台 检索分析服务ES(ElasticSearch) 3 A606-500139516-00031 ADB ADB(PG) 3台 分析型数据库(ADB PG) 3 A606-500155128-00129 安全服务 云盾-流量安全监控的安装包 云盾-流量安全监控-基础模块(绑定2C机型) 2台 云盾-基础版(云入侵防御) 2 A606-500155128-00141 云盾-堡垒机New 云盾-平台侧堡垒机(云原生版) 1台 云盾-基础版(平台侧堡垒机) A606-500155128-00141 根据这些信息生产架构图
08-07
根据你提供的信息,这是一个较为完整的专有云平台架构信息表,涵盖了云平台底座、中间件服务、计算、网络、存储、数据库、大数据及安全服务等多个模块。虽然我无法直接生成图像,但我可以为你提供一个 **架构图的层级结构描述**,你可以根据这个结构使用工具(如 Visio、ProcessOn、draw.io 等)绘制架构图。 --- ### 🧱 专有云平台架构图(层级结构描述) #### 1. **云平台底座** - **组件** - 云底座(4台) - 中间件ECS - 云盾管控服务 - 容器服务 - 运维编排服务 - BMCP裸金属纳管 - ASCM、ASO、WAF、安骑士等 - **数量** - 17台承载软件,4台物理机 - **子系统** - 元数据库(4台,ID: A606-500155128-00129) #### 2. **中间件服务** - **tlog组件**(3台) - 依赖组件:EDAS、ARMS等 - **新技术规范ID**:A606-500139516-00030 #### 3. **计算服务** - **ECS共享计算集群**(10台) - 承载软件:计算-ECS计算集群(10个实例) - **新技术规范ID**:A606-500155128-00131 #### 4. **网络服务** - **VPC专有网络**(2台) - 承载软件:网络-阿里云专有网络软件(VPC)(1个) - **SLB负载均衡** - slbserver节点(2台) - slblvs节点(2台) - slbproxy节点(2台) - 承载软件:网络-阿里云服务器负载均衡管理软件(SLB)(1个) - **高速通道** - 专线接入(CSW)(2台) - **新技术规范ID**:A606-500155128-00141 #### 5. **存储服务** - **对象存储 CDS_OSS**(6台) - 承载软件:存储-阿里云开放存储服务软件(OSS)(6个) - **日志服务 CDS_SLS**(4台) - 承载软件:日志服务(4个) - **块存储 CDS-EBS混闪**(6台) - 承载软件:存储-块存储EBS(混闪)(6个) - **新技术规范ID**:A606-500139516-00030 / A606-500139516-00031 #### 6. **数据库服务** - **PolarDB PostgreSQL**(4台) - 承载软件:数据库-云数据库RDS(polardb PG)(4个) - **Redis 版**(4台) - 承载软件:数据库-云数据库kvstore(兼容Redis及Memcache)(4个) - **新技术规范ID**:A606-500155128-00129 #### 7. **大数据服务** - **Elasticsearch**(3台) - 承载软件:检索分析服务ES(ElasticSearch)(3个) - **ADB PG**(3台) - 承载软件:分析型数据库(ADB PG)(3个) - **新技术规范ID**:A606-500139516-00031 / A606-500155128-00129 #### 8. **安全服务** - **云盾-流量安全监控** - 绑定2C机型(2台) - 承载软件:云盾-基础版(云入侵防御)(2个) - **云盾-堡垒机New** - 云原生版(1台) - 承载软件:云盾-基础版(平台侧堡垒机) - **新技术规范ID**:A606-500155128-00141 --- ### ✅ 绘图建议 你可以将上述层级结构绘制成如下图示: ``` 云平台底座 ├── 云底座、中间件ECS、容器服务等 ├── 元数据库 中间件服务 ├── tlog组件 计算服务 ├── ECS共享集群 网络服务 ├── VPC ├── SLB(slbserver/slblvs/slbproxy) ├── 高速通道 存储服务 ├── 对象存储OSS ├── 日志服务SLS ├── 块存储EBS 数据库服务 ├── PolarDB PG ├── Redis 大数据服务 ├── Elasticsearch ├── ADB PG 安全服务 ├── 云盾流量监控 ├── 堡垒机 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值