Библиотека сайта rus-linux.net
Twisted
Глава 21 из книги "Архитектура приложений с открытым исходным кодом", том 2.Оригинал: Twisted
Автор: Jessica McKellar
Перевод: А. Панин
Плагины
Альтернативой системе на основе файлов TAC, предназначенной для запуска приложений Twisted, является система плагинов. В то время, как система на основе файлов TAC упрощает регистрацию простых иерархий заданных в рамках конфигурационного файла приложения служб, система плагинов упрощает регистрацию нестандартных служб, используя для этого подкоманды утилиты twistd, а также расширение интерфейса командной строки приложения.
- Требование стабильности предъявляется только к API плагинов, что упрощает процесс усовершенствования сторонними разработчиками программного обеспечения.
- В коде предусмотрена возможность поиска плагинов. Плагины могут быть загружены и сохранены при первом запуске программы, повторно найдены при каждом запуске программы или их наличие может проверяться периодически в ходе исполнения программы, что позволяет определять наличие новых плагинов, установленных после запуска программы.
Для расширения возможностей программы с использованием системы плагинов Twisted необходимо просто создать объекты, реализующие интерфейс IPlugin, после чего поместить файл с их объявлениями в определенное место, в котором их будет искать система плагинов.
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 в будущем будет полезно более активное взаимодействие с квалифицированными конечными пользователями при принятии новых архитектурных решений в этой области.
Продолжение статьи: Взгляд в прошлое и выученные уроки
