2-3 года назад у нас был на 100% MS стек (Винда, Hyper-V, MSSQL, IIS, C#, WCF, Azure), и было не очень понятно, как продукт дальше развивать: C#, конечно, неплохой язык, но оставаться в рамках MS - слишком большие ограничения по выбору продуктов: чего-то на винде до сих пор нет (например, Докера), а для многих серверных продуктов рынок винды вторичен.
Получалось, что все понимают тупиковость ситуации, но продолжают тащить этот чемодан без ручки, потому что делать-то что-то надо. Переписать весь проект с нуля под новые технологии - это год работы вхолостую для бизнеса, и ни один инвестор в мире на такое не согласился бы.
Так вот, могу рассказать, как нам удалось постепенно выйти из этого тупика без остановки бизнес-девелопмента и переобучения всей команды на другой язык/платформу.
Сейчас у нас диверсифицированная система:
- виртуалки на винде и убунте. HA организуется силами Hyper-V и Rancher;
- несколько разных стораджей: Cassandra, Redis, MS SQL, PostgreSQL и Spark, который из всего этого зоопарка делает общую аналитику (нет, мы не ставили все подряд, они все нужны, зачем - расскажу);
- сервисы на C# и питоне, которые прекрасно общаются по общей шине и мы спокойно можем ждать выхода полноценного .net core еще пару лет.
И, предваряя вопрос - нет, на Mono или текущий .NET core без серьезного переписывания перейти зачастую нельзя. Мы - как раз тот случай.
29. Архитектура на высоком уровне
Service Oriented Architecture Микросервисы
Конвейер, гибкий pipeline
Общий CI workflow
Autodiscovery?
Configuration management?
30. С чего начать С чего мы начинали
Внутренние семинары
• Технологии • Сommon pitfalls • Выход из vim
Microsoft нужен = есть код, есть разработчики, есть опыт
Linux = открытая экосистема, есть решения многих задач из коробки, мир аналитики больших данных и маленьких денег.
Пару-тройку лет назад у нас был только Microsoft Stack.
Казалось что постепенно перейти на Linux stack невозможно.
Мы горевали и думали:
- в какие технологии инвестировать
- кого нанимать
- как получить все бенефиты открытой экосистемы не меняя всё, без простоя
С одной стороны изолированный Microsoft, с другой стороны светлое будущее.
Перестали волноваться.
Находимся посередине, получаем плюсы с обоих сторон.
Доклад о том как нам удалось это совместить,
Как перейти постепенно
Что мы считаем важным в этом процессе и три составляющие успеха.
Но сначала о нас.
Сотни тысяч разных топиков на которые вы можете подписаться.
Бесконечный фид развлечений.
Windows Stack, мы пробовали Azure
Крутой state of the art код на C# для наших задач, Windows программисты с богатым опытом.
За последние пару лет мы успешно внедрили массу открытых продуктов из linux мира.
Для примера несколько проектов
Старый краулер переписали на базе scrapy — фреймворка для краулеров.
Тут есть всё— детекция лиц и smart crop, выбор размера и разрешения в зависимости от устройства, и т.д.
Это набор сервисов + файловое хранилище, всё это мы заменили на файловое хранилище, nginx с плагином и облачный кеш.
Поточная кластеризация текстов — до этого у нас было 10 тысяч строк на C#, обратный индекс слов, функция близости полная бизнес-логики.
Мы перешли на python + nltk + sklearn + gensim, out of core решение в 1000 строк, которому не нужно много ресурсов, а качество и performance мы можем контролировать.
Реалтайм веб-аналитика для паблишеров контента. Это наш новый проект, который мы разрабатывали с нуля. Apache Cassandra, Apache Spark.
20М событий в день.
Аналитика больших данных <3 Linux stack
Что объеденяет эти истории?
- убрали код, осовременили
- легче поддержка
- использовали открытые реализации и не тратили время на свои велосипеды
Кстати, время. Сроки были сорваны в два раза.
+ С переходом на новые технологии это ожидаемо
+ Сроки ничтожные! (кроме publisher analytics)
И почему винда?
Если вы молоды и красивы, то вам нужно срочно развивать ваш стартап, а не пилить собственные велосипеды для уже решенных задач. В нашем случае, кроме инфраструктуры, краулеров и веб-серверов, у нас есть ещё и наукоемкая работа с текстами, и распределенная аналитика не самых мелких данных, сейчас здесь без Linux не обойтись.
Да потому что всё с ужасными костылями,
И не является главной платфомой для всех этих продуктов.
+ ДЕНЬГИ
+ Искать windows developer’ов для NLP сложно
Windows Server стоит всего $800, но если >4 виртуалок, то Datacenter
Что мы решили делать.
Просто переписать всё нельзя.
Логика в Transact SQL.
Крутой in-house NLP.
Начинаем с хранилищ данных
Сервисы по-прежнему С#, но читают из новых хранилищ
Секрет успеха
WCF is dead
WCF очень крут и ничто не сможет его заменить. :’(
Swagger+JSON нравится тестерам.
Перейти на это на стороне C# очень просто: подключаем пару нагетов.
+health checks, HAProxy, nginx
Конечно, JSON’ом единым сыт не будешь.
Protobuf-net — странная штука. По-умолчанию не работает расширяемость.
Т.е. deserialize => object => serialize теряет поля, про которые наша версия кода ничего не знает.
Это можно исправить и тогда для обновления схемы не нужно обновлять сервисы.
Python-performance — компилируем C-extensions.
Доступ к MSSQL из linux.
Доступ к данным из всех сервисов.
Соглашения о том как складывать и как кешировать данные — стандартизация наших сервисов на уровне хранилищ.
Проблемы с распределенными системами:
- eventual consistency
- расхождение реплик
Общие рамки для успешного перехода на микросервисы:
REST, swagger-спецификация как точка синхронизации команд
Общие форматы
Общие соглашения о хранении данных
Легко перейти, у нас и так была Service Oriented Architecture.
Не все любят, но нам нравится.
У микросервисов много плюсов, все про них знают, нас интересуют два:
- Можно завести зоопарк технологий (это теперь технически возможно)
- Можно не переживать о выборе
Кстати, приходите на наш практический мастеркласс по микросервисам.
Общая шина сообщений.
Сервисы собираем в гибкие конвееры:
- обработка ошибок
- опциональные сервисы
- шардинг
Получаются сложные схемы.
Например такие.
Админы умеют ими управлять.
Пишем сервисы:
- идемпотентные – чтобы избежать проблем
- желательно stateless
Хорошо понимаем библиотеки — ack, retry политики.
Linux = docker
Windows = сервисы по-старинке
Через общий CI.
Общий CI workflow объединяет наш зоопарк.
Общие рамки — хранилища, форматы, шины сообщений — секрет микросервисов. Свободы много, но не слишком.
Linux команды делятся опытом
Семинары по технологиям и частым ошибкам
Посмотрите наш доклад про ELK!
Начинайте внедрение с общего удобного инструментария.
Избегайте холиваров при его выборе.
Начинаем с метрик и логов
Проводим семинары
Теперь нанимаем людей и без C#, ура!
Что дальше?
- Docker для Windows и Windows Server 2016
- .net Core