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 相关文章推荐
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
Python 制作糗事百科爬虫实例
Sep 22 Python
python 截取 取出一部分的字符串方法
Mar 01 Python
Python 专题三 字符串的基础知识
Mar 19 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
python topN 取最大的N个数或最小的N个数方法
Jun 04 Python
python 标准差计算的实现(std)
Jul 29 Python
Python实现打印实心和空心菱形
Nov 23 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
python字符串替换re.sub()实例解析
Feb 09 Python
微信小程序调用python模型
Apr 21 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
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
Laravel中的Blade模板引擎示例详解
2017/10/10 PHP
stripos函数知识点实例分享
2019/02/11 PHP
js树形控件脚本代码
2008/07/24 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
Python冒泡排序注意要点实例详解
2016/09/09 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
python 日期操作类代码
2018/05/05 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
加拿大留学自荐信
2014/01/28 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS