"Они что там, заснули что ли?" #4/1
Выпуск от 24 мая 2016 в 11:00
По результатам голосования 3 темы набрали наибольшее количество голосов. Это рассказы о технологиях, о команде и наших буднях.Сегодня я расскажу об используемых технологиях, и о том, почему мы выбрали именно это, а не то.Итак, начнем с языка программирования.
Основа наша — Python (Питон). Выбор на него пал из-за его универсальности. До начала проекта SvatPro, мы автоматизировали одно госучреждение. Тогда сделали клиент-серверное приложение для продажи билетов. Также это приложение контролирует проход посетителей и взаимодействует со сканерами штрих-кода, автоматическими воротами, шлагбаумами, турникетами и принтерами чеков.Нас тогда было двое программистов. И оба знаем Питон. И клиентское приложение, и серверная часть написаны на этом прекрасном языке!Закончив работу (срубив бабла), мы полюбили эту змеюку еще больше. А потом, когда начинали SvatPro, сомнений, на каком языке писать сервис, не было.
Фреймворк, который мы используем… Нет, не Django. Это Web2py (web2py.com). Честно, меня уже достали вопросом: А почему не Джанго?. Отвечаю: потому, что, когда я выбирал между этими двумя, Джанго не завёлся. Не захотел работать. Послал меня. Показал фак. Ну ладно, я на него не обижаюсь, это так, к слову. Но как мне понравился DAL (Database Abstraction Layer) в Web2py! Вот запрос из Mysql:SELECT * FROM Article WHERE `id` > 3 AND `name` = 'test';Как это выглядит в ORM Django:Article.objects.filter(id__gt = 3, name = ’test’)В DAL web2py:db(Article.id > 3 and Article.name == ’test’).select()Такой человеколюбивый синтаксис кого хочешь влюбит в себя!Фронтенд — там всё стандартно. HTML, CSS, JavaScript. Основная JS библиотека — старый добрый jQuery. Для CSS ипользуем Less (ru.wikipedia.org/wiki/LESS_(язык_стилей)). Всё компилируем и уменьшаем при помощи Gulp (gulpjs.com).
Хостинг Reg.ru, технология Jelastic. Хорошая штука, с автоматическим вертикальным и горизонтальным масштабированием. Хабраэффект выдержим легко. Там у нас 3 сервера: по одному на Nginx, Apache и MySQL.
Для тех, кто в танке: вертикальное масштабирование — это автоматическое увеличение мощности процессора и объема памяти при повышении нагрузки на сайт; горизонтальное масштабирование — это, когда уже не хватает вертикального масштабирования, автоматически добавляется еще один такой же сервер. Нагрузка делится между этими серверами.
Nginx используется как балансировщик нагрузки, а так же он управляет сжатием статичных файлов.
Apache рулит самим приложением. Мы бы использовали Nginx и для обработки приложения, но архитектура Jelastic такая, что это пока невозможно. Хотя и возможен обходной путь, но он геморройный. В этом то и дело, что данный путь обходной, и он нам не нравится.MySQL версии 5.7. Данная версия быстрее, чем предыдущая, что очень нас радует. Мы пока еще не хайлоад, и мускул нас устраивает чуть больше, чем полностью. Потом, когда начнутся серьезные нагрузки, будем смотреть, что там и где. Ну и разработчики согласны с утверждением, что преждевременная оптимизация — зло.
Девелоперский сервер находится на Microsoft Azure. Там у нас создано окружение, приближенное к боевому. Там же программисты тестируют свой код.
Для уведомлений на сайте используем отдельный сервер на Microsoft Azure с установленным Pushpin (pushpin.org). Это шустрая программа с открытым исходным кодом, написанная на С++. И с помощью нее делаем всплывающие уведомления о разных событиях (сообщения, отклики и тд.), как во вконтакте. Мы даже нашли баг в нем. Разработчики Pushpin быстро его исправили и даже похвалили нас :)
Система контроля версий у нас — git. Центральный репозиторий хранится на Bitbucket. Код программистов проверяю я (Code Review), затем, если нет явных ошибок, принимаю изменения.
Мы, программисты, народ ленивый, и любим автоматизировать повторяющиеся и скучные действия. Вот и загружаем исходный код на боевой сервер с помощью Fabric (fabfile.org). Он у нас очень умелый, и делает много работы:
1. Компилирует CSS и JavaScript при помощи Gulp;
2. Меняет файлы конфигурации для боевого сервера;
3. Чистит проект от файлов, которые на боевом сервере не нужны, но используются во время разработки;
4. Сжимает проект в один файл;
5. Грузит этот файл на сервер;
6. Распаковывает файл на сервере;
7. Мигрирует базу данных;
8. Снова обновляет конфигурацию, чтобы отключить миграцию.
9. Компилирует файлы проекта в питоновский байт-код.
10. Перезапускает сервер.Мы думаем еще и о Jenkins (jenkins.io). Это система непрерывной интеграции, т. е. пишем код, а она сама что-то там проверяет, тестирует, обновляет, загружает и, хрен пойми, чем занимается (здесь должен быть перечеркнутый текст, но ВК не дает так сделать).
Jenkins сильно облегчает жизнь программиста. Но пока до него никак руки не дойдут. Вот такие технологии мы используем. Есть программисты среди читателей? Напишите в комментах, что вы используете. Можете аргументированно написать, где мы были не правы. #SvatPro #технологии #python #программисты #успешный_успех