SlideShare a Scribd company logo
1 of 11
Download to read offline
Размышления о
микросервисах
основано на опыте .IO
В тексте будет использована следующая аббревиатура:
● МС - микросервис
Базы данных - MySQL
Каждый МС - использует связку MySQL + Vertica, где в MySQL лежат рабочие
предаггрегированные данные
В итоге в MySQL лежит не много данных (десятки миллионов), так как данных
не много, то MySQL с ними быстро работает и проблем не возникает
В основе всех таблиц MySQL лежит InnoDB движок
Часть MySQL баз заточена чисто под запись, часть - чисто под чтение, тем
самым достигается максимальная производительность узлов, в зависимости от
назначения узла
Базы данных - MySQL
Для backup используют Percona XtraBackup (online non-blocking, tightly
compressed, highly secured backups)
На каждой ноде свое backup-расписание в зависимости от важности данных и
роли ноды
Или полностью или почти полностью отказались от JOIN таблиц в MySQL
Каждый день на Amazon отгружают порядка 70 Gb бэкапов хорошо сжатых raw
data
Базы данных - Vertica
Условно каждая Vertica база разбита на 2-е части: delta-таблицы, в которые пишется
raw data и рабочие таблицы с аггрегированными данными
Аггрегация происходит через процессоры данных (отдельные МС) с помощью
предаггрегации в MySQL
Культура разработки МС
У каждого, даже самого мелкого МС, есть свой dev-сервер
Разработка ведется в облаке, не используется localhost как временное
окружение для разработчиков ради экономии времени на дополнительный
тестинг + развертывание проекта ((300 дней в году * 15 минут в день) / 9 часов
за рабочий день ~ 8.3 - экономится за год более 8 рабочих дней каждого
разработчика)
Перед разработчиками не стоит задача не допустить ошибку (ошибки
допускают все и всегда), основная задача - построить максимально
отказоустойчивую архитектуру, когда при обнаружени проблемы она бы
устранялась за несколько минут
Культура разработки МС
Новые технологии внедряются только после длительных рисерчей и, всегда, на
небольшой процент малоактивных клиентов
Обязательно должен быть удобный трекинг ошибок для каждого микросервиса,
pupergrep или типо этого
У каждого МС может быть несколько разработчиков, но финально
отвественный за его работу - только 1-н человек
Разработчики сами админят свои МС, есть только 1% случаев когда наличие сис.
админов в команде давало бы существенное преимущество
Культура разработки МС
Разработчики сами решают что включать в МС, а что нет. Основная идея
заключается в том, что лучше предварительно включить более широкий
функционал и, при необходимости, вынести его со временем в отдельный МС
Каждый web-клиент - это тоже отдельный микросервис
99% МС должны работать асинхронно (или частично асинхронно) за редким
исключением (как пример исключения - сервисы авторизации, геолокации -
ответ нужен сразу)
МС должны быть максимально лояльным к работе внешних сервисов - если
какой-то МС выпадает из цепочки система не должна падать
Преимущества МС
МС - масштабируемы, монолитные приложения - нет
Масштабируемость противоречит производительности, но дает возможность
расти приложению
При использовании МС - нельзя убить всю систему, только отдельныюу ее
часть
Все приватные МС можно полностью закрыть фаерволом и завайтлистить
только те ноды, которые работают в рамках системы - таким образом бОльшая
часть системы защищена от внешнего воздействия
Преимущества МС
Монолит - большой кусок говна, когда каках много, в них очень тяжело
разбираться и вносить в них правки. Когда приложение разбито на МС - имеем
много мелких каках, которые не тесно связаны друг с другом. Меняя что-то в
монолите есть большой шанс что это изменения поломают какой-то другой
функционал (можно даже не знать что он есть), а так как каждый МС
изолирован в разработке и своих ресурсах, то, внося в него изменения, поломать
можно только его.
МС - может быть сколь-угодно мал, вплоть до 1-го файла в несколько строк,
главное что бы у него была четкая цель и он ее хорошо выполнял
Особенности архитектуры .IO
В .IO не используют текущие популярные системы очередей (gearman,
rabbitmq, zeromq, etc). Основная мотивация - исключить потери данных. Даже
те системы, которые умеют делать Durable очереди, например, из-за перебоев
работы сети могут фейлить обработку некоторые сообщений. Архитектурное
решение - файловые очереди - после аггрегации некоторых данных они
записываются в файлик с уникальным именем и передаются на обработку через
nginx на нужную ноду, если передача зафейлилась, файл ложится в папку .
/failed и, при следующей отгрузке, пытается отправить его еще раз. Точно так
же и с ответом от ноды. Таким образом фалик с даными лил передан или нет,
или обработан или нет - все данные целостны.

More Related Content

Viewers also liked

Хипстеры в энтерпрайзе
Хипстеры в энтерпрайзеХипстеры в энтерпрайзе
Хипстеры в энтерпрайзеAleksandr Tarasov
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxDotNetConf
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокDotNetConf
 
Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»DataArt
 
Павел Масс (IT2U) «Микросервисы»
Павел Масс (IT2U) «Микросервисы»Павел Масс (IT2U) «Микросервисы»
Павел Масс (IT2U) «Микросервисы»DZ Systems
 
Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Ivan Evtukhovich
 
Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?Chris Sterling
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубыAleksandr Tarasov
 
Микросервисы в бизнес-приложениях: Теория и практика
Микросервисы в бизнес-приложениях: Теория и практикаМикросервисы в бизнес-приложениях: Теория и практика
Микросервисы в бизнес-приложениях: Теория и практикаCEE-SEC(R)
 
Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Ivan Evtukhovich
 

Viewers also liked (11)

Хипстеры в энтерпрайзе
Хипстеры в энтерпрайзеХипстеры в энтерпрайзе
Хипстеры в энтерпрайзе
 
Continuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под LinuxContinuous Delivery для ASP.NET MVC проекта под Linux
Continuous Delivery для ASP.NET MVC проекта под Linux
 
Микросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бокМикросервисы: взгляд сверху и в бок
Микросервисы: взгляд сверху и в бок
 
Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»Макс Волошин «Микросервисы на практике»
Макс Волошин «Микросервисы на практике»
 
Павел Масс (IT2U) «Микросервисы»
Павел Масс (IT2U) «Микросервисы»Павел Масс (IT2U) «Микросервисы»
Павел Масс (IT2U) «Микросервисы»
 
Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?
 
Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?Microservices: Aren't Microservices Just SOA?
Microservices: Aren't Microservices Just SOA?
 
микроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубымикроСЕРВИСЫ: огонь, вода и медные трубы
микроСЕРВИСЫ: огонь, вода и медные трубы
 
Microservices (en)
Microservices (en)Microservices (en)
Microservices (en)
 
Микросервисы в бизнес-приложениях: Теория и практика
Микросервисы в бизнес-приложениях: Теория и практикаМикросервисы в бизнес-приложениях: Теория и практика
Микросервисы в бизнес-приложениях: Теория и практика
 
Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?Микросервисы: откуда столько шума?
Микросервисы: откуда столько шума?
 

Similar to Microservices thoughts (ru)

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
 
Konspekt
KonspektKonspekt
KonspektArtem
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBPavel Treshnikov
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
Node.js microservices
Node.js microservicesNode.js microservices
Node.js microservicesAndrij Tytar
 
NodeJS микросервисная архитектура, Андрей Титарь
NodeJS микросервисная архитектура, Андрей ТитарьNodeJS микросервисная архитектура, Андрей Титарь
NodeJS микросервисная архитектура, Андрей ТитарьSigma Software
 
Web20 from zero
Web20 from zeroWeb20 from zero
Web20 from zeroqweasdrty
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Ontico
 
Архитектура Операционных Систем
Архитектура Операционных СистемАрхитектура Операционных Систем
Архитектура Операционных Системkurbanovafaina
 
MySQL: проблемы роста
MySQL: проблемы ростаMySQL: проблемы роста
MySQL: проблемы ростаKostja Osipov
 
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Vasily Sartakov
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Provectus
 
проектная работа на тему субд
проектная работа на тему субдпроектная работа на тему субд
проектная работа на тему субдMarsel Galikhanov
 
основы микропроцессорной техники
основы микропроцессорной техникиосновы микропроцессорной техники
основы микропроцессорной техникиMary Dimitrova
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Александр Ежов
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"Badoo Development
 
раубичи ронд
раубичи рондраубичи ронд
раубичи рондzolik
 
раздел 1 введение в базы данных
раздел 1  введение в базы данныхраздел 1  введение в базы данных
раздел 1 введение в базы данныхtatianabtt
 

Similar to Microservices thoughts (ru) (20)

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
 
Konspekt
KonspektKonspekt
Konspekt
 
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESBАрхитектура масштабируемых приложений. Микросервисы, CQRS, ESB
Архитектура масштабируемых приложений. Микросервисы, CQRS, ESB
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
Node.js microservices
Node.js microservicesNode.js microservices
Node.js microservices
 
NodeJS микросервисная архитектура, Андрей Титарь
NodeJS микросервисная архитектура, Андрей ТитарьNodeJS микросервисная архитектура, Андрей Титарь
NodeJS микросервисная архитектура, Андрей Титарь
 
Web20 from zero
Web20 from zeroWeb20 from zero
Web20 from zero
 
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
Практическое создание крупного масштабируемого web 2.0 c нуля (Дмитрий Бородин)
 
Архитектура Операционных Систем
Архитектура Операционных СистемАрхитектура Операционных Систем
Архитектура Операционных Систем
 
MySQL: проблемы роста
MySQL: проблемы ростаMySQL: проблемы роста
MySQL: проблемы роста
 
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
 
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
Eduard Dautov (Provectus): СКОРИНГ ML МОДЕЛЕЙ В МИКРОСЕРВИСНОЙ АРХИТЕКТУРЕ
 
проектная работа на тему субд
проектная работа на тему субдпроектная работа на тему субд
проектная работа на тему субд
 
основы микропроцессорной техники
основы микропроцессорной техникиосновы микропроцессорной техники
основы микропроцессорной техники
 
01
0101
01
 
Mymanager
MymanagerMymanager
Mymanager
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015
 
"Производительность MySQL: что нового?"
"Производительность MySQL: что нового?""Производительность MySQL: что нового?"
"Производительность MySQL: что нового?"
 
раубичи ронд
раубичи рондраубичи ронд
раубичи ронд
 
раздел 1 введение в базы данных
раздел 1  введение в базы данныхраздел 1  введение в базы данных
раздел 1 введение в базы данных
 

Microservices thoughts (ru)

  • 2. В тексте будет использована следующая аббревиатура: ● МС - микросервис
  • 3. Базы данных - MySQL Каждый МС - использует связку MySQL + Vertica, где в MySQL лежат рабочие предаггрегированные данные В итоге в MySQL лежит не много данных (десятки миллионов), так как данных не много, то MySQL с ними быстро работает и проблем не возникает В основе всех таблиц MySQL лежит InnoDB движок Часть MySQL баз заточена чисто под запись, часть - чисто под чтение, тем самым достигается максимальная производительность узлов, в зависимости от назначения узла
  • 4. Базы данных - MySQL Для backup используют Percona XtraBackup (online non-blocking, tightly compressed, highly secured backups) На каждой ноде свое backup-расписание в зависимости от важности данных и роли ноды Или полностью или почти полностью отказались от JOIN таблиц в MySQL Каждый день на Amazon отгружают порядка 70 Gb бэкапов хорошо сжатых raw data
  • 5. Базы данных - Vertica Условно каждая Vertica база разбита на 2-е части: delta-таблицы, в которые пишется raw data и рабочие таблицы с аггрегированными данными Аггрегация происходит через процессоры данных (отдельные МС) с помощью предаггрегации в MySQL
  • 6. Культура разработки МС У каждого, даже самого мелкого МС, есть свой dev-сервер Разработка ведется в облаке, не используется localhost как временное окружение для разработчиков ради экономии времени на дополнительный тестинг + развертывание проекта ((300 дней в году * 15 минут в день) / 9 часов за рабочий день ~ 8.3 - экономится за год более 8 рабочих дней каждого разработчика) Перед разработчиками не стоит задача не допустить ошибку (ошибки допускают все и всегда), основная задача - построить максимально отказоустойчивую архитектуру, когда при обнаружени проблемы она бы устранялась за несколько минут
  • 7. Культура разработки МС Новые технологии внедряются только после длительных рисерчей и, всегда, на небольшой процент малоактивных клиентов Обязательно должен быть удобный трекинг ошибок для каждого микросервиса, pupergrep или типо этого У каждого МС может быть несколько разработчиков, но финально отвественный за его работу - только 1-н человек Разработчики сами админят свои МС, есть только 1% случаев когда наличие сис. админов в команде давало бы существенное преимущество
  • 8. Культура разработки МС Разработчики сами решают что включать в МС, а что нет. Основная идея заключается в том, что лучше предварительно включить более широкий функционал и, при необходимости, вынести его со временем в отдельный МС Каждый web-клиент - это тоже отдельный микросервис 99% МС должны работать асинхронно (или частично асинхронно) за редким исключением (как пример исключения - сервисы авторизации, геолокации - ответ нужен сразу) МС должны быть максимально лояльным к работе внешних сервисов - если какой-то МС выпадает из цепочки система не должна падать
  • 9. Преимущества МС МС - масштабируемы, монолитные приложения - нет Масштабируемость противоречит производительности, но дает возможность расти приложению При использовании МС - нельзя убить всю систему, только отдельныюу ее часть Все приватные МС можно полностью закрыть фаерволом и завайтлистить только те ноды, которые работают в рамках системы - таким образом бОльшая часть системы защищена от внешнего воздействия
  • 10. Преимущества МС Монолит - большой кусок говна, когда каках много, в них очень тяжело разбираться и вносить в них правки. Когда приложение разбито на МС - имеем много мелких каках, которые не тесно связаны друг с другом. Меняя что-то в монолите есть большой шанс что это изменения поломают какой-то другой функционал (можно даже не знать что он есть), а так как каждый МС изолирован в разработке и своих ресурсах, то, внося в него изменения, поломать можно только его. МС - может быть сколь-угодно мал, вплоть до 1-го файла в несколько строк, главное что бы у него была четкая цель и он ее хорошо выполнял
  • 11. Особенности архитектуры .IO В .IO не используют текущие популярные системы очередей (gearman, rabbitmq, zeromq, etc). Основная мотивация - исключить потери данных. Даже те системы, которые умеют делать Durable очереди, например, из-за перебоев работы сети могут фейлить обработку некоторые сообщений. Архитектурное решение - файловые очереди - после аггрегации некоторых данных они записываются в файлик с уникальным именем и передаются на обработку через nginx на нужную ноду, если передача зафейлилась, файл ложится в папку . /failed и, при следующей отгрузке, пытается отправить его еще раз. Точно так же и с ответом от ноды. Таким образом фалик с даными лил передан или нет, или обработан или нет - все данные целостны.