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 相关文章推荐
python文件写入实例分析
Apr 08 Python
不可错过的十本Python好书
Jul 06 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
理论讲解python多进程并发编程
Feb 09 Python
用tensorflow搭建CNN的方法
Mar 05 Python
python+opencv识别图片中的圆形
Mar 25 Python
Python实现按照指定要求逆序输出一个数字的方法
Apr 19 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
浅谈Python 列表字典赋值的陷阱
Jan 20 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
Django Form常用功能及代码示例
Oct 13 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 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
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP中overload与override的区别
2017/02/13 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
javascript比较文档位置
2008/04/08 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
JS集合set类的实现与使用方法示例
2019/02/01 Javascript
Vue代码整洁之去重方法整理
2019/08/06 Javascript
python实现堆和索引堆的代码示例
2018/03/19 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
numpy.transpose()实现数组的转置例子
2019/12/02 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
Linux的主要特性
2016/09/03 面试题
大学毕业生通用求职信
2013/09/28 职场文书
快递业务员岗位职责
2014/01/06 职场文书
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
食品采购员岗位职责
2014/04/14 职场文书
宣传口号大全
2014/06/16 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers