python负载均衡的简单实现方法


Posted in Python onFebruary 04, 2018

提到分发请求,相信大多数人首先会想到Nginx,Nginx作为一种多功能服务器,不仅提供了反向代理隐藏主机ip的能力,还拥有简单的缓存加速功能。当然Nginx最强大的功能还是分发请求,不仅提供了哈希,一致性哈希,负载均衡等多种请求分发模式,还保证了自己服务的轻量和稳定。一台Nginx服务器常年工作在高并发请求的环境下,也极少宕机。

在Nginx负载均衡模式下,请求会发送到压力最小的未宕机服务器上。今天我们不考虑目标服务器的压力,用python实现最简单的负载均衡方法,即将请求发送到未宕机的服务器上。

我们想调用module_b模块中的接口,module_b服务在10.10.10.115服务器上的10081,10082,10083,10084这4个端口上。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import random
import os
import sys
import time
import ConnectionError
import Module_bException
module_b = "10.10.10.115:10081,10.10.10.115:10082,10.10.10.115:10083,10.10.10.115:10084"
class Module_b():
  def __init__(self):
    self.url_prefix = [val.strip() for val in module_b.split(',')]
  def _request(self, short_uri, payload):
    res = None
    try_count = 1
    url_prefixs = self.url_prefix[:]
    url_prefixs.sort(key=lambda f: random.randint(0, 100))



    for curr_url_prefix in url_prefixs:
      url = os.path.join(curr_url_prefix, short_uri)
      try:
        res = requests.post(url, data=payload)
        break
      except ConnectionError as e:
        try_count += 1
        sys.stderr.write('can not connect to Module_b, retry ...\n')
        time.sleep(1)
        if try_count == len(url_prefixs):
          raise e
    if res.status_code != 200:
      raise Module_bException('HTTP ERROR: %s' % res.text)
    result = res.json()
    if result['status'] != '0':
      raise Module_bException(result['errstr'])
    return result['result']

ConnecttionError和Module_bException为封装好的报错类无需在意。

整个负载均衡的实现也很简单,传入api和参数,然后从所有的module_b地址中随机选出一个,拼接成完整的requests请求,如果无法访问到module_b服务,那么将换到另一个未访问过的module_b服务地址,直到访问过全部的module_b服务。

总结

以上所述是小编给大家介绍的python负载均衡的简单实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
Python实现的检测网站挂马程序
Nov 30 Python
简单介绍Python中的JSON使用
Apr 28 Python
Python用Pillow(PIL)进行简单的图像操作方法
Jul 07 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
numpy自动生成数组详解
Dec 15 Python
对python添加模块路径的三种方法总结
Oct 16 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
python turtle绘图命令及案例
Nov 23 Python
pytorch中的 .view()函数的用法介绍
Mar 17 Python
python爬虫爬取某站上海租房图片
Feb 04 #Python
Python爬虫实现百度图片自动下载
Feb 04 #Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 #Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 #Python
numpy.random.seed()的使用实例解析
Feb 03 #Python
Python网络爬虫中的同步与异步示例详解
Feb 03 #Python
Python模块文件结构代码详解
Feb 03 #Python
You might like
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
javascript 定义初始化数组函数
2009/09/07 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
JS异步宏队列微队列原理详解
2020/09/09 Javascript
python使用urllib2模块获取gravatar头像实例
2013/12/18 Python
python中的闭包用法实例详解
2015/05/05 Python
python检查字符串是否是正确ISBN的方法
2015/07/11 Python
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
匡威英国官网:Converse英国
2018/12/02 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
《一件运动衫》教学反思
2014/02/19 职场文书
综合内勤岗位职责
2014/04/14 职场文书
搞笑爱情保证书
2014/04/29 职场文书
就业协议书
2014/09/12 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
公司年会开场白
2015/06/01 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
详解Redis瘦身指南
2021/05/26 Redis
用Python selenium实现淘宝抢单机器人
2021/06/18 Python