python負(fù)載均衡的簡單實現(xiàn)方法
提到分發(fā)請求,相信大多數(shù)人首先會想到Nginx,Nginx作為一種多功能服務(wù)器,不僅提供了反向代理隱藏主機(jī)ip的能力,還擁有簡單的緩存加速功能。當(dāng)然Nginx最強(qiáng)大的功能還是分發(fā)請求,不僅提供了哈希,一致性哈希,負(fù)載均衡等多種請求分發(fā)模式,還保證了自己服務(wù)的輕量和穩(wěn)定。一臺Nginx服務(wù)器常年工作在高并發(fā)請求的環(huán)境下,也極少宕機(jī)。
在Nginx負(fù)載均衡模式下,請求會發(fā)送到壓力最小的未宕機(jī)服務(wù)器上。今天我們不考慮目標(biāo)服務(wù)器的壓力,用python實現(xiàn)最簡單的負(fù)載均衡方法,即將請求發(fā)送到未宕機(jī)的服務(wù)器上。
我們想調(diào)用module_b模塊中的接口,module_b服務(wù)在10.10.10.115服務(wù)器上的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為封裝好的報錯類無需在意。
整個負(fù)載均衡的實現(xiàn)也很簡單,傳入api和參數(shù),然后從所有的module_b地址中隨機(jī)選出一個,拼接成完整的requests請求,如果無法訪問到module_b服務(wù),那么將換到另一個未訪問過的module_b服務(wù)地址,直到訪問過全部的module_b服務(wù)。
總結(jié)
以上所述是小編給大家介紹的python負(fù)載均衡的簡單實現(xiàn)方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
Python subprocess模塊學(xué)習(xí)總結(jié)
從Python 2.4開始,Python引入subprocess模塊來管理子進(jìn)程,以取代一些舊模塊的方法:如 os.system、os.spawn*、os.popen*、popen2.*、commands.*不但可以調(diào)用外部的命令作為子進(jìn)程,而且可以連接到子進(jìn)程的input/output/error管道,獲取相關(guān)的返回信息2014-03-03
python神經(jīng)網(wǎng)絡(luò)tfrecords文件的寫入讀取及內(nèi)容解析
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)tfrecords文件的寫入讀取及內(nèi)容解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python中用matplotlib畫圖遇到的一些問題及解決
這篇文章主要介紹了python中用matplotlib畫圖遇到的一些問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
在Python中利用Into包整潔地進(jìn)行數(shù)據(jù)遷移的教程
這篇文章主要介紹了在Python中如何利用Into包整潔地進(jìn)行數(shù)據(jù)遷移,在數(shù)據(jù)格式的任意兩個格式之間高效地遷移數(shù)據(jù),需要的朋友可以參考下2015-03-03

