• Чек-лист: что нужно было делать до того, как запускать микросервисы в prod

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


      К сожалению, некоторые невысокие программисты всерьёз полагают, что Dockerfile с какой-нибудь вообще любой командой внутри — это уже сам по себе микросервис и его можно деплоить хоть сейчас. Докеры крутятся, лавешка мутится. Такой подход оборачивается проблемами начиная с падения производительности, невозможностью отладки и отказами обслуживания и заканчивая кошмарным сном под названием Data Inconsistency.


      Если вы ощущаете, что пришло время запустить ещё одну аппку в Kubernetes/ECS/whatever, то мне есть чем вам возразить.


      English version is also available.

      Читать дальше →
    • Как мы находим проблемные релизы с помощью Graphite и Moira. Опыт Яндекс.Денег

        Привет, Хабр! Вдоволь наотдыхавшись после длинных праздников, мы снова готовы причинять вам пользу всеми доступными способами. Коллегам из IT-департамента всегда есть что рассказать, и сегодня мы делимся с вами докладом Александра Призова, системного администратора Яндекс.Денег, с митапа JavaJam.



        Как мы выстроили поток обратной связи для обнаружения проблемных релизов с помощью Graphite и Moira. Расскажем, как собирать и анализировать метрики о количестве ошибок в приложении.
        Читать дальше →
        • +18
        • 3,9k
        • 1
      • Руководство и шпаргалка по Wireshark

        • Перевод
        • Tutorial
        Даже поверхностное знание программы Wireshark и её фильтров на порядок сэкономит время при устранении проблем сетевого или прикладного уровня. Wireshark полезен для многих задач в работе сетевого инженера, специалиста по безопасности или системного администратора. Вот несколько примеров использования:

        Устранение неполадок сетевого подключения


        • Визуальное отображение потери пакетов
        • Анализ ретрансляции TCP
        • График по пакетам с большой задержкой ответа

        Исследование сессий прикладного уровня (даже при шифровании с помощью SSL/TLS, см. ниже)


        • Полный просмотр HTTP-сессий, включая все заголовки и данные для запросов и ответов
        • Просмотр сеансов Telnet, просмотр паролей, введённых команд и ответов
        • Просмотр трафика SMTP и POP3, чтение писем
        Читать дальше →
        • +26
        • 57,9k
        • 5
      • Практические приёмы работы в Wireshark

        • Перевод
        Джулия Эванс, автор материала, перевод которого мы сегодня публикуем, решила рассказать об одном из своих любимых сетевых инструментов, который называется Wireshark. Это — мощная и сложная программа, оснащённая графическим интерфейсом, предназначенная для анализа трафика в компьютерных сетях. Джулия говорит, что на практике пользуется лишь немногими возможностями Wireshark, но они обычно оказываются очень кстати. Здесь она хочет поделиться со всеми желающими рассказом о самых полезных приёмах работы с программой и надеется, что они пригодятся не только ей, но и всем, кому приходится решать сетевые проблемы.


        Читать дальше →
      • Как работает yield

        • Перевод
        На StackOverflow часто задают вопросы, подробно освещённые в документации. Ценность их в том, что на некоторые из них кто-нибудь даёт ответ, обладающий гораздо большей степенью ясности и наглядности, чем может себе позволить документация. Этот — один из них.

        Вот исходный вопрос:
        Как используется ключевое слово yield в Python? Что оно делает?

        Например, я пытаюсь понять этот код (**):
        def _get_child_candidates(self, distance, min_dist, max_dist):
            if self._leftchild and distance - max_dist < self._median:
                yield self._leftchild
            if self._rightchild and distance + max_dist >= self._median:
                yield self._rightchild
        

        Вызывается он так:
        result, candidates = list(), [self]
        while candidates:
            node = candidates.pop()
            distance = node._get_dist(obj)
            if distance <= max_dist and distance >= min_dist:
                result.extend(node._values)
                candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
                return result
        


        Что происходит при вызове метода _get_child_candidates? Возвращается список, какой-то элемент? Вызывается ли он снова? Когда последующие вызовы прекращаются?

        ** Код принадлежит Jochen Schulz (jrschulz), который написал отличную Python-библиотеку для метрических пространств. Вот ссылка на исходники: http://well-adjusted.de/~jrschulz/mspace/

        Подробный и обстоятельный ответ
      • Малоизвестные Git-команды

        • Перевод


        У Git есть строгие обязательства по обратной совместимости: многие продвинутые возможности скрыты за разнообразными опциями, а не применяются как поведение по умолчанию. К счастью, Git также поддерживает и алиасы, так что вы можете создавать свои собственные команды, которые делают всю характерную для Git магию. Под катом — подборка полезных (или как минимум забавных) алиасов, определённых в моём .gitconfig.
        Читать дальше →
      • Я отказался от PGP

        • Перевод
        Об авторе: Филиппо Валсорда занимается криптографией и TLS, называет себя «послом urandom», входит в криптогруппу компании Cloudflare, поднял известный сервис для тестирования на уязвимость Heartbleed. Вы могли встречать его на конференциях по криптографии и компьютерной безопасности или под ником @FiloSottile на Github и в твиттере

        Спустя годы мучений с GnuPG с различным уровнем энтузиазма я пришёл к выводу, что оно не стоит того, и я сдаюсь. По крайней мере относительно концепции долговременных ключей PGP.

        Речь не о самой программе gpg и не о криптографических инструментах в принципе. Многие писали на эту тему. Я говорю о модели долговременных ключей PGP, будь она гарантирована сетью доверия, отпечатками открытых ключей или моделью TOFU — неважно. Я говорю о том, что она не подходит для меня лично.
        Читать дальше →
      • Основы языка программирования Python за 10 минут

        • Перевод
        Python Logo

        На сайте Poromenos' Stuff была
        опубликована статья, в которой, в сжатой форме,
        рассказывают об основах языка Python. Я предлагаю вам перевод этой статьи. Перевод не дословный. Я постарался подробнее объяснить некоторые моменты, которые могут быть непонятны.

        Если вы собрались изучать язык Python, но не можете найти подходящего руководства, то эта
        статья вам очень пригодится! За короткое время, вы сможете познакомиться с
        основами языка Python. Хотя эта статья часто опирается
        на то, что вы уже имеете опыт программирования, но, я надеюсь, даже новичкам
        этот материал будет полезен. Внимательно прочитайте каждый параграф. В связи с
        сжатостью материала, некоторые темы рассмотрены поверхностно, но содержат весь
        необходимый метриал.


        Читать дальше →
      • Головоломки TCP

        • Перевод

        Говорят, что нельзя полностью понять систему, пока не поймёшь её сбои. Ещё будучи студентом я ради забавы написал реализацию TCP, а потом несколько лет проработал в IT, но до сих пор продолжаю глубже и глубже изучать работу TCP — и его ошибки. Самое удивительное, что некоторые из этих ошибок проявляются в базовых вещах. И они неочевидны. В этой статье я преподнесу их как головоломки, в стиле Car Talk или старых головоломок Java. Как и любые другие хорошие головоломки, их очень просто воспроизвести, но решения обычно удивляют. И вместо того, чтобы фокусировать наше внимание на загадочных подробностях, эти головоломки помогают изучить некоторые глубинные принципы работы TCP.
        Читать дальше →
      • Как работают ИТ-специалисты. Алексей Владышев, автор Zabbix



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

          Будет интересно выяснить, что их объединяет, в чем они противоречат другу другу. Возможно, их ответы помогут выявить какие-то общие закономерности, полезные советы, которые помогут многим из нас.

          Сегодня наш гость — Алексей Владышев, исполнительный директор компании Zabbix, разработчик открытой системы мониторинга Zabbix, которая пользуется большой популярностью во всём мире.
          Читать дальше →
          • +19
          • 11,9k
          • 6
        • Алистер Коберн: Командная разработка и agile

          • Перевод
          Сегодня день рождения одного из отцов-основателей Agile-манифестаАлистера Коберна. Предлагаю вашему вниманию перевод его выступления на TED про командную разработку.

          image

          Давайте посмотрим на группу людей, занимающихся дизайном. Мы видим, как они что-то изобретают, общаются и принимают решения. Они решают проблему, которую ещё не до конца понимают, потому что это только начало и она изменяется. Они создают решение, которое, конечно, не понимают, потому что только начали, и оно изменяется. Они выражают свои идеи с помощью разновидностей языка, которые часто тоже не понимают, и угадайте, что? Те изменяются.

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

          Читать дальше →
          • +14
          • 14,7k
          • 2
        • Security Week 46: обход OAuth 2.0, низковольтный ICMP DDoS, приватность iOS и обход локскрина

            Давно у нас не было научных работ по теме безопасности, и вот, пожалуйста. На европейской конференции BlackHat EU исследователи из университета Гонконга показали примеры некорректной реализации протокола OAuth 2.0, которые, в ряде случаев, позволяют украсть учетные записи пользователей. Так как речь действительно идет о научном исследовании, то и терминология соответствующая — без всяких этих «ААААА!1 Один миллиард учеток можно легко взломать через OAuth 2.0». Впрочем нет, oh wait, примерно так работа и называется (новость и само исследование).

            Как бы то ни было, проблема, обнаруженная исследователями, заключается не в самом OAuth, а в его конкретных реализациях. Необходимость внедрять системы Single-Sign-On не только для веба, но и для мобильных приложений (принадлежащих не только владельцам сервисов идентификации типа Facebook и Google, но и третьей стороне) привела к тому, что стандарт OAuth 2.0 начали надстраивать кто во что горазд, не всегда соблюдая методы безопасности.

            В результате авторизация пользователя местами происходит как попало: в исследовании описывается ситуация, когда авторизоваться от имени другого пользователя можно, зная только его логин (обычно это e-mail). Впрочем, описываемые сценарии атаки предусматривают наличие позиции man-in-the-middle, и возможны не всегда. Из обнаруженных в ходе исследования проблемных приложений большинство работает с китайским identity provider Sina, а из 99 исследованных аппов, поддерживающих OAuth через Google и Facebook атаке подвержены всего 17. Решить проблему можно на стороне провайдеров: если доверять данным только от самого сервера идентификации, и не доверять данным от приложения (которые могут быть подделаны по пути), то элегантный хак работать не будет.
            Читать дальше →
            • +10
            • 10,2k
            • 3
          • Как работают ИТ-специалисты. Игорь Сысоев — основатель и СТО в Nginx

              image7 и 8 ноября в Сколково прошла конференция HighLoad++ 2016. Более 200 экспертов выступали с докладами о высоконагруженных сервисах, проблемах работы с ними, администрировании и многом другом.

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

              С каждым мы провели интервью в формате блиц-опроса. Будет интересно выяснить, что объединяет этих IT-специалистов, в чем они похожи. Возможно, их ответы помогут выявить какие-то общие закономерности, полезные советы, которые помогут многим из нас.
              Читать дальше →
            • Sensu — фреймворк для мониторинга

              • Tutorial


              Немного истории

              В 2011 году в DevOps-среде возникло движение, объединившееся под хештегом #monitoringsucks, и критиковавшее существующие системы мониторинга за отсутствие гибкости. Что именно их не устраивало — прекрасно иллюстрирует эта презентация.
              Если вкратце — хочется людям некоего стандарта API для взаимодействия между компонентами мониторинга, ну и появления самих этих компонент, чтоб из них строить гибкий и умный мониторинг.

              Итогом этой волны недовольства стали массовые обсуждения проблем и привлечение внимания к интересным утилитам типа Sensu и Riemann.

              В 2013 году хештег в сообществе сменился — теперь это #monitoringlove. Произошло это благодаря развитию opensource-утилит для мониторинга.

              Из новых утилит наибольший интерес представляет Sensu. Riemann я не стал всерьез рассматривать, поскольку на данный момент у него нет никаких средств для обеспечения отказоустойчивости, да и сама идея писать конфиг на Clojure мне не сильно нравится.

              Именно о Sensu я и расскажу в этой статье, опишу базовые принципы работы и приведу пример решения типичной задачи мониторинга.
              Читать дальше →
            • Парсинг JSON — это минное поле

              • Перевод
              image

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

              Читать дальше →
            • Несколько вещей, которые стоит знать о MaaS



                Мы как-то уже писали о том, что такое PaaS, DBaaS, SaaS и другие *aaS. Все термины мы тогда не охватили, но это и не было целью. Есть еще один важный термин, который хотелось бы прояснить. Речь идет о MaaS (Monitoring-as-a-service).

                Это важная услуга, которое с течением времени будет становиться только актуальнее. Она важна для большого количества компаний, которым необходимо следить за своим оборудованием и программным обеспечением постоянно. Возможно, и не в режиме 24/7, но достаточно часто. И тогда вот, что может произойти (мы с этим столкнулись, так что делимся наболевшим, так сказать).
                Читать дальше →
              • Как работает Git

                • Перевод
                В этом эссе описана схема работы Git. Предполагается, что вы знакомы с Git достаточно, чтобы использовать его для контроля версий своих проектов.

                Эссе концентрируется на структуре графа, на которой основан Git, и на том, как свойства этого графа определяют поведение Git. Изучая основы, вы строите своё представление на достоверной информации, а не на гипотезах, полученных из экспериментов с API. Правильная модель позволит вам лучше понять, что сделал Git, что он делает и что он собирается сделать.

                Текст разбит на серии команд, работающих с единым проектом. Иногда встречаются наблюдения по поводу структуры данных графа, лежащего в основе Git. Наблюдения иллюстрируют свойство графа и поведение, основанное на нём.

                После прочтения для ещё более глубокого погружения можно обратиться к обильно комментируемому исходному коду моей реализации Git на JavaScript.
                Читать дальше →
              • Подборка полезных материалов по DevOps

                  Делимся новым контентом по DevOps: курсы Microsoft Virtual Academy на русском языке, видео-уроки по DevOps-практикам на Channel 9 и подборка полезных материалов.


                  Читать дальше →
                  • +23
                  • 22,9k
                  • 2
                • Опыт построения и эксплуатации большого файлового хранилища

                    Даниил Подольский

                    Даниил Подольский (Git in Sky)


                    Рассказ о том, что каждый инженер должен сделать в своей жизни после того, как он родил ребенка, посадил дерево и построил дом – это сделать свое файловое хранилище.

                    Доклад мой называется «Опыт построения и эксплуатации большого файлового хранилища». Большое файловое хранилище мы строим и эксплуатируем последние три года. В тот момент, когда я подавал тезисы, доклад назывался «Ночью через лес. Опыт построения эксплуатации бла-бла-бла». Но программный комитет попросил меня быть серьезнее, тем не менее, на самом деле это доклад «Ночью через лес».
                    Читать дальше →