内容简介:以下仅仅是是个人在一个下午的思考负载均衡应用于分布式系统中,也可以说是一个核心模块,主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题,使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性,提高资源的利用率最大化,提高系统的吞吐量,响应延时等等, 我所分享的主要是一些总结层次的,对于一些基础一些不会过多的描述, 像是负载均衡模式,算法,我不具体细节,这些网上都有很多的资料,我想从一个更高层次上分享一下自己对负载均衡的应用和理解。
以下仅仅是是个人在一个下午的思考
什么是负载均衡
负载均衡应用于分布式系统中,也可以说是一个核心模块,主要作用是将大量作业合理地分摊到多个操作单元上进行执行,用于解决互联网架构中的高并发和高可用的问题,使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性,提高资源的利用率最大化,提高系统的吞吐量,响应延时等等, 我所分享的主要是一些总结层次的,对于一些基础一些不会过多的描述, 像是负载均衡模式,算法,我不具体细节,这些网上都有很多的资料,我想从一个更高层次上分享一下自己对负载均衡的应用和理解。
有哪些常见的负载均衡方式
我这里指的是广泛的负载均衡,并不会特定指定web相关负载均衡
客户端方式
- http利用DNS智能负载均衡根据域名地域运营商解析到不同服务器,流量负载均衡
- 客户端内置算法自动连接多域名多服务器
- 微服务架构客户端通过服务注册中心获取后端服务列表(springcloud stack && kubkernetes service && dubbo 等等)
- mysql分库分表 客户端sharding
- 消息队列多消费者消费队列中的任务
从上边的整理可以看到,利用客户端实现的负载均衡方式会比较多,自定义程度会更高,有较大的自由度,根据自己的需求变更,这样做的前提是需要一个集中的存储,这个存储存储可以是像让dns机构存储的dns相关对应ip信息,也可以是像微服务中用的较多的etcd, zookeeper一样的分布式存储并watch服务相关相关信息,甚至可以更简单的像 mysql 客户端sharding直接统一客户端的所有配置文件进行一个配置,甚至可以是直接存储在内存的数据。
服务端方式
服务端负载均衡就更多了:
- 基于tcp4层的haproxy/lvs
- 基于七层http的nginx,trafik
- 基于7层mysql的相关proxy mycat,sharding-sphere, kingsharding
- 自身软件实现 elasticsearch, 分布式存储
甚至有直接基于硬件的:
硬件F5(--太贵--)
从上可以看到,基于4,7层的负载均衡技术会相对比较成熟,在各个领域都会有相关的产品,而且这一层很可能是流量入口,肯定都会是一些高性能相关软件产品,甚至是一些昂贵的硬件产品, 不过这一层也是最好玩的,可以基于负载均衡或者负载均衡的思路做一些更好玩,更有用的功能。
负载均衡应用的更高级应用 -- 负载均衡可以玩的就特别多了
7层http
由于掌握了流量了入口,获取了所有数据,所有很容易根据数据进行自定义的操作,我举一些例子,像openresty, 这是一个基于nginx与 lua 的高性能Web平台,由于内核还是基于nginx,所以性能损失很小,在保持高性能的同时,你可以在不更改代码的情形下增加你自定义的功能,同时由于openresty是7层的负载均衡,你可以在lua代码中获取到每个http的连接,状态码,url,request参数等等。
- 服务网关: 基于连接,你可以很快的设计出一个防止cc攻击的程序, 限制异常访问的ip, 基于url, ip你可以用如令牌桶限流算法限制每个用户每个接口的调用频次。
- 自定义调度算法: 基于url, request参数等你能根据请求的参数,将不同的流量进行分发到不同的服务器组。
- 服务化upstreaming : 你可以利用一个注册中心去保存你后端服务的server,然后lua程序去watch注册中心,动态更新注册列表。
4层tcp
下边举例一个4层的例子,如基于lvs, 4层能获取到的数据会相对少一些,而且会更底层,操作起来难度会更高。 阿里云利用开源软件keeplived + lvs 并结合隧道vxlan协议实现了基于多租户的4层负载均衡。
a 防御ddos攻击: 基于SYNPROXY模块实现 syn flood类型攻击
b lvs集群实现: lvs和上联交换机运行OSPF协议,lvs和交换机运行OSPE心跳,当一台或多台lvs挂掉还有其他lvs集群提供服务。
c 租户隔离: lvs集群和后端多租户利用vxlan进行通行,保证了lvs在云负载均衡中的隔离性。
描述一个基于软件程度的:
相信稍微大一点的公司都会用到elasticsearch这个搜索引擎,也会用到他的集群模式,具体集群的实现细节我就不做过多的描述了,有兴趣的可以去看看官网。
elasticsearch利用负载均衡相关概念实现了基于数据的分片(数据负载均衡),请求的转发(计算负载均衡)
- 数据分片: elasticsearch自身实现了索引sharding, 首先这就是一种数据负载均衡,数据进行分散,不集中到某个节点,保证高可用的同事,将数据计算存储都分摊到各自服务器。
- 数据同步: 利用数据sharding的多副本,在保证高可用的同时,也保证了读数据的负载均衡,在进行数据查询的过程中,数据读取会分散到各自的分片数据,如果有多个副本,可以从多个副本中随机选取副本查询,提升查询性能。
从上边的分片副本策略上肯定你能学习到其中的精髓,应用于像分布式存储,数据库设计上边。
关于elasticsearch想多提一句,它自身实现多种分配负载均衡算法,可以根据cpu/mem/网络io, 也可以基于分片数,索引量,甚至可以自定义,根据自身情形找到最合适的算法,这个很像很像openstack vm的虚拟机调度算法和kubernetes pods的调度算法。
上边简单的描述了几项基于负载均衡的应用,负载均衡技术在互联网中真的是非常基础,使用面也非常广,像还有数据库,消息队列,缓存等技术都利用负载均衡的理念,总体来说呢,就是我们无论是在设计程序软件,还是系统设计,架构优化,都可以多想想是否可以用负载均衡的方式解决你的问题。
我总结一下:
简单来说,做好负载均衡就是分别从客户端和服务端考虑,将计算任务分散,数据节点分散,网络任务分散,提升的可用性和扩展性,我这里说得比较虚,个人根据实际情况选择合适的调度策略,解决自身的问题就好。
以上所述就是小编给大家介绍的《聊聊负载均衡》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 大话微服务」深入聊聊SpringCloud之客户端负载均衡机制
- 3分钟了解负载均衡,分清二层负载均衡和三层负载均衡
- 负载均衡策略之有限负载一致性哈希
- 负载均衡之软硬件负载均衡的优缺点
- 医疗信息系统高负载如何应对?找准东华负载均衡
- 性能大比拼-真实世界工作负载vs实验室综合工作负载
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Dynamic Programming
Richard Bellman / Dover Publications / 2003-03-04 / USD 19.95
An introduction to the mathematical theory of multistage decision processes, this text takes a "functional equation" approach to the discovery of optimum policies. The text examines existence and uniq......一起来看看 《Dynamic Programming》 这本书的介绍吧!