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迭代用法实例教程
Sep 08 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
Python操作MySQL模拟银行转账
Mar 12 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
基于Python打造账号共享浏览器功能
May 30 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
Jun 13 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
python设置环境变量的原因和方法
Jun 24 Python
kafka-python 获取topic lag值方式
Dec 23 Python
python3 xpath和requests应用详解
Mar 06 Python
Django实现简单的分页功能
Feb 22 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
SSI指令
2006/11/25 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
PHP设计模式之迭代器模式的深入解析
2013/06/13 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
javascript 的Document属性和方法集合
2010/01/25 Javascript
循环 vs 递归浅谈
2013/02/28 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
django 常用orm操作详解
2017/09/13 Python
python实现换位加密算法的示例
2018/10/14 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
教师研修随笔感言
2014/01/23 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
自查自纠整改报告
2014/11/06 职场文书
婚宴邀请函
2015/01/30 职场文书
有关三国演义的读书笔记
2015/06/25 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js