Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Twisted

Глава 21 из книги "Архитектура приложений с открытым исходным кодом", том 2.

Оригинал: Twisted
Автор: Jessica McKellar
Перевод: А. Панин

Плагины

Альтернативой системе на основе файлов TAC, предназначенной для запуска приложений Twisted, является система плагинов. В то время, как система на основе файлов TAC упрощает регистрацию простых иерархий заданных в рамках конфигурационного файла приложения служб, система плагинов упрощает регистрацию нестандартных служб, используя для этого подкоманды утилиты twistd, а также расширение интерфейса командной строки приложения.

Особенности использование этой системы:
  1. Требование стабильности предъявляется только к API плагинов, что упрощает процесс усовершенствования сторонними разработчиками программного обеспечения.
  2. В коде предусмотрена возможность поиска плагинов. Плагины могут быть загружены и сохранены при первом запуске программы, повторно найдены при каждом запуске программы или их наличие может проверяться периодически в ходе исполнения программы, что позволяет определять наличие новых плагинов, установленных после запуска программы.

Для расширения возможностей программы с использованием системы плагинов Twisted необходимо просто создать объекты, реализующие интерфейс IPlugin, после чего поместить файл с их объявлениями в определенное место, в котором их будет искать система плагинов.

После преобразования нашего эхо-сервера в приложение Twisted, преобразование его в плагин Twisted будет достаточно простой задачей. К созданному ранее модулю echo, содержащему описание протокола Echo и объявления EchoFactory, мы добавим директорию с именем twisted, содержащую поддиректорию с именем plugins, которая в свою очередь будет содержать объявления классов для нашего эхо-плагина. Этот плагин позволит нам запустить эхо-сервер и указать используемый порт с помощью аргументов утилиты twistd:
from zope.interface import implements

from twisted.python import usage
from twisted.plugin import IPlugin
from twisted.application.service import IServiceMaker
from twisted.application import internet

from echo import EchoFactory

class Options(usage.Options):
    optParameters = [["port", "p", 8000, "Номер порта для приема соединений."]]

class EchoServiceMaker(object):
    implements(IServiceMaker, IPlugin)
    tapname = "echo"
    description = "Эхо-сервер на основе протокола TCP."
    options = Options

    def makeService(self, options):
        """
        Создается объект TCPServer с помощью фабрики из модуля проекта.
        """
        return internet.TCPServer(int(options["port"]), EchoFactory())

serviceMaker = EchoServiceMaker()

Наш эхо-сервер сейчас будет представлен параметром сервера в выводе команды twistd --help и команда twistd echo --port=1235 позволит запустить эхо-сервер на порту 1235.

В составе Twisted имеется модульная система аутентификации для серверов с названием twisted.cred и система плагинов обычно используются для добавления шаблона аутентификации в приложение. Возможно использование AuthOptionMixed из состава twisted.cred для добавления поддержки стандартных систем аутентификации в приложение для командной строки или для добавления нового типа аутентификации. Например, с помощью системы плагинов может быть добавлена возможность аутентификации с помощью стандартной базы данных паролей Unix или сервера LDAP.

В комплекте поставки twistd находятся плагины для множества поддерживаемых Twisted протоколов, что превращает работу по созданию сервера в работу по вводу одной команды. Ниже приведено несколько примеров серверов twistd, поставляемых в составе Twisted:

twistd web --port 8080 --path .
Запуск HTTP-сервера на порту 8080 для обслуживания статического и динамического содержимого рабочей директории.
twistd dns -p 5553 --hosts-file=hosts
Запуск DNS-сервера на порту 5553, преобразующего домены из файла с названием hosts, использующего формат файла /etc/hosts.
sudo twistd conch -p tcp:2222
Запуск SSH-сервера на порту 2222. Ключи SSH должны быть установлены отдельно.
twistd mail -E -H localhost -d localhost=emails
Запуск ESMTP POP3-сервера, принимающего почту для локального узла и сохраняющего ее в директории emails.

Утилита twistd упрощает создание сервера для тестирования клиентов, при этом используя расширяемый код промышленного уровня.

В этом отношении механизмы развертывания приложений Twisted на основе TAC-файлов, плагинов и утилиты twistd были успешны. Однако, сложилась анекдотичная ситуация, при которой большинство крупномасштабных внедрений фреймворка Twisted заканчивалось необходимостью переработки этих систем управления и мониторинга; их архитектура не соответствовала требованиям системных администраторов. Это обстоятельство было обусловлено фактом отсутствия влияния системных администраторов - людей, которые являются экспертами в области внедрения и сопровождения приложений - на архитектуру в ходе истории развития проекта.

Для проекта Twisted в будущем будет полезно более активное взаимодействие с квалифицированными конечными пользователями при принятии новых архитектурных решений в этой области.


Продолжение статьи: Взгляд в прошлое и выученные уроки