跟着官方文档学Python——应用水平扩展:Tengine负载均衡
跟着官方文档学Python
Tengine——负载均衡
这周将会持续更新跟着官方文档学Python系列文章,主要是围绕Web框架以及其他后端组件的官方文档展开学习。日拱一卒,让我们开始吧!
在之前的文章《Django应用上线前有哪些注意事项?如何使用同步或异步容器启动Django应用?》中我们介绍了应用上线前需要做哪些准备,首先需要通过完备的单元测试,把开发环境的配置调整为线上环境的配置,之后选择合适的web容器,可以选择同步或者异步的,接下来部署到生产环境时web服务器可以有不同选择,可以使用Apache,也可以使用Nginx或者是Tengine。
Apache是比较传统的web服务器,用了许多年用途也很广泛;之后Nginx出来之后,大家基本上逐渐切到了Nginx或者Tengine上。Apache是多线程模型,每个用户请求过来都会使用一个独占的线程去处理,等到它处理完成后这个线程才可以去处理其它的请求。
Nginx是一个异步处理的模型,当一个用户请求过来之后它会去异步处理,异步处理的过程中,这个线程是会释放掉的,这个线程可以同时处理其他用户请求的连接,因此可以支持非常高的并发量,因此目前大多选用Nginx。
Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。官网文档链接:http://tengine.taobao.org/
比如说主动健康检查的功能,在Nginx上只能被动检查,就是说我访问一个页面,只有这个页面出错了,我才能知道它出错,才能判断后续的请求要不要往后台的服务器上去发。但在Tengine上,会另外有一个线程异步请求后端服务去检查它的端口和url是否正常,如果不正常,之后用户请求过来就不往后面发了。
再比如更强大的负载均衡能力,一致性hash模块和会话保持模块,对于一个用户的请求,尽可能落到一台服务器上去,保证它的请求具有延续性,它的session不需要跨机器。
安装Tengine
首先安装依赖pcre
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
sudo tar zxvf pcre-8.44.tar.gz
cd pcre-8.44/
./configure --prefix=/usr/local/pcre && make && make install
指定pcre源码目录安装Tengine
wget https://tengine.taobao.org/download/tengine-2.3.2.tar.gz
tar zxvf tengine-2.3.2.tar.gz && cd /data/tengine-2.3.0
./configure --prefix=/data/tengine/ --with-http_realip_module --
with-http_gzip_static_module --with-pcre=/data/pcre-8.44
# 启用realip模块,支持将用户的真实ip记录下来;启用gzip_static模块,启用gzip压缩指定pcre源代码的路径
make && make install
最简单配置(在tengine/nginx.conf中配置)
路由转发请求到Gunicorn/uWSGI 服务
使用Tengine负载均衡
- 请求路由到两台后端服务器,两台后端服务器Upstream
- 服务器运行Gunicorn/uWSGI
- 单台服务器上运行有两个实例(web容器)各自开了8001和8002端口
Tengine 的流量分发策略
- round-robin:轮询的方式平均分配流量
- least-connected:最少连接优先,会优先发到请求最少的机器上去
- ip-hash:根据客户端的ip地址的hash来计算分配服务器的IP
- 带权重流量分配
- 一致性哈希
- 会话保持
最少连接优先和ip-hash配置方法:
least_conn和ip_hash任选其一。
带权重流量分配配置方法:
假设发来6个请求,有3个请求走第一个服务,其它3个服务上各落一个请求。
会话保持配置方法:
配置session_sticky尽可能保持同一个客户端访问的都是同一个后端服务器。
在Nginx上有被动的健康检查,在server后有max_fails参数,它控制检查在一定时间之内有多少次尝试失败了,如果失败了,下个周期的请求就不再发到这台服务器上去。
主动健康检查(Tengine)
http_upstream_check_module主动定时检查。
End
相关文章
- python处理xps文件_xps/pdf/png/json转换
- python qt是什么_初识Python与Qt「建议收藏」
- python hashlib_Python hashlib模块实例使用详解
- python爬虫—–Python访问http的几种方式「建议收藏」
- python 递归排序[通俗易懂]
- python语言一般用于什么_PYthon
- 【说站】python有哪些数组叠加函数
- python的dropna函数_Pandas dropna()函数不工作「建议收藏」
- python chmod_Python os.chmod用法及代码示例
- Python抛出异常_python抛出异常的作用
- lambda python表达式_Python的条件表达式和lambda表达式实例
- 树莓派python编程指南_树莓派python软件
- python设置时间过期改变状态_Python Redis设置过期时间「建议收藏」
- Python: 按位或运算符(Bitwise OR)
- 搭建python开发环境-c++教程 如何搭建Python开发环境?
- uwsgi 配置 python virtualenv 虚拟环境目录 ( ini 配置)
- 企业微信的聊天机器人来了!免费下载,Python自动化办公
- Python 数据类型详细篇:列表
- Python爬取新浪微博数据快速版
- python-数据库编程-如何在Python中连接到数据库
- python-Python与SQLite数据库-SQLite数据库的基本知识(二)
- Ubuntu18.04 一键升级Python所有第三方包 及安装python包的方法
- python链接远程ftp服务器并列出目录下的文件详解编程语言
- Python调用C/C++程序详解编程语言
- 《Python3.6官方文档》– 第二章 使用python解释器
- 使用Python连接MySQL数据库,实现高效数据交互(python连接mysql)
- Python如何连接MySQL数据库(python怎么连接mysql数据库)