Pull to refresh
26
Karma
0
Rating
  • Followers 2
  • Following
  • Posts
  • Comments

Оптимизация микросервиса на Go на живом примере

Авито corporate blog Server optimization *Go *Microservices *
▇▅▄▅▅▄ ▇▄▅

Всем привет. Меня зовут Нещадин Иван, и я расскажу про оптимизацию одного из микросервисов Авито на Go. История построена вокруг различных инструментов, которые доступны в языке, и пойдёт от простых примеров к более сложным.


Читать дальше →
Total votes 41: ↑37 and ↓4 +33
Views 16K
Comments 40

Wi-Fi для мамы

Network technologies *Wireless technologies *Network hardware
Tutorial

Постановка задачи


Сделать Wi-Fi в 2+ комнатной квартире, при этом чтобы скорость в любой локации была не ниже 90Мбит/с на любом современном мобильном устройстве (IEEE 802.11ac).

Предполагаем, что наша типовая квартира содержит типовой набор пользователей:

  1. Условный Просто пользователь (используем базовый ЯндексDNS)
  2. Условная Боящаяся интернета бабушка (ЯндексDNS, без мошеннических сайтов и вирусов)
  3. Условный Студент 5 курса, которому нужен Интернет без ограничений (выход в Интернет через VPN в Европу, DNS 8.8.8.8)
  4. Условный Школьник 7 класса, которому по административным причинам надо выключать Интернет в 21:00 час по будням и в 22:00 часа по выходным (используем ЯндексDNS «Семейный» и по расписанию выключаем/включаем SSID).


Радио моделирование


Начну с того, что как правило, если в квартире бетонные стены и количество комнат 2 и более, то одной точкой доступа Wi-Fi будет не обойтись, ведь 20 Мбит/с на диване у окна сегодня нас уже не устраивают, а это значит что минимальный уровень сигнала на клиенском устройстве долже быть не ниже -65дБ.

Вот пример:
Ставим одну точку доступа в прихожей, в 5 ГГц диапазоне зона покрытия до -65дБ выглядит так:

image image
Поэтому надо добавить еще как минимум 2 точки доступа, получаем следующее:

image image
image

Так уже лучше, с количеством и расположением точек доступа определились.
Читать дальше →
Total votes 35: ↑32 and ↓3 +29
Views 35K
Comments 173

Руководство по FFmpeg libav

Edison corporate blog Working with video *Programming *Data visualization Studying in IT
Translation

Долго искал книгу, в которой было бы разжёвано, как использовать FFmpeg-подобную библиотеку, известную как libav (название расшифровывается как library audio video). Обнаружил учебник «Как написать видеоплеер и уложиться в менее чем тысячу строк». К сожалению, информация там устаревшая, так что пришлось создавать мануал своими силами.

Большая часть кода будет на C, однако не волнуйтесь: Вы легко всё поймёте и сможете применить на любимом языке. У FFmpeg libav уйма привязок ко многим языкам (в том числе и к Python и к Go). Но даже если Ваш язык прямой совместимости не имеет, всё равно можно привязаться через ffi (вот пример с Lua).

Начнём с краткого экскурса о том, что такое видео, аудио, кодеки и контейнеры. Затем перейдем к ускоренному курсу, посвященному использованию командной строки FFmpeg, и, наконец, напишем код. Не стесняйтесь переходить сразу в раздел «Тернистый путь изучения FFmpeg libav».

Есть мнение (и не только моё), что потоковое интернет-видео уже приняло эстафету от традиционного телевидения. Как бы то ни было, FFmpeg libav точно достоин изучения.

Оглавление


Читать дальше →
Total votes 65: ↑65 and ↓0 +65
Views 37K
Comments 10

Rust Embedded. Разработка под процессоры Cortex-M3 на примере отладочной платы STM32F103C8T6 (Black Pill)

Rust *Programming microcontrollers *
Sandbox
Привет! Хочу познакомить вас с проектом Rust Embedded. Он позволяет нам использовать язык программирования Rust для разработки под встроенные платформы (Embedded Linux / RTOS / Bare Metal).


В этой статье, мы рассмотрим компоненты, которые необходимы для начала разработки под микропроцессоры Cortex-M3. После этого напишем простой пример — моргание встроенным светодиодом.
Читать дальше →
Total votes 48: ↑47 and ↓1 +46
Views 17K
Comments 39

Измеряем на коленке пропускную способность памяти

High performance *IT systems testing *Computer hardware Video cards CPU
Translation
Несколько недель назад в разговоре за обедом коллега пожаловался на какой-то медленный процесс. Он подсчитал количество сгенерированных байт, количество циклов обработки, и в конечном счёте, объём оперативной памяти. Коллега заявил, что современный GPU с пропускной способностью памяти более 500 ГБ/с съел бы его задачу и не подавился.

Мне показалось, что это интересный подход. Лично я раньше не оценивал задачи производительности с такой стороны. Да, я знаю о разнице в производительности процессора и памяти.



Я знаю, как писать код, который активно использует кэш. Знаю примерые цифры задержки. Но этого недостаточно, чтобы сходу оценить пропускную способность памяти.
Читать дальше →
Total votes 26: ↑26 and ↓0 +26
Views 13K
Comments 21

Простое объяснение алгоритмов поиска пути и A*

Game development *Algorithms *Game design *
Translation
image

Часть 1. Общий алгоритм поиска


Введение


Поиск пути — это одна из тех тем, которые обычно представляют самые большие сложности для разработчиков игр. Особенно плохо люди понимают алгоритм A*, и многим кажется, что это какая-то непостижимая магия.

Цель данной статьи — объяснить поиск пути в целом и A* в частности очень понятным и доступным образом, положив таким образом конец распространённому заблуждению о том, что эта тема сложна. При правильном объяснении всё достаточно просто.

Учтите, что в статье мы будем рассматривать поиск пути для игр; в отличие от более академических статей, мы опустим такие алгоритмы поиска, как поиск в глубину (Depth-First) или поиск в ширину (Breadth-First). Вместо этого мы постараемся как можно быстрее дойти от нуля до A*.
Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Views 34K
Comments 11

Пишем операционную систему на Rust. Реализация страничной памяти (новый вариант)

System Programming *Rust *
Translation
В этой статье разберёмся, как реализовать поддержку страничной памяти в нашем ядре. Сначала изучим различные методы, чтобы фреймы физической таблицы страниц стали доступны ядру, и обсудим их преимущества и недостатки. Затем реализуем функцию преобразования адресов и функцию создания нового сопоставления.

Этот цикл статей опубликован выложен на GitHub. Если у вас какие-то вопросы или проблемы, открывайте там соответствующий тикет. Все исходники для статьи лежат в этой ветке.

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

Читать дальше →
Total votes 39: ↑39 and ↓0 +39
Views 6.3K
Comments 1

OS1: примитивное ядро на Rust для x86. Часть 3. Карта памяти, Page fault exception, куча и аллокации

Assembler *System Programming *Rust *CPU

Первая часть
Вторая часть


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


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

Читать дальше →
Total votes 24: ↑24 and ↓0 +24
Views 4.1K
Comments 12

OS1: примитивное ядро на Rust для x86. Часть 2. VGA, GDT, IDT

Assembler *System Programming *Rust *CPU

Первая часть


Первая статья еще не успела остыть, а я решил не держать вас в интриге и написать продолжение.


Итак, в предыдущей статье мы поговорили о линковке, загрузке файла ядра и первичной инициализации. Я дал несколько полезных ссылок, рассказал, как размещается загруженное ядро в памяти, как соотносятся виртуальные и физические адреса при загрузке, а так же как включить поддержку механизма страниц. В последнюю очередь управление перешло в функцию kmain моего ядра, написанного на Rust. Пришло время двигаться дальше и узнать, насколько глубока кроличья нора!


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

Читать дальше →
Total votes 66: ↑66 and ↓0 +66
Views 8.2K
Comments 16

OS1: примитивное ядро на Rust для x86

Assembler *System Programming *Rust *CPU
Sandbox

Я решил написать статью, а если получится — то и серию статей, чтобы поделиться своим опытом самостоятельного исследования как устройства Bare Bone x86, так и организации операционных систем. На данный момент мою поделку нельзя назвать даже операционной системой — это небольшое ядро, которое умеет загружаться из Multiboot (GRUB), управлять памятью реальной и виртуальной, а также выполнять несколько бесполезных функций в режиме многозадачности на одном процессоре.


При разработке я не ставил себе целей написать новый Linux (хотя, признаюсь, лет 5 назад мечтал об этом) или впечатлить кого-либо, поэтому особо впечатлительных прошу дальше не смотреть. Что мне на самом деле захотелось сделать — разобраться, как устроена архитектура i386 на самом базовом уровне, и как именно операционные системы делают свою магию, ну и покопать хайповый Rust.


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


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

Читать дальше →
Total votes 89: ↑88 and ↓1 +87
Views 17K
Comments 25

Изучаем Docker, часть 5: команды

RUVDS.com corporate blog Website development *Virtualization *
Translation
Tutorial
Сегодняшняя часть цикла материалов по Docker, перевод которого мы публикуем, посвящена командам Docker. Документация Docker содержит подробнейшее описание великого множества команд, но тот, кто только начинает работу с этой платформой, может в них и потеряться, поэтому здесь приведены почти два десятка самых важных команд для работы с Docker. Продолжая сложившуюся традицию, мы сравним команды с россыпью ягод.

Часть 1: основы
Часть 2: термины и концепции
Часть 3: файлы Dockerfile
Часть 4: уменьшение размеров образов и ускорение их сборки
Часть 5: команды
Часть 6: работа с данными

Читать дальше →
Total votes 34: ↑34 and ↓0 +34
Views 90K
Comments 6

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

Badoo corporate blog Configuring Linux *System administration *Server optimization *Server Administration *
Translation


Привет! Меня зовут Макс Матюхин, я работаю в SRV-команде Badoo. Мы в Badoo не только активно пишем посты в свой блог, но и внимательно читаем блоги наших коллег из других компаний. Недавно ребята из Dropbox опубликовали шикарный пост о различных способах оптимизации серверных приложений: начиная с железа и заканчивая уровнем приложения. Его автор – Алексей Иванов – дал огромное количество советов и ссылок на дополнительные источники информации. К сожалению, у Dropbox нет блога на Хабре, поэтому я решил перевести этот пост для наших читателей.

Читать дальше →
Total votes 78: ↑78 and ↓0 +78
Views 38K
Comments 7

Kali Linux: фильтрация трафика с помощью netfilter

RUVDS.com corporate blog Configuring Linux *System administration *Server Administration *
Translation
→ Часть 1. Kali Linux: политика безопасности, защита компьютеров и сетевых служб
→ Часть 2. Kali Linux: фильтрация трафика с помощью netfilter
→ Часть 3. Kali Linux: мониторинг и логирование
→ Часть 4. Kali Linux: упражнения по защите и мониторингу системы

Представляем вашему вниманию продолжение перевода главы 7 книги «Kali Linux Revealed». В прошлый раз речь шла о политиках безопасности и о защите компьютеров и сетевых служб. Этот материал включает в себя перевод раздела 7.4, который посвящён файрволу и фильтрации пакетов.

image
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Views 30K
Comments 6

Ардуино-совместимый ПЛК CONTROLLINO, часть 1

Smart House IOT
Впервые про программируемый логический контроллер по имени CONTROLLINO мне довелось узнать году еще в 2014-м в случайной переписке с человеком, который подбирал себе ПЛК для домашней автоматизации. Я ему рекомендовал какие-то классические модели, а он в ответ сообщил, мол, видел на кикстартере некий интересный проект под названием CONTROLLINIO. Это промышленный ПЛК, который программируется так же, как Arduino, в его родной IDE.

Тот парень работал php-программером и С++ был для него не проблема. Деньги и идеи имел, а желания изучать LAD или Codesys нет. В итоге отписался, что сделал предзаказ на CONTROLLINO и больше на связь не выходил.

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


Читать дальше →
Total votes 20: ↑18 and ↓2 +16
Views 44K
Comments 156

Кластер PostgreSQL высокой надежности на базе Patroni, Haproxy, Keepalived

System administration *Database Administration *DevOps *
Tutorial
Привет, Хабр! Встала передо мной недавно задача: настроить максимально надежный кластер серверов PostgreSQL версии 9.6.

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

Планируя кластер я проштудировал много статей, как из основной документации к PostgreSQL, так и различных howto, в том числе с Хабра, и пробовал настроить стандартный кластер с RepMgr, эксперементировал с pgpool.

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

В итоге где-то (уже не вспомню точно где) нашел ссылку на прекрасный проект Zalando Patroni, и все заверте…
Читать дальше →
Total votes 34: ↑34 and ↓0 +34
Views 83K
Comments 69

Ричард Фейнман: Характер физического закона. Лекция #4. Симметрия физических законов

Vert Dider corporate blog Popular science Physics

Мы продолжаем перевод и озвучку Мессенджеровский лекций Нобелевского лауреата по физике Ричарда Фейнмана, которые он прочитал в Корнеллском университете в 1964 году.

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

Всего в курсе 7 лекций, с предыдущими можно ознакомиться здесь.
Total votes 24: ↑24 and ↓0 +24
Views 9.8K
Comments 0

Как работает Git

Git *GitHub
Translation
В этом эссе описана схема работы Git. Предполагается, что вы знакомы с Git достаточно, чтобы использовать его для контроля версий своих проектов.

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

Текст разбит на серии команд, работающих с единым проектом. Иногда встречаются наблюдения по поводу структуры данных графа, лежащего в основе Git. Наблюдения иллюстрируют свойство графа и поведение, основанное на нём.

После прочтения для ещё более глубокого погружения можно обратиться к обильно комментируемому исходному коду моей реализации Git на JavaScript.
Читать дальше →
Total votes 110: ↑99 and ↓11 +88
Views 134K
Comments 38

Анонс публичной бета-версии NGINX Amplify

Nginx *DevOps *
Translation


Мы рады представить бету NGINX Amplify, нашего нового инструмента для мониторинга NGINX и NGINX Plus. Используя NGINX Amplify, вы сможете отслеживать и контролировать NGINX и приложения, которые он обслуживает. Новый инструмент позволит быстро решать проблемы с производительностью и доступностью отдельных сервисов и инфраструктуры в целом. На текущий момент он включает в себя гибко настраиваемую панель мониторинга с механизмом оповещений, а также систему автоматических рекомендаций по оптимизации производительности и улучшению безопасности.

Узнать больше и увидеть NGINX Amplify в действии можно записавшись на онлайн вебинар, который пройдет 13 июля в 20:00 по московскому времени.

Также, вы можете начать бесплатно использовать NGINX Amplify прямо сейчас, пройдя регистрацию.
Подробности
Total votes 26: ↑23 and ↓3 +20
Views 18K
Comments 64

Производительность приложений на основе PostgreSQL: явные и скрытые задержки

PostgreSQL *
Translation
Если вы пытаетесь оптимизировать производительность Вашего основанного на PostgreSQL приложения, Вы наверняка пользуетесь базовыми инструментами: EXPLAIN (BUFFERS, ANALYZE), pg_stat_statements, auto_explain, log_statement_min_duration, и т.д.

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

Но задумывалились ли Вы о задержках в сети? Игроки знают о ней, но имеет ли это отношение к Вашему серверу с приложением?

image

Читать дальше →
Total votes 17: ↑16 and ↓1 +15
Views 12K
Comments 3

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

Intel corporate blog High performance *Programming *Image processing *
Translation

Архитектура процессоров Intel становится все более ориентированной на ГП, что открывает удивительные возможности для резкого повышения производительности просто за счет разгрузки обработки мультимедиа с ЦП на ГП. Существует немало инструментов, доступных разработчикам для повышения производительности мультимедиа приложений. В числе этих инструментов есть бесплатные и простые в использовании.
В этой публикации вы найдете:
  • Обзор вычислительных архитектур и текущие возможности ГП Intel
  • Реализацию аппаратного ускорения с помощью FFmpeg
  • Реализацию аппаратного ускорения с помощью Intel Media SDK или аналогичного компонента Intel Media Server Studio (в зависимости от целевой платформы)
Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Views 11K
Comments 4

Information

Rating
Does not participate
Location
Нижний Новгород, Нижегородская обл., Россия
Date of birth
Registered
Activity