Как стать автором
Обновить
6
0.1
Иван GiB$ON @gibson_dev

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

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

Нагрузочное тестирование в 1С:ERP

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

Для того чтобы еще до внедрения информационной системы убедиться, что целевая система справится с ожидаемой нагрузкой, требуется провести нагрузочное тестирование. О том какие инструменты и методики помогут организовать подобный проект при внедрении 1С:ERP, и о том, какие неожиданные факторы могут влиять на производительность системы я и хотел бы рассказать в данной статье.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии5

Приручаем многопоточность в Node.js (часть 5/5: автомасштабирование под нагрузку)

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

В прошлых частях цикла мы:

- рассмотрели базовые концепты работы с многопоточностью в JavaScript на примере среды Node.js;

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

- использовали разделяемую память и Atomics-операции как самое быстрое средство обмена большими блоками данных;

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

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

В данном случае эффективность - это не про максимально возможную скорость обработки каждой отдельной задачи, а про сбалансированное использование аппаратных ресурсов с учетом тех ограничений, на которые мы готовы пойти. Особенно актуально это для различных "облачных" размещений, где оплата идет за фактически потребленные CPU и RAM.

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

Приручаем многопоточность в Node.js (часть 3/5: разделяемая память, атомарные операции и блокировки)

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

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

Но тут возникает две проблемы:

1. как эффективно доставить данные в обрабатывающий поток

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

В этом нам как раз и помогут два рассматриваемых в этой статье концепта работы с многопоточностью: разделяемая (shared) память и потокобезопасные (thread-safe, Atomics) операции над ней.

Читать далее
Всего голосов 21: ↑21 и ↓0+21
Комментарии7

Российские хостеры с оплатой зарубежными картами

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

Всем привет! Меня зовут Леонид, я владелец сервиса Поиск VPS. Ранее я уже писал про оплату виртуальных серверов и других хостинговых услуг при помощи SWIFT и криптовалют, а также о российских хостерах, предоставляющих услуги за границей с возможностью оплаты картами, выпущенными в Российской Федерации. В данном материале я решил отобрать хостеров, которые предоставляют услуги в России и могут принять оплату картой, выпущенной за пределами РФ.

Читать далее
Всего голосов 24: ↑24 и ↓0+24
Комментарии8

Как Discord прокачивает сетевые диски, сводя задержки к минимуму

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

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

Для предоставления такого колоссального объёма данных эксплуатируется набор кластеров NoSQL-баз данных (на основе ScyllaDB), и каждый из этих кластеров является источником истины для соответствующего множества данных. Поскольку Discord — это платформа для чатов в реальном времени, требуется, чтобы базы данных справлялись с плотным потоком запросов настолько быстро, насколько возможно.

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

Приручаем многопоточность в Node.js (часть 2/5: очередь, каналы и координатор)

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

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

Но вот неприятность: такой алгоритм очень неравномерно нагружает потоки и не полностью утилизирует их возможности - пока кто-то простаивает, другой уже копит очередь. Как это можно обойти?

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии8

Как устроены дисплеи. Подробный разбор

Уровень сложностиПростой
Время на прочтение61 мин
Количество просмотров59K

В этой части разберем устройство, виды и повадки современных телевизоров.

Основные характеристики — всякие яркости, HDRы, контрасты и цветовые охваты, что они значат и зачем нужно 120Гц, мы разобрали в предыдущей части.

Осторожно, трафик >
Всего голосов 95: ↑94 и ↓1+119
Комментарии134

Способ снижения зрительного напряжения. Часть 1

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

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

UVA излучение >
Всего голосов 21: ↑19 и ↓2+22
Комментарии97

Личный опыт: перезапуск тимлидства в растущей IT-компании. Часть 1

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

Я Саша Хрущев, технический директор IT-компании WINFOX. Рассказываю, как мы пересмотрели свой подход к тимлидству, с какими трудностями столкнулись в процессе и какие результаты это дало.

Читать далее
Всего голосов 5: ↑3 и ↓2+2
Комментарии10

Эффективная FIFO-обработка для Node.js и Chrome

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

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

В таких нагруженных системах, как коллектор нашего сервиса мониторинга PostgreSQL-серверов, создание и последующая подчистка Garbage Collector'ом подобных избыточных объектов и полей - непозволительная роскошь.

Но если внимательно посмотреть на эту схему, то можно заметить, что сами элементы очереди A, B, C линейно упорядочены. Так нельзя ли использовать в качестве очереди обычный массив с его .push() и .shift()?..

Насколько это будет эффективно, какие грабли встретятся на этом пути, и как их можно обойти - сегодня об этом.

Читать далее
Всего голосов 16: ↑16 и ↓0+16
Комментарии7

Атакуем синезубого короля

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

Английское слово Bluetooth -- буквальный перевод прозвища короля викингов Харальда I Синезубого. Он правил на территории современных Дании и части Норвегии в X веке и вошел в историю как правитель, который объединил враждовавшие датские племена в единое королевство.

Подразумевается, что Bluetooth делает то же самое с протоколами связи, объединяя их в один универсальный стандарт.

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

Но задумывался ли кто-то над тем:

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

Память в браузерах и в Node.js: ограничения, утечки и нестандартные оптимизации

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

Интро: почему я написал эту статью


Меня зовут Виктор, я разрабатываю страницу результатов поиска Яндекса. Несмотря на внешнюю простоту, поисковая выдача — сложная штука: на каждый запрос генерируется своя уникальная страница, на которой в зависимости от запроса может присутствовать блок Картинок, Карты, Переводчик, видеоплеер и многие другие компоненты. Все они должны запускаться и работать в памяти обычных бюджетных телефонов, которые использует большинство наших пользователей. Браузерам должно хватать ресурсов, чтобы пользователь не видел вот такого:



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


Разрабатывая проект на JavaScript (TypeScript, ClojureScript или каком-то другом языке, транслируемом в JavaScript), мы привыкли создавать объекты, массивы, строки и вообще писать код, как будто память бесконечна. Это не так. Я расскажу о видах проблем с памятью, о том, какие ограничения мы часто забываем и как их можно преодолеть. В ответ браузеры и пользователи скажут вам спасибо.


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

Как мы отказались от JPEG, JSON, TCP и ускорили ВКонтакте в два раза

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

На протяжении всей жизни мне приходится экономить вычислительные и сетевые ресурсы: сначала были компьютеры с 300 кГц (кило — не гига!) и 32 Кбайт RAM, интернет по dial-up. Потом я решал олимпиадные задачки. Теперь имею дело с терабайтами трафика и 50 млрд событий в сутки. И хотя современные телефоны в 1 000 раз мощнее любого оборудования двадцатилетней давности, я до сих пор оптимизирую. Думал даже, что это со мной что-то не так. Но потом понял, что все постоянно что-нибудь оптимизируют. 

Эта статья в меньшей степени о том, почему нужно бороться за производительность, и в большей о том, на что сейчас стоит заменить устаревший стек из JPEG, JSON, gzip и TCP — и как это сделать. 

Спойлер: у нас есть решение и мы его не только показываем — ссылки на open source в конце статьи.

Читать далее
Всего голосов 336: ↑324 и ↓12+411
Комментарии300

Отказоустойчивая архитектура контентной платформы на 4 Тбит/с — опыт VK Видео

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

Представьте идеальный мир с бесконечными ресурсами, в котором можно сколько угодно линейно масштабироваться под нагрузку: просто доставлять серверы, диски, видеокарты, как только потребуется больше мощностей. Звучит хорошо? Только оказывается, что когда серверов 5 000 и дисков 100 000, то несколько из них обязательно находятся в состоянии maintenance или repair, куда их привели обстоятельства непреодолимой силы. И главная задача здесь — обеспечить доступность сервиса в условиях постоянных сбоев. 

В статье разберём, как построить отказоустойчивую платформу, с какими неочевидными corner cases может столкнуться сервис с UGC-контентом, а ещё — как жить в реальном, а не идеальном мире и оптимизировать железо. Чтобы раздавать 4 Тбит/с можно, конечно, использовать 400 серверов по 10 Гбит/с, но гораздо интереснее грамотно всё потюнить и выжать 100 Гбит/с с Java-сервера.  

Читать далее
Всего голосов 44: ↑43 и ↓1+57
Комментарии15

Страх и ненависть в протоколе RDP

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

Все те из нас, кто всё ещё администрирует Windows на серверах, привыкли к протоколу RDP.

Последовательность: Win+R->mstsc зашита не то что в мышечной, а наверняка уже в генетической памяти.

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

В этой статье я расскажу, что происходило с протоколом RDP, куда всё катится и чего надо бояться.
Читать дальше →
Всего голосов 43: ↑40 и ↓3+52
Комментарии42

Разработка драйвера сетевого адаптера для Linux. Часть 1

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

В этой статье мы рассмотрим как устроен драйвер сетевого адаптера для Linux.

Cтатью разделим на две части.

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

Хотя при разработке драйверов необходимо использовать стандартные ядерные фреймворки, такие как clock, reset, libphy и пр., поначалу мы будем работать с адаптером напрямую через регистры состояния и управления. Это позволит нам детально разобраться с аппаратной частью.

Во второй части статьи приведем драйвер к нормальному виду, с использованием стандартных фреймворков и описанием того, что надо указать в Device Tree, и рассмотрим как передавать сетевые пакеты.

Нам нужна макетная плата с сетевым адаптером, на которую можно поставить Linux. Возьмем Orange Pi Zero на платформе Allwinner H2+. В состав платформы входят четыре процессорных ядра Cortex-A7, поддерживается ОЗУ стандартов LPDDR2, LPDDR3, DDR3, широкий спектр соединений и интерфейсов, в том числе сетевой адаптер, для которого мы будем разрабатывать драйвер. Подробное описание платформы тут, документация на платформу Allwinner H3 Datasheet.

Читать далее
Всего голосов 71: ↑71 и ↓0+71
Комментарии19

Онлайн-сервер для NFS Underground 2 своими руками. Часть 1

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

Привет, Хабр! Спустя 13 лет я решил рассказать как однажды начал писать dedicated-сервер для игры NFS Underground 2, как решил возродить функционал оригинального онлайн-сервера, закрытого ещё в 2007 году, и как получилось, что это всё ещё WIP, несмотря на килотонны написанного кода и сотни часов, проведённых в реверс-инжиниринге.

Материал поделю на 3 части: в этой статье будет предыстория, причины и общая картина сетевой реализации сервера. Во второй части расскажу про проблемы и нюансы реверс-инжиниринга. А в завершающей части уделю внимание организации структуры проекта и тому, “что” и “почему” до сих пор не реализовано.

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

Безвыигрышная лотерея под названием «секс»

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

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

Дисклеймер: В силу подхода к работе так сложилось, что обычно я консультирую людей интеллектуального труда. В последний год это преимущественно управленцы и сотрудники IT-сферы. Это люди, которые всю жизнь решали любые проблемы "через голову". Такой подход неизбежно накладывает отпечаток на личность и внепрофессиональную жизнь. Минимизацией негативных последствий таких особенностей я занимаюсь. И в рамках статей на данном ресурсе стараюсь обобщить профессиональный опыт и дать полезную информацию.

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

Читать, о чем нельзя говорить
Всего голосов 104: ↑67 и ↓37+52
Комментарии243

Не трогайте разработчиков. Отстаньте. Просто не беспокойте

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


Всем привет! Меня зовут Ян, я руководитель разработки Департамента ИТ инвестиционного бизнеса Газпромбанка. Совершенно неожиданно я занял первое место на конференции Highload++ с докладом про то, как организована работа в наших командах разработки.

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

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

Естественно, такой подход имеет кучу подводных камней и подходит далеко не всем и не каждому типу команд.

Сейчас расскажу про практический опыт.
Читать дальше →
Всего голосов 157: ↑139 и ↓18+154
Комментарии79

Node.js: использование веб-потоков. Часть 2

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


Привет, друзья!


Представляю вашему вниманию перевод второй части этой замечательной статьи.


Ссылка на первую часть.


Веб-потоки (web streams) — это стандарт для потоков (streams), который поддерживается всеми основными веб-платформами: веб-браузерами, Node.js и Deno. Потоки — это абстракция для чтения и записи данных последовательно, небольшими частями из любого вида источника — файлов, данных, находящихся на сервере, и т.д.


Например, глобальная функция fetch (которая используется для загрузки онлайн-ресурсов) асинхронно возвращает ответ (Response), содержащий свойство body с веб-потоком.


В данной статье рассматриваются веб-потоки в Node.js, но то, о чем мы будем говорить, применимо к любой поддерживающей их платформе.

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

Информация

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