BufWriter<Master<'_>> – Telegram
BufWriter<Master<'_>>
105 subscribers
451 photos
28 videos
34 files
1.7K links
https://www.patreon.com/alxe_master

Видео/статьи. Конспект и мои вольные комментарии по инженерии. тут только то, что считаю полезным для себя или других =)

#os, #cloud, #rust, #golang, #python, #javaScript, #cpp, etc
Download Telegram
📌 Шпаргалка по шаблонам проектирования

Сохраняй себе и делись с друзьями! Версия в исходном качестве снизу.

#cheatsheet
📌 Шпаргалка по алгоритмам и структурам данных

Сохраняй себе и делись с другом!

#cheatsheet
Разрабатываемые нами вычислительные системы по своей природе асинхронны. Есть задержки, есть переключения регистрови контекстов, задержки в сети и так далее. В двух словах разница между синхронным и асинхронным взаимодейсвтии в предположениях о времени.

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

Проектировать и тестировать проще синхронное взаимодействие. Но строить синхронную систему и организовать доставку сообщений за ограниченное время сложнее. Проектирование синхронное взаимодействия будет неизбежно включать в себя задержки и/или блокировки. Синхронность – это абстракция, требующая усилий по синхронизации процессов.

О чем всегда стоит помнить – это каскадные сбои при синхронных взаимодействиях. Какой-то процесс в глубине системы при блокирующих вызовах замедляется, поток на клиенте ждет и потребляет ресурсы/память, одновременно начинают происходить вертикальный (клиент клиента и так далее по цепочке ждут и потребляют ресурсы) и горизонтальный (если запросы повторяются и встают в ожидании, то соседние потоки ждут и потребляют ресурсы) отказы. Если это происходит в транзакции, то начинают тормозить базы данных и соответственно соседние потоки, все это распространяется по системе, cервера начинают перезагружаться, нарастает нагрузка на соседние ноды, они тоже падают. Всё останавливается. Все получают timeout error или нечто подобное. Экран гаснет.

Были в вашей практике каскадные сбои? =)

Хотел было заменить термин «процесс» на термин «сервис», отойти от строгости, но смысл тогда искажается, хотя Мартин Фаулер в своем определении микросервиса и указал, что «это подход, при котором единое приложение строится как набор небольших
сервисов, каждый из которых работает в собственном процессе…», но для точности следует отметить, что множество экземпляров, то есть процессов, остаются одним сервисом, даже если внутренняя, распределенная природа такой структуры скрыта за экспортируемым во внешний мир интерфейсом.
В далеком 1987-м Джон Захман предложил любую модель системы причислять к одному из трех фундаментальных типов: описание данных, описание функций или описание физической структуры системы.

Cловом архитектура обычно обозначают модели третьего типа. А вот решение о выделении фрагмента системы в отдельный модуль завязано на элементах моделей первых двух. Модуль включает в себя либо некоторый набор данных, либо некоторый набор функций.
Не так уж всё и сложно, правда?
Закон Конвея. Перевод статьи «How Do Committees Invent?»

Так как статья – не художественное произведение, да еще и написана в далеком 1968 году, ее перевод может (да, наверное, и должен) восприниматься как весьма косноязычный и местами непонятный, но так уж излагали мысли ученые в 68-м. Посчитал, что для научной статьи адаптивный перевод может привести к потере смыслов (хотя и понимаю, что на русском языке смысл может исказиться). Всячески рекомендую оригинал (ссылка в конце статьи), а переводом пользоваться только в том случае, если недостаточно знаний английского.

http://agilemindset.ru/закон-конвея-перевод-статьи-how-do-committees-invent/

Несколько цитат:

👉«никогда не бывает достаточно времени, чтобы сделать что-то правильно, но всегда есть достаточно времени, чтобы сделать это заново»

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

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

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

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

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

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

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

«Необходима философия управления дизайном систем, которая не основывается на предположении, что простое добавление рабочей силы повышает производительность.» – Закон Конвея именно об этом, хоть и звучит как «организация, проектирующая систему (в принятом здесь широком смысле), производит дизайн, являющийся копией коммуникационных структур этой организации»
Forwarded from Russian Association of Software Architects (Ivan Zakrevsky)
Raft - Understandable Distributed Consensus
- https://thesecretlivesofdata.com/raft/

- простая и понятная интерактивная визуализация алгоритма.

#DistributedSystems
📖 Метод QUERY возможно появится в протоколе HTTP. (Драфтом IETF RFC поделился Ivan Begtin в своем telegram-канале ). Мотивация такого расширения протокола достаточно очевидна. Так же, как и метод GET, новый метод QUERY будет безопасным и идемпотентным. Однако параметры запроса будут передаваться не в строке, а в теле запроса. Собственно, возможные ограничения длины адресной строки и были основной причиной использования для передачи запросов метода POST, который изначально был придуман для публикации команд.

Драфт RFC предусматривает два варианта ответа. Direct Response вернет результаты на ваш запрос в теле ответа. Indirect Response вернет 303 код, расшифровываемый как See Other, и гиперссылку в параметре Location по которой можно будет запросить результаты обработки запроса методом GET.

Подробности: https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/
🛠 Как использовать REST API: полное руководство для начинающих

Лонгрид о концепциях, особенностях стиля архитектуры и проблемах REST API.

https://proglib.io/sh/qlGMvA6ie8
Дуров рассказал о стоимости поддержки Telegram. Ну, не прям рассказал...

Он написал, что хватит премиум подписки от 2,5% пользователей. Которых сейчас 700 млн. При цене в $5 (а она примерно такова) получаем простое решение:

700 * 0.025 * 5 * 12 = 1050 (млн долларов)

Миллиард долларов в год стоит поддержка инфраструктуры Телеграма.
В принципе, мы так и прикидывали. На основе стоимости поддержки ФБ.
Так что наше удивление продолжается: Откуда деньги, Паша??

Долю Дурова при продаже VK оценили в $400 млн.
Еще $1,7 млрд Телеграм привлек от инвесторов в 2018 году на TON.
Еще $1 млрд год назад на размещении облигаций.
Так появились $3 млрд живых денег. И куда более высокие оценки состояния самого Дурова. Но то оценки.

Так откуда средства на поддержку мессенджера, затраты на которую дошли до $1 млрд в год? Деньги, где вы были 8 лет?
Крипта? Или что я упустил?
Ну, в принципе... В принципе, если последний столбец MAU соответствует затратам в $1 млрд/год.
То еще плюс второй справа столбец и пропущенный между ними (за 2021 год) потянут как раз на $3 млрд.
А предыдущие суммарно еще миллиарда на 2.
Ну да, можно и на крипте вытянуть было.

https://www.statista.com/statistics/234038/telegram-messenger-mau-users/
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Наглядный разбор принципа работы SSO (Single Sign-On)
Forwarded from Derp Learning
- сколько вам нужно ядер?
- да!

Сперто у @j_links
Forwarded from Библиотека программиста | программирование, кодинг, разработка
Перед вами «Пирамида код-ревью», цель которой — помочь сосредоточить внимание на тех частях, которые наиболее важны во время код-ревью (во всяком случае, на взгляд автора), а также на том, какие части можно и нужно автоматизировать.

Нижние части пирамиды должны лежать в основе код-ревью и занимать его большую часть.

Скачать оригинал
https://why-upgrade.depesz.com/show?from=11.13&to=13&keywords=

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