Frontik сервер-агрегатор на python
Зачем frontik? I
100% 08:0020:00
Яндекс (XScript) Mail.ru (FEST)
Выбрали XScript OpenSource Проверено XSLT
100% 08:0020:00
Минусы XScript XML-based язык агрегации Нет доступа к кишкам HTTP Сложность доработки
Что frontik? II
Основной сценарий использования:
Frontik - application server, основанный на Tornado Web Server Tornado: AsyncHttpServer один поток выполнения ioloop прием новых соединений обработка (handling) AsyncHttpClient Как сделано
диспетчеризация запросов по URL HTTP опрос backend`ов парсинг, обработка и агрегация xml ответов XSLT шаблонизация Где же тут Frontik?
Реальный пример
Как это работает:
Фичи от frantic 1. app-root/helloworld.py class def get_page(self, request): res = etree.Element('hello') res.text = 'world' self.doc.put(res)
Фичи от frantic 2. Обработка ответов def cb(xml, response): nodes = xpath.Evaluate(..., xml) if not nodes: finish('Nothing found!') else:... self.get_url(request, cb)
Фичи от frantic 3. Future placeholder = self.get_url(...) self.doc.put(placeholder)
Фичи от frantic 4. SyncGroups group=frontik.async.AsyncGroup(finish_cb) self.get_url(request1, group.add(cb1)) self.post_url(request2, group.add(cb2))
Фичи от frantic 5. Главное: простота развития Быстрая и гибкая разработка на python
Как frontik? III
xslt xml ответ Этапы трансформации Было: Cтало: xml ответ xslt пост-обработка
Пост-обработка Fuchakubutsu (переводы)
Пост-обработка ссылки на региональные сайты (200kb xml, 7k nodes)
Кэш Было: поиск загрузка найденного XSLT результат Cтало: поиск memcached XSLT результат дозагрузка не найденного в кеше
Дублирование кода верстки обвязка сайта (jsp vs. xslt)
Обвязка сайта Было: browser jsp Cтало: browser frontik jsp
Проблемные места (они же планы развития) Один процесс один тред одно ядро процессора Блокировка обслуживания на время вычислений Отсутствие стриминга Спагетти-код