Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Атомарность операций и счетчики в memcached

Разработка веб-сайтов *
Серия постов про “Web, кэширование и memcached” продолжается. В первом и втором постах мы поговорили о memcached, его архитектуре, возможном применении, выборе ключа кэширования и кластеризации memcached.

Сегодня речь пойдет о:
  • атомарных операциях в memcached;
  • реализации счетчиков просмотров и онлайнеров.

Следующий пост будет посвящен проблеме одновременного перестроения кэшей.

Что же с атомарностью операций?
Всего голосов 45: ↑43 и ↓2 +41
Просмотры 7K
Комментарии 12

Потоко-безопасная ленивая инициализация в C++

Системное программирование *
Перевод
Реймонд Чен написал занятную серию блогпостов о беззамочной синхронизации. Мне бы хотелось опубликовать эти заметки и для хаброчитателей. Данный пост — введение в серию, скомпилированное из трёх старых постов Чена.
  1. Ленивая инициализация встроенными средствами C++
  2. Беззамочная синхронизация
  3. Беззамочная потоко-безопасная ленивая инициализация


Ленивая инициализация встроенными средствами C++


Инициализация статических локальных переменных в C++ непотокобезопасна, причём намеренно!

Спецификацией установлено, что статические локальные переменные (в отличие от глобальных) инициализируются при первом выполнении блока кода, в котором они объявлены.

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

int ComputeSomething()
{
  static int cachedResult = ComputeSomethingSlowly();
  return cachedResult;
}

(Примерно такой код советуют в популярном C++ FAQ, чтобы не зависеть от выбранного компилятором порядка инициализации глобальных статических переменных.)
Читать дальше →
Всего голосов 55: ↑49 и ↓6 +43
Просмотры 12K
Комментарии 21

Модель памяти в примерах и не только

Java *
Tutorial
В продолжение серии топиков под названием «фундаментальные вещи о Java, которые стоит знать, но которые многие не знают». Предыдущий топик: Бинарная совместимость в примерах и не только

Модель памяти Java — нечто, что оказывает влияние на то, как работает код любого java-разработчика. Тем не менее, довольно многие пренебрегают знанием этой важной темы, и порой наталкиваются на совершенно неожиданное поведение их приложений, которое объясняется именно особенностями устройства JMM. Возьмём для примера весьма распространённую и некорректную реализацию паттерна Double-checked locking:

public class Keeper {
    private Data data = null;
    
    public Data getData() {
        if(data == null) {
            synchronized(this) {
                if(data == null) {
                    data = new Data();
                }
            }
        }
        
        return data;
    }
}

Люди, пишущие подобный код, пытаются добиться улучшения производительности, избегая блокировки, если значение уже было присвоено. К сожалению, эти люди не учитывают многих факторов, в результате проявления которых может случиться зомби-апокалипсис. Под катом я расскажу теорию и приведу примеры того, как что-то может пойти не так. Кроме того, как говорили в одном индийском фильме, «Мало знать, что не так. Нужно знать, как сделать так, чтобы было так». Потому и рецепты успеха вы также сможете найти дальше.
Читать дальше →
Всего голосов 98: ↑95 и ↓3 +92
Просмотры 206K
Комментарии 39

Как считать счётчики и не сбиться со счёта

Высокая производительность *Разработка веб-сайтов *Проектирование и рефакторинг *Алгоритмы *

Число подписчиков блога. Число опубликованных постов пользователя. Число положительных и отрицательных голосов за комментарий. Число оплаченных заказов товара. Вам приходилось считать что-то подобное? Тогда, готов поспорить, что оно у вас периодически сбивалось. Да ладно, даже у вконтакта сбивалось:



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

Читать дальше →
Всего голосов 34: ↑29 и ↓5 +24
Просмотры 14K
Комментарии 48

Файловая система Apple File System (APFS)

Софт IT-компании

64-битные иноды, атомарные транзакции, метки времени в наносекундах, клонирование директорий, встроенное шифрование


На вчерашней презентации WWDC 2016 компания Apple показала новые версии операционных систем macOS (Sierra) 10.12, iOS 10, tvOS 10, watchOS 3, приложение для обучения детей программированию Swift Playgrounds и новые эмодзи.

Казалось бы, ничего интересного. Однако, Apple всё-таки выкатила кое-что фундаментальное. Самая значительная разработка из всего упомянутого на презентации — это файловая система нового поколения Apple File System (APFS) в операционной системе macOS (Sierra) 10.12.

На сайте для разработчиков вскоре после презентации опубликована документация с основными характеристиками и описанием файловой системы, которая повторяет отдельные функции мощной свободной файловой системы ZFS.
Читать дальше →
Всего голосов 13: ↑12 и ↓1 +11
Просмотры 67K
Комментарии 62

Отладка бага, который не воспроизводится

Разработка мобильных приложений *Разработка под Android *Отладка *Тестирование мобильных приложений *ReactJS *
Перевод
10 октября 2018 года наша команда выпустила новую версию приложения на React Native. Мы рады и гордимся этим.

Но ужас-то какой: через несколько часов внезапно увеличивается количество сбоев под Android.


10 000 сбоев под Android

Наш инструмент мониторинга сбоев Sentry сходит с ума.
Читать дальше →
Всего голосов 46: ↑43 и ↓3 +40
Просмотры 16K
Комментарии 22

Двухфазный коммит и будущее распределённых систем

Высокая производительность *Алгоритмы *Распределённые системы *
Перевод
В этой статье мы смоделируем и исследуем протокол двухфазного коммита с помощью TLA+.

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

Проблема двухфазного коммита


Транзакция проходит через диспетчеры ресурсов (RM). Все RM должны договориться, будет транзакция завершена или прервана.

Менеджер транзакций (TM) принимает окончательное решение: коммит или отмена. Условием для коммита является готовность к коммиту всех RM. В противном случае транзакцию следует отменить.
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 15K
Комментарии 1

Зачем грелка, если есть ноутбук: исследование термического сопротивления на атомарном уровне

Блог компании ua-hosting.company Читальный зал Производство и разработка электроники *Научно-популярное Физика


Многим геймерам по всему миру, заставшим эпоху Xbox 360, очень знакома ситуация, когда их консоль превращалась в сковороду, на которой можно было жарить яичницу. Подобная печальная ситуация встречается не только с игровыми консолями, но и с телефонами, ноутбуками, планшетами и многим другим. В принципе, практически любая электроника может испытывать тепловой удар, что может привести не только к ее поломке и расстроенным чувствам ее владельца, но и к «бада-бум» батареи и серьезным травмам. Сегодня мы с вами познакомимся с исследованием, в котором ученые из Стэнфордского университета, аки Ник Фьюри из комиксов, создали щит, оберегающий термочувствительные детали электроники от перегрева и, как следствие, предотвращающий их поломку. Как ученым удалось создать термо-щит, какие его основные компоненты и насколько он эффективен? Об этом и не только мы узнаем из доклада исследовательской группы. Поехали.
Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Просмотры 4.9K
Комментарии 8

Насколько много маркетинга в ACID?

Блог компании OTUS Высокая производительность *Анализ и проектирование систем *Администрирование баз данных *Промышленное программирование *
Всем привет. На связи Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Помимо преподавания, как вы могли заметить, я занимаюсь написанием авторского материала для блога OTUS на хабре и сегодняшнюю статью хочу приурочить к запуску курса «Базы данных», на который прямо сейчас открыт набор.




Предисловие


Транзакции появились в 70-ых годах и были представлены в качестве инструмента базы данных, позволяющего решить проблемы отказоустойчивости и доступа к данным в конкурентной среде. Затем был сформулирован ряд свойств, которыми должна обладать транзакция для того, чтобы выполнять поставленные перед ней задачи, а заглавные буквы этих свойств, поставленные в нужном порядке, составили красивую аббревиатуру ACID.

Период времени, в течении которого происходили данные события, характеризовался отсутствием высоких нагрузок, Интернета и проблем с производительностью, для решения которых можно было обойтись лишь методами вертикального масштабирования. Впоследствии, в начале 2000-ых возник тренд на NoSQL базы данных, появилась аббревиатура BASE, которая фактически противопоставлялась классическому ACID (ACID — кислота, BASE — щелочь). Сейчас возникает обратный тренд на ACID. Даже NoSQL-ая MongoDB стала поддерживать ACID.

Давайте разберемся с тем, что означает данная аббревиатура и насколько много маркетинга в ней.
Читать дальше →
Всего голосов 17: ↑10 и ↓7 +3
Просмотры 3.1K
Комментарии 8

К чему может привести ослабление уровня изоляции транзакций в базах данных

Блог компании OTUS Высокая производительность *Анализ и проектирование систем *Администрирование баз данных *Промышленное программирование *
Всем привет. На связи Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Помимо преподавания, как вы могли заметить, я занимаюсь написанием авторского материала для блога OTUS на хабре и сегодняшнюю статью хочу приурочить к запуску курса «PostgreSQL», на который прямо сейчас открыт набор.




Введение


В прошлый раз мы с вами поговорили про то, что транзакции в базах данных служат для решения двух задач: обеспечения отказоустойчивости и доступа к данным в конкурентной среде. Для полноценного выполнения этих задач транзакция должна обладать свойствами ACID. Сегодня мы подробно поговорим про букву I (isolation) в данной аббревиатуре.
Читать дальше →
Всего голосов 25: ↑23 и ↓2 +21
Просмотры 6.6K
Комментарии 11

Как синхронизировать сценарий без транзакций? Штатными средствами Java

Java *Алгоритмы *API *ООП *Браузеры
Tutorial

Давайте представим, что вы параноик, и параноик вдвойне, когда дело касается многопоточности. Предположим, что вы делаете backend некого функционала приложения, а приложение переодически дергает на вашем серверы какие-то методы. Все вроде хорошо, но есть одно но. Что если ваш функционал напрямую зависит от каких-либо других данных, того же банального профиля например? Встает вопрос, как гарантировать то, что сценарий отработает именно так, как вы планировали и не будет каких-либо сюрпризов? Транзакции? Да это можно использовать, но что если Вы фантастический параноик и уже представляете как к вам на сервер летит 10 запросов к одному методу от разных клиентов и все строго в одно время. А в этот момент бизнес-логика данного метода завязана на 100500 разных данных. Как всем этим управлять? Можно просто синхронизировать метод и все. Но что если летят еще и те запросы, держать которые нет смысла? Тут уже начинаются костыли. Я пару раз уже задавался подобным вопросом, и были интересно, ведь задача до абсурда простая и повседневная (если вы заботитесь о том, чтобы не было логических багов конечно же ). Сегодня решил подумать, как это можно очень просто и без костылей реализовать. И решение вышло буквально на 100 строк кода.

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

Давайте предположим, что есть водитель и есть пассажир. Водитель не может менять машину до тех пор, пока клиент, например подтверждает поездку. Это что получается, клиент соглашался на поездку с одними характеристиками машины, а по факту у водителя другая машина? Не дела! Можно организовать что-то подобное:

Читать далее
Всего голосов 13: ↑3 и ↓10 -7
Просмотры 3.1K
Комментарии 8