Как сбалансировать запросы с помощью Twisted Framework?

Я использую следующий закрученный скрипт Python для прослушивания запросов на порту 8080 и пересылки запроса на определенный IP-адрес.

Вот сценарий:

class ServerProtocol(protocol.Protocol):
    def __init__(self):
        self.buffer = None
        self.client = None

    def connectionMade(self):
        factory = protocol.ClientFactory()
        factory.protocol = ClientProtocol
        factory.server = self

        reactor.connectTCP('x.x.x.x', 80, factory)

    def dataReceived(self, data):
        if (self.client != None):
            self.client.write(data)
        else:
            self.buffer = data

    def write(self, data):
        self.transport.write(data)
        print 'Server: ' + data.encode('hex')

class ClientProtocol(protocol.Protocol):
    def connectionMade(self):
        self.factory.server.client = self
        self.write(self.factory.server.buffer)
        self.factory.server.buffer = ''

    def dataReceived(self, data):
        self.factory.server.write(data)

    def write(self, data):
        self.transport.write(data)
        print 'Client: ' + data.encode('hex')

def main():

    factory = protocol.ServerFactory()
    factory.protocol = ServerProtocol

    reactor.listenTCP(8080, factory)
    reactor.run()

if __name__ == '__main__':
    main()

В классе ServerProtocol после установления соединения (запроса) я перенаправляю запрос на удаленный IP-адрес x.x.x.x через порт 80. Теперь я хочу сбалансировать нагрузку входящих запросов на несколько удаленных IP-адресов (x.x.x.x, y.y.y.y, z.z.z.z) через порт 80. Я посмотрел на txLoadBalancer, но не смог найти ни одного примера, подходящего для этого.

Есть ли другой способ сделать это с помощью скрученной структуры?

(Примечание: я хочу программно сбалансировать запросы, пожалуйста, не предлагайте мне использовать сторонние балансировщики нагрузки)


person Kshitij Khakurdikar    schedule 12.08.2015    source источник


Ответы (1)


Поэтому я думаю, вам нужно разделить вашу архитектуру на два скрипта. Первый будет балансировщиком нагрузки, а второй — простыми рабочими.

Или вы можете использовать любой другой балансировщик нагрузки, например haproxy.

person Dmitry Zagorulkin    schedule 12.08.2015