Your SlideShare is downloading. ×
0
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Thrift Hl 2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Thrift Hl 2

2,529

Published on

Published in: Technology, Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,529
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
49
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. RPC: протокол Thrift на примере проектов Рамблера Александр Шигин
  • 2. Что такое RPC Выполним наш код на другой машине Данные на другой машине Данных слишком много Мало памяти
  • 3. Альтернатива: REST Идея та же самая REST диктует реализацию Глаголы/существительные
  • 4. Что бывает в RPC Версионность Асинхронность (обычно синхронные) Real time Внеочередное исполнение Устойчивость к сбоям
  • 5. На что еще обратить внимание Реализация для разных языков одного и того протокола Бинарный или текстовый формат данных
  • 6. Какие RPC есть Собственно RPC, если вы пользовались NFS, то пользовались и RPC CORBA/DCOM, но это гораздо круче
  • 7. Какие RPC есть XML-RPC SOAP JSON-RPC Java Remote Method Invocation
  • 8. Какие RPC есть Google protobuf Facebook Thrift Каждый может написать свой (RPC для python'а, используя pickle 183 statement, 281 строка)
  • 9. Почему мы выбрали Thrift Версионность Сервер уже есть TNonblockingServer ThreadedServer, ThreadPool Биндинги почти к чему угодно
  • 10. Кто использует Thrift facebook last.fm Powerset reCAPTCHA Rambler
  • 11. Что можно сериализовать i8, i16, i32, i64 (нет типов без знака) double bool string any (экспериментально)
  • 12. Составные типы struct map set list
  • 13. Как это работает транспорт транспорт протокол Что надо Сервер писать processor Клиент самому
  • 14. Транспорт TSocket, TServerSocket TFileTransport TMemoryTransport THttpClient
  • 15. Дополнительный транспорт TBufferedTransport пытается делать один send/recv на структуру TFramedTransport помощник для использования с неблокирующими сокетами
  • 16. Протоколы TBinaryProtocol (основной) TDenseProtocol (экспериментальный) TJSONProtocol (только c++/java)
  • 17. Сервер TSimpleServer TThreadedServer/TThreadPool TNonblockingServer TForkedServer (python)
  • 18. TThread*, TForkedServer создают тред/процесс на клиента то есть TThreadPool сервер на 8 тредов может обслужить одновременно только 8 клиентов
  • 19. TNonblockingServer libevent только TFramedTransport thread на запрос с сетью работает только основной тред
  • 20. Версионность все поля в структурах нумеруются если поле неизвестно или имеет неправильный тип, оно пропускается аргументы функции - тоже структура
  • 21. Применение добавляем поля, старый код продолжает работать сервисы работают с разными частями одних и тех же данных
  • 22. Пример struct V1 struct Full struct V2 { { { 1: i8 type, 1: i8 type, 1: i8 type, 2: i64 uid, 2: i64 uid, 3: double time, 3: double time, 4: string login 4: string login } } }
  • 23. Недостатки мало документации нет готовой инфраструктуры маленькое сообщество
  • 24. Подводные камни если вас интересует ruby, то только из svn/git java-библиотека не стояла на месте если у вас FreeBSD, посмотрите jira или напишите мне (хотя svn/git тоже неплохой выбор)
  • 25. FreeBSD net.inet6.ip6.v6only (THRIFT-16) net.inet.tcp.delayed_ack (THRIFT-45) THRIFT-96 иначе в логах слишком много ошибок будет
  • 26. Простая проверка Сервер 1 зовет второй, server 1 зовет третий, а потом это все раскручиввается назад. server 2 server 3
  • 27. Исходник struct Stamp { 1: string hostname, 2: double timestamp, } service Test { list<Stamp> do_loop(1: list<string> hosts) }
  • 28. Результат stop: 0.040 host: host01.rambler.ru time 0.000 host: host02.rambler.ru time 0.005 .... host: host14.rambler.ru time 0.032 host: host15.rambler.ru time 0.035 host: host01.rambler.ru time 0.037
  • 29. Что еще • http://incubator.apache.org/thrift/ • Исходники тестов – 12 строчек клиент – 24 сервер + 18 создание сервера.
  • 30. Вопросы? shigin@rambler-co.ru

×