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程序设计入门(2)变量类型简介
Jun 16 Python
Python CSV模块使用实例
Apr 09 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
python实现excel读写数据
Mar 02 Python
python按行读取文件,去掉每行的换行符\n的实例
Apr 19 Python
Python 打印中文字符的三种方法
Aug 14 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
python如何删除列为空的行
Jul 17 Python
Python用来做Web开发的优势有哪些
Aug 05 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作的文本留言本的例子(二)
2006/10/09 PHP
smarty内置函数section的用法
2015/01/22 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP中SESSION过期设置
2021/03/09 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
Webpack3+React16代码分割的实现
2021/03/03 Javascript
python数据类型判断type与isinstance的区别实例解析
2017/10/31 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
虚拟机下载python是否需要联网
2020/07/27 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
生物有机护肤品:Aurelia Probiotic Skincare
2018/01/31 全球购物
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
个人批评与自我批评
2014/10/15 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书