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

作者:熔遁丶螺旋手里剑 时间:2021-10-31 23:15:22 

提到分发请求,相信大多数人首先会想到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负载均衡的简单实现方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

来源:http://www.cnblogs.com/baiyb/p/8411725.html

标签:python,负载均衡
0
投稿

猜你喜欢

  • Oracle 11.2.0.4打补丁的方法

    2024-01-13 08:01:26
  • Python getattr()函数使用方法代码实例

    2022-03-04 03:30:51
  • 微信小程序实现视频播放器发送弹幕

    2024-04-19 11:04:21
  • python利用opencv实现SIFT特征提取与匹配

    2021-07-22 19:08:46
  • 关于Numpy中的行向量和列向量详解

    2021-06-29 20:30:48
  • python从入门到实践之组合数据类型

    2021-09-02 17:53:54
  • python获得两个数组交集、并集、差集的方法

    2022-08-12 18:37:31
  • Python实现一个简单三层神经网络的搭建及测试 代码解析

    2021-10-09 23:59:20
  • django 基于中间件实现限制ip频繁访问过程详解

    2022-06-24 08:38:43
  • javascript代码实现简易计算器

    2024-04-16 08:57:46
  • MySQL模糊查询用法大全(正则、通配符、内置函数)

    2024-01-22 13:48:50
  • OpenCV实现背景分离(证件照背景替换)

    2023-04-18 19:41:22
  • Python并行分布式框架Celery详解

    2023-06-23 10:05:21
  • python实现逻辑回归的示例

    2022-04-05 05:16:59
  • 深入了解Python的类与模块化

    2021-04-18 11:28:29
  • js 采用delete实现继承示例代码

    2023-07-17 09:06:52
  • 微信小程序开发自定义tabBar实战案例(定制消息99+小红心)

    2024-05-22 10:32:10
  • 如何使用Maxwell实时同步mysql数据

    2024-01-18 01:43:23
  • Go语言fmt.Sprintf格式化输出的语法与实例

    2024-05-09 09:31:08
  • 浅谈MySQL与redis缓存的同步方案

    2024-01-13 23:44:58
  • asp之家 网络编程 m.aspxhome.com