Переехали от Майкрософта

Произошло то, о чем я давно думал, но боялся сказать. Хотелось перестать «кормить» Майкрософт.

Этот монополист настолько обленился делать вещи качественно, что еще год назад внутренняя изжога к Виндовсу привела меня к мысли, что от серверов на Винде надо уходить… Как это сделать, если C# на Линуксе через Mono в нашем случае прямо не заработает? Плюс еще MSSQL, от которого тоже нужно было уйти.

Не уложились мы в месяц, как было задумано изначально тут. Не уложились и в два. И даже в три не уложимся, потому что проблем оказалось сполна. Время и деньги потеряны… Но также к счастью мы больше не тратим по 15К в месяц на Ажуру. А имеем контейнер за меньшую цену, в котором можем разворачивать еще и несколько схожих по конфигурации с Ажурой VDS’ок для своей работы.

Мой ультиматум про «не уложимся с миграцией в 1 месяц — уходим с Шарпа» был вполне конкретным критерием, чтобы от слов перейти к действиям и инициировать перепись проекта на другой ЯП. Логика простая — если быстро получилось мигрировать, хорошо, давайте пока дальше наращивать функционал на том решение, что есть. Если быстро не получается — то сразу по окончания месяца я не трачу времени на раздумья как долго еще это продлится и сколько денег мы еще сольем на простой (была заблокирована полностью разработка нового функционала) — я ищу программистов для разработки нового бэк-энда. Что имеет смысл. Первое, сократить расход с Винды, раз уж начали, но одновременно с этим перестать тратить время впринципе на толкание трупа. Сейчас в коде имеется и лишний функционал, и структурные ошибки в проектировании помимо всего того что про миграцию. Все это «обслуживать» очень дорого. К слову, новое АПИ я сократил примерно на 40%. Более того, мы пошли дальше и планируем использовать конструктор запросов с фронт-энда, чтобы бек-энд вообще стал гибчайшим и не был завязан на конкретные методы.

Найти программеров оказалось непросто, в одном случае я ошибся с постановкой требований и связка Python/Django оказалась избыточной для решения моей задачи. Один программер проработал неделю, написал код и с ним решено было прекратить — результат получался не очень.

Сейчас успокоились и пришли к Python/Flask. Цель — построить новый бэк-энд более просто, чтобы задествовать принцип «меньше кодов — меньше багов» и чтобы код можно было поддерживать меньшему числу программистов.

Касаемо пункта про «высокую цену» за Windwos. Я косякнул, когда поставил задачу именно как миграцию на Linux. Никакого переезда на другую ОС можно было бы и не затевать. Расходы реально сократить иначе.

Изначально мы сливали на MSSQL Enterpirse, плату за которую нам включили из-под тишка, когда мы этого не ждали, и которую мы потом перенесли в Ажуру в облачный SQL сервер, который построил Джек Майкрософт. Шутка. Первая проблема была решена сразу. Вторая — количество баз — четыре. Каждая из которых съедала по тысячи с чем-то в месяц. Можно было две удалить, ибо девелоперские, вторую перенести в первую, приложение это позволяло. Итого расход уменьшался на 3 тысячи — на фоне 20-25К это конечно казалось смехом, так что я понимал, но не брал всерьез. Третье — мы периодически включали обратно девелоперский и прошлые серваки. Из-за этого расход в 20-25К был раздут, на деле вся требуемая конфигурация на Ажуре съедала 12К в месяц.

Соответственно сам Ажуровский сервак можно было бы заменить таким же по мощности с помощью Российских хостинг-провайдеров, по нашим конкурентным, рыночным ценам. Получилось бы 3000-4000 р за Винду плюс 1-1,5 тыс. за базу в облаке. Базу MSSQL перенести в Россию получалось или дорого, или геморно, потому что подход к лицензированию у MSSQL весьма своеобразный (можете почитать об этом на сайтах дата центров). Основной минус такого подхода — это то, что база и приложение были бы вынесены из одной сети на разные сервера, удаленные на существенное расстояние (следовательно получаем дополнительное время на коннект).

Но сделать такую миграцию стоило сразу, это бы сократило расходы быстро и существенно. Затем стоило продолжить работу на Винде и Шарпе, и параллельно начать кодить новый бэк-энд. Стоит ли вообще кодить новый бэк-энд? Работы на 4-5 месяцев минимум. Скорее да. Текущие программеры в виду того, что обстоятельства изменились, не могут полноценно уделять время разработке, а искать нового человека на Шарп или Пайтон, в свете того, что рефакторинг даже в нашем текущем решении — это назревшая необходимость, как-бы говорит — рискни и сделай как считаешь нужным. Вот я и делаю. Думаю, что получится лучше, чем было.

Один минус — некоторых людей я заставил ждать несколько месяцев того, о чем мы договаривались еще в конце 2016 года. К сожалению, сроки не выдержал. Но и откладывать миграцию больше не хотел, об этом я задумывался еще в конце 2015 года. Следующее поколение Avenda уже запущено. Скоро, на всех картодромах страны! :-)

Наелись Майкрософтом

Давным давно, когда мы только начинали работу над Авендой, передо мной и моим напарником встал вопрос выбора языка программирования. Первоначально я, рассматривал вариант создания решения в виде десктопного приложения, потому что считал, что могут возникнуть те или иные ограничения при работе из браузера (например, потребуется работа с внешним оборудованием и интеграция с другими программами). Но при этом есть также преимущества и для решения в виде веб-сайта (более массово с точки зрения выбора разработчиков, понятно для нас самих, кросс-браузерно, технологии непрерывно развиваются и т.п.). Мой напарник рассказал мне об SPA — Single Page Application — модном подходе в вебе, когда приложение реализуется в виде одной страницы, и где множество операций (навигация, рендеринг шаблонов и т.п.) выполняются на клиенте. Сервер же в этом случае отдает только нужные данные по запросу. На мой взгляд просто и гениально. Мы сделали ставку именно на такой подход и на такое решение.

Клиентским языком, разумеется, выбрали JavaScript и фреймворк Backbone, который практически сразу был заменен на Angular. Решение писать на Ангуларе, принятое в 2012 году было стратегически верным. А вот с серверным языком вышло все не так-то просто.

Мой напарник на тот момент знал несколько языков программирования. Его предложением было — писать на C#, поскольку это его фаворит. Я кодил на PHP и в 12-ом году у меня за плечами было уже несколько проектов. Для меня его предложение никак не шло в разрез моих интересов — в программистские дела я не хотел влезать вовсе, кроме базы данных и её архитектуры, потому что прекрасно понимал, что на все у меня не хватит времени; я хотел сосредоточиться на бизнес-задаче и интерфейсе. Для меня также был важен человек, с которым я работаю. Я искренне убежден, что у языка C# есть и преимущества, и хорошие программисты, и хорошие работодатели, и хорошие проекты. Но минусом, и в тот момент мы его озвучили, являлось то, что сервера на Windows стоят очень дорого по сравнению с Linux’овыми. Но к слову, дорого обходятся не только сервера — за те сюрпризы, которые Windows может вам преподнести, может тоже выйти лишняя копеечка.

Проект Mono, возникший по всей видимости из желания людей прекратить морочиться с Windows’ом, — это разработка для Linux, которая позволяет выполнять .NET приложения. На сколько мне известно Микромягкие тут же подали на них в суд. Чем закончился суд — увы не изучал. Знаю только, что Microsoft приобрела проект Mono, забрала его под себя, но не потопила, а заверила общественность, что даст ему развиваться. Что сейчас и происходит. На главной странице сайта так и написано: «Sponsored by Microsoft». Но на тот момент про Моно мы еще не знали.

Одной из вехой проекта стало то, что практически сразу мы подали и получили подтверждение на участие в Bizspark’е — программе от Microsoft по поддержке молодых проектов. На деле — пылесос тех проектов, кто не до конца понимает последствий сотрудничества с Microsoft, и создание таких условий для выбора, чтобы Microsoft не имела явного недостатка перед бесплатными продуктами — необходимость много и за все платить. Опять же, на тот момент — это выход из ситуации, поскольку поиск напарника в проект — задача непростая.

Первым звонком для меня стало осознание того, что проект прошел стадию эйфории, когда кажется что рынок твой, стоит только показать ему продукт. Более того, мы уже расстались с напарником и на горизонте светила перспектива расставания с другим человеком — на тот момент он в больше степени держал в себе концепцию и решение программной части проекта. Почему — по естественным причинам. Если у вас есть что-то, что приносит вам 1 миллион, станете ли вы тратить половину, треть, четверть своего рабочего времени на то, что приносит вам рубль? Соотношение может и завышено, но идея именно такая. Также у нас заканчивалась 3-хлетняя программа Bizspark, которая давала нам бесплатное ПО (любое от Microsoft) и кредит в $150 на каждого члена команды на облачные ресурсы. Так вот все это приближалось к отметке «сейчас Microsoft с нас все вернет».

Кстати, именно так все и случилось. Когда программа закончилась, Майкрософт прислал письмо об окончании программы, но лишь спустя месяцы у нас подписка перешла в платное состояние. Для меня, конечного пользователя, это крайне нелогично и запутанно — в апреле мы зарегались в Bizspark, в августе начали пользоваться Azure, спустя три года в октябре нам стали выставлять счета. Где логика — загадка. Вобщем, 19 октября Microsoft переводит нас на платную подписку, незадолго до этого у нас начинается новый отчетный период. Что усугубляет факт того, что я замечу происходящее, например просматривая списания с моей банковской карты — до списания пройдет полтора месяца. Но в день с нас списывают по 2500 рублей. Так продолжалось около 2-3 недель, пока мы это не заметили и еще около 2 недель пока мы искали решение. Оказалось, с нас списывали деньги за лицензию MSSQL Enterprise, которая стоит порядка $1000 в месяц. При этом по программе Bizspark нам полагалась одна такая лицензия бесплатно! Но, блин Карл! Я нашел телефон менеджера, который года 2 назад манил меня в акселерационную программу Microsoft, через него я вышел на кого-то из сотрудников нуженого мне отдела и узнал, нужно было заполнить какую-то информацию в профиле, просто заполнить, и лицензия была бы бесплатна! Чуть-чуть бюрократии и все будет! Таков Майкрософт. Принимаем и живем дальше. В тот момент я решаю, что надо выбрать любую другую технологию базы данных.

В конце месяца нам выставили счет на 90 000 рублей. Ситуацию удалось немного выправить. Пока мы разбирались с тех поддержкой откуда у нас такие списания, я привел свое видение ситуации и свои аргументы в пользу того, что списания навязаны нам. Мы не получали уведомлений накануне. Мы не нуждаемся в лицензии Enterprise. Майкрософт нашу позицию принял и скостил нам 65 000 рублей — выпилил все расходы по «аренде» лицензии Enterprise. За что им спасибо, точнее тому самому индусу, с которым мы общались. В Российском офисе сотрудники на нас забили и перестали отвечать практически сразу. Взаимно, вы нам тоже не особо в будущем нужны.

Была еще одна история. Примерно год назад я обратил внимание, что наше API пользовательской части сайта (авторизация, регистрация, бронирование и т.п.), немного говоря, странное. И я захотел его переделать — сделать проще и стандартизировать подход. Как оказалась, API у нас не настолько громоздкое. И его переработка заняла у нас несколько месяцев. То же самое я рассчитываю сделать и для бэк-офиса. Одна из причин такого рефакторинга — мы начинали разрабатывать iOS приложение в 2016 году и как выяснилось, для него в любом случае требовалось модифицировать или переписывать ряд API методов. Что вообще означало, что можно было начать писать все то же самое с нуля на другом языке программирования. Эту часть всего бэк-энда можно было сделать независимой и запустить, например, на поддомене api.avenda.ru вообще на отдельном сервере. Еще раз я осознал, что мы не сильно зависим от текущих технологий на бэк-энде.

Сейчас с нас списывают по 10-20 тыс. рублей в месяц за Azure. Одну из проблем мы решили — базу перевели в облачный сервер вместо развертывания своего сервера MSSQL. База нам обходится по 1000 р в месяц. Но сервера на Azure, которые нас устраивают, обходятся в 8000 р. При этом у меня есть мой личный сервер для проектов на PHP, за который я плачу 9000 р в год с производительностью немного ниже Ажуровского сервера.

Я вполне серьезно задумался, а что должно быть «решением» наших сложившихся проблем? Мне нужно научиться разбираться в технологиях Azure? Пойти на курсы? Каково должно быть стратегическое решение, которое позволит нам спокойно делать бизнес, а не топтаться на месте? И ответ напрашивается сам собой — нужно решение, которое работает на Linux, чтобы не связываться с Windows-серверами навсегда.

В конце 2015 года я искал ответ на вопрос «как перевести приложение на другой язык программирования». Мне посчастливилось случайно познакомиться (уже даже не помню как) с человеком из Яндекса и проконсультироваться у него на предмет того, какие технологии использует Я, как он видит перспективы развития языков и что думает об Окнах. Насчет последнего, я не сомневался, человек администрирующий сервера, без насилия не станет любить Windows. Вобщем, его ответ был таким, что и Pyton, и PHP не настолько страшны, как их шарписты малюют. Если я смотрю в сторону Linux, это хороший выбор.

Для меня показателем успешности языка является то, какие топовые компании его выбрали. Facebook и VK, Twitter, Инстаграм, Google, Яндекс. И мне становится понятным какими технологиями реально владеют крутейшие умы планеты. И где Windows в этой пищевой цепи. И почему аргумент «C# идеален для корпоративных систем» — не работает. C# хорошо проник в университеты, где ему обучают и где Майкрософт предлагает бесплатные продукты для студентов. Почему, Карл? Да вы подумайте. Этот как 3 года бесплатных ресурсов Ажуры и один месяц, который год кормит.

Короче, я поставил ультиматум нашим девелоперам, либо 19 февраля мы запускаемся в продакшене не на Майкрософте, либо я ищу людей, которые перепишут бэк-эенд на другой язык программирования. Ждем. Всем попкорна…

«За» Microsoft:

  • Все итак работает.
  • Изменения — это стресс, а если оставить все как есть, то людям не нужно будет подстраиваться.
  • Потеря времени.
  • «Microsoft много сейчас делает для .NET».

«Против» Microsoft:

  • Мне не нравится компания Microsoft и я не верю в её будушее.
  • Дорого и нерентабельно для бизнеса.
  • Лучшие умы планеты используют и развивают другие технологии.