Как стать автором
Обновить
147
0
Андрей Емельянов @AndreiYemelianov

Пользователь

Отправить сообщение

Критика протокола и оргподходов Telegram. Часть 1, техническая: опыт написания клиента с нуля — TL, MT

Время на прочтение60 мин
Количество просмотров69K

В последнее время на Хабре стали чаще появляться посты о том, как хорош Telegram, как гениальны и опытны братья Дуровы в построении сетевых систем, и т.п. В то же время, очень мало кто действительно погружался в техническое устройство — как максимум, используют достаточно простой (и весьма отличающийся от MTProto) Bot API на базе JSON, а обычно просто принимают на веру все те дифирамбы и пиар, что крутятся вокруг мессенджера. Почти полтора года назад мой коллега по НПО "Эшелон" Василий (к сожалению, его учетку на Хабре стёрли вместе с черновиком) начал писать свой собственный клиент Telegram с нуля на Perl, позже присоединился и автор этих строк. Почему на Perl, немедленно спросят некоторые? Потому что на других языках такие проекты уже есть На самом деле, суть не в этом, мог быть любой другой язык, где еще нет готовой библиотеки, и соответственно автор должен пройти весь путь с нуля. Тем более, криптография дело такое — доверяй, но проверяй. С продуктом, нацеленным на безопасность, вы не можете просто взять и положиться на готовую библиотеку от производителя, слепо ему поверив (впрочем, это тема более для второй части). На данный момент библиотека вполне работает на "среднем" уровне (позволяет делать любые API-запросы).


Тем не менее, в данной серии постов будет не так много криптографии и математики. Зато будет много других технических подробностей и архитектурных костылей (пригодится и тем, кто не будет писать с нуля, а будет пользоваться библиотекой на любом языке). Итак, главной целью было — попытаться реализовать клиент с нуля по официальной документации. То есть, предположим, что исходный код официальных клиентов закрыт (опять же во второй части подробнее раскроем тему того, что это и правда бывает так), но, как в старые времена, например, есть стандарт по типу RFC — возможно ли написать клиент по одной лишь спецификации, "не подглядывая" в исходники, хоть официальных (Telegram Desktop, мобильных), хоть неофициальных Telethon?

Ответ на этот вопрос неоднозначен
Всего голосов 187: ↑182 и ↓5+177
Комментарии240

Охлаждение ЦОД: песнь льда и пламени

Время на прочтение5 мин
Количество просмотров7.1K
image

Одним из самых частых вопросов, которые задают клиенты наших ЦОД, является вопрос об охлаждении оборудования. Сегодня мы подробно расскажем о том, как мы следим за температурой в серверных помещениях.

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

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

Для того чтобы наглядно увидеть распределение тепла и холода, а также измерить скорость воздушных потоков, мы используем два специфических инструмента, о которых сейчас детально расскажем.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии8

Разработка драйвера PCI устройства под Linux

Время на прочтение19 мин
Количество просмотров53K

В данной статье я рассматриваю процесс написания простого драйвера PCI устройства под OC Linux. Будет кратко изучено устройство программной модели PCI, написание собственно драйвера, тестовой пользовательской программы и запуск всей этой системы.

В качестве подопытного выступит интерфейс датчиков перемещения ЛИР940/941. Это устройство, отечественного производства, обеспечивает подключение до 4 энкодеров с помощью последовательного протокола SSI поверх физического интерфейса RS-422.
Всего голосов 101: ↑101 и ↓0+101
Комментарии33

Блокчейн — будущее финансовых технологий?

Время на прочтение9 мин
Количество просмотров21K


Слова криптовалюта и блокчейн, несколько лет назад известные лишь единицам, теперь встречаются повсеместно. В этой обзорной статье мы детально разберем принцип работы технологии, рассмотрим варианты её применения и наметим возможные пути развития блокчейна.
Кроме того, мы поделимся опытом компаний, заинтересованных в более глубоком изучении технологии, а также расскажем о возможностях для разработчиков поучаствовать в первом конкурсе NEO.
Читать дальше →
Всего голосов 30: ↑21 и ↓9+12
Комментарии20

blk-mq и планировщики ввода-вывода

Время на прочтение11 мин
Количество просмотров11K


В сфере устройств хранения данных за последние годы произошли серьёзные изменения: внедряются новые технологии, растут объём и скорость работы дисков. При этом складывается следующая ситуация, в которой узким местом становится не устройство, а программное обеспечение. Механизмы ядра Linux для работы с дисковой подсистемой совершенно не приспособлены к новым, быстрым блочным устройствам.
Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии3

Электричество в дата-центре

Время на прочтение4 мин
Количество просмотров11K


Работа любого дата-центра держится на «трех китах» — электроснабжении, охлаждении и системах безопасности. А ключевой инфраструктурой среди них, вне сомнения, является система электроснабжения.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии16

Сервис статистики VPC

Время на прочтение15 мин
Количество просмотров4.8K


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

За получение метрик и их первичную обработку, отвечает компонент OpenStack Ceilometer.

На протяжении долгого времени он был единственным компонентом OpenStack предоставляющим все базовые возможности телеметрии.

В дальнейшем разработчики разделили функции Ceilometer между несколькими продуктами:

  • Aodh — сервис оповещений;
  • Gnocchi — сервис хранения агрегированных измерений;
  • Panko — сервис хранения информации о событиях;
  • Ceilometer — сервис сбора измерений.

Aodh и Panko останутся за рамками этой статьи.
Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии0

Выделенные серверы на базе процессоров Intel Xeon Skylake-SP

Время на прочтение7 мин
Количество просмотров15K


12 июля компания Intel представила новую линейку серверных процессоров под кодовым названием Skylake-SP. Буквы SP в названии линейки — это сокращение от Scalable Processors («масштабируемые процессоры» в переводе на русский). Такое название не случайно: Intel реализовали много интересных нововведений и, как было отмечено в одном обзоре, «попытались угодить чуть ли не всем».
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии6

The uWSGI Spooler

Время на прочтение3 мин
Количество просмотров7.3K


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


Самой популярной системой очередей в Python является Celery, она обладает широким набором возможностей по управлению задачами. К сожалению, системы на базе Celery сложно поддерживать в работоспособном состоянии, и когда что-то идёт не так, то найти проблему бывает весьма не просто. Можете спросить любого девопса об опыте работы с Celery, но будьте готовы услышать не очень приятные слова.


К счастью, есть альтернативное решение — uWSGI Spooler, и в этой статье я расскажу о нём подробнее.


Читать дальше →
Всего голосов 28: ↑27 и ↓1+26
Комментарии5

Что должно быть в с-файле, а что должно быть в h-файле?

Время на прочтение3 мин
Количество просмотров94K
Подобного рода вопрос мне недавно задал один коллега, начинающий программировать на языке Си. И я подумал, что это хороший повод поделится своим пониманием данного вопроса. Потому, что даже опытные программисты не всегда имеют схожие точки зрения на этот счет.

Отчасти это дело вкуса, поэтому, кому интересно как это делаю я, добро пожаловать под кат.
Читать дальше →
Всего голосов 33: ↑26 и ↓7+19
Комментарии25

Контейнеры и безопасность: seccomp

Время на прочтение7 мин
Количество просмотров15K


Для работы с потенциально опасными, непроверенными или просто «сырыми» программами часто используются так называемые песочницы (sandboxes) — специально выделенные среды с жёсткими ограничениями. Для запускаемых в песочницах программ обычно сильно лимитированы доступ к сети, возможность взаимодействия с операционной системой на хост-машине и считывать информацию с устройств ввода-вывода.

В последнее время для запуска непроверенных и небезопасных программ всё чаще используются контейнеры.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии3

Как пропатчить ядро без перезагрузки: livepatch, kpatch и Canonical Livepatch Service

Время на прочтение7 мин
Количество просмотров17K
pr-3322

Тему обновления патчей ядра без перезагрузки мы уже рассматривали в статье, опубликованной в 2014 году. В ней речь шла о KernelCare — инструменте, разработанном нашими партнёрами из компании Cloud Linux. На момент написания статьи KernelCare был чуть ли не единственным пригодным для полноценного использования инструментом для наложения патчей.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии4

Виртуальное приватное облако: работа с CoreOS и RancherOS

Время на прочтение15 мин
Количество просмотров15K
CoreOS

Недавно мы добавили в сервис «Виртуальное приватное облако» новый образ с операционной системой RancherOS и обновили образ CoreOS.


Эти операционные системы будут интересны пользователям, которым необходим инструмент для простого управления большим количеством приложений в контейнерах и использования различных систем кластеризации контейнеров — Kubernetes, Docker Swarm, Apache Mesos и других.


Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии2

Введение в DPDK: архитектура и принцип работы

Время на прочтение11 мин
Количество просмотров57K
DPDK

За последние несколько лет тема производительности сетевого стека Linux обрела особую актуальность. Это вполне понятно: объёмы передаваемых по сети данных и соответствующие нагрузки растут не по дням, а по часам.

И даже широкое распространение сетевых карт 10GE не решает проблемы: в самом ядре Linux имеется множество «узких мест», которые препятствуют быстрой обработке пакетов.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии14

Запрягаем R на службу бизнесу на «1-2-3»

Время на прочтение6 мин
Количество просмотров9.6K

Настоящий пост является является, фактически, резюме, подводящим итоги предыдущих «технологических» публикаций [1, 2, 3, 4, 5] и возникших дискуссий и обсуждений. Последние показали, что задач в которых применение R могло бы оказать хорошую помощь бизнесу очень и очень много. Однако, даже в тех случаях, когда R используется, далеко не всегда для этого применяются современные возможности R.

Читать дальше →
Всего голосов 23: ↑23 и ↓0+23
Комментарии6

Виртуальное приватное облако: подготовка образов

Время на прочтение13 мин
Количество просмотров19K
VPC Image Building

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


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


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


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

Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии4

Мониторинг безопасности с Sysdig Falco

Время на прочтение6 мин
Количество просмотров7.3K
Sysdig Falco

Sysdig —инструменте для трассировки ядра — мы рассказывали два года назад. Совсем недавно, в мае этого года, разработчики Sysdig представили ещё один интересный продукт: систему обнаружения аномалий Falco.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+15
Комментарии3

Управление контейнерами с LXD

Время на прочтение7 мин
Количество просмотров34K
LXD Containers

Продолжаем наш цикл статей о контейнеризации. Если первые две статьи (1 и 2) были посвящены теории, то сегодня мы поговорим о вполне конкретном инструменте и об особенностях его практического использования. Предметом нашего рассмотрения будет LXD (сокращение от Linux Container Daemon), созданный канадцем Стефаном Грабе из компании Canonical.
Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии21

PipelineDB: работа с потоками данных

Время на прочтение6 мин
Количество просмотров12K
PR-2004-7

В предыдущих публикациях мы уже затрагивали проблему обработки событий в реальном масштабе времени. Сегодня мы хотели бы вновь вернутся к этой теме и рассказать о новом и весьма интересном инструменте — потоковой СУБД PipelineDB.
Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии10

SO_TIMESTAMPING в картинках. Прием пакета

Время на прочтение11 мин
Количество просмотров10K

Бывает, что приложению требуется узнать точное время приема или отправки сетевого пакета. Например, для синхронизации часов (см. PTP, NTP) или тестирования задержек в сети (см. RFC2544).


Наивным решением будет запоминать в приложении время сразу после получения пакета от ядра (или перед отправкой ядру):


  recv(sock, buffer, length, flags);
  clock_gettime(CLOCK_REALTIME, timespec);

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


Начиная с версии 2.6.30 Линукс поддерживает опцию сокета SO_TIMESTAMPING. Она позволяет пользовательскому сокету получать временные метки для отправляемых и принимаемых пакетов. Временные метки могут быть сняты самим ядром, драйвером или сетевым устройством (см. список поддерживающих устройств и драйверов). О том, что это вообще такое и как этим пользоваться, стоит почитать в Documentation/networking/timestamping.txt


В этой статье я расскажу о том, как пакеты доставляются от сетевого устройства пользователю, когда при этом снимаются временные метки, как они доставляются пользователю и насколько они точны. Приведенные примеры кода ядра взяты из версии 4.1.

Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии9
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность