Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил...

Post on 22-Jun-2015

1.293 views 7 download

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