Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил...
-
Upload
ontico -
Category
Technology
-
view
1.307 -
download
7
Transcript of Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил...
Frontikсервер-агрегатор на python
Зачем frontik?
I
100%
08:00 20:00
Яндекс (XScript)
Mail.ru (FEST)
Выбрали XScript
• OpenSource• Проверено• XSLT
100%
08:00 20:00
Минусы XScript
• XML-based язык агрегации• Нет доступа к кишкам HTTP• Сложность доработки
Что frontik?
II
Основной сценарий использования:
Frontik - application server, основанный на Tornado Web Server Tornado:• AsyncHttpServer• один поток выполнения• ioloop • прием новых соединений • обработка (handling)• AsyncHttpClient
Как сделано
• диспетчеризация запросов по URL• HTTP опрос backend`ов • парсинг, обработка и агрегация xml ответов • XSLT шаблонизация
Где же тут Frontik?
Реальный пример
Как это работает:
Фичи от frontik`а
1. app-root/helloworld.py
class Page(frontik.page.PageHandler): @set_xsl('helloworld.xsl') def get_page(self, request): res = etree.Element('hello') res.text = 'world' self.doc.put(res)
Фичи от frontik`а
2. Обработка ответов
def cb(xml, response): nodes = xpath.Evaluate(..., xml) if not nodes: finish('Nothing found!') else: ...self.get_url(request, cb)
Фичи от frontik`а
3. Future
placeholder = self.get_url(...)
self.doc.put(placeholder)
Фичи от frontik`а
4. SyncGroups
group=frontik.async.AsyncGroup(finish_cb)
self.get_url(request1, group.add(cb1))
self.post_url(request2, group.add(cb2))
Фичи от frontik`а
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
Проблемные места (они же — планы развития) • Один процесс — однин тред — одно ядро процессора
• Блокировка обслуживания на время вычислений • Отсутствие стриминга
• Спагетти-код
http://github.com/hhru/frontik
http://github.com/AndrewSumin/hephaestus
http://hh.jsx.ru