Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Submit Search
Upload
Путь к Go на конкретном примере
•
1 like
•
806 views
Sergey Xek
Follow
Опыт пилотной разработки микросервиса на Go и оценки производительности
Read less
Read more
Report
Share
Related slideshows
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
Report
Share
1 of 38
Download now
Download to read offline
More Related Content
Путь к 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
5.
©2016 5 Python-way 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-клиента
14.
©2016 14 Python-way
15.
©2016 15 Python-way
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
18.
©2016 18 Python-way …почему так
мало?
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 -> глубокий стек, трудно дебажить − Война промисов-корутин-коллбеков − Надо написать свой обвязочно-костыльный асинхронный фреймворк чтобы оно заработало
26.
©2016 26 Python-way ?
27.
©2016 27 Python-way ?…а давайте
попробуем на каком-нть другом языке?
28.
Про Go
29.
©2016 29 Go-way Что изначально
понравилось: • Простой и немногословный синтаксис • Язык заставляет делать хорошую архитектуру • Вся асинхронщина «просто работает» • Есть package-manager из коробки • Есть хорошая документация • Есть единый универсальный SQL-package
30.
©2016 30 Go-way С чем
пришлось повозиться: • Чуть более сложный маппинг структур в SQL • Не нашлось библиотеки по приведению типов (маршаллинг), пришлось написать самостоятельно • Дольше подбор существующих библиотек под задачи • Мелкие глюки отдельных библиотек, типа SQL BIT поля читаются как 0x31/0x30 • Логирование из коробки так себе
31.
©2016 31 Go-way
32.
©2016 32 Go-way
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(…); } − Жаль, синтаксис весьма скуден
37.
©2016 37 Спасибо! Вопросы? Аверин Сергей twitter.com/ryba_xek s@averin.ru averin.ru/slides/ facebook.com/ryba.xek
38.
acronis.com blog.acronis.com twitter.com/acronis facebook.com/acronis New Generation Data
Protection Powered by Acronis AnyData Technology
Download now