== UDP против TCP, или Будущее сетевого стека
https://youtu.be/aXYJlizk3CQ
малый буфер - беда с пропускной
большой буфер - беда с лэтенси
для юдп протокола можно гибко настроить что бы не тратить ресурсы и утилизировать сеть на лету
Flow control - говоришь сколько у тебя осталось в буфере. если превысить - пакет теряется. пример бэкпроэшер
любой роутер может сам начать дропать пакеты сам!
Congestion control
Cubic - дожидается потери пакета
BBR - смотрит на размер буфера (оч эффективен для видео)
jitter (неравномерность прихода пакетов) часто подгаживает для ББР
увеличивайте ACK!!!
мультиплексирование по ТЦП не всегда эффективно, когда пакет в начале потерялся, то другие назевисимые от первого всеравно ждут
! Включить в NGINX TFO - TCP FAST OPEN
! Включить TLS 1.3
UDP может в Zero RTT
! не забыть про "NAT unbinding"
! если пакеты проредить то потеря меньше
! бери MTU=1350 и не парься
https://lwn.net/Articles/655299/
https://youtu.be/aXYJlizk3CQ
малый буфер - беда с пропускной
большой буфер - беда с лэтенси
для юдп протокола можно гибко настроить что бы не тратить ресурсы и утилизировать сеть на лету
Flow control - говоришь сколько у тебя осталось в буфере. если превысить - пакет теряется. пример бэкпроэшер
любой роутер может сам начать дропать пакеты сам!
Congestion control
Cubic - дожидается потери пакета
BBR - смотрит на размер буфера (оч эффективен для видео)
jitter (неравномерность прихода пакетов) часто подгаживает для ББР
увеличивайте ACK!!!
мультиплексирование по ТЦП не всегда эффективно, когда пакет в начале потерялся, то другие назевисимые от первого всеравно ждут
! Включить в NGINX TFO - TCP FAST OPEN
! Включить TLS 1.3
UDP может в Zero RTT
! не забыть про "NAT unbinding"
! если пакеты проредить то потеря меньше
! бери MTU=1350 и не парься
https://lwn.net/Articles/655299/
== ТОП ошибок в инфраструктуре, мешающих высоким нагрузкам
https://youtu.be/3fJ5ptx5g7M
1) отсутствие транзакций и куча маленьких запросов в диск
2) нерабочие индексы и фулсканы
3) SELECT * - не проблема. но упретесь в сеть к базе в какой то момент
4) внешний коллл без кэша
5) крон пораждает потенциальные спящие процессы. ВЫСТАВЛЯЙТЕ МАКСИМАЛЬНОЕ ВРЕМЯ ВЫПОЛНЕНИЕ ЗАДАНИЯ!!!!
6) РАЗДЕЛЯЙ вебсервер для приложения и для статики!!!!
7) не делать ссессии в файлах. юзайте редис !
8) не делать СТЕЙФУЛ код.
9) не юзать скулайт для нагрузки
10) храните в с3 файлы а не на локальном сервере
11) КЭШИРУЙ ВСЕ что можно
12) храните между запросами соединение с БД. не делайте на запрос каждый раз новый коннекшн. прокся PGBouncer решает вопрос
13) TIME_WAIT сокеты мешают, казалось бы.
включить
15) МОНИТОРИНГ !!!!
https://youtu.be/3fJ5ptx5g7M
1) отсутствие транзакций и куча маленьких запросов в диск
2) нерабочие индексы и фулсканы
3) SELECT * - не проблема. но упретесь в сеть к базе в какой то момент
4) внешний коллл без кэша
5) крон пораждает потенциальные спящие процессы. ВЫСТАВЛЯЙТЕ МАКСИМАЛЬНОЕ ВРЕМЯ ВЫПОЛНЕНИЕ ЗАДАНИЯ!!!!
6) РАЗДЕЛЯЙ вебсервер для приложения и для статики!!!!
7) не делать ссессии в файлах. юзайте редис !
8) не делать СТЕЙФУЛ код.
9) не юзать скулайт для нагрузки
10) храните в с3 файлы а не на локальном сервере
11) КЭШИРУЙ ВСЕ что можно
12) храните между запросами соединение с БД. не делайте на запрос каждый раз новый коннекшн. прокся PGBouncer решает вопрос
13) TIME_WAIT сокеты мешают, казалось бы.
включить
net.ipv4.tcp_tw_reuse = 1
14) плохой канал . могут быть проблемы в коммунальных инфраструктурах сети. юзать надо ВЫДЕЛЕННЫЕ СЕРВЕРА15) МОНИТОРИНГ !!!!
== Нарушаем принцип подстановки Лисков и смотрим, что получилось
https://youtu.be/hUAQXej88f8
еще раз = Не нарушайте интерфейсы при наследовании !
Если надо изменить интерфейс - иди нафиг, создай новый класс. так или иначе это приведет к обязательно условности в проектных знаниях! а это нужно сокращать а не ростить на проектах. сделай лучше это явно отдельным типом!
https://youtu.be/hUAQXej88f8
еще раз = Не нарушайте интерфейсы при наследовании !
Если надо изменить интерфейс - иди нафиг, создай новый класс. так или иначе это приведет к обязательно условности в проектных знаниях! а это нужно сокращать а не ростить на проектах. сделай лучше это явно отдельным типом!
YouTube
Нарушаем принцип подстановки Лисков и смотрим, что получилось
#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - https://news.1rj.ru/str/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
Основной канал для общения и публикации новых видео - Телегарм - https://news.1rj.ru/str/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
BufWriter<Master<'_>>
== UDP против TCP, или Будущее сетевого стека https://youtu.be/aXYJlizk3CQ малый буфер - беда с пропускной большой буфер - беда с лэтенси для юдп протокола можно гибко настроить что бы не тратить ресурсы и утилизировать сеть на лету Flow control - говоришь…
socket sendmsg MSG_ZEROCOPY
https://lwn.net/Articles/655299/
https://lwn.net/Articles/655299/
== Компрессия (видео 15) | Теория информации
https://youtu.be/tOSI5IjomN0
https://youtu.be/tOSI5IjomN0
YouTube
Компрессия (видео 15) | Теория информации | Программирование
#ПрограммированиеJavaScript
Чем ограничена компрессия данных?
Следующее видео: https://www.youtube.com/watch?v=bSIDrbtQlDw&list=PLxGo9dxQkqWA3LPdLogAWG1-NKzEcpZZL&index=16
Предыдущее видео: https://www.youtube.com/watch?v=e8GzCI8LMYA&list=PLxGo9dxQkqWA3LPdLogAWG1…
Чем ограничена компрессия данных?
Следующее видео: https://www.youtube.com/watch?v=bSIDrbtQlDw&list=PLxGo9dxQkqWA3LPdLogAWG1-NKzEcpZZL&index=16
Предыдущее видео: https://www.youtube.com/watch?v=e8GzCI8LMYA&list=PLxGo9dxQkqWA3LPdLogAWG1…
== Цепи Маркова
https://youtu.be/FROlGrwo-oo
если каждое состояние автомата достижимо то отношение исходов стремится к равновесию. количество песещений каждого состоянию будет стремиться к предсказуемой вероятности.
само представление о последовательности случайных состояний в виде состояний и переходов между ними называется цепью Маркова
== Математическая теория связи
https://youtu.be/o8wHGn8_zao
.
https://youtu.be/FROlGrwo-oo
если каждое состояние автомата достижимо то отношение исходов стремится к равновесию. количество песещений каждого состоянию будет стремиться к предсказуемой вероятности.
само представление о последовательности случайных состояний в виде состояний и переходов между ними называется цепью Маркова
== Математическая теория связи
https://youtu.be/o8wHGn8_zao
.
YouTube
Цепи Маркова (видео 12) | Теория информации | Программирование
#ПрограммированиеJavaScript
Цепь Маркова — последовательность случайных событий, в которой вероятность наступления каждого события зависит от состояния, достигнутого в предыдущем событии.
Следующее видео: https://www.youtube.com/watch?v=o8wHGn8_zao&list=…
Цепь Маркова — последовательность случайных событий, в которой вероятность наступления каждого события зависит от состояния, достигнутого в предыдущем событии.
Следующее видео: https://www.youtube.com/watch?v=o8wHGn8_zao&list=…
== Коды с обнаружением ошибок
https://youtu.be/Fm0jfvzyM54
FEC - Forward error correction
- увеличение битов четности
- код хэмминга
- коды рида-соломона
- циклический избыточный код (CRC) - только для детектирования ошибок
Простые Биты четности = надежно но оч мусорно
на 8 бит имеет 6 бит избыточных
коды хэмминга
7,4 15,11 31,26
исправляют одну ошибку
обнаруживает две ошибки
2-4=>3изб
5-11=>4изб
12-26=>5изб
27-57=>6изб
Циклический избыточный код (CRC)
- добавляется CRC-size нулей
- XOR первых бит инф размером в полином CRC
- первые нули отбрасываются и сдвигается.
- повторяется с п2 до заполнения размерности CRC
Коды Рида-Соломона
Кодирование:
- умножение на полином G(x) (берется из полей Голуа)
- добавляется 2т нулей
- деление на G(x)
- остатоок от деленения и есть RS-код
Декодирование:
- деление на G(x)
- ЕСЛИ остаток равен 0 ТО нет ошибок
= МИНУС - ВЫСОКИЕ ЗАТРАТЫ РЕСУРСОВ
https://youtu.be/Fm0jfvzyM54
FEC - Forward error correction
- увеличение битов четности
- код хэмминга
- коды рида-соломона
- циклический избыточный код (CRC) - только для детектирования ошибок
Простые Биты четности = надежно но оч мусорно
на 8 бит имеет 6 бит избыточных
коды хэмминга
7,4 15,11 31,26
исправляют одну ошибку
обнаруживает две ошибки
2-4=>3изб
5-11=>4изб
12-26=>5изб
27-57=>6изб
Циклический избыточный код (CRC)
- добавляется CRC-size нулей
- XOR первых бит инф размером в полином CRC
- первые нули отбрасываются и сдвигается.
- повторяется с п2 до заполнения размерности CRC
Коды Рида-Соломона
Кодирование:
- умножение на полином G(x) (берется из полей Голуа)
- добавляется 2т нулей
- деление на G(x)
- остатоок от деленения и есть RS-код
Декодирование:
- деление на G(x)
- ЕСЛИ остаток равен 0 ТО нет ошибок
= МИНУС - ВЫСОКИЕ ЗАТРАТЫ РЕСУРСОВ
== SPI- и I2C-интерфейсы
https://youtu.be/hp1UoVd37AY
Serial Peripheral Interface
- Полный дуплекс
- распределенный кольцевой регистор
MISO - Master In Slave Out
MOSI - Master Out Slave In
SCK - Serial Clock
SS - Slave Select (chip select) - one own wire for each slave
- могут быть подключены независимо = все читают все биты к любом слэйву но реагируют пока нет SS
- могут быть каскадное (кольцевое), передается через каждое устройство последовательно (медленно)
= МИНУС: ОТСУТСТВУЕТ КОНТРОЛЬ НА ЛИНИИ (в случае разрыва MISO или MOSI не понятно это устройство отдает или порван провод) - нужно кодирование !
= МИНУС: НЕВЫСОКАЯ ДАЛЬНОСТЬ ПЕРЕДАЧИ
I2C - Inter Integrated Circuit
SDA - DATA
SCL - CLOCK
- до 400кбсек
- сигнал может меняться только когда клок = 0
- у каждого устройства свой 7бит адрес
- на передачу нужно всегда 9бит
- СТАРТ_АДРЕС_0 - передача ИЛИ СТАРТ_АДРЕС_1 - считывание
- ACK
- 8 байт данных
- ACK (или остановка получения)
- 8 байт данные
....
ПЛЮС: можно менять устройства на горячую
ПЛЮС: простота
ПЛЮС: высокая распространенность
ПЛЮС: 2 провода всего
МИНУС: полудуплекс
МИНУС: каждый байт надо подтверждать
МИНУС: низкоскоростная сеть
МИНУС: ограничение это емкость ! максимум 400пф
МИНУС: при нуле ест батарейку
МИНУС: если одно из устройств в сети здохло - вся сеть здохла
МИНУС: бывает очень сложно выйти из блокировки для большого числа МК
https://youtu.be/hp1UoVd37AY
Serial Peripheral Interface
- Полный дуплекс
- распределенный кольцевой регистор
MISO - Master In Slave Out
MOSI - Master Out Slave In
SCK - Serial Clock
SS - Slave Select (chip select) - one own wire for each slave
- могут быть подключены независимо = все читают все биты к любом слэйву но реагируют пока нет SS
- могут быть каскадное (кольцевое), передается через каждое устройство последовательно (медленно)
= МИНУС: ОТСУТСТВУЕТ КОНТРОЛЬ НА ЛИНИИ (в случае разрыва MISO или MOSI не понятно это устройство отдает или порван провод) - нужно кодирование !
= МИНУС: НЕВЫСОКАЯ ДАЛЬНОСТЬ ПЕРЕДАЧИ
I2C - Inter Integrated Circuit
SDA - DATA
SCL - CLOCK
- до 400кбсек
- сигнал может меняться только когда клок = 0
- у каждого устройства свой 7бит адрес
- на передачу нужно всегда 9бит
- СТАРТ_АДРЕС_0 - передача ИЛИ СТАРТ_АДРЕС_1 - считывание
- ACK
- 8 байт данных
- ACK (или остановка получения)
- 8 байт данные
....
ПЛЮС: можно менять устройства на горячую
ПЛЮС: простота
ПЛЮС: высокая распространенность
ПЛЮС: 2 провода всего
МИНУС: полудуплекс
МИНУС: каждый байт надо подтверждать
МИНУС: низкоскоростная сеть
МИНУС: ограничение это емкость ! максимум 400пф
МИНУС: при нуле ест батарейку
МИНУС: если одно из устройств в сети здохло - вся сеть здохла
МИНУС: бывает очень сложно выйти из блокировки для большого числа МК
YouTube
2. SPI- и I2C-интерфейсы
== Код Хэмминга. Коррекция ошибок
https://youtu.be/jHbc3042vuc
Я ХРЕНЕЮ в мобильной сети на 64 бит информации 76 избыточные-контрольные
чем меньше ошибок - тем лучше качество - инженерная хитрость
неприрывный контроль качества - задача мобильной сети. контроллер-координатор базовых станций говорит какая базовая станция будет принимать конкретный телефон. по метрике ошибок от девайса
https://youtu.be/jHbc3042vuc
Я ХРЕНЕЮ в мобильной сети на 64 бит информации 76 избыточные-контрольные
чем меньше ошибок - тем лучше качество - инженерная хитрость
неприрывный контроль качества - задача мобильной сети. контроллер-координатор базовых станций говорит какая базовая станция будет принимать конкретный телефон. по метрике ошибок от девайса
YouTube
Код Хэмминга. Коррекция ошибок
Корректирующие коды находят применение порой в самых неожиданных местах. Как с этим всем связана эстафетная передача сигнала?
Статьи на Яндекс Дзен: https://zen.yandex.ru/id/5ebe63d184a8a27314377e2b
Частотная модуляция: https://youtu.be/_-T0NRi0lSM
FM демодулятор:…
Статьи на Яндекс Дзен: https://zen.yandex.ru/id/5ebe63d184a8a27314377e2b
Частотная модуляция: https://youtu.be/_-T0NRi0lSM
FM демодулятор:…
короч советую канал
Академия разработчиков
https://www.youtube.com/channel/UCgzmIWuaCfpTpx3LuQ2dHEg/videos
тут много обзоров на технологии связи, ЦОС, алгоритмы, архитектуры, и другое, я залип нафиг
Академия разработчиков
https://www.youtube.com/channel/UCgzmIWuaCfpTpx3LuQ2dHEg/videos
тут много обзоров на технологии связи, ЦОС, алгоритмы, архитектуры, и другое, я залип нафиг
== Тактовая синхронизация
https://youtu.be/HGFl5P9ThR8
- внеканальная синхронизация - отдельный провод синхронизации
- внутриканальная синхронизация
фазовый рассинхрон - беда в сети. секундомер не поможет если ты отсчет взял не от туда
приемник никогда не угадает частоту отправителя - т.к. есть уход опорных генераторов что у приемника, что у отправителя
= снос параметра
подходит и для оптоволокна и для коаксиального кабеля
https://youtu.be/HGFl5P9ThR8
- внеканальная синхронизация - отдельный провод синхронизации
- внутриканальная синхронизация
фазовый рассинхрон - беда в сети. секундомер не поможет если ты отсчет взял не от туда
приемник никогда не угадает частоту отправителя - т.к. есть уход опорных генераторов что у приемника, что у отправителя
= снос параметра
подходит и для оптоволокна и для коаксиального кабеля
YouTube
Тактовая синхронизация
Если не знать точное время прихода бита, то невозможно судить о том. какой это был бит. Один из важнейших вопросов в передаче данных.
Статьи на Яндекс.Дзен: https://zen.yandex.ru/id/5ebe63d184a8a27314377e2b
Коррелятор: https://youtu.be/gxRXCF3YD9k
ПИ-регулятор:…
Статьи на Яндекс.Дзен: https://zen.yandex.ru/id/5ebe63d184a8a27314377e2b
Коррелятор: https://youtu.be/gxRXCF3YD9k
ПИ-регулятор:…