Search
Write a publication
Pull to refresh
4
0.2
Bronx @Bronx

User

Send message

Распределенные транзакции между RabbitMQ и MS SQL

Reading time5 min
Views19K
Для реализации асинхронного общения между двумя системами очень выгодно использовать очереди сообщений. Даже если одна из систем лежит, другая этого не замечает и спокойно продолжает слать ей сообщения, которые будут обработаны, когда вторую систему поднимут. В качестве очереди сообщений можно использовать таблицу MS SQL, но это не особо масштабируемое решение.

Однако, как только у нас появляется отдельная система для хранения очереди сообщений (мы используем RabbitMQ), сразу возникают проблемы с транзакционностью. Например, если мы хотим сохранить в БД отметку о том, что мы отправили сообщение в Rabbit, не так уж и просто гарантировать, чтобы отметка была сохранена только в случае успешной отправки сообщения. О том, как мы справлялись с этой проблемой читайте под катом.
Читать дальше →

Краткая история масштабирования LinkedIn

Reading time9 min
Views27K
Примечание переводчика: Мы в «Латере» занимаемся созданием биллинга для операторов связи. Мы будем писать об особенностях системы и деталях ее разработки в нашем блоге на Хабре (например, об обеспечении отказоустойчивости), но почерпнуть что-то интересное можно и из опыта других компаний. Сегодня мы представляем вашему вниманию адаптированный перевод заметки главного инженера LinkedIn Джоша Клемма о процессе масштабирования инфраструктуры социальной сети.



Сервис LinkedIn был запущен в 2003 году с целью создания и поддержания сети деловых контактов и расширения возможностей поиска работы. За первую неделю в сети зарегистрировалось 2 700 человек. Спустя несколько лет число продуктов, клиентская база и нагрузка на серверы заметно выросли.

Сегодня в LinkedIn насчитывается более 350 миллионов пользователей по всему миру. Мы проверяем десятки тысяч веб-страниц каждую секунду, каждый день. На мобильные устройства сейчас приходится более 50% нашего трафика по всему миру. Пользователи запрашивают данные из наших бэкенд-систем, которые, в свою очередь, обрабатывают по несколько миллионов запросов в секунду. Как же мы этого добились?
Читать дальше →

Стартап, который раздаёт бедным деньги за просто так

Reading time12 min
Views63K
image

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

Тереза недоумевала. «Мы не верили, что нам кто-то даст столько денег, не требуя их отработать». Но деньги дали.

Эта история повторялась многократно. Организация с деньгами, GiveDirectly, неизвестна широкому кругу лиц. Они почти не тратятся на маркетинг, их страница на Facebook собрала всего 7000 лайков.

При этом, GiveDirectly является одной из самых эффективных организаций, пытающихся искоренить нищету. Двое из совета директоров компании стояли у истоков Facebook. В духе Кремниевой долины, работа компании основана на обработке данных, и прозрачна больше, чем остальные проекты благотворительности.

image
Тереза, её муж Одиямбо и их семья.

Как это работает. GiveDirectly переводит порядка $1000 бедной семье в течение года. Никаких правил и даже советов по использованию этих денег компания не даёт. С момента запуска в 2011 году компания распределила уже $15 млн. в сообществах Кении и Уганды. Это не самые бедные страны региона – они находятся в центре Африканской революции мобильного банкинга, что крайне важно для GiveDirectly. Вероятность того, что у человека из Африки района Сахары будет мобильный финансовый аккаунт, превышает вероятность существования такого аккаунта у европейца в 60 раз.

После того, как GiveDirectly выбирают деревню на основании доступной статистики по бедности, они используют простой способ определения тех, кто получит деньги: они выбирают семьи, живущие в домах с соломенными крышами и земляными полами. Такое использование органики – точный признак нищеты. Это понятно для соседей по сообществу и для самой компании.
Читать дальше →

15 тривиальных фактов о правильной работе с протоколом HTTP

Reading time7 min
Views241K
Внимание! Реклама! Пост оплачен Капитаном Очевидность!

Ниже под катом вы найдёте 15 пунктов, описывающих правильную организацию ресурсов, доступных по протоколу HTTP — веб-сайтов, «ручек» бэкенда, API и прочая. «Правильный» здесь означает «соответствующий рекомендациям и спецификациям». Большая часть ниженаписанного почти дословно переведена из официальных стандартов, рекомендаций и best practices от IETF и W3C.



Вы не найдёте здесь абсолютно ничего неочевидного. Нет, серьёзно, каждый веб-разработчик теоретически эти 15 пунктов должен освоить где-то в районе junior developer-а и/или второго-третьего курса университета.

Однако на практике оказывается, что великое множество веб-разработчиков эти азы таки не усвоило. Читаешь документацию к иным API и рыдаешь. Уверен, что каждый читатель таки найдёт в этом списке что-то новое для себя.
Читать дальше →

Пять подводных камней при использовании shared_ptr

Reading time15 min
Views141K
Класс shared_ptr — это удобный инструмент, который может решить множество проблем разработчика. Однако для того, чтобы не совершать ошибок, необходимо отлично знать его устройство. Надеюсь, моя статья будет полезна тем, кто только начинает работать с этим инструментом.

Я расскажу о следующем:
  • что такое перекрестные ссылки;
  • чем опасны безымянные shared_ptr;
  • какие опасности подстерегают при использовании shared_ptr в многопоточной среде;
  • о чем важно помнить, создавая свою собственную освобождающую функцию для shared_ptr;
  • какие существуют особенности использования шаблона enable_shared_from_this.

Читать дальше →

Tестирование сериализаторов под .NET

Reading time12 min
Views15K
Код Serbench находится на GitHub.

Начало проекта


Этот бенчмарк проект начался со статьи “Serializers in .NET v.2” на GeeksWithBlogs.net. В статье было рассмотрено довольно много имеющихся под .NET сериализаторов. Но, чтобы превратить эту статью и соответствующий код в настоящий бенчмарк, надо было сделать несколько улучшений.

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

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

Эмуляция CORS на стороне клиента: кроссбраузерное решение некоторых пользовательских задач без расширений

Reading time40 min
Views24K

I. В чём проблема



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

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

Шаблоны проектирования XSD

Reading time9 min
Views42K


В жизни каждого аналитика и программиста наступает такой день, когда он узнает о существовании шаблонов (паттернов) проектирования XML-схем и его жизнь меняется. Для меня, например, с этого знания началось постижение красоты проектирования.

Сегодня хочу поговорить о том, какие есть шаблоны проектирования XSD, о преимуществах и недостатках каждого, и почему мы для своих задач выбрали «Райский сад».
Читать дальше →

Особенности резолвера DNS в Windows 10 и DNS Leak

Reading time3 min
Views116K
image

TL;DR: DNS-резолвер в Windows 10 отправляет запросы на все известные системе адреса DNS-серверов параллельно, привязывая запрос к интерфейсу, и использует тот ответ, который пришел быстрее. В случае, если вы используете DNS-сервер из локального сегмента, такое поведение позволяет вашему провайдеру или злоумышленнику с Wi-Fi-точкой подменять записи DNS, даже если вы используете VPN.

Современные версии Windows добавляют головные боли активным пользователям VPN. DNS-резолвер до Windows 7 включительно имел предсказуемое поведение, совершая запросы к DNS-серверам в порядке очереди и приоритета DNS-серверов, в общем-то, как и все остальные ОС. Это создавало так называемый DNS Leak (утечка DNS-запроса через внешний интерфейс при подключенном VPN) только в том случае, если DNS-сервер внутри VPN-туннеля не ответил вовремя, или ответил ошибкой, и, в целом, не являлось такой уж вопиющей проблемой.
Читать дальше →

4 признака того, что ваш SaaS-бизнес умирает

Reading time3 min
Views5.5K


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

Третий лишний: как мы реализовали сбор почты с использованием OAuth 2.0

Reading time9 min
Views18K


«Может тебе еще и ключ от квартиры, где деньги лежат?» — примерно так выглядит нормальная реакция человека, у которого посторонний сервис требует пароль от основной почты. Тем не менее, большинству из нас регулярно приходится сообщать пароль сторонним сервисам. Сегодня я хочу рассказать о том, как мы реализовали процедуру авторизации при сборе писем с наших ящиков через OAuth 2.0, тем самым избавив пользователей Mail.Ru от необходимости доверять «ключи» от своей почты третьей стороне.
Читать дальше →

Упрощаем for-цикл по индексам: range-based версия

Reading time8 min
Views39K
Волею судеб мне довелось заняться одной задачей автоматизации при помощи Python-скрипта. Изучая базовые конструкции, наибольший интерес у меня вызвал следующий код:

for index in range(0,10) :
  do_stuff()

Удобно, читаемо, лаконично (модно, стильно, молодежно)! Почему бы не организовать такой же цикл в С++? Что из этого вышло — под катом.
Читать дальше →

Знакомство с внутренним устройством .NET Framework. Посмотрим, как CLR создаёт объекты

Reading time27 min
Views59K
Вниманию читателей «Хабрахабра» представляется перевод статьи Хану Коммалапати и Тома Кристиана об внутреннем устройстве .NET. Существует альтернативный вариант перевода на сайте Microsoft.

В статье рассматривается:

  • Системный домен (SystemDomain), Домен общего доступа (SharedDomain) и домен по умолчанию (DefaultDomain)
  • Представление объекта и другие особенности организации памяти
  • Представление таблицы методов
  • Распределение методов

Используемые технологии: .NET Framework, C#

Содержание


  1. Домены создаваемые начальным загрузчиком
  2. Системный домен
  3. Домен общего доступа (разделяемый)
  4. Дефолтный домен
  5. Загрузчик куч
  6. Основы типов
  7. Экземпляр объекта
  8. Таблица методов
  9. Размер базового экземпляра
  10. Таблица слотов метода
  11. Описатель метода
  12. Карта таблиц виртуальных методов интерфейсов и карта интерфейса
  13. Виртуальное распределение
  14. Статические переменные
  15. EEClass
  16. Заключение

Читать дальше →

Двухфакторная аутентификация. Новые вызовы

Reading time4 min
Views29K
Вместо пролога: в данной статье речь пойдет о краже денег с аккаунтов пользователей платежных систем, различных клиент-банков и т.п.

image

Читать дальше →

PostgreSQL 9.5: что нового? Часть 1. INSERT… ON CONFLICT DO NOTHING/UPDATE и ROW LEVEL SECURITY

Reading time9 min
Views119K
Часть 2. TABLESAMPLE
Часть 3. GROUPING SETS, CUBE, ROLLUP
В 4 квартале 2015 года ожидается релиз PostgreSQL 9.5. Как всегда, новая версия кроме новых багов приносит новые фичи и «плюшки». В данной статье будут рассмотрены две из них, а именно INSERT… ON CONFLICT DO NOTHING/UPDATE и Row-level security. Уже вышла вторая альфа-версия, поэтому самые нетерпеливые могут её установить и попробовать новый функционал.
Скачать можно тут
Читать дальше →

Построение масштабируемых приложений на TypeScript. Часть 2.5 — Работа над ошибками и делегаты

Reading time7 min
Views7.6K
Часть 1: Асинхронная загрузка модулей
Часть 2: События или зачем стоит изобретать собственный велосипед

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

Но просто написать работу над ошибками было бы не интересно. К счастью, процесс ее исправления сам по себе подкинул пару интересных находок и мыслей, которые я хотел бы вынести на суд сообщества.

Итак, мой WinAmp играет коллекцию хитов Ozzy Osbourne, а всех интересующихся прошу под кат.
Читать дальше →

Построение масштабируемых приложений на TypeScript. Часть 2 — События или зачем стоит изобретать собственный велосипед

Reading time8 min
Views15K
В первой части статьи я рассказывал об асинхронной загрузке модулей при помощи Require.js и стандартных языковых средств TypeScript. Неосторожно я раньше времени задел тему организации работы с абстрактными событиями о чем мне очень быстро напомнили в комментариях. В частности, был задан вопрос, зачем придумывать собственный велосипед, если давно существуют проверенный и отлично работающий Backbone.Events и прочие аналоги.

Если вас интересует ответ на этот вопрос, альтернативная реализация на TypeScript и не пугает чтение кода, то прошу под кат.
Читать дальше →

Calque — калькулятор, который удобнее, чем консоль браузера

Reading time1 min
Views54K
Приветствую.

Существует приложение для iOS — Tydlig, которое буквально переосмысливает калькулятор, и делает его потрясающе удобным. Попользовавшись один раз этим приложением, остаешься его любителем.

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

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

Поиск чего-то похожего на Tydlig ничего не дал, и было принято решение писать свое приложение.

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


Читать дальше →

Солнечная энергетика: сегодня и завтра

Reading time13 min
Views17K
Начиная с нефтяного кризиса 1970-х годов, общество начало задумаваться о поиске альтернативы традиционной углеводородной энергетике. Потенциал солнечной энергии, как самый большой и доступный для человечества, всегда приковывал внимание научного сообщества. Использование возобновляемой энергии легло в основу концепции целых социальных и политических движений. В последние десять-пятнадцать лет солнечная энергетика быстро развивалась и получила некоторое распространение в секторе электрогенерации. В целом, можно говорить об экспонециальном тренде роста электрогенерации фотовольтаики в последние двадцать лет [1]:

image
Читать дальше →

Высокопроизводительный код на платформе .NET

Reading time16 min
Views34K
Здравствуйте, дорогие читатели!

Не так давно мы занялись проработкой книги "Writing High-Performance .NET code", которая до сих пор не переведена на русский язык, хотя ей и скоро год.



Нас, конечно, не удивило, что такую книгу уже растаскивают на цитаты, однако выяснилось, что уважаемый автор Бен Уотсон даже выложил на сайте «Codeproject» целую статью, написанную по мотивам одной из глав. К сожалению, объем этого материала слишком велик для хабропубликации, однако мы решили все-таки перевести первую часть статьи, чтобы вы могли оценить материал книги. Приглашаем к прочтению и к участию в опросе. Кроме того, если все-таки целесообразно перевести и вторую часть — пишите в комментариях, постараемся учесть ваши пожелания.
Читать дальше →

Information

Rating
4,242-nd
Registered
Activity