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数据中的中文
Mar 06 Python
Python探索之修改Python搜索路径
Oct 25 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Django开发中的日志输出的方法
Jul 02 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
使用pytorch实现论文中的unet网络
Jun 24 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
Django项目如何正确配置日志(logging)
Apr 29 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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与SQL注入攻击[二]
2007/04/17 PHP
黑夜路人出的几道php笔试题
2009/08/04 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
php上传图片类及用法示例
2016/05/11 PHP
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
Javascript中call与apply的学习笔记
2014/09/22 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
js判断节假日实例代码
2017/12/27 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
NodeJs生成sitemap站点地图的方法示例
2019/06/11 NodeJs
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
python中尾递归用法实例详解
2015/04/28 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
纽约海:Sea New York
2018/11/04 全球购物
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
实习鉴定范文
2013/12/19 职场文书
职业生涯规划书前言
2014/04/15 职场文书
甘南现象心得体会
2014/09/11 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
房屋产权共有协议书范本
2014/11/03 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers