Search
Write a publication
Pull to refresh
0
0
Вова @vvsh

User

Send message

Пятничный формат: Как работает Netflix

Reading time10 min
Views26K


В нашем блоге на Хабре мы рассказываем не только про технологические аспекты работы облачного сервиса 1cloud, но и затрагиваем вопросы огранизации рабочего процесса. Например, совсем недавно мы обсуждали работу тех. поддержки.

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

Сборка мусора в персистентной модели: от терабайта и дальше

Reading time5 min
Views12K
Привет всем. Продолжу о Фантоме. Для понимания полезно прочесть статью про персистентную оперативку, а так же общую статью про Фантом на Открытых Системах. Но можно и так.

Итак, мы имеем ОС (или просто среду, не важно), которая обеспечивает прикладным программам персистентную оперативную память, и вообще персистентную «жизнь». Программы живут в общем адресном пространстве с управляемыми (managed) пойнтерами, объектной байткод-машиной, не замечают рестарта ОС и, в целом, счастливы.

Очевидно, что такой среде нужна сборка мусора. Но — какая?

Есть несколько проблем, навязанных спецификой.

Во-первых, теоретически, объём виртуальной памяти в такой среде огромен — терабайты, всё содержимое диска. Ведь мы отображаем в память всё и всегда.

Во-вторых, нас категорически не устраивают stop the world алгоритмы. Если для обычного процесса остановка в полсекундны может быть приемлема, то для виртуальной памяти, которая, большей частью, на диске, это будут уже полчаса, а то как бы не полсуток!

Наконец, если считать, что полная сборка мусора составляет полсуток, нас, наверное, это не устроит — было бы здорово иметь какой-то быстрый процесс сбора мусора, хотя бы и не полностью честный, пусть он часть мусора теряет, но если удаётся быстро вернуть 90% — уже хорошо.

Тут нужна оговорка. Вообще говоря, в системе, которая располагает парой терабайт виртуальной памяти, это не так уж критично — даже если не делать освобождение памяти полсуток, возможно, не так много и набежит — ну, например, истратится 2-3, ну 5 гигабайт, ну даже и 50 гигабайт — не жалко, диск большой.

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

Ок, итого у нас две задачи.
Читать дальше →

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

Reading time8 min
Views88K


В нашем блоге на Хабре мы не только рассказываем о развитии своего продукта — биллинга для операторов связи «Гидра», но и публикуем материалы о работе с инфраструктурой и использовании технологий.

Недавно мы писали об использовании Clojure и MongoDB, а сегодня речь пойдет о плюсах и минусах денормализации баз данных. Разработчик баз данных и финансовый аналитик Эмил Дркушич (Emil Drkušić) написал в блоге компании Vertabelo материал о том, зачем, как и когда использовать этот подход. Мы представляем вашему вниманию главные тезисы этой заметки.
Читать дальше →

Что там в Git 2.8? Push, grep, rebase, config и прочие штуки

Reading time3 min
Views26K

Вышел новый Git 2.8.0! В течение пары последних недель, когда релиз был в стадии кандидата, я прошёлся по списку коммитов и заметок к нему, пробуя новые вещи и отмечая интересные моменты. Чтобы сохранить ваше время, предлагаю субъективную выборку фич, которые стоит попробовать. Пользуйтесь!


Краткий вариант push -d, синоним push --delete


Это отличное дополнение как для полноты множества опций, так и для скорости набора команд. Возможно, вы уже используете git branch -d, чтобы удалять локальную ветку, а теперь можно так же сократить команду удаления remote-ветки до git push -d.


git branch -d my-branch       # удаляет локальную ветку, если она уже слита
git push -d origin my-branch  # удаляет remote-ветку в origin-репозитории
Что ещё?

Angular 2 Beta, обучающий курс «Тур героев» часть 1

Reading time6 min
Views60K

Часть 1 Часть 2 Часть 3 Часть 4


Вступление


Эта статья основана на документации Angular 2 и представляет собой перевод двух статей — Вступление и Редактор героя.


Используется Angular 2 release is beta.12.


Тур героев: обзор


Наш великий план — построить приложение для кадрового агентства героев. Даже героям нужна работа!


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

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

Big Data от А до Я. Часть 4: Hbase

Reading time11 min
Views103K
Привет, Хабр! Наконец-то долгожданная четвёртая статья нашего цикла о больших данных. В этой статье мы поговорим про такой замечательный инструмент как Hbase, который в последнее время завоевал большую популярность: например Facebook использует его в качестве основы своей системы обмена сообщений, а мы в data-centric alliance используем hbase в качестве основного хранилища сырых данных для нашей платформы управления данными Facetz.DCA

В статье будет рассказано про концепцию Big Table и её свободную реализацию, особенности работы и отличие как от классических реляционных баз данных (таких как MySQL и Oracle), так и key-value хранилищ, таких как Redis, Aerospike и memcached.
Заинтересовало? Добро пожаловать под кат.


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

Сохранение состояния фрагментов (Fragment)

Reading time4 min
Views58K
Распространенной проблемой является некорректное поведение приложения при повороте девайса. Дело в том что при повороте Activity-host (Activity которое является родителем для фрагмента) уничтожается. В тот момент когда этот процесс происходит FragmentManager отвечает за уничтожение дочернего фрагмента. FragmentManager запускает методы угасающего жизненного цикла фрагмента: onPause(), onStop() и onDestroy().

В случае если в контроллере нашего дочернего фрагмента, к примеру, есть объект Media-Player, то в методе фрагмента Fragment.onDestroy() экземпляр нашего звонко играющего Media-Player-а прервет воспроизведение медиа данных. Первое, что приходит в голову, сохранить состояние объекта Media-Player вызвав Fragment.onSaveInstanceState(Bundle), что сохранит данные, а новое Activity загрузит их. Однако, сохранение состояния объекта MediaPlayer и его последующее восстановление, все равно, прерывает воспроизведение и заставляет акул ненависти сновать в головах пользователей.
Читать дальше →

Задачка про парные числа

Reading time2 min
Views39K
А вот задачка на выходные! Она плохо подходит, чтобы спрашивать на собеседовании, потому что слишком уж на инсайт (пожалуйста, никогда не задавайте такие на собеседованиях), и слишком простая для соревнований. Как раз чтобы доставить тот самый satisfying click в мозгу, за который мы любим программирование. Итак:

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

Не забывайте использовать тег <spoiler> для решений в комментариях!
Оставшиеся формальности

Слежение за обновлениями из MongoDB Oplog в Sharded Cluster используя Scala и Akka Streams

Reading time5 min
Views4.4K

Введение


Эта статья является продолжением предыдущей опубликованной статьи Tailing the MongoDB Replica Set Oplog with Scala and Akka Streams.
Как мы обсуждали прежде, слежение за обновлениями в MongoDB Sharded Cluster Oplog имеет свои подводные камни по сравнению с Replica Set. Данная статья попытается раскрыть некоторые аспекты темы.
В блоге команды MongoDB имеются очень хорошие статьи, полностью покрывающие тему слежения за обновлениями из MongoDB Oplog в Sharded Clusters. Вы можете найти их по следующим ссылкам:

Так же вы можете найти информацию об MongoDB Sharded Cluster в документации.
Примеры, приведенные в данной статье не следует рассматривать и использовать в продакшн среде. Проект с примерами доступен на github.


MongoDB Sharded Cluster


Из документации MongoDB:
Sharding, или горизонтальное масштабирование, разделение и распределение данных на нескольких серверах или сегментах (shards). Каждый сегмент является независимой базой данных, и в совокупности все сегменты составляют единую локальную базу данных.

Sharded Collection


В продакшин среде каждый узел является Replica Set:


Sharded Cluster Architecture
Читать дальше →

Оценка и оптимизация производительности вычислений на многоядерных системах

Reading time10 min
Views11K

Данная публикация является переводом первой части статьи Characterization and Optimization Methodology Applied to Stencil Computations инженеров компании Intel. Эта часть посвящена анализу производительности и построению roofline модели на примере довольно распространенного вычислительного ядра, которая позволяет оценить перспективы оптимизации приложения на данной платформе.
Читать дальше →

Быстрый запуск и использование своего открытого docker-registry

Reading time3 min
Views44K
Docker – это программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации (см. Википедию).
Подробные инструкции по установке есть на официальном сайте: https://docs.docker.com/engine/installation/

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

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

Что имеется на входе:

  • виртуальный сервер с IP-адресом (без домена) на Ubuntu 14.04 64bit с docker@1.10.3 — здесь мы будем поднимать регистр и здесь же забирать из него образы
  • рабочий компьютер на OS X 10.11.3 с docker@1.9.1 и docker-machine@0.5.5

Регистр докера — это хранилище с версионированными докер-образами.
Регистр удобно использовать для доставки приложения на сервер:

  1. на рабочем компьютере собираем образ и отправляем в регистр
  2. на виртуальном сервере забираем образ из регистра и запускаем

У докера есть официальный регистр, как сервис: https://hub.docker.com
Там можно размещать неограниченное количество публичных образов и только один приватный. Большее количество приватных образов можно добавлять за отдельную плату.

Другой вариант использования регистра — поднятие собственного.
Докер предоставляет официальный образ с сервером регистра, кроме того есть документация с инструкциями по запуску.

Регистр докера способен работать как по http, так и по https. При использовании защищённого соединения возможна так же авторизация отдельных пользователей. Но нужен сертификат, который можно купить только для доменного имени. Самоподписанный сертификат у меня так и не получилось заставить работать (читал в интернетах, что с этим есть проблемы). Ввиду того, что у меня нет доменного имени — мы рассмотрим открытый регистр с доступом по http. Это значит, что если кто-то узнает адрес вашего регистра — он сможет свободно им пользоваться.
Читать дальше →

Живая миграция контейнеров Docker между облаками

Reading time5 min
Views7.9K
Мы продолжаем рассказывать о компаниях-разработчиках решений (ISV), использующих облако Microsoft Azure. В этом выпуске мы продолжим рассказ про платформу компании Jelastic темой живой миграции контейнеров Docker между облачными провайдерами. Предыдущие статьи цикла вы всегда можете найти на Хабре по ссылке #isvcloudstory. — Владимир Юнев
Последние исследования IDC в сфере облачных технологий показали, что 57% компаний уже внедрили различные формы облачных услуг, 44% планируют или уже используют частное облако и 64% компаний ориентированы на гибридное облако. Это порождает необходимость перемещать рабочие площадки из одного облака в другое, сохраняя при этом высокую производительность и целостность данных. Одним из способов плавного перемещения работающих приложений между разными физическими серверами или датацентрами является живая миграция контейнеров.


Обычно нужно заново перепаковывать контейнеры с рабочими площадками при каждом перемещении приложения с одного облака или дата центра в другой. В этом случае основной проблемой становится вопрос  автоматизации и бесперебойности миграции.

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

Наш опыт знакомства с Docker

Reading time34 min
Views47K

Вместо предисловия





Сегодня приснился сон, как-будто меня ужали до размера нескольких
килобайт, засунули в какой-то сокет и запустили в контейнере.
Выделили транспорт в оверлейной сети и пустили
тестировать сервисы в других контейнерах…
Пока не сделали docker rm


Не так давно мне посчастливилось стать членом очень крутой команды
Centos-admin.ru, в которой я познакомился с такими же, как я: единомышленниками со страстью к новым технологиям, энтузиастами и просто отличными парнями. И вот, уже на второй рабочий день меня с коллегой посадили работать над одним проектом, в котором требовалось «докерировать всё, что можно докеризировать» и было критически важно обеспечить высокую доступность сервисов.

Скажу сразу, что до этого я был обычным комнатным Linux-админом: мерился аптаймами, апт-гет-инсталлил пакеты, правил конфиги, перезапускал сервисы, тайлил логи. В общем, не имел особо выдающихся практических навыков, совершенно ничего не знал о концепции The Pets vs. Cattle, практически не был знаком с Docker и вообще очень слабо представлял, какие широкие возможности он скрывает. А из инструментов автоматизации использовал лишь ansible для настройки серверов и различные bash-скрипты.

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

Книга «Алгоритмы: разработка и применение. Классика Computer Science»

Reading time11 min
Views42K
Привет, Хаброжители! У нас вышла новинка:

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

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

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

ZeroNet — По настоящему распределенная сеть — год спустя

Reading time3 min
Views67K
image

Примерно год назад я писал об этой сети ZeroNet — Распределенные сайты через Bittorrent и Bitcoin тогда еще хабр был торт и в комментариях были обсуждения о том насколько сеть распределена. Да, год назад действительно были вопросы, но теперь всё изменилось.

Внутри:
  • Что это такое этот ваш ZeroNet
  • Что изменилось за год
  • Почему она полезно с точки зрения защиты от цензурирования
  • Почему она полезна в качестве импорто замещения и «защиты сувереннитета»
  • Что есть в сети?

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

Kotlin для начинающих

Reading time1 min
Views64K
Уже не мало нашумел Kotlin в мире программирования, не мало профессиональных инженеров уже обратил на него внимание, но также есть и те кому он не симпатизирует.

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

Паспортный сканер своими руками

Reading time7 min
Views26K


Привет, Хабр! В предыдущих статьях мы уже рассказывали вам про то, как нам удалось превратить ввод паспортных данных на мобильных устройствах из рутины в простую и быструю процедуру. Следующим закономерным шагом мы превратили наш Smart PassportReader SDK в серверную компоненту, облегчив тем самым крупным финансовым организациям работу с документами в бэк-офисах. Наконец, проявив изобретательскую смекалку и инженерный подход, нам удалось разработать программно-аппаратный комплекс (забегая вперед, представим его название — Smart PassportBox), позволяющий оптимизировать работу фронт-офисов и СКУД-решения. Поэтому, если вам интересно сколько директоров, программистов, паяльников, лобзиков и отверток требуется для создания полноценного ПАК, добро пожаловать под кат.
Читать дальше →

Машинное обучение: Вопросы и ответы

Reading time6 min
Views31K


Как вы уже успели заметить, мы достаточно часто обращаем внимание на тему машинного обучения. Так, мы рассказывали о глубоком обучении, писали о работе с данными и адаптировали различные подборки источников по теме: 1, 2, 3.

Сегодня мы решили посмотреть на наиболее интересные вопросы и ответы по теме машинного обучения на ресурсе Quora.
Читать дальше →

Как себе выстрелить в ногу в Kotlin

Reading time13 min
Views36K
Совсем недавно вышел релиз Kotlin, а его команда разработчиков предлагала задавать вопросы про язык. Он сейчас на слуху и, возможно, многим хочется его попробовать.
Пару недель назад тимлид сделал для компании презентацию о том, что в Котлине хорошо. Одним из самых интересных вопросов был «А как в Котлине выстрелить себе в ногу?» Так получилось, что ответил на этот вопрос я.

Disclaimer:
Не стоит воспринимать эту статью как «Kotlin — отстой». Хотя я отношусь скорее к категории тех, кому и со Scala хорошо, я считаю, что язык неплохой.
Все пункты спорные, но раз в год и палка стреляет. Когда-то вы себе прострелите заодно и башку, а когда-то у вас получится выстрелить только в полночь полнолуния, если вы предварительно совершите черный ритуал создания плохого кода.

Наша команда недавно закончила большой проект на Scala, сейчас делаем проект помельче на Kotlin, поэтому в спойлерах будет сравнение со Scala. Я буду считать, что Nullable в Kotlin — это эквивалент Option, хотя это совсем не так, но, скорее всего, большинство из тех, кто работал с Option, будут вместо него использовать Nullable.

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

Особенности поддержки 10 дата-центров по всему миру: мой опыт и грабли

Reading time9 min
Views42K

Это 2 Петабайта бэкапа

У нас 14 дата-центров по всему миру, из которых я занимаюсь обслуживанием десяти. Лет пять назад я думал, что там, за границей, всё блестит, поддержка внимательная и вежливая и ошибается только совсем по мелочам. Мои иллюзии довольно быстро развеялись.

Вот пример. Стоят у нас в стойках серверы, по сути — дисковые полки, предназначенные для «медленных» данных бэкапов. Место на них кончалось. В каждом сервере было по 24 диска и 36 слотов, мы решили добить ещё по 12 HDD. Я отправил тикеты, объяснил, что мы делаем и зачем, добавил, что нужно поставить диски в неподсвеченные слоты.

Через 10 минут мониторинг показал, что у нас выпал диск в первом сервере. «Ничего себе, коллеги жгут», — подумали мы. Наверное, задели или ещё что-то… Но тут почти сразу выпали второй и третий диски. Я начал звонить в немецкий саппорт, и мне ответил коллега из Индии.

К моменту, когда мы успели остановить его коллегу-грека, этот «терминатор» вытащил по 12 дисков из пяти серверов и готовился приступать к шестому. Система делала бешеный ребилд.
Читать дальше →

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity