• Изучаем процессы в Linux


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

      Данная статья в большей мере рассчитана на новичков в системном программировании и тех, кто просто хочет узнать немного больше о том, как работают процессы в Linux.
      Читать дальше →
    • Ищем причины тормозов БД, используя sys schema в MySQL 5.7

        Есть у нас веб-приложение. Относительно большое и старое — много-много кода, в котором много-много разных запросов к базе данных. При этом мы не гугл, но несколько тысяч запросов в секунду на сервер БД приходится.

        Ну и безусловно растёт наше приложение во все стороны — добавляются новые фичи, наворачиваются и усложняются старые, растёт количество клиентов и соответственно количество данных в БД. И в один не очень прекрасный момент приходит понимание, что что-то наше приложение тормозит. А значит надо или найти, что именно нагружает БД, хотя могло бы не нагружать, ну или если ничего такого нет, то взять ещё серверов побольше, да помощнее.

        Стандартный совет как найти, что нагружает MySQL — включить slow-query-log и посмотреть, какие запросы будут туда попадать. Но в MySQL 5.7 по умолчанию присутствует куда лучший инструмент — sys schema, которая агрегирует данные из performance schema и позволяет их получить простыми запросами, буквально вида «Ok, MySQL, покажи мне топ запросов по максимальному суммарному времени выполнения»
        Читать дальше →
        • +26
        • 11.5k
        • 3
      • Understanding Dependencies

        • Translation

        От переводчика


        Мы — внедрители. Мы должны внедрять, а не фантазировать!
        (Рина Зеленая, к/ф «Девушка без адреса»)

        К переводу этой статьи меня побудили две причины: 1) желание лучше разобраться с фреймворком Spring, 2) небольшое количество источников по теме на русском языке.

        Краеугольный камень ООП — «внедрение зависимостей». Если описание процесса «внедрения» в целом, удовлетворительно, то объяснение понятия «зависимость» обычно оставляют за скобками. На мой взгляд, это существенное упущение.



        Чтобы не фантазировать, а внедрять, нужно сначала разобраться с тем, что мы внедряем. И в этом нам может помочь лаконичная статья Jakob Jenkov «Understanding Dependencies». Она будет полезна не только тем, кто пишет на Java, но и тем, кто пишет на других языках и следит за качеством проектирования приложений.

        UPD: Я перевел еще одну статью Jakob Jenkov о зависимостях. Читайте на Хабре перевод статьи Dependency Injection, которая открывает одноименную серию статей и по смыслу продолжает данную статью. В статьях серии рассматриваются такие понятия как Dependency, Dependency Injection (DI), DI-контейнеры.

        Читать дальше →
      • DevOps придумали разработчики, чтобы админы больше работали

          Еще 4 года назад использование контейнеров в production было экзотикой, но сейчас это уже норма как для маленьких компаний, так и для больших корпораций. Давайте попробуем посмотреть на всю эту историю с devops/контейнерами/микросервисами ретроспективно, взглянуть еще раз свежим взглядом на то, какие задачи мы изначально пытались решить, какие решения у нас есть сейчас и чего не хватает для полного счастья?


          Я буду в большей степени рассуждать про production окружение, так как основную массу нерешенных проблем я вижу именно там.

          Читать дальше →
        • Вопросы для собеседования бэкенд-разработчика

          • Translation
          Этот список появился как личная памятка по темам, которые я обсуждал с коллегами и друзьями и в которых хотел разобраться поглубже…

          Я не большой любитель задавать технические вопросы на собеседованиях: по мне так лучше посидеть с кандидатом (или кандидаткой) за клавиатурой над каким-то реальным кодом, реальной проблемой — и целый день заниматься парным программированием, желательно поочерёдно с остальными членами команды. Но я считаю, что некоторые технические вопросы могут быть хорошей отправной точкой для начала увлекательного и приятного разговора и позволят глубже узнать друг друга.

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

          • Translation

          У MySQL нет возможности напрямую индексировать документы JSON, но есть альтернатива: генерируемые столбцы.


          С момента введения поддержки типа данных JSON в MySQL 5.7.8 не хватает одной вещи: способности индексировать значения JSON. Для того, чтобы обойти это ограничение, можно использовать генерируемые столбцы. Эта возможность, представленная в MySQL 5.7.5, позволяет разработчикам создавать столбцы, содержащие информацию, полученную из других столбцов, предопределенных выражений или вычислений. Генерируя столбец из значений JSON, а затем индексируя его, можно практически индексировать поле с JSON.

          Читать дальше →
        • Строим распредёленное реактивное приложение и решаем задачи согласованности


            Сегодня многие компании, начиная новый проект или улучшая существующие системы, задаются вопросом, какой вариант разработки более оправдан — воспользоваться «классическим» трехслойным подходом или же спроектировать систему как набор слабосвязанных компонентов?


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


            В этой статье я расскажу, как и почему мы в 2ГИС выбрали второй вариант для построения новой системы, как решали возникающие задачи и какие выгоды от этого получили. Под катом — про Amazon S3, Apache Kafka, Reactive Extensions (Rx), eventual consistency и GitHub, сжатые сроки и невозможность собрать команду необходимого размера из инженеров, использующих один стек технологий.

            Интересно? Тогда вперед!
            • +34
            • 10.3k
            • 6
          • Дружим gRPC с долгоживущим проектом, PHP и фронтендом


              Пару лет назад мы достаточно спокойно работали нашей небольшой командой и делали хостинг. Вышло так, что каждый сервис в системе обладал собственным уникальным и неповторимым API. Но потом это стало проблемой и было решено все переделать.


              Мы расскажем о том, как объединить внешнее API с внутренним и что делать, если у вас много кода на PHP, но хочется воспользоваться преимуществами gRPC.

              Читать дальше →
              • +36
              • 13.6k
              • 7
            • SOLID

                SOLID критикует тот, кто думает, что действительно понимает ООП
                © Куряшкин Виктор

                Я знаком с принципами SOLID уже 6 лет, но только в последний год осознал, что они означают. В этой статье я дам простое объяснение этим принципам. Расскажу о минимальных требованиях к языку программирования для их реализации. Дам ссылки на материалы, которые помогли мне разобраться.

                Читать дальше →
              • Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)



                  Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.

                  Список лекций:

                  1. Введение (Вадим Цесько incubos)
                  2. Типовые архитектуры (Александр Христофоров)
                  3. Эксплуатация (Илья Щаников)
                  4. Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
                  5. Балансировка (Андрей Домась)
                  6. Процессоры и память (Алексей Горбов)
                  7. Хранилища данных (Сергей Егоричев)
                  8. JVM (Андрей Паньгин apangin)
                  9. Мониторинг (Сергей Шарапов Sharapoff)
                  10. Облака (Леонид Талалаев)

                  Читать дальше →
                • Грузите апельсины бочках. Релизы в Golang проектах

                    Данная статья является продолжением инструментальной темы, затронутой в прошлой публикации. Сегодня мы постараемся разобраться со сборкой релизов Golang приложений в виде единого исполняемого файла, включающего ресурсные зависимости, и вопросом оптимизации размера итоговой сборки. Также рассмотрим процесс построения рабочего окружения отвечающего следующим требованиям:


                    1. Переносимость. Окружение должно быть легко воспроизводимо на различных машинах.
                    2. Изолированность. Окружение не должно влиять на версии установленных библиотек и программ на машине разработчика.
                    3. Гибкость. Окружение должно позволять собирать релизы для различных версий Golang и Linux (разные версии дистрибутивов и glibc).
                    4. Повторяемость. Не должно быть магии и тайных знаний, то есть все шаги сборки проекта и зависимостей должны быть описаны кодом.
                    Читать дальше →
                  • Как построить сообщество. Перевод книги «Социальная архитектура»: Глава 3. Сообщество ZeroMQ

                    • Translation
                    Можем ли мы целенаправленно строить сообщества?

                    image Меня иногда спрашивают, что такого особенного в ZeroMQ. На это я всегда отвечаю, что ZeroMQ — возможно лучший ответ, который у нас есть на злободневный вопрос «Как создавать распределенные программные средства, которые требуются от нас 21 век?». Но, помимо этого, ZeroMQ выделяется благодаря своему сообществу. Что и отличает волков от овец.

                    Есть три основных open source паттерна. Во-первых, когда крупная фирма выбрасывает на рынок код, чтобы расправится с конкурентами. Это модель Apache Foundation. Во-вторых, когда крошечные команды и маленькие компании строят свою мечту. Это наиболее распространенная open source модель, которая может быть наиболее коммерчески успешна. И наконец, агрессивные и разнообразные сообщества, всей толпой пробирающиеся сквозь дебри проблем. Это модель Linux, и вот к ней мы и стремимся в ZeroMQ.

                    Сложно переоценить мощь и упорство работающего open source сообщества. Наверно, не существует лучшего способа создания программного обеспечения в долгосрочной перспективе. Сообщество не только занимается решением самых релевантных проблем, но и делает это оптимально, аккуратно, наблюдая за результатами годами, десятилетиями, пока они сохраняют значение, после чего спокойно оставляет их.
                    Читать дальше →
                  • Система сбора, анализа, уведомлений и визуализации логов на syslog-ng, elasticsearch, kibana, grafana, elasticalert

                    • Tutorial

                    image


                    Что мы получим после этой статьи:


                    Систему сбора и анализа логов на syslog-ng, elasticsearch в качестве хранилища данных, kibana и grafana в качестве систем визуализации данных, kibana для удобного поиска по логам, elasticalert для отправки уведомлений по событиям. Приготовьтесь, туториал объемный.


                    Какие логи будем собирать:


                    • все системные логи разложенные по индексам в зависимости от их facility(auth,syslog,messages и т.д.);
                    • логи nginx — access и error;
                    • логи pm2;
                    • и др.

                    Обоснование выбора системы


                    Почему я выбрал связку с syslog-ng в качестве отправителя, парсера и приемщика логов? Да потому что он очень быстрый, надежный, не требовательный к ресурсам(да да — logstash в качестве агентов на серверах и виртуальных машинах просто убожество в плане пожирания ресурсов и требованием java), с внятным синтаксисом конфигов(вы видели rsyslog? — это тихий ужас), с широкими возможностями — парсинг, фильтрация, большое количество хранилищ данных(postgresql,mysql,elasticsearch,files и т.д.), буферизация(upd не поддерживает буферизацию), сторонние модули и другие фишки.


                    Требования:


                    • Ubuntu 16.04 или debian 8-9;
                    • vm для развертывания;
                    • Прямые руки.

                    Приступим или добро пожаловать под кат

                    Читать дальше →
                  • Введение в нейронные сети на Golang

                    Привет читателям Habrahabr! В этой статье я продемонстрирую вам пример простой нейронной сети на языке Golang с использованием готовой библиотеки.

                    Немного предисловия


                    Начав изучать язык программирования Golang, мне стало интересно, что может этот язык в сфере машинного обучения. Тогда я начал искать примеры кода какой-либо НС на этом языке. К сожалению, ничего толкового найти не получилось. И вот тогда я решил переписать НС из этой статьи под GO.
                    Читать дальше →
                  • Переписать базу сообщений ВКонтакте с нуля и выжить

                      Наши пользователи пишут друг другу сообщения, не зная усталости.

                      Это довольно много. Если бы Вы задались целью прочитать все сообщения всех пользователей, это бы заняло больше 150 тысяч лет. При условии, что Вы довольно прокачанный чтец и тратите на каждое сообщение не больше секунды.

                      При таком объёме данных критически важно, чтобы логика хранения и доступа к ним была построена оптимально. Иначе в один не такой уж и прекрасный момент может выясниться, что скоро всё пойдёт не так.

                      Для нас этот момент наступил полтора года назад. Как мы к этому пришли и что получилось в итоге — рассказываем по порядку.
                      Читать дальше →
                    • Типичные проблемы IT-стартапов, которые мешают быстро развиваться, и как их избежать

                        На онлайн-конференции ФРИИ «Как построить бизнес на основе технологий» Звиад Кардава, ответственный за developer relations в Google, рассказал о проблемах технологических стартапов в разработке, развитии продукта и управлении процессами, и как их можно решить или избежать.


                        Читать дальше →
                        • +20
                        • 13.9k
                        • 4
                      • Как переехать на работу в США: подборка полезных материалов



                          Согласно данным опроса Иннополиса и HeadHunter в число наиболее желанных стран для профессиональной эмиграции у россиян входят США, Германия и Канада. При этом, США лидируют в списках стран, наиболее привлекательных для ИТ-специалистов из СНГ. Отечественных айтишников привлекает достойный уровень жизни и один из самых высоких в мире уровней заработных плат. Так, «менеджеры компьютерных и информационных систем», входят в ТОП-25 самых высокооплачиваемых специалистов в США.

                          При этом, важно понимать, что получить работу в Америке не так легко, ведь компаниям проще работать с теми специалистами, у которых уже есть разрешение на работу в стране. Я собрала полезные ссылки для тех, кто собирается получить рабочую визу в США.
                          Читать дальше →
                          • +11
                          • 25.9k
                          • 8
                        • Установка Kubernetes 1.8 Bare Metal

                          В интернете написано довольно много статей по установке Kubernetes, но большинство из них базируются на kubeadm и minikube. Это, конечно, здорово, что можно легко и за пару кликов развернуть кластер, но хотелось бы иметь больше понимания из чего состоит Kubernetes. Попробую исправить эту ситуацию данным руководством.
                          Читать дальше →
                        • Инфраструктура с Kubernetes как доступная услуга



                            Kubernetes стал для нас той технологией, которая в полной мере позволяет соответствовать строгим требованиям к отказоустойчивости, масштабируемости и качественному обслуживанию проекта. Несмотря на то, что сегодня K8s больше распространен в крупных организациях и проектах, мы научились применять его и в небольших приложениях. Снижение себестоимости обслуживания стало возможным для нас благодаря унификации и обобщению всех компонентов, которые встречаются практически у каждого клиента. Эта статья — взгляд на полученный опыт со стороны бизнес-потребностей и их технической реализации, которая позволяет нам предлагать клиентам качественное решение и поддержку за разумные деньги.
                            Читать дальше →
                          • Полное руководство по написанию утилиты для Go

                            • Translation


                            Некоторое время назад я начал делать утилиту, которая упростила бы мне жизнь. Она называется gomodifytags. Утилита автоматически заполняет поля структурных тегов (struct tag) с помощью имён полей. Пример:


                            Пример использования gomodifytags в vim-go


                            Эта утилита облегчает управление многочисленными полями структуры. Она умеет добавлять и удалять теги, управлять их опциями (например, omitempty), определять правила трансформации (snake_case, camelCase и пр.) и многое другое. Как эта утилита работает? Какие Go-пакеты она использует? Наверное, у вас есть много вопросов.


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


                            Налейте кофе и начинайте читать!

                            Читать дальше →
                            • +35
                            • 17.5k
                            • 9