• Проблемы при работе с кэшем и способы их решения

      Привет, Хабр!

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

      Существует мнение, что в программировании есть только две по-настоящему сложные задачи: придумывание названий и инвалидация кэша. Я не буду спорить с тем, что инвалидация — это сложно, но мне кажется, что кэширование — довольно хитрая вещь даже без учёта инвалидации. Есть много вещей, о которых следует подумать, прежде чем начинать использовать кэш. В этой статье я попробую сформулировать некоторые проблемы, с которыми можно столкнуться при работе с кэшем в большой системе.


      Wild horses stampeding. Оригинал картинки.

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

      При работе я исхожу из того, что рассматриваемая система состоит из приложения, базы данных и кэша для данных. Вместо базы данных может использоваться любой другой источник (например, какой-то микросервис или внешний API).
      Читать дальше →
    • Что особенного в СУБД для данных в оперативной памяти

        Константин Осипов (@kostja )


        Константин Осипов

        Как родилась идея доклада? Я не очень люблю выступать и рассказывать про фичи, особенно про будущие фичи. Выясняется, что и люди не особо любят это слушать. Они любят слушать про то, как все устроено. Это доклад о том, как все устроено или должно быть, с моей точки зрения, устроено в современной СУБД.

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



        На макроуровне – это то, как должна быть устроена современная СУБД. Почему у нас сегодня есть возможность создавать новые базы данных, почему нельзя взять текущую и удовлетвориться ее производительностью, подтюнить или написать для нее патч? Просто взять и написать патч, который бы ее ускорил, если она медленная? Из какого пространства решений мы выбираем?
        Читать дальше →
      • Микросервисы (Microservices)

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

        Термин «Microservice Architecture» получил распространение в последние несколько лет как описание способа дизайна приложений в виде набора независимо развертываемых сервисов. В то время как нет точного описания этого архитектурного стиля, существует некий общий набор характеристик: организация сервисов вокруг бизнес-потребностей, автоматическое развертывание, перенос логики от шины сообщений к приемникам (endpoints) и децентрализованный контроль над языками и данными.
        Читать дальше →
      • Правила внедрения TDD в старом проекте

          Статья «Скользящая ответственность паттерна Репозиторий» подняла несколько вопросов, на которые очень сложно дать ответ. Нужен ли репозиторий, если абстрагироваться от технических деталей полностью невозможно? На сколько сложным репозиторий может быть, чтобы его написание оставалось целесообразным? Ответ на эти вопросы различается в зависимости от акцента, который делается при разработке систем. Наверно, самый сложный вопрос: нужен ли, вообще, репозиторий? Проблема «текучей абстракции» и рост сложности кодирования с увеличением уровня абстракции не позволяют найти решение, которое удовлетворяло бы оба лагеря. Например, в репортинге intention design приводит к созданию большого числа методов для каждого фильтра и сортировки, а generic решение создает большой оверхед по кодированию. Продолжать можно бесконечно…

          Для более полного представления я взглянул на проблему абстракций со стороны применения их в уже готовом коде, в legacy code. Репозиторий, в таком случае, нас интересует только, как инструмент для достижения качественного и безбажного кода. Конечно, этот паттерн — не единственное, что необходимо для применения TDD практик. Наевшись «невкусной еды» в нескольких больших проектах и наблюдая за тем, что работает, а что нет, я вывел для себя несколько правил, которые мне помогают следовать TDD практикам. С удовольствием выслушаю конструтктивную критику и иные приёмы внедрения TDD.
          Читать дальше →
        • OAuth-авторизация в Mozilla Thunderbird: от зарождения до релиза

          • Tutorial



          Некоторое время назад мы рассказывали о том, как в Mail.Ru реализован сбор почты с использованием протокола OAuth 2.0. Мы продолжаем повышать безопасность почты и продвигать стандарт OAuth 2.0 в массы. И сегодня расскажем о том, как мы добавили OAuth-авторизацию в почтовый клиент Mozilla Thunderbird. На этом примере мы разберем процесс внесения новой фичи в продукт с открытым исходным кодом, от создания тикета до релиза. Если вы давно хотели сделать свой первый pull request, но не знали как, — читайте нашу историю.

          Читать дальше →
          • +32
          • 8,3k
          • 9
        • Как выбрать язык программирования?



            Именно таким вопросом задалась команда Почты Mail.Ru перед написанием очередного сервиса. Основная цель такого выбора — высокая эффективность процесса разработки в рамках выбранного языка/технологии. Что влияет на этот показатель?
            • Производительность;
            • Наличие средств отладки и профилирования;
            • Большое сообщество, позволяющее быстро найти ответы на вопросы;
            • Наличие стабильных библиотек и модулей, необходимых для разработки веб-приложений;
            • Количество разработчиков на рынке;
            • Возможность разработки в современных IDE;
            • Порог вхождения в язык.

            Кроме этого, разработчики приветствовали немногословность и выразительность языка. Лаконичность, безусловно, так же влияет на эффективность разработки, как отсутствие килограммовых гирь на вероятность успеха марафонца.
            Читать дальше →
          • Простое объяснение движения денег в банковской системе

            • Перевод
            От переводчика: В последние месяцы в жизнь многих людей прочно вошли новости сферы финансов. Одна из недавних тем — возможное отключение России от системы SWIFT. Угроза выглядит очень серьезно, но что на самом деле грозит стране, если события будут развиваться по этому сценарию? Наш сегодняшний материал призван помочь разобраться с тем, как все устроено в глобальном мире финансов.

            На прошлой неделе [статья опубликована в ноябре 2013] Twitter сошел с ума из-за того, что кто-то перевел почти 150 миллионов долларов за одну транзакцию в криптовалюте. Появление такого твита было в порядке вещей:



            Транзакция 194 993 биткоинов стоимостью в 147 миллионов долларов порождает много тайн и спекуляций

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

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


              Хабр, привет! Мы рады поделиться с вами отличными новостями: мы давно работаем над реализацией двухфакторной аутентификации в сервисах Mail.Ru и сейчас, накануне Нового года, внезапно готовы начать закрытое бета-тестирование. Приглашаем к участию всех желающих.

              В нашей реализации в качестве второго фактора выступает код, отправленный по SMS на номер телефона, подключенный к аккаунту.

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

              Любую обратную связь по работе двухфакторной аутентификации можно присылать на адрес o.parinov@corp.mail.ru. А если найдете секьюрити-баги, о них можно заявить через нашу bug bounty-программу, в рамках которой мы оплачиваем исследователям найденные уязвимости.

              Чтобы принять участие в тестировании, оставьте заявку по адресу https://help.mail.ru/surveys/2auth. Первым откликнувшимся бета-тестерам мы готовы предоставить доступ еще до Нового года, чтобы вы успели потестировать функционал во время праздников.
            • Классификация 3D принтеров



              3D печать уверенно набирает обороты и мы все чаще видим посты о том, что 3D принтер научили печатать детали для МКС, органы, дома и многое другое. Зарубежные технологические издания начинают говорить о том, что 3D печать способна воскресить промышленность в штатах, а сервис shapeways, у нас на глазах, показывает интересные темпы роста, хоть и далекие от промышленных. При таком обилии хвалебных текстов о надвигающейся революции в производстве на ум приходит мысль о том, что российский сегмент практически свободен, но так ли просто достигнуть промышленных масштабов при удишевлении самих принтеров и появления open source проектов? Решать вам, а пища для размышлений на тему под катом.
              Читать дальше →
            • Аппаратное ускорение в жизни верстальщика. Семинар в Яндексе

                Привет! Меня зовут Александр Завьялов. В Яндексе я занимаюсь разработкой интерфейсов. Недавно я выступил перед коллегами с докладом об аппаратном ускорении в жизни верстальщика, где также коснулся смежных тем. Рассказал о производительности веб-страниц, о том, как она измеряется и к чему она может стремиться.



                На основе доклада я подготовил этот пост. Я расскажу о том, как браузеры оптимизировали процесс отрисовки: с чего начинали и до чего докатились. Что сейчас можно сделать, чтобы жизнь верстальщиков и пользователей стала немного лучше. Я надеюсь, что кого-нибудь натолкну на какие-нибудь улучшения. Мне бы это было приятно.
                Читать дальше →
              • Как правильно разрабатывать API с поддержкой обратной совместимости. Семинар в Яндексе

                  Привет! Меня зовут Сергей Константинов, в Яндексе я руковожу разработкой API Карт. Недавно я поделился опытом поддержки обратной совместимости со своими коллегами. Мой доклад состоял из двух неравных частей. Первая, большая, посвящена тому, как правильно разрабатывать API, чтобы потом не было мучительно больно. Вторая же про то, что делать, если вам нужно что-то рефакторить и не сломать по дороге обратную совместимость.



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

                  Для разработчика обратная совместимость в первую очередь подразумевает, что единожды принятое обязательство предоставлять какую-либо функциональность невозможно отменить, исправить или перестать поддерживать.
                  Читать дальше →
                • 10 дистрибутивов Linux специального назначения

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

                  1. Parted Magic OS: дистрибутив для восстановления дисков и работы с разделами, который поддерживает более десяти файловых систем и включает различные утилиты для «переноса, копирования, создания, удаления, расширения и сжатия дисковых разделов. Клонирование дисков и осуществление полного бэкапа. Тестирование дисков на возможность сбоя в будущем. Поиск сбойных секторов. Тестирование производительности компьютера. Безопасная полная очистка диска без возможности восстановления. Доступ к незагружаемым HDD для восстановления важных данных».


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

                  Пару недель назад мне попалась на глаза книга Стояна Стефанова (Stoyan Stefanov) Объектно-ориентированный Javascript. У книги был настолько высокий рейтинг на Амазоне (12 обзоров на 5 звезд), что я решил просмотреть, нет ли в ней чего-нибудь что можно было бы порекомендовать другим. Мне очень понравилось, как все описывается в разделе про функции, с которого я начал; поток примеров выстроен таким приятным и прогрессивным образом, что даже начинающие очень легко освоят его. Однако практически сразу я наткнулся на интересное заблуждение, описываемое на протяжении целой главы — удаление функций. Есть и другие ошибки (такие как разница между объявлением функции и оператором function), но сейчас мы не будем их обсуждать.

                  Книга утверждает, что «функции работают как обычные переменные — их можно скопировать в другую переменную или даже удалить». И приводится следующий пример:

                  >>> var sum = function(a, b) {return a + b;}
                  >>> var add = sum;
                  >>> delete sum
                  true
                  >>> typeof sum;
                  "undefined"

                  Если не обращать внимания на пару отсутствующих точек с запятой, что еще не так с этим куском кода? Конечно, проблема в том, что удаление переменной sum не должно было пройти успешно; выражение с оператором delete не должно разрешаться в true и typeof sum не должно вернуть «undefined». Все потому, что в яваскрипте нельзя удалять переменные. По крайней мере, те, которые определены таким образом.

                  Так что же происходит в этом примере? Опечатка? Диверсия? Скорее всего нет. На самом деле весь этот отрывок кода скопирован из Файрбага, который Стоян, должно быть, использовал для тестирования по-быстрому. Почти похоже что у Файрбага какие-то свои правила по поводу удаления. Это Файрбаг сбил Стояна с толку! Так что же на самом деле здесь происходит?
                  Узнать скорей!
                • BigVideo.js: фоновое видео на весь экран



                    Плагин BigVideo.js для jQuery добавляет на страницу видео в качестве фонового изображения через HTML5 Fullscreen API. Видео автоматически растягивается на любой размер экрана. Для работы нужно предварительно загрузить библиотеки jQuery, jQuery UI и jQuery imagesloaded. Запуск:

                    $(function() {
                        var BV = new $.BigVideo();
                        BV.init();
                        BV.show('http://video-js.zencoder.com/oceans-clip.mp4');
                    });

                    В качестве хостинга своих видеороликов удобно использовать Vimeo Pro, он даёт прямую ссылку на mp4-файл и отгружает контент со скоростью более 10 Мбит/с.
                    Читать дальше →
                  • Продаем себя сами

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


                    Недавно на хабре появились первая и вторая части истории о создании Warcraft: Orcs & Humans, написанные Патриком Вайатом. Блог Патрика содержит не только воспоминания о былых днях, и сейчас вашему вниманию предлагается его статься о том, что нужно делать, чтобы всегда иметь возможность найти работу в сфере разработки ПО. Хоть Патрик говорит о рынке США, практически все применимо и к нашим современным реалиям.
                    Читать дальше →
                  • Занимательная геодезия

                      Всем привет!
                      Сегодня я расскажу тебе, %USERNAME%, о башмаках и сургуче, капусте, королях координатах, проекциях, геодезических системах и совсем чуть-чуть о веб-картографии. Устраивайся поудобнее.

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

                      Вот, казалось бы, простая вещь — географические координаты. Широта и долгота, что может быть проще. А вот представьте, что вы очутились на необитаемом острове. Смартфон утонул, а других средств связи у вас нет. Остаётся только написать письмо с просьбой о помощи и по старинке выбросить его в море в запечатанной бутылке.

                      Вот только незадача — вы совершенно не знаете, где находится ваш необитаемый остров, а без указания координат никто вас не найдёт, даже если выловит ваше письмо. Что делать? Как определить координаты без GPS?

                      Об этом и о многом другом - подробнее под катом