python負荷等化の簡単な実現方法
2142 ワード
配布リクエストといえば、まず多くの人がNginxを思い浮かべると思います.Nginxは多機能サーバとして、ホストipを逆エージェントで隠す能力だけでなく、簡単なキャッシュ加速機能も提供しています.もちろん、Nginxの最も強力な機能は配布要求であり、ハッシュ、一貫性ハッシュ、負荷等化などの多種の要求配布モードを提供するだけでなく、自分のサービスの軽量と安定を保証している.1台のNginxサーバは、高い同時要求環境で長年にわたって稼働しており、ダウンタイムも極めて少ない.
Nginxロード・バランシング・モードでは、最小圧力のダウンタイム・サーバーにリクエストが送信されます.今日、ターゲットサーバの圧力を考慮せずに、pythonで最も簡単な負荷分散方法を実現し、ダウンタイムのないサーバに要求を送信します.
moduleを呼び出したいのですがbモジュールのインタフェース、module_bサービスは、10.10.10.115サーバ上の10081100821008310084の4つのポートにあります.
ConnectionErrorとModule_bExceptionはパッケージ化されたエラークラスなので気にする必要はありません.
負荷全体の等化の実現も簡単で、apiとパラメータを入力し、すべてのmodule_からbアドレスからランダムに1つを選択し、module_にアクセスできない場合は完全なrequestsリクエストに接続するbサービスは、別の未アクセスmoduleに変更されます.bすべてのmoduleにアクセスするまでサービスアドレスbサービス.
まとめ
以上、編集者が紹介したpython負荷バランスの簡単な実現方法です.
Nginxロード・バランシング・モードでは、最小圧力のダウンタイム・サーバーにリクエストが送信されます.今日、ターゲットサーバの圧力を考慮せずに、pythonで最も簡単な負荷分散方法を実現し、ダウンタイムのないサーバに要求を送信します.
moduleを呼び出したいのですがbモジュールのインタフェース、module_bサービスは、10.10.10.115サーバ上の10081100821008310084の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 ...
')
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']
ConnectionErrorとModule_bExceptionはパッケージ化されたエラークラスなので気にする必要はありません.
負荷全体の等化の実現も簡単で、apiとパラメータを入力し、すべてのmodule_からbアドレスからランダムに1つを選択し、module_にアクセスできない場合は完全なrequestsリクエストに接続するbサービスは、別の未アクセスmoduleに変更されます.bすべてのmoduleにアクセスするまでサービスアドレスbサービス.
まとめ
以上、編集者が紹介したpython負荷バランスの簡単な実現方法です.