python负载均衡的简单实现方法

栏目: 编程语言 · Python · 发布时间: 6年前

内容简介:这篇文章给大家介绍用python实现最简单的负载均衡方法,即将请求发送到未宕机的服务器上,感兴趣的朋友一起看看吧

提到分发请求,相信大多数人首先会想到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服务。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Lighttpd源码分析

Lighttpd源码分析

高群凯 / 机械工业出版社 / 2010-3 / 59.00元

本书主要针对lighttpd源码进行了深度剖析。主要内容包括:lighttpd介绍与分析准备工作、lighttpd网络服务主模型、lighttpd数据结构、伸展树、日志系统、文件状态缓存器、配置信息加载、i/o多路复用技术模型、插件链、网络请求服务响应流程、请求响应数据快速传输方式,以及基本插件模块。本书针对的lighttpd项目版本为稳定版本1.4.20。 本书适合使用lighttpd的人......一起来看看 《Lighttpd源码分析》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具