ݺߣ

ݺߣShare a Scribd company logo
Frontik
сервер-агрегатор на python
Зачем frontik?
I
100%
08:00 20:00
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаил и Труханов Павел
Яндекс (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

More Related Content

Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаил и Труханов Павел