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

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

Published in Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,445
On SlideShare
0
From Embeds
0
Number of Embeds
7

Actions

Shares
Downloads
49
Comments
0
Likes
2

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