Сравнение gRPC с OpenAPI https://www.redhat.com/en/blog/comparing-openapi-grpc c бонусом в виде подборки статей внутри. Хотя мне так и не хватает проекта, где один и тот же магазин книг/petstore будет представлен в трех форматах - gRPC, OpenAPI, GraphQL. Если знаете, поделитесь
Redhat
Comparing OpenAPI with gRPC
Are you still coding your API client libraries by hand? Is your manually maintained API documentation drifting away from what was actually implemented? You may be interested in reviewing the two popular technologies that solve this problem. In this article…
Поделюсь ссылкой на понравившийся доклад. Точнее, что еще ценнее, ссылкой на его отшлифованную расшифровку https://habr.com/en/company/oleg-bunin/blog/594179/ Доклад, в общем-то, не открывает америку, не презентует новую концепцию. Но при этом будет полезен тем, кто планирует переезд в микросервисы или просто симпатизирует.
Habr
Микросервисы: проблемы, которые мы не замечаем
Переехать в микросервисы можно двумя способами. Можно построить платформу — это надежно, но очень сложно. Или можно поднять Kubernetes и начать в него коммитить новые сервисы. Переезд проходит быстро...
И опять я с long-read-ами. Наткнулась на прикольную статью 2002ого года, оценивающую применимость и актуальность security evaluation, проведенного в 1974ом году над Multics. Кто не в курсе, то Multics - это отец Unix-а и через то прародитель большинства современных операционных систем. https://www.acsac.org/2002/papers/classic-multics.pdf Эх, и кто из Intel-а придумал растить стек не в том направлении? А то могли бы избавиться от ROP-а. Сам security evaluation report значительно длиннее, но интересен чтение с точки зрения формата и процедуры Security evaluation https://seclab.cs.ucdavis.edu/projects/history/papers/karg74.pdf
С курса по теоретическому инфобезу вынесла в числе прочего интересный вывод про избыточность. Чаще всего, говоря про избыточность мы подразумеваем redundancy (active/passive/spare) и представляем дополнительные копии сервиса/данных и думаем о защите от неожиданного выхода из строя одной копии. Но есть еще избыточность, которая diversity, заключающаяся в многообразии имплементаций и коллегиального решения на базе разных источников. Цель diversity - уберечься от ошибок каждой имплементации, и используется она в авионике и других life-critical системах. Redundancy используется для достижения availability, а также security (помним ведь cia = confidentiality, integrity, availability). Diversity нужна для safety и надежности системы. Но вот что любопытно: diversity - это один из редких моментов, где safety противоречит security, ведь обычно безотказное и надежное ПО - это еще и ПО без weakness/vulnerabilities, то есть безопасное ПО. Но использование разных имплементаций, хоть и снижает риск ошибки в принимаемом решении, увеличивает кодовую и элементную базу, а значит увеличивает вероятность эксплуатируемой ошибки. И по принципу weakest link снижает секурность всей системы. Такое вот занятное наблюдение
Знакомые стартовали новый канал по недетскому программированию, с обсуждениями тонкостей си, компиляторов, лоу-левел и хай-тек. Зашёл их разбор хоббийных ОС. https://t.me/justcodeit_channel/7
Telegram
Just code IT
Прошли времена, когда операционные системы, разработанные как хобби-проекты, могли впечатлить только хакеров. Все больше новых проектов ставят себе цель серьезнее, чем просто разобраться в тонкостях работы железа и низкоуровневом программировании. Появилось…
И снова размышление о версионировании REST API. Казалось бы, его место в URI и спор может быть только о том говорить api/v1 или api/1. Но возникают все новые варианты. Вариант 1 - версионировать тела запросов, то есть добавить версию в json. Недостатки: nginx/apigee не сможет роутить запрос на нужную версию инстанса, а значит несимпатичная compatibility логика оказывается в компоненте, увеличивая его сложность(и эту логику никто не любит ни писать, ни тестировать, ну и дальше вы понимаете). Вариант 2 - Microsoft-овский - версия в query parameters https://github.com/microsoft/api-guidelines/blob/vNext/Guidelines.md#12-versioning. Недостатки: routing по query params потребует их парсинга, что увеличит время процессинга; а кроме того усложнится клиент, ведь ему прийдется в явном виде каждый раз формировать query parameters (или надеяться что версия не поломается, а сколько людей не читают документацию). Вариант 3 - версия в header-е https://youtu.be/P0a7PwRNLVU . Routing получше, чем вариант 2, но сложность клиента опять же возрастает с теми же рисками что в варианте 2.
Вывод. Не ставить версию в URI могут только те команды, которые уверены либо в короткой жизни продукта либо в бессмертии технического лидера (или тотальной преемственности). Потому что клиенты будут забывать ставить версию, если их не насиловать на эту тему, а логика back-compatibility в компоненте постоянно будет источником багов. Да и зачем придумывать новое, когда есть понятное дефолтное для всех решение?
Вывод. Не ставить версию в URI могут только те команды, которые уверены либо в короткой жизни продукта либо в бессмертии технического лидера (или тотальной преемственности). Потому что клиенты будут забывать ставить версию, если их не насиловать на эту тему, а логика back-compatibility в компоненте постоянно будет источником багов. Да и зачем придумывать новое, когда есть понятное дефолтное для всех решение?
GitHub
api-guidelines/Guidelines.md at vNext · microsoft/api-guidelines
Microsoft REST API Guidelines. Contribute to microsoft/api-guidelines development by creating an account on GitHub.
Ух ты и ах. Google-овские книги по SRE доступны онлайн. https://sre.google/books/ Конечно, самая главная здесь книга https://sre.google/sre-book/table-of-contents/ Нигде я больше не видела такого внятного размышления про разницу между SLA, SLO и SLI https://sre.google/sre-book/service-level-objectives/
sre.google
Google SRE book- Comprehensive guide to site reliability
Explore the world of site reliability engineering with top-rated sre books. Find resources on SRE principles, best practices and the role of a reliability engineer
Выбор удобной структуры данных для хранения статистики - одна из классических задачек system design собеседования или algorithm & structures секции общедевелоперского интервью. В отличие от многих других, задача имеет практическое применение. Итак, дано: есть сервис, исполняющий какую-то работу. вопрос: как собирать информативную статистику по производительности его работы. ответ: avg, min, max информативными не являются. первая часть ответа состоит в том, что нам нужны персентили и нужно скользящее окно за последние N минут/секунд/временных интервалов. вторая часть ответа - это как сделать не наивную имплементацию. Наивная имплементация чаще всего сводится к списку величин с popup-ом (ну и может aging). продвинутый ответ включает hdr histogramme, forward decay и t-digest. А дальше все ушли читать про те из структур, что не знали 🙂 И интересно, может у вас какой-то другой ответ на эту задачку?
На Techlead Conf в этом году задалось немало хороших докладов. Сейчас слушала доклад про интервью SRE - организация секции troubleshooting и кратенько про секцию system design. Товарищ предусмотрительно описал доклад в статье. https://apolomodov.medium.com/troubleshooting-interview-3690b40a3d77 делюсь. И ещё слайдик от него же на почитать (среди ссылок ещё одно видение sysDesign interview - https://apolomodov.medium.com/system-design-interview-at-tinkoff-7bd97c20d082)
Как же красиво делает некоторые процессы Google. И выдает наружу готовые материалы для того, чтобы провести workshop, а потом завести процесс у вас. Вот сейчас наткнулась на их раздатки по SLO https://sre.google/resources/practices-and-processes/art-of-slos/ И вроде тема-то простая, но так иногда сложно ее объяснить. В общем, руки чешутся применить.
sre.google
Google SRE - Art of slo | customer reliability engineering
The art of SLO's workshop, crafted by google's customer reliability engineering team, teaches how to measure service reliability using SLIs and SLOs hands-on.
Forwarded from Ivan Begtin (Ivan Begtin)
Postman опубликовали обновление API Platform Landscape [1] с перечнем продуктов и трендов в мире API.
Ключевые тезисы оттуда:
1. Компании переходят к модели API-first
2. Гибридная архитектура и многооблачность
3. API как продукт
4. Взрывной рост продуктов API Gateway
5. Всё больше протоколов для API в активном использовании.
6. Всё больший сдвиг в сторону безопасности доступа к API.
Не все согласятся что экосистема API существует автономна, например, для меня это скорее часть экосистемы работы с данными, а Postman показывают её с выгодной для них стороны там где они лидеры, но, тем не менее, в части описанного, тренды изложены верно и сам обзор полезен.
Ссылки:
[1] https://blog.postman.com/2022-api-platform-landscape-trends-and-challenges/
#api
Ключевые тезисы оттуда:
1. Компании переходят к модели API-first
2. Гибридная архитектура и многооблачность
3. API как продукт
4. Взрывной рост продуктов API Gateway
5. Всё больше протоколов для API в активном использовании.
6. Всё больший сдвиг в сторону безопасности доступа к API.
Не все согласятся что экосистема API существует автономна, например, для меня это скорее часть экосистемы работы с данными, а Postman показывают её с выгодной для них стороны там где они лидеры, но, тем не менее, в части описанного, тренды изложены верно и сам обзор полезен.
Ссылки:
[1] https://blog.postman.com/2022-api-platform-landscape-trends-and-challenges/
#api
Слушала на днях старый доклад с Highload-а про отказоустойчивость. Кроме описания пары amazon кейсов 10-летней давности понравилась формула про “Маленький флот вызывает большой”: инициатирует передачу данных тот, у кого пропускная способность/количество инстансов меньше, иначе рискуем организовать отказ. И в целом размер "флота" можно было бы назвать универсальным критерием для выбора между push и pull моделью, если бы нас интересовал только сценарий отказа, без учета секурити, производительности и масштабируемости. В целом, неплохой доклад про проектирование систем на отказ и каскадные падения, если только не забывать про другие критерии и не брать решения as is, а понимать что все зависит от приоритетов QAS (quality attribute scenario).
https://habr.com/ru/company/oleg-bunin/blog/497332/
https://habr.com/ru/company/oleg-bunin/blog/497332/
Хабр
Хьюстон, у нас проблема. Дизайн систем на отказ
В 1970 г. американские инженеры запустили аппарат Аполлон-13 к Луне. На борту три батареи топливных элементов, беспокоиться не о чем, всё надежно и многократно продублировано. Но никто не мог...
Читала статью Бишопа про robust системы. Статья-то хорошая с примерами, что может поломаться при имплементации очереди и как это предотвратить. http://nob.cs.ucdavis.edu/bishop/secprog/robust.html Но как же она проста по сравнению с моим любимым докладом от Алексея Миловидова про robustness ClickHouse-а. https://www.youtube.com/watch?v=ooBAQIe0KlQ&list=PLH-XmS0lSi_zTZrols83QSxI3Q96dSbBm&index=93 Вывод - простые пробои/фейлы можно предотвратить и на уровне простеньких систем. Это девиз про "нормально делай - нормально будет". Но для того, чтобы быть устойчивым и против редких событий требуется уже дополнительные харденинги, на которые далеко не всякая компания готова потратится.
YouTube
Отъявленные баги и как их избежать на примере ClickHouse / Алексей Миловидов (Яндекс)
Приглашаем на конференцию Saint HighLoad++ 2024, которая пройдет 24 и 25 июня в Санкт-Петербурге!
Программа, подробности и билеты по ссылке: https://vk.cc/cuyIqx
--------
--------
При поддержке AvitoTech мы впервые публикуем все видео с HighLoad++ 2019…
Программа, подробности и билеты по ссылке: https://vk.cc/cuyIqx
--------
--------
При поддержке AvitoTech мы впервые публикуем все видео с HighLoad++ 2019…
Простые концепции даже при наличии corner case-ов могут значительно упрощать работу со сложными системами. Вот, например, правило 2х от Chromium https://chromium.googlesource.com/chromium/src/+/master/docs/security/rule-of-2.md : никогда не совмещайте (а) код написанный на небезопасных языках, (б) код не из песочницы, (в) недоверенный ввод. Это звучит просто, запоминается как CAP-теорема или триада ремонта("быстро, качественно, недорого - выбирай два из трех"). И имеет теоретическую базу: ребята проанализировали последние уязвимости проекта, откатегоризировали их и придумали как заткнуть основной источник ошибки. Очаровала меня аккуратность такого подхода. То, чего architecture hoisting добивается путем злостной машинерией, инженеры Chromium-а добились аккуратной теорией, заложенной прямо в мозг.
Воодушевляющая пятничная аналитика о падении больших ИТ проектов https://spectrum.ieee.org/lessons-from-a-decade-of-it-failures Читая эту статью, постоянно вспоминала "Путь камикадзе"(Death march) Йордана и его правила выживания в смертельных проектах. Берегите себя
IEEE Spectrum
Lessons From a Decade of IT Failures
The takeaways from tracking the big IT debacles of the last 10 years
Цитата дня: "The greatest limitation in writing software is our ability to understand the systems we are creating". больше вдохновения в видео John Ousterhout https://www.youtube.com/watch?v=bmSAYlu0NcY, который написал курс по software design для Стендфорда. Размышления об управлении сложностью на уровне кода весьма здравые, особенно когда добавляется измерение горящих дедлайнов.
YouTube
A Philosophy of Software Design | John Ousterhout | Talks at Google
John Ousterhout, Professor of Computer Science at Stanford University, discusses complex techniques on how to become a more confident coder. John is excited to announce that he just published the first edition of a new book on software design, based on material…
Сколько лет сталкиваюсь с производительностью, столько не перестаю удивляться людям, которые искренне верят одному замеру или среднему арифметическому из трех. Это кстати хороший аргумент, зачем учиться в вузе. Если ты ИТ-шник - самоучка, то на уровне логики среднее арифметическое если не из трех, то из 10 замеров уже неплохо. Дальше тебе объяснят и научат (если ты обучаемый), а может побьют и посмеются (и тогда ты точно научишься, к сожалению), но первые твои N заходов к снаряду пройдут впустую. А вот учась в вузе на ИТ-шника, ну не сможешь ты миновать мат стат и тер вер. Ну никак. И будешь ты знать распределение Стьюдента. и mean для тебя будет ни в коем случае ни avg, а мат ожидание, к которому прилагается дисперсия и никак иначе. А поскольку я почти в каждом посте делюсь ссылкой, вот и здесь приложу книжку от Стаса Протасова по верхам той математике, которая нужна для программистов. MVP of MVP. https://habr.com/ru/articles/427395/
Хабр
«Давайте объясню: или зачем программисту математика». Книга о том, как не скучать на лекциях по математике
TL;DR Небольшая книжка про математику для программистов. Электронный и бумажный вариант по ссылке . Я преподаю в университетах уже 9 лет. За это время студенты изменились. Моё субъективное впечатление...
Читая книгу по производительности систем от Грегга Брендана https://ozon.ru/t/X30XowG , лишь спустя неделю вспомнила, где я видела это имя и фамилию. Он автор всеобъемлющей картинки про зоопарк Линуковсого перф тулинга. http://www.brendangregg.com/Perf/linuxperftools.png Сама книга весьма занятная. Я, конечно, ожидала большей методологии, рассказов о способах повышения достоверности измерений и отсечении фантомных деградаций. Но автор весьма практично размышляет - от USE (utilization-saturation-error) метода собственного изобретения до blame-someone-else антипаттерна. Ну и еще в книге есть прекрасные таблички (относящиеся к методологии adhoc checklist - это типа что нужно проверить суппорту когда система тормозит)
В очередной раз поною о неопределимости и неназываемости quality attribute-ов. Вот громадный спиcок resilience тактик https://insights.sei.cmu.edu/blog/system-resilience-part-5-commonly-used-system-resilience-techniques/ Среди них находим относящиеся к robustness, availability, security, debuggability. И я не о том, что тактики неправильно перечислены. Но о том, что одни и те же тактики используются для разных целей. Кстати, обсуждая этот список, придумали полезное мыслительное упражнение - окинуть взором список тактик и попробовать применить их к компоненту/системе. Для этого ответить на следующие вопросы: (1) как это сделать (что получится при скрещивании ежа и ужа, и куда в вашу систему запихнуть, например, watchdog), (2) что от этого получим в терминах QA-ов (доступность, стабильность, отказоустойчивость), (3) нужно ли это или вы используете другую тактику для данной проблемы? По результатам такого упражнения может прийти два рода озарений - "нам полезна тактика Х" и "у нас не проработан сценарий Y". Удачи!
SEI Blog
System Resilience Part 5: Commonly-Used System Resilience Techniques
If adverse events or conditions cause a system to fail to operate appropriately, they can cause all manner of harm to valuable assets. As I outlined in previous posts in this series, system resilience is important....
Написали статью о карьере архитектора в стиле геймдева https://habr.com/ru/companies/kaspersky/articles/842244/
Хабр
Спидран карьеры software-архитектора
О software-архитекторах сейчас не говорит только ленивый. По мере усложнения структуры современных приложений команды разработки все больше нуждаются в «дирижере» для своего «оркестра», в специалисте,...