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编码时应该注意的几个情况
Mar 04 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
对Python 数组的切片操作详解
Jul 02 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
将matplotlib绘图嵌入pyqt的方法示例
Jan 08 Python
python之生成多层json结构的实现
Feb 27 Python
django从后台返回html代码的实例
Mar 11 Python
python如何处理程序无法打开
Jun 16 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 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 输出缓冲控制(Output Control)详解
2016/08/25 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
js树形控件脚本代码
2008/07/24 Javascript
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
浅谈Vue开发人员的7个最好的VSCode扩展
2021/01/20 Vue.js
python判断windows隐藏文件的方法
2014/03/21 Python
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
利用CSS3实现毛玻璃效果示例源码
2016/09/25 HTML / CSS
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
家佳咖啡店创业计划书
2013/12/27 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
幼儿园教师奖惩制度
2014/02/01 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
先进学校事迹材料
2014/12/30 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
自我工作评价范文
2015/03/06 职场文书
失恋33天观后感
2015/06/11 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL