Search
Write a publication
Pull to refresh
63
0
Олег @unfilled

User

Send message

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

Reading time9 min
Views64K

Всем привет. Как вы, возможно, знаете, раньше я все больше писал и рассказывал про хранилища, Vertica, хранилища больших данных и прочие аналитические вещи. Сейчас в область моей ответственности упали и все остальные базы, не только аналитические, но и OLTP (PostgreSQL), и NOSQL (MongoDB, Redis, Tarantool).


Эта ситуация позволила мне взглянуть на организацию, имеющую несколько баз данных, как на организацию, имеющую одну распределенную гетерогенную (разнородную) базу. Единую распределенную гетерогенную базу, состоящую из кучи PostgreSQL, Redis-ов и Монг… И, возможно, из одной-двух баз Vertica.


Работа этой единой распределенной базы порождает кучу интересных задач. Прежде всего, с точки зрения бизнеса важно, чтобы с данными, движущимися по такой базе, все было нормально. Я специально не использую здесь термин целостность, consistency, т.к. термин это сложный, и в разных нюансах рассмотрения СУБД (ACID и CAP теорема) он имеет разный смысл.


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


Vertica+Anchor Modeling = запусти рост своей грибницы

Reading time5 min
Views35K
Какое-то время назад я написал статью на Хабре. В ней же пообещал продолжение через пару недель. Но, как известно, обещанного три года ждут  —  и с тех пор действительно прошло три года. Если вы не запомнили со времён той статьи, то напомню  —  я работаю в Avito, строю хранилище на основе Vertica.
Из того, что поменялось — теперь я могу не просто написать статью, а сделать это в блоге компании. И, надеюсь, не один раз. Самопиар окончен, теперь к делу.


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

HP Vertica, проектирование хранилища данных, больших данных

Reading time8 min
Views33K
UPD: Продолжение статьи по ссылке — habrahabr.ru/company/avito/blog/322510

О чем статья

Незаметно пролетел год, как начались работы по разработке и внедрению хранилища данных на платформе Вертика.
На хабре уже есть статьи про саму СУБД Вертика, особенно рекомендую эту: HP Vertica, первый запущенный проект в РФ, ведь ее автор очень помог нам на начальном этапе. Алексей, спасибо еще раз.
Хотелось бы рассказать о том, какая методология применялась для проектирования физической структуры хранилища, чтобы наиболее полно использовать возможности HP Vertica.
Эту статью хотел бы посветить обоснованию оптимальности выбранной методологии, а в следующей — рассказать о том, какие техники позволяют анализировать данные, содержащие десятки млрд.

Постановка задачи

Рассмотрим высоконагруженный сайт крупной российской интернет-компании (теперь можно — это Авито ;)).
Деятельность компании описывается следующими цифрами: ~ 10 млн. активных пользователей, ~100 млн. просмотров страниц в день, около 1 тыс. новых объектов, размещенных пользователями на сайте в течение 1 минуты, ~10 тыс. поисковых запросов пользователей в минуту.
Грубая оценка количества действий, подлежащих сохранению в хранилище, составляет 100 млн. новых записей в сутки (~100 GB новых данных в сутки).
Т.е. при построении классического хранилища данных с отказом от стирания поступивших ранее данных, объем хранилища через 3 месяца эксплуатации составит 10TB сырых данных. Big Data как она есть.
Нужно построить хранилище, которое хранило бы не меньше 6 месяцев данных, позволяло их анализировать, визуализировать, и отставало бы от реальной жизни настолько мало, насколько это возможно (в худшем случае — отставало бы на день, в лучшем — на минуты).
Вынося сразу за скобки вопрос выбора платформы — хранилище должно работать на HP Vertica, MPP базе колоночного хранения, см. вводную статью в заголовке.
Читать дальше →

Повышение продуктивности при работе с Jupyter Notebook за 5 минут

Reading time2 min
Views47K

Для начала повторим основные горячие клавиши. Если вы их ещё не используете — начните обязательно. В долгосрочной перспективе время на изучение окупится многократно.


0. Основные горячие клавиши


  • Esc: Переключение между режимом выполнения и редактирования
  • A: Добавление пустой ячейки сверху
  • B: Добавление пустой ячейки снизу
  • DD: Удаления ячейки
  • C: Копирование ячеек
  • X: Вырезание ячеек
  • V: Вставка ячеек

1. Перезапуск блокнота


Для рестарта просто нажмите ESC + 00.


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

Письмо начинающему изучать Data Science

Reading time2 min
Views64K

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


Нейронные сети – это...

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

DBA: когда пасует VACUUM — чистим таблицу вручную

Reading time7 min
Views31K
VACUUM может «зачистить» из таблицы в PostgreSQL только то, что никто не может увидеть — то есть нет ни одного активного запроса, стартовавшего раньше, чем эти записи были изменены.

А если такой неприятный тип (продолжительная OLAP-нагрузка на OLTP-базе) все же есть? Как почистить активно меняющуюся таблицу в окружении длинных запросов и не наступить на грабли?


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

Памятка по борьбе с алкоголем или Как пережить фуршеты

Reading time20 min
Views183K
Тут вот праздники скоро. Спросил недавно друг «как мне это все пережить?». Я сначала объяснял, а потом решил написать статью на Хабр. Рассказанное — услышит один человек, а написанное — прочитают сотни!

Меня, если честно, достаточно сильно раздражают всевозможные застолья. Потому что гораздо приятнее посидеть с паяльником или читая книгу, а не "… хорохорясь, ерепенясь и валяясь, как колода..." провести выходные. Но традиции-с, будь они неладны, формировались столетиями и не умея пить — бывает достаточно сложно вписаться в коллектив, найти нужный подход и т.д. Особенно грешат этим делом всевозможные руководящие кадры из старого поколения. Что же делать тем, для кого алкоголь и необходимость его употреблять — это просто лишняя головная боль? Самый простой ответ — НЕ ПИТЬ, но на практике полностью это очень сложно реализовать. Эффективнее в наших реалиях принять тезис «алкоголь — просто инструмент» и учиться с ним правильно работать и использовать для решения своих задач с минимизацией ущерба для здоровья.

Статью кладем в закладки и рассылаем всем друзьям, подчиненным и т.д. и т.п. Есть время подготовиться и встретить новогодние корпоративы во всеоружии. Практически уверен, что многое из описанного активно используют те, кто «не напиваться» обязан по долгу службы. Простой же обыватель чаще про это не думает, полагаясь на удачу и легкую руку. И чаще всего оказывается в проигрыше. Предупрежден = вооружен, поэтому под катом читаем, как победить в битве с алкоголем.

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

postgres_exporter и мониторинг экземпляров PostgreSQL с несколькими БД

Reading time10 min
Views41K

UPD: Заметка утратила свою актуальность, с выходом релиза 0.8.0. Со всеми нововведениями можно ознакомиться в статье: Новые возможности postgres_exporter для мониторинга PostgreSQL


Добрый день, читатели habr!


Prometheus и его экосистема экспортеров (агентов), является хорошим инструментом для любого администратора и разработчика. Простота доставки, простота (относительная) настройки, возможность использования сервиса автоматического обноружения.
Но речь пойдет не столько о Prometheus, сколько об одном из примечательных агентов, а именно о postgres_exporter. Он позволяет собирать метрики с PostgreSQL. Но если бы всё было так просто...

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

Новые возможности postgres_exporter для мониторинга PostgreSQL

Reading time9 min
Views28K

Добрый день, читатели habr!


В первой заметке о posgres_exporter, я рассмотрел достаточно частный случай, при работе с новой, на тот момент фитчей, а именно возможностью мониторинга одним экспортером набора экземпляров и/или баз данных. И описал тот "букет" проблем с которыми при этом столкнулся и какие обходные решения применял, что бы это всё заработало.
И вот, 25 ноября, вышел очередной релиз postgres_exporter 0.8.0. В нём были решены проблемы описанные в предыдущей заметке, а также, что особо приятно, добавлен новый функционал.


Прошу под кат...

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

Двойная бухгалтерская запись в реляционной БД

Reading time9 min
Views22K

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


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


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


Введение


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



Лука Пачоли, автор самой старой (15 век) дошедшей до нас книги с описанием принципов двойной записи


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


Основные правила таковы:

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

Снежинки в стилистике StarWars своими руками (upd. 2019)

Reading time2 min
Views15K

A long time ago in a galaxy far, far away... И вот опять наступил конец года… декабрь… И, конечно же, Антонио Эррера нарезал нам немного снежиночек в стилистике StarWars!
Конечно паттернов в этом году не так уж и много, но под катом вы сможете найти не только их, но и ссылки на все предыдущие годы.
Приготовили ножницы, принтер и тонкую бумагу?

Как оценить уровень владения английским языком

Reading time4 min
Views128K


На Хабре много статей о том, как самостоятельно изучать английский язык. Но вот вопрос, а как оценить свой уровень при самостоятельном изучении? Понятно, что есть IELTS и TOEFL, но эти тесты почти никто не сдает без дополнительной подготовки и эти тесты, как говорят, оценивают не сколько уровень владения языком, а скорее умение проходить эти самые тесты. Да и использовать их для контроля самообучения будет накладно.

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

Полный список флагов трассировки Microsoft SQL Server

Reading time64 min
Views28K

Microsoft SQL Server Флаги Трассировки


Полный список Microsoft SQL Server флагов трассировки (359 флагов трассировки на текущий момент).


ПОМНИТЕ: Будьте предельно осторожны с флагами трассировки, проверяйте их влияние в первую очередь в тестовой среде.

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

10 хитростей Python, о которых полезно знать

Reading time6 min
Views34K
По данным StackOverflow Python — это самый быстрорастущий язык программирования. Например, в одном из отчётов Forbes речь идёт о том, что использование Python выросло на 456%. Python применяется в Netflix, в IBM, и ещё в тысячах компаний по всему миру. Давайте не забывать и о Dropbox. Сервисы этой компании тоже написаны на Python. В соответствии с исследованием Dice, знания в области Python весьма востребованы в наши дни, а индекс популярности языков программирования говорит о том, что Python — это сегодня самый популярный язык в мире. Если сравнить Python с другими языками, то окажется, что у него есть следующие сильные стороны:

  1. Совместимость с подавляющим большинством платформ и операционных систем.
  2. Наличие множества опенсорсных фреймворков и инструментов.
  3. Код, который легко читать и поддерживать.
  4. Надёжная стандартная библиотека.
  5. Стандартный механизм разработки через тестирование.


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

Y-метод — действительно простой способ собрать кубик Рубика

Reading time7 min
Views337K

Введение


В статье рассматривается «Y-метод» сборки кубика Рубика — его легко понять и запомнить. Он основан всего на одной последовательности, которая называется «Y-движение». Поняв этот алгоритм, вы навряд ли забудете как собрать кубик самостоятельно.
Читать дальше →

Игровая механика. Бродилки, представление о нуле и незанудная логопедия

Reading time11 min
Views8.8K


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

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

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

Интересно, что одна из главных развивающих задач, которые решают бродилки, это начало формирования представления о нуле как точке отсчета.
Читать дальше →

Зачем ты поймал мою мышку, или настольная игра как модель социального взаимодействия

Reading time19 min
Views8.8K


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

Сражение, или если я не выиграю, я буду горько плакать


Первый тип – это игры-сражения. В основном сюда относятся дуэльные игры. Из классических – шахматы и шашки, из популярных современных – например «Улей». Ситуация такой игры представляет простую модель конфликта – есть некая цель (победа в игре), в победе заинтересованы оба, но победить может только один, и успех одного означает неуспех другого.

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

Как происходит превращение в школьника (и при чем здесь настольные игры)

Reading time14 min
Views14K
Когда описывают периодизацию детского развития, обычно это выглядит так, что с трех до семи лет у ребенка дошкольное детство и ролевая игра — ведущая деятельность, а в семь лет ребенок превращается в школьника, у которого ведущая деятельность — учебная. Может складываться ощущение, что в районе семи лет происходит какое-то качественное изменение в сознании ребенка, и он переходит из одного дискретного состояния (дошкольник) в другое (ученик).

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

Microsoft SQL Server Data Tools

Reading time8 min
Views60K
В данной статье хотел бы рассказать про набор полезных дополнений к Visual Studio, которые могут в значительной мере облегчить разработку баз данных на основе MS SQL Server.
Основными преимуществами использования SSDT я бы выделил следующее:
  • возможность простого изменения (refactoring) схемы базы (можно переименовать колонку таблицы и все Views, Functions и Stored Procedures ссылающиеся на неё автоматически будут исправлены для отражения изменений)
  • создание юнит тестов для базы данных
  • хранение структуры базы данных в Source Control
  • сравнение схемы/данных c возможностью генерации скрипта для приведения схемы/данных к требуемому состоянию

Безусловно на этом плюсы использования SSDT не заканчиваются, но остальное не так сильно впечатляет, как то, что упомянуто выше. Если вас интересует, как воспользоваться этими и другими преимуществами — прошу под кат.
Читать дальше →

Один из методов получения истории блокировок в PostgreSQL

Reading time7 min
Views3.1K
Продолжение статьи "Попытка создать аналог ASH для PostgreSQL ".

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

Information

Rating
Does not participate
Location
Омск, Омская обл., Россия
Date of birth
Registered
Activity