Pull to refresh
6
0
Дмитрий Ширяев @turone

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

Send message

Масштабируем WebSocket соединения на Go

Reading time21 min
Views32K
Мессенджер Авито – это:

  • 12 m уникальных пользователей в месяц;
  • Версии для всех современных платформ (Web, iOS, Android);
  • Достаточно нагруженное приложение – около 800 тысяч подключений онлайн по WebSocket (основной протокол общения с пользователями).

Александр Емелин из компании Авито — автор проекта Centrifugo — open-source сервера real-time сообщений, где основной протокол передачи данных как раз WebSocket. Сервер используется в проектах Mail.Ru (в том числе в Юле), а также во внутренних проектах Badoo, ManyChat, частично Авито и за рубежом (например, Spot.im). Сейчас сервер базируется на доступной всем Go-разработчикам библиотеке Centrifuge.

На конференции Golang Conf 2019 Александр рассказал, как команда Авито решала проблемы при работе с WebSocket — как про детали, касающиеся Go в частности, так и вообще про работу с большим количеством постоянных соединений.


Читать дальше →
Total votes 40: ↑39 and ↓1+49
Comments1

Node.js Streams для чайников или как работать с потоками

Reading time8 min
Views91K
Я думаю многие не раз слышали про Node js Streams, но так ни разу и не использовали, либо использовали, не задумываясь как же они работают, запайпили (pipe) стрим и норм. Давайте же разберемся что такое стримы, запайпить (pipe), чанки (chunk — часть данных) и все такое))


Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments10

Как я учился не перебивать собеседников

Reading time2 min
Views43K

Летом 2014 года я был на переговорах в офисе компании Kudago. Я брался за проектирование интерфейса рекламного кабинета, это была одна из первых встреч. Собирали функциональные требования, обсуждали всякие детали. Я на переговорах спешил и «подгонял» генерального директора, Александра Прокофьева, периодически перебивая его. В какой-то момент он сказал:

— Чувак, дай я сначала договорю, а потом тебя послушаем.

Меня как в воду опустили. На встрече присутствовало несколько человек, перед которыми мне сделали замечание, и до конца переговоров я сидел и грустил. Уверен, что перемена моего настроения была очень заметна. Разумеется, я в тот момент сильно обиделся на Александра.

После переговоров, придя в себя и хорошенько всё обдумав, я понял две вещи:

Читать далее
Total votes 100: ↑78 and ↓22+76
Comments176

Вы не так готовите Kingfisher, или как самураи работают с загрузкой изображений

Reading time7 min
Views2.5K

Вы не так готовите Kingfisher, или как самураи работают с загрузкой изображений

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

Читать далее
Total votes 1: ↑1 and ↓0+1
Comments3

Введение в Iptables

Reading time6 min
Views82K

Iptables - это мощный инструмент управления сетью в Linux, который позволяет администраторам управлять входящими и исходящими пакетами данных. Это основной инструмент для настройки межсетевых экранов в системах Linux.

Читать далее
Total votes 9: ↑6 and ↓3+3
Comments9

Настройка авторизации через ssl сертификат на уровне nginx

Level of difficultyMedium
Reading time5 min
Views12K

Привет уважаемые, хабровчане!

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

Читать далее
Total votes 13: ↑13 and ↓0+13
Comments11

Разбираем HTTP/2 по байтам

Level of difficultyMedium
Reading time24 min
Views30K

image


Откройте любую статью с обзором HTTP/1.1. Скорее всего, там найдётся хотя бы один пример запроса и ответа, допустим, такие:


GET / HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Content-Length: 38
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<h1>Привет!</h1>

Теперь откройте статью с обзором HTTP/2 или HTTP/3. Вы узнаете о мультиплексировании запросов, о сжатии заголовков, о поддержке push-технологий, но вряд ли увидите хоть одно конкретное сообщение. Ясно, почему так: HTTP/1.1 — текстовый протокол, тогда как сиквелы к нему бинарные. Это очевидное изменение открывает дорогу ко множеству оптимизаций, но упраздняет возможность просто и доступно записать сообщения.


Поэтому в этой статье предлагаю покопаться в кишках у HTTP/2: разобрать алгоритмы установки соединения, формат кадров, примеры взаимодействия клиента с сервером.

Читать дальше →
Total votes 115: ↑115 and ↓0+115
Comments45

АДСМ5. История сетевой автоматизации

Reading time37 min
Views9.1K

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

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments8

Запросы в PostgreSQL: 1. Этапы выполнения

Reading time17 min
Views75K

Привет, Хабр! Начинаю еще один цикл статей об устройстве PostgreSQL, на этот раз о том, как планируются и выполняются запросы.

Предыдущие циклы были посвящены изоляции и многоверсионности, журналированию и блокировкам.

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

Материал перекликается с нашим учебным курсом QPT «Оптимизация запросов», но ограничивается только подробностями внутреннего устройства и не затрагивает оптимизацию как таковую. Кроме того, я ориентируюсь на еще не вышедшую версию PostgreSQL 14. А курс мы тоже скоро обновим (правда, на версию 13; приходится бежать со всех ног, чтобы только оставаться на месте).

Поехали
Total votes 33: ↑33 and ↓0+33
Comments11

Шпаргалка по SQL (postgres), которая выручает меня на собесах

Level of difficultyEasy
Reading time8 min
Views195K

Привет, Хабр!

Я решил посвятить свою первую статью SQL. Вопросы, рассмотренные ниже мне задавали на собеседованиях на позицию python-разработчика. Естественно отвечать правильно получалось не всегда, а если точнее то чаще не правильно, однако проведя N часов в рефлексии я составил перечень ответов, которыми пользуюсь до сих пор.

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

Читать далее
Total votes 156: ↑149 and ↓7+177
Comments178

АДСМ6. Интерфейсы взаимодействия с сетевыми устройствами

Reading time81 min
Views15K

Это вторая статья - техническо-практический разбор протоколов и интерфейсов автоматизации сети.

Если хочется исторической справки, я отсылаю читателя к статье-спутнику, в которой мы двигаемся от начала времён в будущее человечества. Какую роль сыграли в нашем настоящем IETF, ISO, олдовые и современные вендоры и даже просто люди.
В этой же мы раскрываем дерево XML, пробуем на вкус капабилити NETCONF, шлём первые RPC и наконец уже расставим в правильном порядке буквы YANG, OpenConfig, gNMI.

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

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments9

Flutter: 11 вещей, которые нужно помнить для вашего следующего проекта

Reading time8 min
Views10K

Создание нового проекта на Flutter - это благословение - свежая кодовая база, никакого легаси кода (пока что), null safety, самые последние версии ваших любимых библиотек и так далее. Однако, в то же время, необходимо принять критические решения в самом начале, которые будут лежать в основании для будущего, такие как инструменты, пакеты, файловая структура, решение для менеджмента состояния, тестирование и планирование. В противном случае, в итоге, проект превратится в еще одну чашу спагетти с фрикадельками. Чтобы избежать этого, я подготовил список наиболее важных, по моему мнению, частей проекта, которые должны быть решены как можно раньше. Я надеюсь, что это поможет вам. Приятного чтения!

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments14

Повышение скорости написания кода: Emmet и его использование в VSCode

Reading time6 min
Views73K

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

Читать далее
Total votes 11: ↑9 and ↓2+10
Comments23

Концепции libp2p. Publish/Subscribe

Reading time8 min
Views2.8K

Перевод статьи с портала проекта Libp2p.

Публикация/Подписка (Publish/Subscribe, сокр. pub/sub или PubSub - прим. перев.) - это система, в которой одноранговые узлы (в дальнейшем - просто "узлы" или "пиры" (peers) - прим. перев.) объединяются вокруг интересующих их тем. Говорят, что пиры, заинтересованные в какой-либо теме, подписаны на эту тему:

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments0

Снится ли GGG Тиму Бернерсу-Ли?

Reading time8 min
Views2.5K

В 2007 году знаменитый автор слова из трёх букв 'W' опубликовал в своем блоге рассуждения о востребованности слова нового, на сей раз - из трёх букв 'G'. "Гигантский Глобальный Граф" - так предполагалось это произносить в полном, необрезанном виде. О чём шла речь? О том, что слово "граф" больше подходит для обозначения технологии представления взамосвязанных данных, нежели "паутина", пусть даже и "семантическая". Термин не прижился. Отчасти, возможно, из-за некоторой тавтологичности, отчасти же - из-за того, что привычная "паутина" оказалась милее сердцу обывателя, чем какой-то "граф".

Ну, да ладно, "ГГГ" не всплыло взлетело - не беда, ведь в конце концов - это лишь один из возможных псевдонимов планетарной семантической сети. Но что представлялось сиру Тиму в качестве цели для достижения (с помощью новых-то технологий связывания данных)?.. "Важны не документы, а то, что в них содержится. Очевидная истина." - писал он, - "...когда я бронирую билет на авиарейс, меня интересует именно этот рейс. Не страница рейса на сайте путешествий или страница рейса на сайте авиакомпании, но URI самого авиарейса. Вот что я поставлю в закладки. И каким бы устройством я ни воспользовался для открытия закладки, оно будет иметь доступ к ситуационно зависимому обзору всего, что я знаю об этом рейсе из разных источников. Задача заказа и совершения рейса потребует множества взаимодействий. И на их протяжении, эти задача и рейс будут на первом месте в моём осознании, веб-сайты – на втором, а сети и устройства – на третьем."

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments7

35 вопросов с собеседования JavaScript-разработчика

Reading time8 min
Views97K

Это перевод статьи, в которой Abdo Amin приводит 35 вопросов на собеседованиях JavaScript-разработчиков, которые он сам задает. К вопросам прилагаются и ответы.

Читать далее
Total votes 20: ↑13 and ↓7+8
Comments13

Гетерогенные транзакции на примере Kafka vs. RDBMS

Reading time8 min
Views9.6K

Данный текст описывает общесистемные подходы, используемые при работе с брокером сообщений Kafka, и общие архитектурные подходы, применяемые при работе с системами, имеющими несовместимые транзакционные модели.

Читать далее
Total votes 7: ↑6 and ↓1+8
Comments14

Теория вселенной часть 2, продолжение. Энергия-Пространство

Reading time15 min
Views21K


Вселенная – это единая система Энергия-Пространство, именно вместе, так как одно и тоже. Энергия это и есть пространство, это и есть вселенная.

Что такое энергия? Под энергией мы часто понимаем нефть, газ, тепло и электричество в нашей розетке, многие подумают о формуле E=mc2, и так что же это такое в самом базовом виде…
Попробуйте представить себе полотно, к примеру, скатерть или одеяло абсолютно плоским и ровным, это будет нашей пустой системой координат, если сжать это полотно в каком-то месте создав уплотнение, сгусток, мы и получим энергию, т.е. само сжатие, изменения пространства и есть энергия, отпустив полотно это сжатие распрямится обратно в абсолютно плоскую поверхность, при этом по поверхности пойдет волна, пропорциональна равная сжатию, это волна тоже и есть энергия, распространяясь, волна сжимает и распрямляет обратно поверхность, пространство, скорость распространения такой волны равна скорости света.
Читать дальше →
Total votes 14: ↑2 and ↓12-10
Comments44

Information

Rating
Does not participate
Date of birth
Registered
Activity