SlideShare a Scribd company logo
1 of 38
Download to read offline
New Generation Data Protection
Powered by Acronis AnyData Technology
Путь к Go на конкретном
примере
Аверин Сергей, Acronis
©2016 2
в цифрах
5 миллионов
Более 5 млн обычных людей
доверяют компании 

хранить свои личные данные
500 000
Число корпоративных
заказчиков из разных
отраслей экономики
30 000
Обширная экосистема 

из 30 000 бизнес-партнеров, 

среди которых 300 — ОЕМ-партнеры
150 стран
Продукты компании
переведены на 18 языков,
пользуются ими 

в 150 странах мира
750 человек
750 сотрудников, 23 офиса по всему
миру, среди сотрудников 

компании более 350 инженеров
высшего класса
45 наград
Авторитетные издания не раз
признавали продукты компании
лучшими на рынке
Домашние

пользователи
Корпоративные

клиенты
Партнеры
География Сотрудники Признание
Нужен микросервис для хранения и
обновления инфы об инфраструктуре
©2016 4
Python-way
1) Хотим python 3.5, async/await, asyncio
2) Все это должно работать с AMQP (RabbitMQ)
3) Должна быть поддержка MySQL, PostgreSQL, MSSQL и SQlite
4) Основной костяк людей хорошо знает Tornado framework
©2016 5
Python-way
Tornado framework
©2016 6
Python-way
Tornado framework
− Нет поддержки async/await
©2016 7
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
©2016 8
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
− Сложные синхронные процедуры (вычисления)
тормозят единственный тред
©2016 9
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
− Сложные синхронные процедуры (вычисления)
тормозят единственный тред
+ Есть стандартная библиотека AMQP-клиента
©2016 10
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
− Сложные синхронные процедуры (вычисления)
тормозят единственный тред
+ Есть стандартная библиотека AMQP-клиента
©2016 11
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
− Сложные синхронные процедуры (вычисления)
тормозят единственный тред
+ Есть стандартная библиотека AMQP-клиента
©2016 12
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
− Сложные синхронные процедуры (вычисления)
тормозят единственный тред
+ Есть стандартная библиотека AMQP-клиента
©2016 13
Python-way
Tornado framework
− Нет поддержки async/await
− Нет масштабирования по тредам/процессам
− Сложные синхронные процедуры (вычисления)
тормозят единственный тред
+ Есть стандартная библиотека AMQP-клиента
©2016 14
Python-way
©2016 15
Python-way
©2016 16
Python-way: Тесты RPS
На одном Macbook Pro 15”: RabbitMQ, клиент, сервер
100 000 запросов
Сервер: 1 процесс, 1 воркер-тред, QOS=1, 1 коннект к базе
223 RPS
©2016 17
Python-way: Тесты RPS
На одном Macbook Pro 15”: RabbitMQ, клиент, сервер
100 000 запросов
Сервер: 1 процесс, 1 воркер-тред, QOS=1, 1 коннект к базе
223 RPS
1 процесс, 32 воркер-треда, QOS=32, 16 коннектов к базе
301 RPS
©2016 18
Python-way
…почему так мало?
©2016 19
Python-way
…почему так мало?
• Выключаем всякие special фичи AMQP
©2016 20
Python-way
…почему так мало?
• Выключаем всякие special фичи AMQP
• А БД-то синхронная!
©2016 21
Python-way
…почему так мало?
• Выключаем всякие special фичи AMQP
• А БД-то синхронная! Async Postgres client, пока,
SQLAlchemy…
©2016 22
Python-way
…почему так мало?
• Выключаем всякие special фичи AMQP
• А БД-то синхронная! Async Postgres client, пока,
SQLAlchemy…
• перспектива с поддержкой async MySQL,
MSSQL и SQlite
©2016 23
Python-way
…почему так мало?
• Выключаем всякие special фичи AMQP
• А БД-то синхронная! Async Postgres client, пока,
SQLAlchemy…
• перспектива с поддержкой async MySQL,
MSSQL и SQlite
• выжимаем 585 RPS… а можно ли больше?
©2016 24
Python-way
Итого, плюсы:
+ Известный популярный язык без сюрпризов
+ Код бизнес-логики приятен и понятен
+ Удобно валидируются и конвертятся данные,
приходящие в JSON
©2016 25
Python-way
Итого, минусы:
− Asyncio ядро не любит долгих тупняков
− Вся асинхронщина реализуется кодом на Python ->
глубокий стек, трудно дебажить
− Война промисов-корутин-коллбеков
− Надо написать свой обвязочно-костыльный
асинхронный фреймворк чтобы оно заработало
©2016 26
Python-way
?
©2016 27
Python-way
?…а давайте попробуем на каком-нть
другом языке?
Про Go
©2016 29
Go-way
Что изначально понравилось:
• Простой и немногословный синтаксис
• Язык заставляет делать хорошую архитектуру
• Вся асинхронщина «просто работает»
• Есть package-manager из коробки
• Есть хорошая документация
• Есть единый универсальный SQL-package
©2016 30
Go-way
С чем пришлось повозиться:
• Чуть более сложный маппинг структур в SQL
• Не нашлось библиотеки по приведению типов
(маршаллинг), пришлось написать самостоятельно
• Дольше подбор существующих библиотек под задачи
• Мелкие глюки отдельных библиотек, типа SQL BIT поля
читаются как 0x31/0x30
• Логирование из коробки так себе
©2016 31
Go-way
©2016 32
Go-way
©2016 33
Go-way
Делаем простенький однопоточный сервис в 1 файл.
1 горутина, AMQP QOS = 1, 1 коннект к базе
1063 RPS
©2016 34
Go-way
Делаем простенький однопоточный сервис в 1 файл.
1 горутина, AMQP QOS = 1, 1 коннект к базе
1063 RPS
Переписали на нормальный код, получили рабочий сервис
и ~1087 RPS (и никакие оптимизации уже не помогали)
©2016 35
Go-way
Итого, плюсы:
+ Если сравнивать с C++, то сильно проще и менее бажно
+ Все асинхронное и удобное из коробки
+ Работает быстрее Python в нашей практике, даже всего
при 2 горутинах
©2016 36
Go-way
Итого, минусы:
− Дебажить сложнее, и не все видно
− Строгая типизация (еще и машинно-зависимая) —
больше мучений чем хотелось бы
− Код усеивается конструкциями if (error != nil) { panic(…); }
− Жаль, синтаксис весьма скуден
©2016 37
Спасибо!
Вопросы?
Аверин Сергей

twitter.com/ryba_xek

s@averin.ru

averin.ru/slides/
facebook.com/ryba.xek
acronis.com
blog.acronis.com
twitter.com/acronis
facebook.com/acronis
New Generation Data Protection
Powered by Acronis AnyData Technology

More Related Content

What's hot

OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...Ontico
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Ontico
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на SphinxRoman Pavlushko
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеAlexandr Krasheninnikov
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Ontico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...Ontico
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Fwdays
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 

What's hot (20)

OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
LuaJIT как основа для сервера приложений - проблемы и решения / Игорь Эрлих (...
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"Anton Turetckii "What does it take to build a host?"
Anton Turetckii "What does it take to build a host?"
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 

Viewers also liked

Обработка геоданных в Go
Обработка геоданных в GoОбработка геоданных в Go
Обработка геоданных в GoAndrew Minkin
 
Пословицы дядюшки Пайка
Пословицы дядюшки ПайкаПословицы дядюшки Пайка
Пословицы дядюшки ПайкаElena Grahovac
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической командыSergey Xek
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Sergey Xek
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейкахSergey Xek
 
5 мифов о производительности баз данных и Python
5 мифов о производительности баз данных и Python5 мифов о производительности баз данных и Python
5 мифов о производительности баз данных и PythonMax Klymyshyn
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Ontico
 
Python и высокая нагрузка
Python и высокая нагрузкаPython и высокая нагрузка
Python и высокая нагрузкаAlexander Shigin
 
Gtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part IiGtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part IiMaxim Dorofeev
 
Gtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part IGtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part IMaxim Dorofeev
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellAlexey Lesovsky
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусеArtem Kovardin
 
Codefest 2016 - Go в Openprovider
Codefest 2016 - Go в OpenproviderCodefest 2016 - Go в Openprovider
Codefest 2016 - Go в OpenproviderIgor Dolzhikov
 
Обзорная экскурсия по runit
Обзорная экскурсия по runitОбзорная экскурсия по runit
Обзорная экскурсия по runitAlexander Shcherbinin
 
РИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнес
РИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнесРИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнес
РИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнесAnton Piskunov
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 

Viewers also liked (20)

Обработка геоданных в Go
Обработка геоданных в GoОбработка геоданных в Go
Обработка геоданных в Go
 
Пословицы дядюшки Пайка
Пословицы дядюшки ПайкаПословицы дядюшки Пайка
Пословицы дядюшки Пайка
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической команды
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейках
 
5 мифов о производительности баз данных и Python
5 мифов о производительности баз данных и Python5 мифов о производительности баз данных и Python
5 мифов о производительности баз данных и Python
 
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
Расширяемость PostgreSQL для хакеров и архитекторов / Олег Бартунов, Александ...
 
Python и высокая нагрузка
Python и высокая нагрузкаPython и высокая нагрузка
Python и высокая нагрузка
 
Big Data aggregation techniques
Big Data aggregation techniquesBig Data aggregation techniques
Big Data aggregation techniques
 
Gtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part IiGtd Dev Labs2010 Part Ii
Gtd Dev Labs2010 Part Ii
 
Gtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part IGtd Dev Labs2010 Part I
Gtd Dev Labs2010 Part I
 
PostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of HellPostgreSQL Vacuum: Nine Circles of Hell
PostgreSQL Vacuum: Nine Circles of Hell
 
Go в автобусе
Go в автобусеGo в автобусе
Go в автобусе
 
Codefest 2016 - Go в Openprovider
Codefest 2016 - Go в OpenproviderCodefest 2016 - Go в Openprovider
Codefest 2016 - Go в Openprovider
 
Обзорная экскурсия по runit
Обзорная экскурсия по runitОбзорная экскурсия по runit
Обзорная экскурсия по runit
 
Golang
GolangGolang
Golang
 
РИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнес
РИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнесРИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнес
РИФ+КИБ 2016: как потратить почти 2 миллиона рублей и так и не сделать бизнес
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 

Similar to Путь к Go на конкретном примере

Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)
KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)
KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)SIPLABS Communications
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...it-people
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Tanya Denisyuk
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под CocaineCodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под CocaineCodeFest
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALab
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Fwdays
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighLoad2009
 
dotnext version of "Tarantool, .net, newsql"
dotnext version of "Tarantool, .net, newsql"dotnext version of "Tarantool, .net, newsql"
dotnext version of "Tarantool, .net, newsql"Anatoly Popov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Cisco Russia
 

Similar to Путь к Go на конкретном примере (20)

Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
Sivko
SivkoSivko
Sivko
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)
KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)
KAZOOMEETUP MOSCOW 2015. Михаил Родионов. Введение в KAZOO (KAZOO 101)
 
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
DUMP-2015 «Микросервисная архитектура в теории и на практике» Иван Бурмистров...
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Аверин "Распространенные ошибки применения баз данных"
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под CocaineCodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo Os
 
dotnext version of "Tarantool, .net, newsql"
dotnext version of "Tarantool, .net, newsql"dotnext version of "Tarantool, .net, newsql"
dotnext version of "Tarantool, .net, newsql"
 
Async Python
Async PythonAsync Python
Async Python
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
 

More from Sergey Xek

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте Sergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьSergey Xek
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL Sergey Xek
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosqlSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныSergey Xek
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Sergey Xek
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 

More from Sergey Xek (13)

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosql
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 

Путь к Go на конкретном примере

  • 1. New Generation Data Protection Powered by Acronis AnyData Technology Путь к Go на конкретном примере Аверин Сергей, Acronis
  • 2. ©2016 2 в цифрах 5 миллионов Более 5 млн обычных людей доверяют компании 
 хранить свои личные данные 500 000 Число корпоративных заказчиков из разных отраслей экономики 30 000 Обширная экосистема 
 из 30 000 бизнес-партнеров, 
 среди которых 300 — ОЕМ-партнеры 150 стран Продукты компании переведены на 18 языков, пользуются ими 
 в 150 странах мира 750 человек 750 сотрудников, 23 офиса по всему миру, среди сотрудников 
 компании более 350 инженеров высшего класса 45 наград Авторитетные издания не раз признавали продукты компании лучшими на рынке Домашние
 пользователи Корпоративные
 клиенты Партнеры География Сотрудники Признание
  • 3. Нужен микросервис для хранения и обновления инфы об инфраструктуре
  • 4. ©2016 4 Python-way 1) Хотим python 3.5, async/await, asyncio 2) Все это должно работать с AMQP (RabbitMQ) 3) Должна быть поддержка MySQL, PostgreSQL, MSSQL и SQlite 4) Основной костяк людей хорошо знает Tornado framework
  • 6. ©2016 6 Python-way Tornado framework − Нет поддержки async/await
  • 7. ©2016 7 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам
  • 8. ©2016 8 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам − Сложные синхронные процедуры (вычисления) тормозят единственный тред
  • 9. ©2016 9 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам − Сложные синхронные процедуры (вычисления) тормозят единственный тред + Есть стандартная библиотека AMQP-клиента
  • 10. ©2016 10 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам − Сложные синхронные процедуры (вычисления) тормозят единственный тред + Есть стандартная библиотека AMQP-клиента
  • 11. ©2016 11 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам − Сложные синхронные процедуры (вычисления) тормозят единственный тред + Есть стандартная библиотека AMQP-клиента
  • 12. ©2016 12 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам − Сложные синхронные процедуры (вычисления) тормозят единственный тред + Есть стандартная библиотека AMQP-клиента
  • 13. ©2016 13 Python-way Tornado framework − Нет поддержки async/await − Нет масштабирования по тредам/процессам − Сложные синхронные процедуры (вычисления) тормозят единственный тред + Есть стандартная библиотека AMQP-клиента
  • 16. ©2016 16 Python-way: Тесты RPS На одном Macbook Pro 15”: RabbitMQ, клиент, сервер 100 000 запросов Сервер: 1 процесс, 1 воркер-тред, QOS=1, 1 коннект к базе 223 RPS
  • 17. ©2016 17 Python-way: Тесты RPS На одном Macbook Pro 15”: RabbitMQ, клиент, сервер 100 000 запросов Сервер: 1 процесс, 1 воркер-тред, QOS=1, 1 коннект к базе 223 RPS 1 процесс, 32 воркер-треда, QOS=32, 16 коннектов к базе 301 RPS
  • 19. ©2016 19 Python-way …почему так мало? • Выключаем всякие special фичи AMQP
  • 20. ©2016 20 Python-way …почему так мало? • Выключаем всякие special фичи AMQP • А БД-то синхронная!
  • 21. ©2016 21 Python-way …почему так мало? • Выключаем всякие special фичи AMQP • А БД-то синхронная! Async Postgres client, пока, SQLAlchemy…
  • 22. ©2016 22 Python-way …почему так мало? • Выключаем всякие special фичи AMQP • А БД-то синхронная! Async Postgres client, пока, SQLAlchemy… • перспектива с поддержкой async MySQL, MSSQL и SQlite
  • 23. ©2016 23 Python-way …почему так мало? • Выключаем всякие special фичи AMQP • А БД-то синхронная! Async Postgres client, пока, SQLAlchemy… • перспектива с поддержкой async MySQL, MSSQL и SQlite • выжимаем 585 RPS… а можно ли больше?
  • 24. ©2016 24 Python-way Итого, плюсы: + Известный популярный язык без сюрпризов + Код бизнес-логики приятен и понятен + Удобно валидируются и конвертятся данные, приходящие в JSON
  • 25. ©2016 25 Python-way Итого, минусы: − Asyncio ядро не любит долгих тупняков − Вся асинхронщина реализуется кодом на Python -> глубокий стек, трудно дебажить − Война промисов-корутин-коллбеков − Надо написать свой обвязочно-костыльный асинхронный фреймворк чтобы оно заработало
  • 27. ©2016 27 Python-way ?…а давайте попробуем на каком-нть другом языке?
  • 29. ©2016 29 Go-way Что изначально понравилось: • Простой и немногословный синтаксис • Язык заставляет делать хорошую архитектуру • Вся асинхронщина «просто работает» • Есть package-manager из коробки • Есть хорошая документация • Есть единый универсальный SQL-package
  • 30. ©2016 30 Go-way С чем пришлось повозиться: • Чуть более сложный маппинг структур в SQL • Не нашлось библиотеки по приведению типов (маршаллинг), пришлось написать самостоятельно • Дольше подбор существующих библиотек под задачи • Мелкие глюки отдельных библиотек, типа SQL BIT поля читаются как 0x31/0x30 • Логирование из коробки так себе
  • 33. ©2016 33 Go-way Делаем простенький однопоточный сервис в 1 файл. 1 горутина, AMQP QOS = 1, 1 коннект к базе 1063 RPS
  • 34. ©2016 34 Go-way Делаем простенький однопоточный сервис в 1 файл. 1 горутина, AMQP QOS = 1, 1 коннект к базе 1063 RPS Переписали на нормальный код, получили рабочий сервис и ~1087 RPS (и никакие оптимизации уже не помогали)
  • 35. ©2016 35 Go-way Итого, плюсы: + Если сравнивать с C++, то сильно проще и менее бажно + Все асинхронное и удобное из коробки + Работает быстрее Python в нашей практике, даже всего при 2 горутинах
  • 36. ©2016 36 Go-way Итого, минусы: − Дебажить сложнее, и не все видно − Строгая типизация (еще и машинно-зависимая) — больше мучений чем хотелось бы − Код усеивается конструкциями if (error != nil) { panic(…); } − Жаль, синтаксис весьма скуден