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

28
Frontik сервер-агрегатор на python

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

Page 1: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Frontikсервер-агрегатор на python

Page 2: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Зачем frontik?

I

Page 3: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

100%

08:00 20:00

Page 4: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)
Page 5: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Яндекс (XScript)

Mail.ru (FEST)

Page 6: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Выбрали XScript

• OpenSource• Проверено• XSLT

Page 7: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

100%

08:00 20:00

Page 8: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Минусы XScript

• XML-based язык агрегации• Нет доступа к кишкам HTTP• Сложность доработки

Page 9: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Что frontik?

II

Page 10: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Основной сценарий использования:

Page 11: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Frontik - application server, основанный на Tornado Web Server Tornado:• AsyncHttpServer• один поток выполнения• ioloop • прием новых соединений • обработка (handling)• AsyncHttpClient

 

Как сделано

Page 12: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

• диспетчеризация запросов по URL• HTTP опрос backend`ов • парсинг, обработка и агрегация xml ответов • XSLT шаблонизация

Где же тут Frontik?

Page 13: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Реальный пример

Page 14: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Как это работает:

Page 15: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Фичи от 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) 

Page 16: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Фичи от frontik`а

2. Обработка ответов  

def cb(xml, response):     nodes = xpath.Evaluate(..., xml)    if not nodes:        finish('Nothing found!')    else:        ...self.get_url(request, cb)  

Page 17: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Фичи от frontik`а

3. Future  

placeholder = self.get_url(...)

self.doc.put(placeholder)    

Page 18: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Фичи от frontik`а

4. SyncGroups  

group=frontik.async.AsyncGroup(finish_cb)  

self.get_url(request1, group.add(cb1))  

self.post_url(request2, group.add(cb2))    

Page 19: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Фичи от frontik`а

5. Главное: простота развития 

Быстрая и гибкая разработка на python

Page 20: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Как frontik?

III

Page 21: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

→   xslt   →xml                                                          ответ

Этапы трансформации

Было:

 Cтало:

→           →xml                                                              ответxslt → пост-обработка

Page 22: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Пост-обработка

Fuchakubutsu(переводы)

Page 23: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Пост-обработка

ссылки на региональные сайты(200kb xml, 7k nodes)

Page 24: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Кэш

 Было: поиск → загрузка найденного → XSLT → результат

   Cтало: поиск → memcached →                       → XSLT→ результат

дозагрузка ненайденого в кеше

Page 25: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Дублирование кода верстки

обвязка сайта (jsp vs. xslt)

Page 26: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Обвязка сайта

Было: browser   ↔   jsp  Cтало: browser   ↔   frontik   ↔   jsp

Page 27: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

Проблемные места (они же — планы развития) • Один процесс — однин тред — одно ядро процессора

• Блокировка обслуживания на время вычислений  • Отсутствие стриминга

 • Спагетти-код

 

Page 28: Frontik - Cервер-агрегатор на Python (Андрей Сумин, Михаил Сабуренков, Павел Труханов)

http://github.com/hhru/frontik

http://github.com/AndrewSumin/hephaestus

http://hh.jsx.ru