пятница, 23 октября 2015 г.

Raft - алгоритм решения консенсуса в кластере надежных вычислений

Сегодня знакомимся с очень интересным алгоритмом решения консенсуса в сети надежных вычислений - Raft.

Основы алгоритма

Raft реализуется поверх кластера однообразных слабо связных нод, на каждой из которой работает машина состояний. Raft обеспечивает надёжную доставку сигналов на все ноды в заданном порядке. Таким образом обеспечивается переход всех машин состояний по одним и тем же последовательностям состояний. Таким образом, каждая нода гарантированно приходит в согласие с другими нодами.
Каждая нода может находиться в одном из 3-х состояний:

вторник, 20 октября 2015 г.

"Eat your own dog food" - стань клиентом самого себя

Сегодня познакомимся с фразеологизмом: "Eat your own dog food", который давно используется в IT индустрии.

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

среда, 30 сентября 2015 г.

e-maxx.ru хороший сборник алгоритмов на русском языке

Сегодня наткнулся на замечательный сайт e-maxx.ru. На сайте описано множество алгоритмов с реализацией на C++. А самое главное - это задачи, в которых применяются алгоритмы.

понедельник, 1 июня 2015 г.

GUAVA Striped - гибкий инструмент для связывания блокировок с объектами в java

Сегодня познакомимся с полезной утилитой  Striped  в GUAVA.

Засекаем время в java

Предистория

Как-то раз я занимался оптимизацией сложной операции, выполняемой на сервере, которая включала в себя несколько запросов к базе данных с последующей группировкой и сортировкой по определенным параметрам полученных данных. К сожалению, средствами SQL запросов обойтись не получилось, так как в конечной выборке участвовали данные полученные по веб-сервисам из внешних систем. Поэтому приходилось выполнять группировку и сортировку данных с помощью кода приложения.
Когда я запустил первый раз этот код на реальных данных, очевидно, все работало неприемлемо медленно и требовало оптимизации. С чего начинать оптимизацию? Правило Парето никто не отменял и оно гласит, что нужно начинать оптимизацию тех участков кода, выполнение которых занимает львиную долю времени выполнения операции. Возникла задача выяснить, какой из этапов крупной операции выполняется дольше остальных, и насколько дольше. Для этого необходимо "стоять с секундомером" и засекать начало и конец каждого этапа и результат выводить в лог. На момент решения данной задачи я обошелся собственным решением, в котором я запоминал System.currentTimeMillis() в промежуточные значения в локальных переменных. Затем происходил подсчет разниц времени вывод в лог описаний. У данного подхода я обнаружил существенные недостатки:
  1. Код сильно загрязнился. Локальные переменные заполонили код, и его стало читать очень сложно.
  2. Сложно исправлять/добавлять новую операцию, так как логика о подсчету времени размазана.
Но есть и плюс, только он на мой взгляд один: это гибкость и возможность написать то, что тебе нужно.
Мне такое решение не давало покоя и я решил сделать небольшой обзор инструментов подсчета времени в java.

четверг, 28 мая 2015 г.

Rootconf: DevOps, мониторинг, метрики, алерты!




В некотором царстве в некотором государстве под названием Москва 21-22 мая 2015 года прошёл фестиваль Российские интернет технологии, на котором мне посчастливилось побывать. Проходил фестиваль в Крокус сити холле. В этом году Олег Бунин и его команда сделали из ежегодной конференции РИТ целый фестиваль. В рамках фестиваля было организовано 5 секций с различной тематикой.


  1. RootConf. Конференция по эксплуатации.
  2. FronfendConf. Конференция фронтэнд разработчиков.
  3. Highload++ Junior. Обучающая конференция разработчиков высоконагруженых систем.
  4. WhileRider. Профессиональная конференция по управлению и предпринимательству.
  5. Intersystems CacheConf. Конференция по различным типам доступа данных и быстрой разработке.
Подробнее можно ознакомиться с фестивалем на сайте. Я же посещал секцию rootconf, посмотрел на админов и попытался прочувствовать их проблемы посмотреть на эксплуатацию глазами разработчика.

DevOps, мониторинг, метрики, алерты!


Все выступления были пронизаны этими терминами. Основные направления докладов конференции - это хорошие практики использования систем мониторинга, улучшение процесса эксплуатации разработанного ПО. 

Конференция расширила мой кругозор, и я пополнил багаж знаний.
  • Открыл для себя пару новых терминов типа devops, гистерезис триггеров. 
  • Получил ссылки на незнакомые ранее для меня системы мониторинга: okmeter, graphite.
  • Познакомился с интересными людьми.
  • Понял, что разработчики и служба эксплуатации должны стать лучшими друзьями для более эффективной работы.
  • И многое другое.

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