利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控

【编者按】本文主要介绍 NGINX 的主要功能以及如何通过 Nginx 优化 Python 应用性能。本文系国内 ITOM 管理平台 OneAPM 编译呈现。

本文上一篇系: 利用 NGINX 最大化 Python 性能,第一部分:Web 服务和缓存

Python 以其高性能脚本语言而著称,而 NGINX 则能够通过增加代码的实际执行速度来提供助力。对于单一服务器来说,如果网页的一半由静态文件组成(很多网页都有一半由静态文件组成),增加静态文件缓存可使这类网页性能翻倍,缓存动态应用程序内容能够进一步提升应用程序性能。

但这种方法并不是对所有应用都受用,或者说提升的性能不足够。这时就要考虑横向扩展了---迁移到多服务器应用。多服务器应用不仅功能强大、使用灵活、几乎能够无限扩展,而且成本较低。让我们继续前面的优化 Python 性能。

技巧 6---将 NGINX 作为反向代理服务器

从单服务器环境来讲,部署反向代理服务器似乎是个很大的进步,因为这一部署非常简单,实现的功能却相当强大。添加反向代理服务器后,不仅性能立即得到大幅提升,还有机会实现:

  • 增强性能 --- 在现有的 Python 应用程序前放置一个 NGINX 服务器。无需更改 Web 服务器软件或配置。现有的 Web 服务器和应用程序服务器相结合并在一个冒泡中运行,无法直接接触网络流量,由反向代理服务器提出填鸭式请求。
  • 优化性能 --- 按照我们上一篇介绍 Python 的文章,针对应用程序生成的文件实施静态文件缓存微应用缓存。但现在,我们要在新的反向代理服务器而不是应用程序服务器上实施。运行应用程序的服务器明显减轻了工作负载,这样就扩充了应用程序的容量,让所有用户都能感受到更高性能。
  • 横向扩展 — 增加更多应用程序服务器并对其实施负载均衡,利用持续会话实现每位用户的连贯体验。
  • 赋予高可用性 — 让你的反向代理服务器镜像到在线备份,同时拥有备用的应用程序服务器,让你的站点高度可用。
  • 监控与管理 — NGINX Plus 提供了高级监测与管理功能,同时配备主动体检 —— 如果设定了主动体检,反向代理服务器会主动向各个服务器发出带外请求,核实各个服务器的可用性。
利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控

技巧 7---重写 URL

Web 服务器配置通常包括 URL 重写规则。你可以制作美观的 URL 方便用户理解,也可以让 URL 在资源迁移后仍然不变。

NGINX 配置(包括重写 URL)使用的指令数量较少,也被众多人士认为是简单明了。但如果不熟悉,使用前还是要经历一个学习过程。可以把 Creating NGINX Rewrite Rules 这篇文章当做介绍。

下面给出一个使用重写指令的 NGINX 重写规则样板。此规则查找了以 /download开头的 URL,之后还在路径中包含 /media//audio/ 目录。此规则用 /mp3/ 替换这些元素,并增加合适的文件扩展名 .mp3.ra。变量 (1 和 )2 获取保持不变的路径元素。例如,/download/cdn-west/media/file1 变成 /download/cdn-west/mp3/file1.mp3

server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

要在 NGINX 中实现类似 Apache 的效果,你可以在第一个服务器块中匹配短 URL 的请求,然后把它们重定向到匹配长 URL 的第二个服务器块。

# USE THIS CONVERSION
server {
    listen      80;
    server_name example.org;
    return      301 http://www.example.org$request_uri;
}

server {
    listen      80;
    server_name www.example.org;
    ...
}

技巧 8---实施负载均衡

扩充网站容量、提高网站可用性的终极办法就是运行多台应用程序服务器并实施负载均衡。

利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控

配备 NGINX 的负载均衡 PHP 服务器,要实现 NGINX 负载均衡,首先用你需要均衡的各个服务器来创建一个服务器群组。然后编写配置代码,代码包括服务器权重---如果服务器的处理能力较强,请给它分配较大的权重,给它送去更多流量。

upstream stream_backend {
    server backend1.example.com:12345 weight=5;
    server backend2.example.com:12345;
    server backend3.example.com:12346;
}

技巧 9---启用会话持续性和会话耗尽

网络默认用于无状态交互;如果需要特定状态的信息,可以通过若干方法来实施。如果状态位于应用程序服务器上,就得让这台服务器在会话期间处理指定用户的所有请求,这就叫做会话持续。

要管理多个负载均衡的服务器,会话耗尽是一项有效工具。利用 NGINX Plus在一台服务器上的上游群组中设置耗尽参数,NGINX Plus 会让这台服务器放松下来,不会给它发送新的请求,而是让现有连接继续下去,直到会话结束。

技巧 10---启用监控和管理功能

如果服务器配置较为复杂,在保持高性能和避免宕机时,监测和管理就变得尤其重要。监控 NGINX 状态页,在服务器可能遇到麻烦时通知用户,让用户监测自己的系统,根据信息在问题发生前采取行动。

NGINX 提供了一个内置控制面板来监测 NGINX 服务器的健康状况。你可以收集 NGIGX 面板数据确定每台特定服务器是否有问题。

利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控

结论

Python 创建的网站要能够同时吸引众多用户,那就需要强大的性能支持,如果你采用的是 Nginx 做 Web 服务器,可以从上面10个方面来优化性能。

OneAPM 能够帮你实现 Python 应用层面代码级监控,也能够实现 Nginx 等基础组件等监控。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

原文地址:Maximizing Python Performance with NGINX, Part II: Load Balancing and Monitoring

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容