Всем привычно, когда управление и данные внутри программы перемещаются на одной машине. Все хорошо и ясно (в какой-то мере), но что делать если данных становится много и возникает желание распределить вычисления?

Берем 2 компьютера, а дальше... А дальше нам надо как-то из программы на одном компьютере запустить метод на другом, да еще и данные перекинуть. Вот здесь на помощь и приходит RPC (Remote Procedure Call) вызов удалённых процедур.

Этот механизм берет на себя все проблемы соединения компьютеров, а таких много: адресные пространства компьютеров могут не совпадать, как передать данные, а если архитектуры различны? и этих "а если" очень много

Хорошо про RPC написано по ссылке -> http://citforum.ru/operating_systems/sos/glava_12.shtml Там вы найдете способ работы RPC, какие проблемы с RPC есть.

А мы продолжаем. У нас задача - запустить код на одной машине из кода на другой машине.

В Python есть несколько готовых инструментов для этой задачи. Один из них - nameko

Nameko - это фреймворк, который направлен на создание различных микросервисов. Данный фреймворк обладает простым строением и позволяет работать в режимах RPC, Pub-Sub - чего достаточно для небольших проектов.

Создание микросервиса элементарное:

Немного кода:

from nameko.rpc import rpc
class GreetingService(object):
    name = "greeting_service"

    @rpc
    def hello(self, name):
        return "Hello, {}!".format(name)

Запуск:

$ nameko run helloworld
starting services: greeting_service

Готово! Можно использовать (для примера, используем RPC из консоли):

$ nameko shell
>>> n.rpc.greeting_service.hello(name="Matt")
u'Hello, Matt!'

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

Пара ссылок:



Комментарии