Pull to refresh
14
0
Максим Алексеев @malexejev

User

Send message

Микросервисы: опыт использования в нагруженном проекте

Reading time 17 min
Views 68K


На конференции HighLoad++ 2016 руководитель разработки «М-Тех» Вадим Мадисон рассказал о росте от системы, для которой сотня микросервисов казалась огромным числом, до нагруженного проекта, где пара тысяч микросервисов — обыденность.

Тема моего доклада — то, как мы запускали в продакшн микросервисы на достаточно нагруженном проекте. Это некий агрегированный опыт, но поскольку я работаю в компании «M-Tех», то давайте я пару слов расскажу о том, кто мы.

Если коротко, то мы занимаемся видеоотдачей — отдаём видео в реальном времени. Мы являемся видеоплатформой для «НТВ-Плюс» и «Матч ТВ». Это 300 тысяч одновременных пользователей, которые прибегают за 5 минут. Это 300 терабайт контента, который мы отдаем в час. Это такая интересная задача. Как это всё обслужить?

Про что сама эта история? Это про то, как мы росли, как проект развивался, как происходило какое-то переосмысление каких-то его частей, какого-то взаимодействия. Так или иначе, это про масштабирование проекта, потому что это всё — ради того, чтобы выдержать ещё больше нагрузки, предоставить клиентам ещё больше функционала и при этом не упасть, не потерять ключевых характеристик. В общем, чтобы клиент остался доволен. Ну и немного про то, какой путь мы прошли. С чего мы начинали.
Читать дальше →
Total votes 78: ↑77 and ↓1 +76
Comments 65

Определение пола по ФИО – когда точность действительно важна

Reading time 7 min
Views 43K
Некоторое время назад меня заинтересовала задача определения пола человека по его ФИО. В тот момент я работал в области медицинского страхования, где эта проблема была действительно актуальна – расходы на одного застрахованного, а значит и тарифы, по которым людей принимали на страхование, в зависимости от пола клиента, могли отличаться в несколько раз. Большая часть договоров – корпоративные, застрахованные являются сотрудниками работодателя.

Мы никогда не видели большинство из них в глаза, все, что мы имели – списки застрахованных, где пол иногда был указан (с большим количеством ошибок), но чаще – не указан вообще. Большинство компаний имеют свою специфику работы и профессиональные традиции, в силу чего, в их коллективах преобладают люди одного пола. Даже небольшая ошибка могла сделать потенциально прибыльный договор убыточным (или наоборот, но на такое, по странному стечению обстоятельств, случалось с нашими клиентами гораздо реже). В целом, при объеме портфеля договоров в несколько миллиардов, и характерном количестве ошибок около процента, цена корректного определения пола по ФИО была в районе нескольких десятков миллионов.
Читать дальше →
Total votes 38: ↑32 and ↓6 +26
Comments 57

Деанонимизация через генетическую информацию

Reading time 11 min
Views 52K
Краткая суть:
В Сети в открытом доступе некоторое время назад появились базы данных с генетической информацией людей (информацией разного уровня детализации — от полных последовательностей (сиквенса) всего генома до ограниченной информации по коротким тандемным повторам Y-хромосомы (Y-STRs). Например, энтузиасты делятся информацией о своих Y-STRs (гаплотип) на генеалогических сайтах для выяснения родственных связей и поиска дальних родственников, эти данные не анонимны. Так же в свободном доступе находится анонимная медицинская генетическая информация, например из научного проекта "1000 геномов человека" (проект по полной расшифровке геномов тысячи разных людей), где анонимность доноров ДНК поддерживается по этическим причинам.

Здесь начинается самое интересное. Генеалогические базы данных (даже весьма плохо заполненные, но тем не менее) позволяют деанонимизировать людей. Например, показано, что в случае искусственного оплодотворения спермой от анонимного донора, использование генеалогических баз данных позволяет узнать по крайней мере фамилию настоящего биологического отца ребенка (то есть через очень дальних родственников, засветившихся в базе, узнать, из какой семьи был донор), а при наличии дополнительной информации, такой, как место проживания и т.п., позволяет однозначно идентифицировать биологического отца. Недавно было показано, что находящиеся в свободном доступе анонимные генетические данные, плюс дополнительная информация о возрасте и т.п., позволяют точно установить личности примерно 50 анонимных доноров ДНК из проекта «1000 геномов человека». Это весьма настораживающее достижение, так как полная генетическая информация этих людей, находящаяся в открытом доступе, содержит данные об их предрасположенности к тем или иным заболеваниям и т.д., она может быть корыстно использована страховыми компаниями и подобными организациями.



Если Вам интересны детали и подробности, добро пожаловать под кат.
Читать дальше →
Total votes 66: ↑66 and ↓0 +66
Comments 133

SSD и HDD в теле одного MacBook Pro

Reading time 4 min
Views 162K
Приветствую, уважаемые хабражители.

Мой опыт, которым я хочу с вами поделиться, должен оказаться полезным для всех пользователей ноутбуков, хотя мой частный пример — MacBook Pro.

После покупки сего агрегата, с порядковым номером в линейке: 6.1, я ожидал невиданных ранее скоростей, но, увы, предательская каруселька перегрузки, на месте курсора > image появлялась достаточно часто, заставляла себя ждать, мучила вопросом «как так?!» при этом скорость загрузки тотально укомплектованной операционной системы составляла примерно 2+ минуты, с загрузкой 5-и приложений (различной тяжести) на автозапуске.

Такие показатели + периодические подвисания оказались досадным и обидным заключением, ведь под капотом процессор i7 / 4Gb DDR3 / 5 Series Chipset с возможной скоростью обмена данными в 3 гигабита.

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

Добро пожаловать под хабракат, там сказ о эффективном разгоне моего инструмента.
Total votes 113: ↑94 and ↓19 +75
Comments 185

Как выбрать штат юрисдикции в USA по ставкам налогов

Reading time 1 min
Views 7.1K
Этот пост стал логическим «продолжением пути» поста "Обязательно ли получать лицензию Нацбанка Украины для создания компании за границей?".




Поиски информации о налоговых ставках разных штатов США показали следующее.

Если учитывать, что классической формой инкорпорирования считается С Corp, а типичными налогами на деятельность этих компаний являются Federal Tax, Income Tax и Sales Tax, то сопоставляя соответствующие карты вы можете выбрать для своей компании оптимальную (по соотношению этих двух налогов) юрисдикцию.
Читать дальше →
Total votes 38: ↑35 and ↓3 +32
Comments 18

Кто живет в соцсетях?

Reading time 8 min
Views 75K

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

О том, что удалось выудить из таких данных, и пойдет рассказ.
Читать дальше →
Total votes 131: ↑124 and ↓7 +117
Comments 115

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

Reading time 4 min
Views 166K
«Право налогоплательщика избегать уплаты налогов с использованием всех разрешенных законом способов никем не может быть оспорено. Каждый имеет право вести свои финансовые дела таким образом, чтобы свести соответствующие платежи к минимуму…»
Дж. Сандерленд,
Судья Верховного Суда США


После моей статьи про поиск инвестиций, я получил много просьб рассказать подробнее про открытие компании за рубежом, и осветить финансовые вопросы. В данном топике я попытался изложить основные моменты, не претендуя на истину в последней инстанции.
Читать дальше →
Total votes 152: ↑147 and ↓5 +142
Comments 201

Влияние загрузки шины данных на масштабируемость приложений

Reading time 6 min
Views 10K
В этой статье я расскажу о том, как загруженность шины данных влияет на масштабируемость (scalability) приложений. Под масштабируемостью мы будем понимать не только способность многопоточного приложения сокращать свое время выполнения по мере увеличения числа потоков. Мы также добавим сюда и способность однопоточного приложения, запущенного одновременно в несколько копий (instances), выполняться за тот же самый промежуток времени, что и одна копия. Хотя последний пример было бы правильнее охарактеризовать таким свойством как пропускная способность (throughput), так как он относится к «серверному» режиму запуска приложений. Т.е. это такой режим, при котором на сервере запускается однопоточное приложение, каждый раз когда к нему подключается новый клиент. Главная задача при разработке таких приложений — это снижение их зависимости от общих ресурсов, одним из которых может являться шина данных.
Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Comments 9

Как правильно мерять производительность диска

Reading time 14 min
Views 335K
abstract: разница между текущей производительностью и производительностью теоретической; latency и IOPS, понятие независимости дисковой нагрузки; подготовка тестирования; типовые параметры тестирования; практическое copypaste howto.

Предупреждение: много букв, долго читать.

Лирика



Очень частой проблемой, является попытка понять «насколько быстрый сервер?» Среди всех тестов наиболее жалко выглядят попытки оценить производительность дисковой подсистемы. Вот ужасы, которые я видел в своей жизни:
  • научная публикация, в которой скорость кластерной FS оценивали с помощью dd (и включенным файловым кешем, то есть без опции direct)
  • использование bonnie++
  • использование iozone
  • использование пачки cp с измерениема времени выполнения
  • использование iometer с dynamo на 64-битных системах


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

Как мерять правильно
Total votes 151: ↑145 and ↓6 +139
Comments 164

Как устроена apache cassandra

Reading time 13 min
Views 221K
Кассандра
В этом топике я хотел бы рассказать о том, как устроена кассандра (cassandra) — децентрализованная, отказоустойчивая и надёжная база данных “ключ-значение”. Хранилище само позаботится о проблемах наличия единой точки отказа (single point of failure), отказа серверов и о распределении данных между узлами кластера (cluster node). При чем, как в случае размещения серверов в одном центре обработки данных (data center), так и в конфигурации со многими центрами обработки данных, разделенных расстояниями и, соответственно, сетевыми задержками. Под надёжностью понимается итоговая согласованность (eventual consistency) данных с возможностью установки уровня согласования данных (tune consistency) каждого запроса.

NoSQL базы данных требуют в целом большего понимания их внутреннего устройства чем SQL. Эта статья будет описывать базовое строение, а в следующих статьях можно будет рассмотреть: CQL и интерфейс программирования; техники проектирования и оптимизации; особенности кластеров размещённых в многих центрах обработки данных.
Дорогу осилит идущий...
Total votes 77: ↑75 and ↓2 +73
Comments 35

Cassandra глазами Operations

Reading time 9 min
Views 12K
Основной проект компании, в которой я работаю, посвящен оптимизации показов рекламы в приложениях на фейсбуке и на мобильных устройствах. На сегодняшний день проект обслуживает до 400 миллионов уникальных посетителей в месяц, работает на тысяче с лишним виртуальных серверов. Количество серверов и обьемы данных, которые должны обрабатываться двадцать четыре часа в сутки, ставит перед разработчиками ряд интересных проблем, связанных с масштабируемостью и устойчивостью системы.

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

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


  • события могут происходить на разных серверах и в разных датацентрах (восточный и западный берег США, Европа)
  • интервал между событиями — от долей секунды до нескольких дней
  • к моменту получения завершающего события (например конверсия) информация обо всей цепочке должна быть на руках
  • время жизни информации — примерно десять дней, после чего она должна быть удалена, желательно автоматически, через TTL
  • темп чтения/записи событий — сотни или тысячи в секунду
  • Время ответа: желательное — до 10мс, допустимое — в пределах 50мс, максимальное — до 100мс
  • информация должна быть доступна «всегда» — независимо от аварий железа, сети, апгрейдов
  • система должна легко масштабироваться: добавление новых серверов, датацентров должно происходить прозрачно для остальных сервисов (допустима деградация времени ответа в заданных пределах).

Последние два пункта очень важны для бизнеса и просто жизненно важны для опс инженеров если они хотят спокойно выполнять свои обязанности днём, и спокойно спать ночью.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 12

Методы монетизации интернет проектов

Reading time 7 min
Views 135K
Поговорим о важном аспекте существования любого сайта, о существующих методах монетизации и их применении в реальных проектах. От этой кажется, совсем небольшой вещи зависит будущее проекта и его перспективы на рынке.

Подробности
Total votes 82: ↑72 and ↓10 +62
Comments 27

Правильный стул для ежедневной работы за компьютером

Reading time 5 min
Views 858K
Золотой Остап и его стулВопрос о столах поднимался несколько раз (раз, два).

Однако, на чем же мы сидим перед столом?

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

Все мы работаем с компьютером и порой не замечаем, на чем же мы сидим.

Оказывается наши санитарные правила и нормы (СанПиН 2.2.2/2.4.1340-03) достаточно хорошо описывают удобный эргономичный стул для работы взрослых за компьютером!

А какой стул правильный?
Читать дальше →
Total votes 134: ↑125 and ↓9 +116
Comments 309

Завершён перевод книги «Pro Git»

Reading time 1 min
Views 194K
Что может быть лучшим подарком на день знаний для программиста? Конечно, полезная книга ;) Поэтому команда переводчиков «Pro Git» поднапряглась и доделала перевод книги на русский язык.

«Pro Git» — это довольно обширная обучающая книга о Git от Скотта Шакона — активного участника разработки проектов Git и GitHub. Автор рассматривает в тексте всевозможные аспекты работы с Git'ом, начиная с установки программы и базовых принципов работы децентрализованных систем контроля версий, и заканчивая рассмотрением внутреннего устройства Git'а и созданием валидных объектов в базе Git'а собственными руками. Несмотря на довольно обширный материал и затрагивание довольно специфических тем, книга написана довольно простым языком, содержит массу примеров и иллюстраций, и поэтому должна быть понятна и новичкам, только начинающим знакомиться с системами контроля версий.

Последняя версия перевода книги доступна в форматах pdf, epub, mobi.
Также доступна онлайн-версия перевода, но она, к сожалению, не обновлялась с мая.
Читать дальше →
Total votes 141: ↑135 and ↓6 +129
Comments 55

Реализуем RESTful Web Service на Scala

Reading time 7 min
Views 16K
На прошлой неделе на Хабре было целых две статьи о реализации RESTful web-сервисов на Java. Что ж, не будем отставать и напишем свой вариант на Scala, с монадами и аппликативными функторами. Матёрые разработчики на Scala вряд ли найдут в этой статье что-то новое, а любители Django вообще скажут что у них эта функциональность есть «из-коробки», но я надеюсь что Java-разработчикам и просто любопытствующим будет интересно почитать.

Подготовка


За основу возьмём задачу из предыдущей статьи, но постараемся решить её так, что бы код решения умещался на экран. Хотя бы на 40-дюймовый и пятым шрифтом. В конце концов, в XXI веке должна быть возможность решать простые задачи без мегабайтов xml-конфигов и десятков абстрактных фабрик.

Для тех, кто не хочет ходить по ссылкам уточню: мы собираемся реализовать простейший RESTful сервис для доступа к базе данных клиентов. Из необходимой функциональности — создание и удаление объектов в базе, а также постраничная выдача списка всех клиентов с возможностью сортировки по разным полям.

В качестве кирпичиков, из которых мы будем строить дом, возьмём:
  • Scala — даже не кирпичик, а скорее фундамент,
  • Unfiltered — отличная библиотека для обработки HTTP-запросов,
  • Squeryl — библиотека для запросов к базе данных,
  • Jackson — библиотека для работы с JSON, изначально написанная для Java, но на ура справляющаяся и со Scala-типами,
  • Scalaz — библиотека, позволяющая писать в коде разные забавные символы типа ⊛, ↦ или ∃, а заодно реализующая такие полезные абстракции, как аппликативные функторы, моноиды, полугруппы и стрелки Клейсли. Последние, правда, мне пока не приходилось использовать, но скорее всего это объясняется тем, что я ещё не достиг нужной степени функционального просветления.

По ходу статьи я постараюсь давать достаточно пояснений, что бы код был понятен людям не знакомым со Scala, но не обещаю что у меня получится.
В бой!
Total votes 24: ↑23 and ↓1 +22
Comments 10

Эффективное резервное копирование в Amazon Web Services — рецепты

Reading time 9 min
Views 10K
Всем привет!
Сегодня поговорим о техниках настройки резервного копирования файлов и MySQL/InnoDB/XtraDB в приложениях, развернутых в облаке, на примере Amazon Web Services.

В ходе разработки облачного сервиса Битрикс24 мы попробовали несколько схем резервного копирования, наткнулись на некоторые подводные камни архитектуры амазона и ограничения софта — однако все постепенно разложилось по полочкам и зажужжало :-)
Также внимательно рассмотрим вопрос инкрементального бэкапирования достаточно больших объемов данных (сотни гигабайт и больше), рейдов и конфигураций с InnoDB/XtraDB.
Но прежде всего в деталях разберемся в технологиях хранения данных, предлагаемых нам амазоном.
Читать дальше →
Total votes 50: ↑47 and ↓3 +44
Comments 14

Как бороться с паузами GC

Reading time 6 min
Views 35K
В данном топике речь пойдет о причинах, вызывающих длинные паузы сборщика мусора и о способах борьбы с ними. Рассказывать я буду о CMS (low pause), так как на данный момент это наиболее часто используемый алгоритм для приложений с большой памятью и требованием малой задержки (low latency). Описание дается в предположении, что у вас приложение крутится на боксе с большим объемом памяти и большим количеством процессоров.

Читать дальше →
Total votes 60: ↑57 and ↓3 +54
Comments 21

Моделирование данных в MongoDB

Reading time 5 min
Views 59K
imageОдна из самых разрекламированных фич MongoDB — это гибкость. Я сам не раз подчеркивал это в бесчисленных разговорах о MongoDB. Однако, гибкость — это палка о двух концах: большая гибкость подразумевает более широкий выбор решений для моделирования данных. Тем не менее, мне нравится гибкость, которую предоставляет MongoDB, просто нужно иметь ввиду некоторые рекомендации, прежде чем начать разрабатывать модель данных.

В этой статье мы рассмотрим, как смоделировать структуру, содержащую списки рассылок и данные о людях, которые входят в эти списки.
Читать дальше →
Total votes 51: ↑50 and ↓1 +49
Comments 44

От идеи до релиза. Manifest

Reading time 9 min
Views 17K
manifest

За 6 месяцев из PDF—презентации получился продукт. С привлечением посевных инвестиций, драйвом командной работы, путешествием в Нью-Йорк, изучением английского права, сложностями, открытиями, разочарованиями и вдохновениями. Вот так создавался Manifest.

Читать дальше →
Total votes 45: ↑35 and ↓10 +25
Comments 35

И опять краудфандинг: сегодня по-американски

Reading time 18 min
Views 76K

Последнее время тема краудфандинга довольно часто поднимается на хабре, были посты как обнадёживающие общими перспективами «народных складчин»:

18 марта 2012 / Фанаты собрали уже $1.3M на Wasteland 2 / fixer_m
13 апреля 2012 / Рынок краудфандинга в 2011 году вырос в три раза / ilya42

Так и довольно пессимистичные, основанные на практическом применении краудфандинга в России:

17 апреля 2012 / Оглашены итоги целого года читательских пожертвований, поступавших журналисту через Интернет / Mithgol
5 апреля 2012 / Меценатство (спонсорство) и складчина (краудфандинг): две разные формы финансирования разработок шрифтов

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

Но сегодня я хочу рассказать об одном из пионеров краудфандинга – Kickstarter. О том, чего они ожидали в самом начале проекта и что, в итоге, получилось. Своеобразный дневник стартапа с большим количеством цифр и графиков, показывающих общую динамику развития сервиса.
Читать дальше →
Total votes 38: ↑36 and ↓2 +34
Comments 31

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity