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 相关文章推荐
win7安装python生成随机数代码分享
Dec 27 Python
python基于queue和threading实现多线程下载实例
Oct 08 Python
python从入门到精通(DAY 3)
Dec 20 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
python计算两个数的百分比方法
Jun 29 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
浅谈Python的list中的选取范围
Nov 12 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
pycharm 关闭search everywhere的解决操作
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反射机制用法实例
2014/08/28 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
Easyui Datagrid自定义按钮列(最后面的操作列)
2017/07/13 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
2018/07/24 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
VUE+node(express)实现前后端分离
2019/10/13 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
工程造价自荐信
2013/10/09 职场文书
应届生会计求职信
2013/11/11 职场文书
产假请假条
2014/04/10 职场文书
村委会换届选举方案
2014/05/03 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
债务纠纷起诉书
2015/05/20 职场文书
提高系统的吞吐量解决数据库重复写入问题
2022/04/23 MySQL