• Принудительное введение в системы управления конфигурациями

      Abstract: как заставить себя изучить любую из существующих систем конфигураций и перестать редактировать файлы на сервере руками.


      Пост посвящён душевной боли, которую нужно преодолеть. Ещё в посте будет чуть-чуть технического, но большей частью пост посвящён борьбе с самим собой, отложенному вознаграждению и тому, насколько моторная память котролирует вас.


      Введение для отшельников, которые не слышали что такое configuration management systems


      Уже многие годы (по айтишным меркам — три поколения как) существуют программы, которые позволяют автоматизировать процесс конфигурации серверов. Все эти программы сложные, они вторгаются в святую святых администраторов и заставляют их делать "всё не так, как раньше". Их изучение и интернализация (признание, что "так надо и так правильно") — абсолютный must have в карьере любого системного администратора.


      Главная боль любой системы управления конфигурациями


      Главная боль состоит в том, что система управления конфигурациями ломает привычную автоматику пальцев. Раньше вы могли поднять веб-сервер за 2 минуты почти не глядя на экран. Теперь вам предлагают потратить на абсолютно те же самые действия минут 15-20 (если вы хорошо знаете систему управления конфигурациями) или даже несколько дней (!!!!!), если вы её изучаете.


      Это преступление против личной эффективности. Уменьшить её в десять (0xA) раз — и это они называют прогрессом?

      Читать дальше →
    • Сборка и дeплой приложений в Kubernetes с помощью dapp и GitLab CI

      • Tutorial


      В предыдущих статьях о dapp было рассказано про сборку приложений и про запуск в Minikube. При этом dapp запускался локально на машине разработчика. Однако инструмент задумывался для поддержки процессов непрерывной интеграции (CI) и сами мы используем его в основном в связке с GitLab. Чем dapp помогает в процессах CI/CD?
      Читать дальше →
      • +24
      • 19.7k
      • 4
    • Лучшие практики CI/CD с Kubernetes и GitLab (обзор и видео доклада)



        7 ноября на конференции HighLoad++ 2017, в секции «DevOps и эксплуатация» прозвучал доклад «Лучшие практики CI/CD с Kubernetes и GitLab». В нём мы делимся практическим опытом решения проблем, возникающих при построении эффективного процесса CI/CD на базе указанных Open Source-решений.

        По традиции рады представить видео с докладом (около часа, гораздо информативнее статьи) и основную выжимку в текстовом виде.
        Читать дальше →
        • +21
        • 36.2k
        • 8
      • Как быстро спроектировать сайт с помощью CSS Grid

        • Translation
        image

        Модуль CSS Grid — это фантастический инструмент для создания макетов веб-сайтов. Он позволяет вам экспериментировать с макетами быстрее, чем любой другой инструмент, которые я пробовал.

        В этой статье я научу вас, как это сделать.

        Во-первых, я объясню HTML и CSS, которые нам нужны для этой задачи, которую я разбил на четыре части. Как только вы с этим разберетесь, мы перейдем к экспериментам с макетами.

        Если вы совершенно не знакомы с CSS Grid, вам может понадобиться просмотреть мою предыдущую статью Учим CSS Grid за 5 минут.
        Читать дальше →
      • Асинхронная репликация без цензуры



          Олег Царёв ( zabivator )


          Есть мастер, мастер неожиданно упал, но система продолжает работать. Клиенты мигрируют на вторую базу. Нужно делать резервные копии базы. Если делать резервные копии на основной базе, мы можем получить какие-то проблемы производительности, увеличение времени отклика. Это плохо. Поэтому достаточно распространенный пример асинхронной репликации — это снятие резервной копии со слэйва. Другой пример — это миграция тяжелых запросов с мастера на слэйв, с основной базы на вторую. Например, построение отчетов.

          Иногда бывает необходимо, чтобы приложение могло получать все обновления из базы и желательно в режиме реального времени. Этим занимается оpen source библиотека, которая называется libslave.
          Читать дальше →
          • +26
          • 19.7k
          • 4
        • Uber — причины перехода с Postgres на MySQL

          • Translation


          В конце июля 2016 года в корпоративном блоге Uber появилась поистине историческая статья о причинах перехода компании с PostgreSQL на MySQL. С тех пор в жарких обсуждениях этого материала было сломано немало копий, аргументы Uber были тщательно препарированы, компанию обвинили в предвзятости, технической неграмотности, неспособности эффективно взаимодействовать с сообществом и других смертных грехах, при этом по горячим следам в Postgres было внесено несколько изменений, призванных решить некоторые из описанных проблем. Список последствий на этом не заканчивается, и его можно продолжать еще очень долго.


          Наверное, не будет преувеличением сказать, что за последние несколько лет это стало одним из самых громких и резонансных событий, связанных с СУБД PostgreSQL, которую мы, к слову сказать, очень любим и широко используем. Эта ситуация наверняка пошла на пользу не только упомянутым системам, но и движению Free and Open Source в целом. При этом, к сожалению, русского перевода статьи так и не появилось. Ввиду значимости события, а также подробного и интересного с технической точки зрения изложения материала, в котором в стиле «Postgres vs MySQL» идет сравнение физической структуры данных на диске, организации первичных и вторичных индексов, репликации, MVCC, обновлений и поддержки большого количества соединений, мы решили восполнить этот пробел и сделать перевод оригинальной статьи. Результат вы можете найти под катом.

          Читать дальше →
        • Доставка обновлений из БД MySQL в приложение при помощи клиента репликации libslave



            При написании любого достаточно крупного проекта всегда встают более-менее похожие проблемы. Одна из них — проблема скорости получения обновлений системы. Относительно легко можно наладить быстрое получение небольших обновлений. Довольно просто изредка получать обновления большого объема. Но что если надо быстро обновлять большой массив данных?

            Для Таргета Mail.Ru, как и для всякой рекламной системы, быстрый учет изменений важен по следующим причинам:
            • возможность быстрого отключения показа кампании, если рекламодатель остановил ее в интерфейсе или если у него кончились деньги, а значит, мы не будем показывать ее бесплатно;
            • удобство для рекламодателя: он может поменять цену баннера в интерфейсе, и уже через несколько секунд его баннеры начнут показываться по новой стоимости;
            • быстрое реагирование на изменение ситуации: изменение CTR, поступление новых данных для обучения математических моделей. Все это позволяет корректировать стратегию показа рекламы, чутко реагируя на внешние факторы.

            В этой статье я расскажу об обновлении данных, лежащих в больших таблицах в БД MySQL, фокусируясь на скорости и консистентности — ведь не хотелось бы уже получить новый заведенный баннер, но при этом не получить данную рекламную кампанию.
            Читать дальше →
            • +53
            • 18.6k
            • 4
          • Несколько заметок о MySQL

              За время работы с MySQL набралось некоторое количество нюансов и приемов, из которых я составил эту статью в виде набора заметок. Все это не секрет и, разумеется, можно найти в документации.

              Буду использовать дефолтные настройки MySQL. Некоторые заметки связаны с PHP, поэтому для примеров буду использовать расширение mysqli.

              Для запуска sql-запросов из статьи можно инициализировать таблицы так:

              CREATE TABLE IF NOT EXISTS `user_myisam` (
                `id` int(11) NOT NULL AUTO_INCREMENT,
                `login` varchar(8) NOT NULL,
                `money` int(11) NOT NULL,
                PRIMARY KEY (`id`),
                UNIQUE KEY `login` (`login`)
              ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
              
              INSERT INTO `user_myisam` (`id`, `login`, `money`) VALUES
              (1, 'ivanov', 100),
              (2, 'petrov', 200),
              (3, 'sidorov', 300);
              
              CREATE TABLE IF NOT EXISTS `user_innodb` (
                `id` int(11) NOT NULL AUTO_INCREMENT,
                `login` varchar(8) NOT NULL,
                `money` int(11) NOT NULL,
                PRIMARY KEY (`id`),
                UNIQUE KEY `login` (`login`)
              ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
              
              INSERT INTO `user_innodb` (`id`, `login`, `money`) VALUES
              (1, 'ivanov', 100),
              (2, 'petrov', 200),
              (3, 'sidorov', 300);
              

              Проверить текущие автоинкременты можно так:

              SHOW TABLE STATUS;

              У обоих таблиц они равны 4. При этом имеется такое подключение к БД:

              $mysqli = new mysqli($host, $user, $password, $database);
              
              Читать дальше →
            • Основы индексирования и возможности EXPLAIN в MySQL



                Темой доклада Василия Лукьянчикова является индексирование в MySQL и расширенные возможности EXPLAIN, т.е. нашей задачей будет ответить на вопросы: что мы можем выяснить с помощью EXPLAIN'а, на что следует обращать внимание?


                Многие ограничения EXPLAIN'а связаны с оптимизатором, поэтому мы предварительно посмотрим на архитектуру, чтобы понять, откуда следуют ограничения и что, в принципе, с помощью EXPLAIN'а можно сделать.


                По индексам мы пройдемся очень кратко, исключительно в плане того, какие нюансы есть в MySQL, в отличие от общей теории.


                Доклад, таким образом, состоит из 3х частей:


                • Архитектура;
                • Основы индексирования;
                • EXPLAIN (примеры).

                Читать дальше →
                • +30
                • 25.5k
                • 3
              • Химеры офисной телефонии: говорим о FMC

                  Если поискать статьи про FMC по компьютерным изданиям, то можно наткнуться на статью «Что такое FMC?» в PC Week от января 2006 года. Не столь показательная сама статья о прошедшей конференции, сколько комментарий к ней, аж от ноября 2012 года «Статья от 2006 года, а люди ещё не осознают эффективность!». Думаем, что можно оставить точно такой же комментарий, датированный 2016 годом — и это не от того, что что-то не так с технологией, а от того, что она развивалась на фоне бума виртуальных АТС и оставалась в тени.


                  Услуги, основанные на технологии FMC, можно было найти в портфеле корпоративных услуг сотовых операторов примерно с 2010 года. Однако услуги продвигались сложно — отчасти потому, что самим операторам было выгоднее реализовать другие решения, отчасти потому, что абоненты не получали информации о выгодах и преимуществах FMC, да и вообще не знали, что это за технология. На самом деле, тут есть о чём поговорить, особенно для малого и среднего бизнеса. В общем, как пишут забронзовевшие копирайтеры: «Ваши сотрудники недостаточно мобильны? Тогда мы идём к вам!».
                  Читать дальше →
                • Ansible с чего начать

                    В последние пару лет я все чаще использую Ansible для решения практически любых задач связанных с автоматизацией, будь то конфигурирование, резервное копирование или деплой проектов. Не смотря на то, что система очень хорошо документирована, я думаю смогу добавить немного полезной информации для тех кто еще только начинает пользоваться Ansible. Для начала я хотел бы рассказать об основных вещах, таких как структура проекта в котором будут содержаться плейбуки, роли, переменные, шаблоны и файлы необходимые для автоматизации развертывания серверов, кода и всего другого, что можно сделать с помощью Ansible.
                    Читать дальше →
                  • Создание архитектуры программы или как проектировать табуретку

                    Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

                    К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

                    Хотелось разобраться, что вообще в себя включает процесс создания архитектуры программы, какие задачи при этом решаются, какие критерии используются (чтобы правила и принципы перестали быть всего лишь догмами, а стали бы понятны их логика и назначение). Тогда будет понятнее и какие инструменты лучше использовать в том или ином случае.

                    Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
                    Читать дальше →
                  • Забираем аудиопоток с Twilio по SIP и отправляем на RTMP CDN для дальнейшей раздачи

                    image

                    Как известно, в природе существуют CDN-сети, которые используются для доставки потокового видео конечным пользователям. Взять к примеру онлайн-трансляцию футбольного матча. Исторически сложилось, что протокол RTMP, разработанный Adobe, в определенное время стал очень популярен для доставки Live-видеоконтента, и поддержка этого протокола есть в каждом уважающем себя Encoder–устройстве или программе, которая захватывает видеопоток с камеры и отправляет на сервер или CDN для последующей раздачи. В статье описывается как сделать SIP источником потока для CDN.
                    Читать дальше →
                  • Не мамонт ли Вы? (пятничный тест; который ложь, да в ней намек)

                      PHP развивается стремительно. И сам язык, и его реализация, и, особенно, сообщество. PHP перестаёт быть языком для быстрого клепания сайтиков и всё больше движется в сторону языка общего назначения, хотя путь этот будет долог — слишком много врожденных недостатков тянется с доисторических времён.

                      Как грибы растут стандарты, фреймворки, развивается и становится всё слаще синтаксис, растут разнообразные инструменты.

                      И это здорово!

                      Не совсем здорово то, что мы с вами, обычные разработчики, в массе своей всё больше отстаём от стремительного потока. История знает аналогичный пример — мамонты тоже отстали от стремительно меняющейся среды. И вымерли. Ну, или, по другой гипотезе — были съедены своими конкурентами за экологическую нишу — людьми. Неважно. Конец бедных гигантов в любом случае был печален.

                      image

                      Попробуйте пройти несложный тест и определить — не мамонт ли Вы в мире PHP? Не грозит ли Вам, как специалисту, вымирание в ближайшее время?

                      Тест, разумеется, пятничный и шуточный. Но в нём всё-таки есть доля истины.
                      Проверить степень своего оволосения и размер бивней
                    • Фрактальное пламя — алгоритм построения



                        Фрактальное пламя (или фрактальные искры, англ. fractal flame) – алгоритм, предложенный Скоттом Дрейвсом (Scott Draves) и использующий для построения изображений системы итерируемых функций (СИФ). Благодаря разным значениям seed для генератора псевдослучайных чисел можно получить множество разнообразных «картин». Хотя фрактальность в них просматривается далеко не всегда, результаты получаются очень интересными.

                        Под катом – краткое описание основных моментов реализации алгоритма.
                        Читать дальше →
                      • 300 потрясающих бесплатных сервисов

                        • Translation


                        Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



                        A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

                        • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
                        • Bootswatch: Бесплатные темы для Bootstrap.
                        • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
                        • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
                        • Strikingly.com Domain: Конструктор веб-сайтов.
                        • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
                        • Withoomph: Мгновенное создание логотипов (англ.).
                        • Hipster Logo Generator: Генератор хипстерских логотипов.
                        • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
                        • Invoice to me: Бесплатный генератор счета.
                        • Free Invoice Generator: Альтернативный бесплатный генератор счета.
                        • Slimvoice: Невероятно простой счет.

                        Читать дальше →
                      • NASA подтверждает работоспособность «невозможного» волнового двигателя, не использующего реактивную массу — EmDrive

                        Дисклеймер: данная статья написана неспециалистом в данной области. Коррективровки, замечания и развёрнутые комментарии всячески приветствуются.

                        Суть новости


                        30 июля на 50th AIAA/ASME/SAE/ASEE Joint Propulsion Conference — пятидесятой совместной конференции Американского Института Аэронавтики и Астронавтики, Американского Сообщества Инженеров-Механиков, Сообщества Автомобильных Инженеров и Американского Сообщества Инженерного Образования, посвященной двигательным системам, если кому интересно значение сокращений, представители лаборатории NASA предоставили отчёт, согласно которому EmDrive, двигатель, создающий тягу без выброса реактивной массы, работает.
                        Читать дальше →
                      • Разоренные гарпиями. История возникновения высокоскоростного трейдинга

                        • Translation
                        image

                        28 января 1790 года представитель штата Джорджия Джеймс Джексон выступал в довольно молодой на тот момент Палате Представителей на заседании в Нью-Йорке. Его целью было разоблачение высокоскоростных трейдеров.

                        «Три судна, сэр», – прокричал конгрессмен Джексон, – «отплыли в течение двух недель из этого порта с намерением спекулировать; они собираются приобрести весь Штат и другие ценные бумаги несведущих…»

                        Джексон ругал этих людей, называя их «алчными волками… которые наживаются на неудачах ближних и используют их безвыходное положение в корыстных целях».

                        Какое же ужасное преступление совершили эти люди? Убийство? Измену?
                        Читать дальше →
                      • Создание окружения для веб-разработки на основе Docker

                          Под катом расскажу как я усовершенствовал автоматическое создание и разворачивание окружения для веб-разработки на основе Docker, Fig, DNSMasq и nsenter. По сути, это разворачивание LAMP сервера и запись о нем в DNSMasq, но приоритетами являются незасоренность хост-машины ненужным софтом типа web-, db-серверов на хост машине и минимальное количество команд для запуска
                          Читать дальше →