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 json encode datetime类型
Dec 28 Python
pycharm 使用心得(四)显示行号
Jun 05 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
python构建深度神经网络(续)
Mar 10 Python
python使用代理ip访问网站的实例
May 07 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
python3使用QQ邮箱发送邮件
May 20 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
Python如何优雅获取本机IP方法
Nov 10 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 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
我的论坛源代码(一)
2006/10/09 PHP
PHP4实际应用经验篇(8)
2006/10/09 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
IE下window.onresize 多次调用与死循环bug处理方法介绍
2013/11/12 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
JS实现商品橱窗特效
2020/01/09 Javascript
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
重命名批处理python脚本
2013/04/05 Python
python双向链表实现实例代码
2013/11/21 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
一套VC试题
2015/01/23 面试题
高级人员简历的自我评价分享
2013/11/03 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
招股说明书范本
2014/05/06 职场文书
公司联欢会策划方案
2014/05/19 职场文书
师德师风剖析材料
2014/09/30 职场文书
离婚协议书怎样才有法律效力
2014/10/10 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
Python日志模块logging用法
2022/06/05 Python