SlideShare a Scribd company logo
1 of 40
Использование .NET Core и
Linux в реальных системах
Анатолий Попов
System architect
О чём мы поговорим?
• .net core
• контейнеризация приложений
• linux в .net приложениях
• Tarantool: зачем и почему?
Новая структура .net и версии
• Netstandard – интерфейс
• .net core и .net framework – реализации
• .net core sdk – SDK для разработки
Netstandard implementation
https://docs.microsoft.com/en-us/dotnet/standard/net-standard
Преимущества
• Кроссплатформенный
• Open source
• xcopy—совместимая публикация приложений
Кроссплатформенность
• Можно использовать VS2017
• Production ready: https://evote.com
• Можно разрабатывать на маках: https://dev.evote.work:8080
Open source
• https://github.com/dotnet/
• https://github.com/dotnet/corefxlab
• Можно быстрее итерировать:
• Span<T>
• Скорость коллекций:
https://blogs.msdn.microsoft.com/dotnet/2017/06/07/performance-
improvements-in-net-core/
xcopy публикация
• dotnet publish – единственный вариант
• Framework dependent deployment
• Self-contained deployment
Ограничения
• Нет WinForms, WPF, etc.
• Не все библиотеки доступны
• с .netstandard 2.0 стало сильно лучше
• Необходимо VS2015+, последний апдейт, .net461+
• Обёртки типа imagemagick пишем сами
Инструменты
• Microsoft IDE: VS2015, VS2017, VS for mac
• Jetbrains Rider
• Editors: vs code, atom, etc. + OmniSharp
А когда релиз?
• Release 1.0: 27.06.2016
• Release 2.0: 14.08.2017
Поддержка
• .net core 1.1, 1.0 – up to 27.06.2019
• .net core 2.0 – up to 14.08.2020
Demo: docker debug
Контейнеры
• Они с нами давно (Jails, LXC, Solaris zones)
• Наиболее популярный вариант сейчас – Docker
• Docker for Windows/Mac – VM
• Windows containers
Что такое Docker?
https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc
Разрушим мифы
• Практически никакого оверхеда по CPU и памяти
• Практически никакого оверхеда по IO, если использовать volume
• Достаточно серьёзный оверхед по сети (Project Calico)
Источник: IBM Research Report An Updated Performance Comparison of Virtual Machines and Linux Containers
https://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf
Docker-образ
• Самое важное во всей экосистеме Docker
• Инкапсулирует в себе все зависимости
• Подписывается после сборки и неизменен
Официальные образы для .net
• 1.0 & 1.1  jessie-based
• 2.0  stretch-based
• sdk (539 МБ)
• runtime (95 МБ)
• runtime-deps (68 МБ)
Что используем мы?
• 2.0.0-img7.0.6-9-nodejs-6-sdk – 773 МБ
• 2.0.0-img7.0.6-9-runtime - 337 МБ
Что мигрируем?
• Solution > 70 проектов
• 1 IIS приложение
• 2 службы
• Несколько утилит
.net 46 => .net core1.1
• Несколько попыток, последняя – 3 месяца
• Пришлось поддерживать несколько форков OSS
• Невозможно работать с доменами
• Нет HttpContext
Это было непросто
Что получилось на выходе?
• IIS приложение  asp.net core application
• Windows службы  asp.net core application
• Tools  asp.net core application
• 55 проектов
.net core1.1  .net core 2.0
А зачем всё это?
• Linux-native хранилища  у нас будет линукс
• Если можно убрать windows, то меньше проблем с Ops
• Docker containers можно скачать и посмотреть (.env)
Выбор СУБД
• Нам подходят key-value
• Redis
• Tarantool
• Sql server
• Давно на рынке
• Хороший коннектор для .net [StackExchange.Redis]
• Очень быстрый
• Прекрасная документация
• Скорость.
• Надёжность записи на диск.
• Вторичные индексы.
• Но нет коннектора
Недостатки Redis
• Нет вторичных индексов
• Данные со временем теряют консистентность
• Атомарная реализация через lua или транзакции – медленная
• Выкидываем Redis, берём Tarantool
progaudi.tarantool
• Поддерживаем net46, netstandard1.4, netstandard2.0
• Поддерживаем Windows, Linux и Mac OSX
• Поддерживаем почти полностью IProto, кроме:
• DDL
• сallv1.6 бросает исключение, если функция возвращает null
• Соединение держим только c одной нодой
Коннектор: планы старые
• Переименовать пакет
• Поддержать MsgPackValue (непрозрачный контейнер)
• Добавить более удобную сериализацию в MsgPack: mini-ORM
Коннектор: планы новые
• Распилить пакет на два
• Сделать более удобный интерфейс
• Ускорить, расширить и улучшить
Эксплутация: сервер приложений
• Это его основное назначение
• Мы используем только tarantool/queue
• Также у нас есть немного своей логики на lua
Эксплуатация: синхронная репликация
• В Tarantool её нет
• Ну и в редисе нет
• Ждём bsync
Эксплуатация: master-master
• Master-master не нужен © Илья Космодемьянский
Эксплуатация: версионирование
• Версия докер-контейнера – 1.7.3. Версия тарантула?
• Версия тарантула – 1.7.3-х. Версия докер-контейнера?
• Мы перешли на самосборный контейнер.
Эксплуатация: запросы
• Специфический язык запросов. QA и Ops страдают.
• Ждём sql.
Эксплуатация: мониторинг и логгинг
• Fluentd docker logging driver
• tarantool/prometheus
Выводы?
• .net core работает на Linux, ARM, ARM64 (ну, почти ;))
• Tarantool – хорошая СУБД для .net приложений.
• Tarantool – хорошая очередь для .net приложений.
Вопросы?
Анатолий Попов
evote.com
System Architect
me@aensidhe.ru
https://github.com/aensidhe

More Related Content

What's hot

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015Alex Chistyakov
 
Управление контейнерами в облаках
 Управление контейнерами в облаках Управление контейнерами в облаках
Управление контейнерами в облакахAleksey Zalesov
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Ontico
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Tanya Denisyuk
 
Teach your dockers to use CRanes
Teach your dockers to use CRanesTeach your dockers to use CRanes
Teach your dockers to use CRanesPavel Emelyanov
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Tanya Denisyuk
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Ontico
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Ontico
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterpriseAlex Chistyakov
 
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Ontico
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Ontico
 

What's hot (20)

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015My talk on Docker, Youcon 2015
My talk on Docker, Youcon 2015
 
Управление контейнерами в облаках
 Управление контейнерами в облаках Управление контейнерами в облаках
Управление контейнерами в облаках
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
 
Teach your dockers to use CRanes
Teach your dockers to use CRanesTeach your dockers to use CRanes
Teach your dockers to use CRanes
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"Александр Крашенинников "Hadoop High Availability: опыт Badoo"
Александр Крашенинников "Hadoop High Availability: опыт Badoo"
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterprise
 
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
Microsoft и Linux на одном проекте: как получить лучшее из обоих миров и не р...
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 

Similar to Net core and linux in production

"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsqlAnatoly Popov
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practicesIgor Kurochkin
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в ЯндексеAndrey Kazarinov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStackYandex
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeIosif Itkin
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
DevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System AdministratorDevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System AdministratorJetBrains Russia
 
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
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 

Similar to Net core and linux in production (20)

"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Tarantool, .net, newsql
Tarantool, .net, newsqlTarantool, .net, newsql
Tarantool, .net, newsql
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Breaking logs
Breaking logsBreaking logs
Breaking logs
 
Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
TMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: GenodeTMPA-2013 Sartakov: Genode
TMPA-2013 Sartakov: Genode
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
DevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System AdministratorDevOps в проекте Upsource. Андрей Сизов, System Administrator
DevOps в проекте Upsource. Андрей Сизов, System Administrator
 
dotnext version of "Tarantool, .net, newsql"
dotnext version of "Tarantool, .net, newsql"dotnext version of "Tarantool, .net, newsql"
dotnext version of "Tarantool, .net, newsql"
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 

Net core and linux in production

Editor's Notes

  1. Каждый продукт в определённый момент своей жизни сталкивается с проблемой выбора СУБД. И наш продукт для сбора обратной связи и голосований совершенно не исключение. Модель данных у нас достаточно проста и укладывается в ограничения, которые накладывают key-value хранилища. Поэтому мы выбирали между Redis, Tarantool и плагином на mysql - handlersocket.
  2. Эта СУБД давно на рынке. К ней есть хороший коннектор для .net (для Тарантула и handlersocket его не было). Работает Редис примерно также быстро, как и тарантул (если верить нашим бенчмаркам). Отличная документация на сайте. В общем, всё выглядело неплохо.
  3. В пользу Тарантула говорила скорость, сравнимая с Редисом. Благодаря write-ahead logging запись на диск достаточно надёжна. Есть атомарно обновляемые вторичные индексы. Но нет коннектора.
  4. Как обычно, спустя какое-то время, радужная картинка стала менее радужной, но более реальной. Несмотря на простоту модели данных, достаточно скоро нам потребовалось искать голосования, созданные каким-то автором. Эти вторичные индексы мы реализовали на редисе дополнительными списками. В результате мы столкнулись с тем, что отсутствие атомарности при этих изменениях приводит к нарушению консистентности данных. Использование транзакций или луа в редисе значительно снижало производительность. Поэтому мы стали смотреть на его ближайшего конкурента: Tarantool.
  5. Второй основной проблемой было отсутствие коннектора. Мы написали свой. Наш коннектор доступен в nuget, поддерживает .net46 и .netstandard 1.4 для .net core. Работает на всех трёх основных ОС: windows, linux, mac osx. Проверяют это автоматические тесты на Travis CI. Практически полностью поддерживаем протокол тарантула, за исключением: DDL (data definition language). Мы считаем, что разработчики должны создавать модель данных нативным образом для tarantool. call v1.6, если функция возвращает null, приводит к исключению, мы пока не придумали как это распарсить коннект держим пока только с первой переданной в конфиге нодой, это будет исправлено в ближайшее время Если у вас в одной колонке разнотипные данные, мы пока не сможем их прочитать. Работы над этим ведутся.
  6. Ближайшие планы по нашему коннектору примерно такие: для начала мы переименуем пакет при следующем релизе, так как текущее название, как выяснилось, вводит коллег в заблуждение. Во-вторых, мы поддержим специальный тип MsgPackValue, который – непонятно что и пользователь сможет сам решить что это. Нужно это для нормальной работы со scalar index. Ну и обязательно посмотрим в сторону более удобной сериализации POCO в MsgPack. Это резко упростит работу с нашим коннектором.
  7. Ближайшие планы по нашему коннектору примерно такие: для начала мы переименуем пакет при следующем релизе, так как текущее название, как выяснилось, вводит коллег в заблуждение. Во-вторых, мы поддержим специальный тип MsgPackValue, который – непонятно что и пользователь сможет сам решить что это. Нужно это для нормальной работы со scalar index. Ну и обязательно посмотрим в сторону более удобной сериализации POCO в MsgPack. Это резко упростит работу с нашим коннектором.
  8. Богатейшие возможности для использования тарантула в качестве сервера приложений. Это его основное назначение, если я верно понимаю. Мы используем, например, модуль очередей (https://github.com/tarantool/queue). Благодаря тому, как работают yield point в тарантуле, очереди в тарантуле дают нам exactly once семантику. Бизнес-логика на луа у нас есть, но очень немного. В основном из-за отсутствия вменяемых инструментов для разработки на луа.
  9. Не всё безоблачно и в эксплуатации. Во-первых, нет синхронной репликации, поэтому возможна потеря небольшого количества данных, в случае выхода мастера из строя. Это для нас не критично, потому что в Редисе всё несколько хуже. Ждём bsync.
  10. На Highload 2016 Илья Космодемьянский рассказывал зачем нужна мастер-мастер репликация. И его вывод заключался в том, что обычно она не нужна. В целом, я с ним согласен. Но у нас в одном из приложений, как раз тот случай, когда все ключи случайны, следовательно, записывать можно в любую ноду. Поэтому там у нас мастер-мастер используется. В версии 1.7.3-0, которая является первой версией 1.7.3, есть проблемы с поднятием кластера с одинаковой конфигурацией. Допустим, у нас простой кластер из трёх нод. Если все три ноды лежат, и мы запускаем их одновременно, то они не видят апстримы для репликации и через 30 секунд выключатся. Это уже исправлено в новых версиях, мы просто никак не обновим продакшен.
  11. Крайне неочевидна для нашей команды связь между версией официального докер-контейнера и версией тарантула. Например, хотим мы версию контейнера 1.7.3, потому что туда новый модуль queue добавили. А какая внутри версия тарантула? Или, наоборот, хотим мы самую версию тарантула 1.7.3-80, например. Какую версию контейнера брать? Поэтому, мы перешли на самосборный контейнер.
  12. Общий недостаток Редиса, Тарантула, handlersocket и прочих noSql решений - это специфический язык запросов. Товарищи сисадмины и тестировщики более привычны к SQL. При этом они не являются разработчиками и учить даже Lua им достаточно непросто. Поэтому, очень ждут, когда в tarantool появится хоть какой-нибудь sql-engine.
  13. Для логирования и мониторинга происходящего в тарантуле там есть достаточно много инструментов. Мы используем логирование в stdout и собираем затем логи с помощью fluentd docker driver в центральное хранилище. Мониторинг у нас построен на prometheus, который сейчас является самым простым решением с точки зрения развёртывания и сбора данных для небольших команд. И очень удобно, что к тарантулу есть модуль tarantool/prometheus, который собирается различные метрики с запущенных тарантулов.
  14. Какие выводы можно сделать? С развитием open source версии .net - .net core, которая прекрасно работает на самых разных ОС и архитектурах (например, x86, ARM, ARM64), .net разработчикам не следует ограничивать себя только Windows и необходимо рассматривать все доступные варианты на рынке и выбирать то, что больше подходит. Тарантул – прекрасная и быстрая СУБД, которую можно использовать как исключительно СУБД, так и в качестве, например, очереди для любых приложений, в том числе, написанных на .net. В нашем проекте мы полностью удовлетворены работоспособностью Тарантула и продолжим миграцию основных данных в него.
  15. На этом мой доклад закончен. Ваши вопросы.