python負(fù)載均衡的簡(jiǎn)單實(shí)現(xiàn)方法
提到分發(fā)請(qǐng)求,相信大多數(shù)人首先會(huì)想到Nginx,Nginx作為一種多功能服務(wù)器,不僅提供了反向代理隱藏主機(jī)ip的能力,還擁有簡(jiǎn)單的緩存加速功能。當(dāng)然Nginx最強(qiáng)大的功能還是分發(fā)請(qǐng)求,不僅提供了哈希,一致性哈希,負(fù)載均衡等多種請(qǐng)求分發(fā)模式,還保證了自己服務(wù)的輕量和穩(wěn)定。一臺(tái)Nginx服務(wù)器常年工作在高并發(fā)請(qǐng)求的環(huán)境下,也極少宕機(jī)。
在Nginx負(fù)載均衡模式下,請(qǐng)求會(huì)發(fā)送到壓力最小的未宕機(jī)服務(wù)器上。今天我們不考慮目標(biāo)服務(wù)器的壓力,用python實(shí)現(xiàn)最簡(jiǎn)單的負(fù)載均衡方法,即將請(qǐng)求發(fā)送到未宕機(jī)的服務(wù)器上。
我們想調(diào)用module_b模塊中的接口,module_b服務(wù)在10.10.10.115服務(wù)器上的10081,10082,10083,10084這4個(gè)端口上。
#!/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為封裝好的報(bào)錯(cuò)類無(wú)需在意。
整個(gè)負(fù)載均衡的實(shí)現(xiàn)也很簡(jiǎn)單,傳入api和參數(shù),然后從所有的module_b地址中隨機(jī)選出一個(gè),拼接成完整的requests請(qǐng)求,如果無(wú)法訪問(wèn)到module_b服務(wù),那么將換到另一個(gè)未訪問(wèn)過(guò)的module_b服務(wù)地址,直到訪問(wèn)過(guò)全部的module_b服務(wù)。
總結(jié)
以上所述是小編給大家介紹的python負(fù)載均衡的簡(jiǎn)單實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
python通過(guò)郵件服務(wù)器端口發(fā)送郵件的方法
這篇文章主要介紹了python通過(guò)郵件服務(wù)器端口發(fā)送郵件的方法,涉及Python發(fā)送郵件的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04python人工智能tensorflow函數(shù)tf.nn.dropout使用方法
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)tf.nn.dropout使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05python+pygame實(shí)現(xiàn)代碼雨(黑客帝國(guó)既視感)
這篇文章主要介紹了python+pygame實(shí)現(xiàn)代碼雨(黑客帝國(guó)既視感),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03詳細(xì)聊聊為什么Python中0.2+0.1不等于0.3
最近在學(xué)習(xí)過(guò)程中發(fā)現(xiàn)在計(jì)算機(jī)JS時(shí)發(fā)現(xiàn)了一個(gè)非常有意思事,0.1+0.2的結(jié)果不是0.3,而是0.30000000000000004,下面這篇文章主要給大家介紹了關(guān)于為什么Python中0.2+0.1不等于0.3的相關(guān)資料,需要的朋友可以參考下2022-12-12Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼
這篇文章主要介紹了Python importlib動(dòng)態(tài)導(dǎo)入模塊實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04詳解Python 爬取13個(gè)旅游城市,告訴你五一大家最愛(ài)去哪玩?
這篇文章主要介紹了Python 爬取13個(gè)旅游城市,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05