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求pi的方法
Oct 08 Python
python选择排序算法实例总结
Jul 01 Python
Python之列表的插入&替换修改方法
Jun 28 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
pytorch打印网络结构的实例
Aug 19 Python
Python实现微信机器人的方法
Sep 06 Python
python tkinter控件布局项目实例
Nov 04 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Python 如何查找特定类型文件
Aug 17 Python
python opencv pytesseract 验证码识别的实现
Aug 28 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
python 解决微分方程的操作(数值解法)
May 26 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
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP实现网上点歌(二)
2006/10/09 PHP
探讨php define()函数及defined()函数使用详解
2013/06/09 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PHP精确计算功能示例
2016/11/29 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
javascript string字符串优化问题
2011/07/31 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
异步JavaScript编程中的Promise使用方法
2015/07/28 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
python实现简单的五子棋游戏
2020/09/01 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
实习推荐信
2014/05/10 职场文书
军事理论课感想
2015/08/11 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers