SlideShare a Scribd company logo
RPC: протокол Thrift
на примере проектов
     Рамблера
    Александр Шигин
Что такое RPC
Выполним наш код на другой
 машине
Данные на другой машине
Данных слишком много
Мало памяти
Альтернатива: REST
Идея та же самая
REST диктует реализацию
Глаголы/существительные
Что бывает в RPC
Версионность
Асинхронность (обычно синхронные)
Real time
Внеочередное исполнение
Устойчивость к сбоям
На что еще обратить
        внимание
Реализация для разных языков
 одного и того протокола
Бинарный или текстовый формат
 данных
Какие RPC есть
Собственно RPC, если вы
 пользовались NFS, то пользовались
 и RPC
CORBA/DCOM, но это гораздо круче
Какие RPC есть
XML-RPC
SOAP
JSON-RPC
Java Remote Method Invocation
Какие RPC есть
Google protobuf
Facebook Thrift
Каждый может написать свой (RPC
  для python'а, используя pickle 183
  statement, 281 строка)
Почему мы выбрали Thrift
Версионность
Сервер уже есть
 TNonblockingServer
 ThreadedServer, ThreadPool
Биндинги почти к чему угодно
Кто использует Thrift
facebook
last.fm
Powerset
reCAPTCHA
Rambler
Что можно сериализовать
i8, i16, i32, i64 (нет типов без знака)
double
bool
string
any (экспериментально)
Составные типы
struct
map
set
list
Как это работает
транспорт      транспорт   протокол




Что надо
                Сервер
 писать                    processor
                Клиент
 самому
Транспорт
TSocket, TServerSocket
TFileTransport
TMemoryTransport
THttpClient
Дополнительный
            транспорт
TBufferedTransport
 пытается делать один send/recv на
  структуру
TFramedTransport
 помощник для использования с
  неблокирующими сокетами
Протоколы
TBinaryProtocol (основной)
TDenseProtocol (экспериментальный)
TJSONProtocol (только c++/java)
Сервер
TSimpleServer
TThreadedServer/TThreadPool
TNonblockingServer
TForkedServer (python)
TThread*, TForkedServer
создают тред/процесс на клиента
то есть TThreadPool сервер на 8
 тредов может обслужить
 одновременно только 8 клиентов
TNonblockingServer
libevent
только TFramedTransport
thread на запрос
с сетью работает только основной
  тред
Версионность
все поля в структурах нумеруются
если поле неизвестно или имеет
 неправильный тип, оно
 пропускается
аргументы функции - тоже структура
Применение
добавляем поля, старый код
 продолжает работать
сервисы работают с разными
 частями одних и тех же данных
Пример
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
}                  }                  }
Недостатки
мало документации
нет готовой инфраструктуры
маленькое сообщество
Подводные камни
если вас интересует ruby, то только
  из svn/git
java-библиотека не стояла на месте
если у вас FreeBSD, посмотрите jira
  или напишите мне (хотя svn/git
  тоже неплохой выбор)
FreeBSD
net.inet6.ip6.v6only (THRIFT-16)
net.inet.tcp.delayed_ack (THRIFT-45)
THRIFT-96 иначе в логах слишком
 много ошибок будет
Простая проверка
           Сервер 1 зовет второй,
server 1   зовет третий, а потом
           это все раскручиввается
           назад.

server 2            server 3
Исходник
struct Stamp {
   1: string hostname,
   2: double timestamp,
}

service Test {
  list<Stamp> do_loop(1: list<string> hosts)
}
Результат
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
Что еще
• http://incubator.apache.org/thrift/
• Исходники тестов
  – 12 строчек клиент
  – 24 сервер + 18 создание сервера.
Вопросы?
shigin@rambler-co.ru

More Related Content

What's hot

Almost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationAlmost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migration
gueste4928d
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1Liudmila Li
 
классификация вредоносного по
классификация вредоносного поклассификация вредоносного по
классификация вредоносного по
anna.korovko
 
Perl-мероприятия
Perl-мероприятияPerl-мероприятия
Perl-мероприятияAndrew Shitov
 
Perl & Coding Standards
Perl & Coding StandardsPerl & Coding Standards
Perl & Coding Standards
Valeriy Studennikov
 
Quick and Clean with Ruby on Rails
Quick and Clean with Ruby on RailsQuick and Clean with Ruby on Rails
Quick and Clean with Ruby on Rails
sava
 
04 Xa5 Fp1 Sergey Kh
04 Xa5 Fp1 Sergey Kh04 Xa5 Fp1 Sergey Kh
04 Xa5 Fp1 Sergey KhLiudmila Li
 
Введение в Subversion
Введение в SubversionВведение в Subversion
Введение в SubversionStas Fomin
 
Wyse Präsentation C Itrix S E Russian
Wyse  Präsentation  C Itrix  S E  RussianWyse  Präsentation  C Itrix  S E  Russian
Wyse Präsentation C Itrix S E RussianLiudmila Li
 
Alexander Bokovoy Scaling Cifs With Ctdb
Alexander Bokovoy Scaling Cifs With CtdbAlexander Bokovoy Scaling Cifs With Ctdb
Alexander Bokovoy Scaling Cifs With CtdbOntico
 
Sergey Kh Xs Essentials
Sergey Kh Xs EssentialsSergey Kh Xs Essentials
Sergey Kh Xs EssentialsLiudmila Li
 
Почему я программирую на Perl‎
Почему я программирую на Perl‎Почему я программирую на Perl‎
Почему я программирую на Perl‎
Anatoly Sharifulin
 

What's hot (19)

Christofides
ChristofidesChristofides
Christofides
 
Almost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationAlmost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migration
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
 
классификация вредоносного по
классификация вредоносного поклассификация вредоносного по
классификация вредоносного по
 
Xrumme
XrummeXrumme
Xrumme
 
Package Problem 2
Package Problem 2Package Problem 2
Package Problem 2
 
Perl-мероприятия
Perl-мероприятияPerl-мероприятия
Perl-мероприятия
 
Perl & Coding Standards
Perl & Coding StandardsPerl & Coding Standards
Perl & Coding Standards
 
10 Xs Dg
10 Xs Dg10 Xs Dg
10 Xs Dg
 
Quick and Clean with Ruby on Rails
Quick and Clean with Ruby on RailsQuick and Clean with Ruby on Rails
Quick and Clean with Ruby on Rails
 
04 Xa5 Fp1 Sergey Kh
04 Xa5 Fp1 Sergey Kh04 Xa5 Fp1 Sergey Kh
04 Xa5 Fp1 Sergey Kh
 
Введение в Subversion
Введение в SubversionВведение в Subversion
Введение в Subversion
 
Xen virtualization
Xen virtualizationXen virtualization
Xen virtualization
 
08 Xenserver Dg
08 Xenserver Dg08 Xenserver Dg
08 Xenserver Dg
 
Fedoseev Sofs
Fedoseev SofsFedoseev Sofs
Fedoseev Sofs
 
Wyse Präsentation C Itrix S E Russian
Wyse  Präsentation  C Itrix  S E  RussianWyse  Präsentation  C Itrix  S E  Russian
Wyse Präsentation C Itrix S E Russian
 
Alexander Bokovoy Scaling Cifs With Ctdb
Alexander Bokovoy Scaling Cifs With CtdbAlexander Bokovoy Scaling Cifs With Ctdb
Alexander Bokovoy Scaling Cifs With Ctdb
 
Sergey Kh Xs Essentials
Sergey Kh Xs EssentialsSergey Kh Xs Essentials
Sergey Kh Xs Essentials
 
Почему я программирую на Perl‎
Почему я программирую на Perl‎Почему я программирую на Perl‎
Почему я программирую на Perl‎
 

More from Ontico

Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Ontico
 
Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015
Ontico
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++
Ontico
 
Call for papers (2014) ru
Call for papers (2014) ruCall for papers (2014) ru
Call for papers (2014) ru
Ontico
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Ontico
 
Как разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинКак разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинOntico
 
Конференции Онтико (2011)
Конференции Онтико (2011)Конференции Онтико (2011)
Конференции Онтико (2011)Ontico
 
Программный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряПрограммный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октября
Ontico
 
Конференции 2010 / описание
Конференции 2010 / описаниеКонференции 2010 / описание
Конференции 2010 / описаниеOntico
 
Онтико, 2009
Онтико, 2009Онтико, 2009
Онтико, 2009
Ontico
 
Конференции 2010
Конференции 2010Конференции 2010
Конференции 2010Ontico
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project developmentOntico
 
Ok2009 Пленарка
Ok2009 ПленаркаOk2009 Пленарка
Ok2009 ПленаркаOntico
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Ontico
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c BitrixOntico
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c BitrixOntico
 
Gmr Highload Presentation Revised
Gmr Highload Presentation RevisedGmr Highload Presentation Revised
Gmr Highload Presentation RevisedOntico
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusOntico
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusOntico
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusOntico
 

More from Ontico (20)

Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
Риски, которые необходимо учесть при разработке сложного проекта (Олег Бунин)
 
Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015Встреча докладчиков HL++ 2015
Встреча докладчиков HL++ 2015
 
Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++Вебинар о конференции HighLoad++
Вебинар о конференции HighLoad++
 
Call for papers (2014) ru
Call for papers (2014) ruCall for papers (2014) ru
Call for papers (2014) ru
 
Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013Учебный день конференции HighLoad++ 2013
Учебный день конференции HighLoad++ 2013
 
Как разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег БунинКак разработать социальную сеть, Олег Бунин
Как разработать социальную сеть, Олег Бунин
 
Конференции Онтико (2011)
Конференции Онтико (2011)Конференции Онтико (2011)
Конференции Онтико (2011)
 
Программный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октябряПрограммный комитет HighLoad++, 6 октября
Программный комитет HighLoad++, 6 октября
 
Конференции 2010 / описание
Конференции 2010 / описаниеКонференции 2010 / описание
Конференции 2010 / описание
 
Онтико, 2009
Онтико, 2009Онтико, 2009
Онтико, 2009
 
Конференции 2010
Конференции 2010Конференции 2010
Конференции 2010
 
Economy of project development
Economy of project developmentEconomy of project development
Economy of project development
 
Ok2009 Пленарка
Ok2009 ПленаркаOk2009 Пленарка
Ok2009 Пленарка
 
Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009Highload sites, master-class, OK-2009
Highload sites, master-class, OK-2009
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c Bitrix
 
I Safety 1c Bitrix
I Safety 1c BitrixI Safety 1c Bitrix
I Safety 1c Bitrix
 
Gmr Highload Presentation Revised
Gmr Highload Presentation RevisedGmr Highload Presentation Revised
Gmr Highload Presentation Revised
 
Wonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 RusWonderful World Of Mysql Storage Engines Hl2008 Rus
Wonderful World Of Mysql Storage Engines Hl2008 Rus
 
Scaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 RusScaling Web Sites By Sharding And Replication Hl2008 Rus
Scaling Web Sites By Sharding And Replication Hl2008 Rus
 
Innodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 RusInnodb Scalability And New Features Hl2008 Rus
Innodb Scalability And New Features Hl2008 Rus
 

Thrift Hl 2