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 相关文章推荐
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python实现带百分比的进度条
Jun 28 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python玩转加密的技巧【推荐】
May 13 Python
PyTorch搭建一维线性回归模型(二)
May 22 Python
python版DDOS攻击脚本
Jun 12 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
Aug 07 Python
python返回数组的索引实例
Nov 28 Python
Python Django中间件使用原理及流程分析
Jun 13 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 Python
python超详细实现完整学生成绩管理系统
Mar 17 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中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
smarty简单入门实例
2014/11/28 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
2015/12/08 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
vue递归获取父元素的元素实例
2020/08/07 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
使用python实现简单五子棋游戏
2019/06/18 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
python如何从键盘获取输入实例
2020/06/18 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
大学四年学习的自我评价分享
2013/12/09 职场文书
婚庆公司计划书
2014/09/15 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
Docker官方工具docker-registry案例演示
2022/04/13 Servers