网络负载均衡

Linux双网卡绑定

别等时光非礼了梦想. 提交于 2020-01-20 23:52:43
1 什么是bond 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels 2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。可以通过以下命令确定内核是否支持 bonding: 1 2 3 [root@lixin network-scripts] #cat /boot/config-2.6.32-573.el6.x86_64 |grep -i bonding CONFIG_BONDING=m [root@lixin network-scripts] # 2 bond的模式 bond的模式常用的有两种: mode=0(balance-rr) 表示负载分担round-robin,并且是轮询的方式比如第一个包走eth0,第二个包走eth1,直到数据包发送完毕。 优点:流量提高一倍 缺点:需要接入交换机做端口聚合,否则可能无法使用 mode=1(active-backup) 表示主备模式,即同时只有1块网卡在工作。 优点:冗余性高 缺点:链路利用率低,两块网卡只有1块在工作 bond其他模式: mode=2(balance-xor)(平衡策略) 表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port

千万级用户网站门户前端设计

我们两清 提交于 2020-01-19 19:25:12
千万级用户网站门户前端设计 对于千万级的注册用户的门户项目是前端这块是怎么去实现的,自己在平常的工作中总结了一些经验,也是在不断的挫折中,不断演练的,希望总结出来给大家参考下,和大家一起探讨,一起进步。 一、门户设计一般会遇到哪些难点 (一)、首页打开时间太慢了 在开发一个门户到生产上线后,首页响应时间是检验门户整个系统架构以及开发的重要的一项指标,有时候我们发现在公司测试发现速度都挺快的,怎么到生产首页打开就慢了呢? (二)、页面加载不流畅,总感觉看着不舒服 因为门户一般都是偏向于内容和图片类资源比较多,但是我们打开自己的网页,有时候总感觉加载并不是按照我们期望的那样加载得到,顺其自然,总感觉看起来怪怪的。 (三)、希望用户缓存的地方未进行缓存 很多静态的前端资源,其实在系统未进行更新时候,第一次加载之后,希望缓存到用户的本地,但是因为缓存策略没搞好,经常未进行有效的缓存。 (四)、页面的头部尾部经常需要被第三方嵌入 因为作为一个比较大的门户站点,可能会让很多小的服务接入进来,但是头部和尾部因为是需要保持风格统一,所以经常需要被第三方进行嵌入。 (五)、代码没有进行有效的压缩,导致被窃取 因为作为门户站点,前端如果不进行加密的话,代码很容易被别人进行抄袭伪造,而且还很容易清楚里面的业务逻辑,从而很容易仿造和进行攻击。 (六)、增量静态资源发布 经常门户线上环境需要增加一点小功能

DPDK-RSS负载均衡分流

余生颓废 提交于 2020-01-19 01:16:40
RSS的作用 RSS是 网卡 提供的 分流机制 。用来将报表分流到不同的收包队列,以提高收包性能。 RSS及Flow Director都是靠 网卡 上的资源来达到分类的目的,所以在 初始化配置网卡 时,我们需要传递相应的配置信息去使能网卡的RSS及Flow Director功能。 RSS(receive side scaling)是由微软提出的一种 负载分流 方法,通过计算网络数据报文中的网络层&传输层二/三/四元组HASH值,取HASH值的最低有效位(LSB)用于索引间接寻址表RETA(Redirection Table),间接寻址表RETA中的保存索引值用于分配数据报文到不同的CPU接收处理。现阶段RSS基本已有硬件实现,通过这项技术能够将网络流量分载到多个CPU上,降低操作系统单个CPU的占用率。 没有开启 rss负载分流情况下: 所有报文只会从一个硬件队列来收包。 开启 rss进行负载分流情况下: rss 会解释报文的 l3 层信息:ip 地址。甚至 l4 层信息:tcp/udp 端口。 报文会经过 hash function 计算出一个 uint32_t 的 rss hash。填充到 struct rte_mbuf 的 hash.rss字段中。 rss hash 的 低7位 会映射到 4位长 的 RSS output index。 无法解释的 报文,rss hash 和

高并发场景下LVS安装与高可用实现

血红的双手。 提交于 2020-01-16 20:29:20
本文目录: LVS介绍与集群搭建 负载均衡(LVS)相关名词 在Web端的操作有什么含义 LVS集群的工作模式 IPVS调度器实现的八种负载调度算法 LVS+Keepalived方案实现 常见LVS负载均衡高可用解决方案 一、负载均衡介绍 1、负载均衡的妙用 负载均衡(Load Balance)集群提供了一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载、带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。 单台计算机无法承受大规模的并发访问或数据流量了,此时需要搭建负载均衡集群把流量分摊到多台节点设备上分别处理,即减少用户等待响应的时间又提升了用户体验; 7*24小时的服务保证,任意一个或多个有限后端节点设备宕机,不能影响整个业务的运行。 2、为什么要用LVS 工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、目录结构,Nginx单凭这点可利用的场合就远多于LVS了。 最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。 Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一,相反LVS对网络稳定性依赖比较大。 Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。

电商平台架构

感情迁移 提交于 2020-01-15 03:39:56
设计理念 1 时间换空间 1.1 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag), 反向代理缓存,应用端的缓存(memcache),内存数据库,Buffer、cache机制(数据库,中间件等)。 1.2 索引 哈希、B树、倒排、bitmap 哈希索引:适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。 B树索引:适合于查询为主导的场景,避免多次的IO,提高查询的效率。 倒排索引:实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。 Bitmap:是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。 2. 并行与分布式计算 2.1 任务切分、分而治之(MR) 在大规模的数据中,数据存在一定的局部性的特征,利用局部性的原理将海量数据计算的问题分而治之。 MR模型是无共享的架构,数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。 2.2 多进程

Nginx反向代理与负载均衡

旧时模样 提交于 2020-01-14 05:41:10
反向代理( reverse proxy) 方式是指用代理服务器来接受Internet上的连接请求, 然后将请求转发给内部网络中的上游服务器, 并将从上游服务器上得到的结果返回给Internet上请求 连接的客户端, 此时代理服务器对外的表现就是一个Web服务器。 充当反向代理服务器也是Nginx的一种常见用法( 反向代理服务器必须能够处理大量并发请求) , 本节将介绍Nginx作 为HTTP反向代理服务器的基本用法。由于Nginx具有“强悍”的高并发高负载能力, 因此一般会作为前端的服务器直接向客户端提供静态文件服务。 但也有一些复杂、 多变的业务不适合放到Nginx服务器上, 这时会用Apache、 Tomcat等服务器来处理。 于是, Nginx通常会被配置为既是静态Web服务器也是反向代理服务器 不适合Nginx处理的请求就会直接转发到上游服务器中处理。 客户端发来HTTP请求时, Nginx并不会立刻转发到上游服务器, 而是先把用户的请求( 包括HTTP包体) 完整地接收到Nginx所在服务器的硬盘或者内存中, 然后再向上游服务器 发起连接, 把缓存的客户端请求转发到上游服务器。Nginx的这种工作方式有什么优缺点呢? 很明显, 缺点是延长了一个请求的处理时间,并增加了用于缓存请求内容的内存和磁盘空间。 而优点则是降低了上游服务器的负载, 尽量把压力放在Nginx服务器上。

LVS 负载均衡 keepalive

跟風遠走 提交于 2020-01-13 13:47:19
为什么要学lvs 工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名、 目录结构, Nginx单凭这点可利用的场合就远多于LVS了。 最新版本的Nginx也支持4层TCP负载,曾经这是LVS比Nginx好的地方。 Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个 也是它的优势之一,相反LVS对网络稳定性依赖比较大。 Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出 来。 LVS的配置、测试就要花比较长的时间了, LVS对网络依赖比较大。 简单一句话,当并发超过了Nginx上限,就可以使用LVS了。 日1000-2000W PV或并发请求1万以下都可以考虑用Nginx。 大型门户网站,电商网站需要用到LVS。 LVS 介绍 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系 统,可以在UNIX/LINUX平台下实现负载均衡集群功能。该项目在1998年5月由章文嵩博士组 织成立,是中国国内最早出现的自由软件项目之一。 官网:http://www.linuxvirtualserver.org/index.html 中文资料 LVS项目介绍 http://www.linuxvirtualserver.org/zh/lvs1.html LVS集群的体系结构

Nginx

和自甴很熟 提交于 2020-01-07 16:24:25
1 Nginx的简介 1.1 Nginx概述 Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用Nginx的网站用户有:百度、京东、新浪、网易、腾讯和淘宝等。 1.2 Nginx作为web服务器 Nginx可以作为静态页面的web服务器,同时还支持CGI协议的动态语言,比如perl、php等。但是不支持java。java程序只能通过和tomcat等服务器配置使用。Nginx专为性能优化而开发,性能是最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。 1.3 正向代理 Nginx不仅可以做反向代理,实现负载均衡。还能通过正向带来来进行上网等功能。 正向代理:如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。 例如:国内是不能访问www.google.com的,但是可以通过正向代理服务器来访问www.google.com,如下图所示: 1.4 反向代理服务器 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端

2019 SDN大作业

ぐ巨炮叔叔 提交于 2020-01-07 07:54:57
视频链接 建议把清晰度调到最高 队名 不想取名 本组成员 学号 姓名 031702422 朱宏(组长) 031702419 姚彬锟 031702420 张庆焰 031702425 吴永铭 041602630 张周伟 负载均衡代码如下 # -*- coding: utf-8 -*- import httplib2 import time import json class OdlUtil: url = '' def __init__(self, host, port): self.url = 'http://' + host + ':' + str(port) def install_flow(self, container_name='default',username="admin", password="admin"): http = httplib2.Http() http.add_credentials(username, password) headers = {'Accept': 'application/json'} flow_name = 'flow_' + str(int(time.time()*1000)) #s3流表 #在检测h4发包的时候s3的1口流量空闲时发的流表 h4_to_s3_1 ='{"flow": [{"id": "0","match": {

2019 SDN大作业

☆樱花仙子☆ 提交于 2020-01-07 06:18:04
视频链接 建议把清晰度调到最高 队名 不想取名 本组成员 学号 姓名 031702422 朱宏(组长) 031702419 姚彬锟 031702420 张庆焰 031702425 吴永铭 041602630 张周伟 负载均衡代码如下 # -*- coding: utf-8 -*- import httplib2 import time import json class OdlUtil: url = '' def __init__(self, host, port): self.url = 'http://' + host + ':' + str(port) def install_flow(self, container_name='default',username="admin", password="admin"): http = httplib2.Http() http.add_credentials(username, password) headers = {'Accept': 'application/json'} flow_name = 'flow_' + str(int(time.time()*1000)) #s3流表 #在检测h4发包的时候s3的1口流量空闲时发的流表 h4_to_s3_1 ='{"flow": [{"id": "0","match": {