Another Tech Product – Telegram
Another Tech Product
6.37K subscribers
35 photos
1 file
289 links
Анализ, архитектура, менеджмент в IT

Вопросы сюда: @and_burakov
Download Telegram
#архитектура

В прошлом году мы запустили кейс-клуб, где регулярно собираемся и предаемся System Design’у здорового человека.

Что делаем:

• Разбираем реальные задачи из жизни, а не Key-Value Storage, URL Shortener и прочую дичь, которую вы никогда не будете пилить в реальной жизни

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

• Увеличиваем техническую насмотренность за счет кейсов из разных индустрий: финтех, ecomm, телеком и другие

Примеры кейсов:
- выпуск и доставка банковской карты
- история покупок и быстрый заказ на маркетплейсе
- программа лояльности в экосистеме

Ближайшая встреча в воскресенье, будет кейс три в одном: A/B-тесты, feature toggling, таргетированная реклама - все в одной архитектуре.

Ждем всех, кто хочет начать осознанно проектировать, а не судорожно вспоминать главы Хью на каждом проекте и собесе, заходите.
👍96👌1
Прекрасное рядом. До истории с /getClientInfo не дотягивает, но тоже хорошо.

Интересно, а с кэшированием у них нет проблем?
😁13🥴4
Модели потребления сообщений
- Чем топики отличаются от очередей?
- Если кратко - это разные модели потребления


Что такое модели потребления?
Здесь сложнее, т.к. это понятие не слишком популярно в индустрии. В данном контексте модель потребления - это логика работы брокера при передаче сообщения потребителю.

Мой вариант классификации, который подробно разбираю на вебинаре:
• Queue
• Pub-Sub
• Log

Модели определяет два признака:
• Сколько потребителей может прочитать одно сообщение
• Что происходит с сообщением после прочтения

Часто выделяют две модели вместо трех: queue-based, log-based - т.е. объединяют модели Queue и Pub-Sub. Мне эта версия кажется менее наглядной, но тоже хорошо подходит для осмысления вопроса. Можно познакомиться в статье или послушать подкаст о брокерах.

А топиками могут называть что угодно: как модель очереди в реббите, так и реализацию лога в кафке.

#брокеры #интеграция
20👍3
В душе я немного китаец, поэтому оставлю авторитетный прогноз на год грядущий.

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

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

Не упусти свой шанс
😁355🔥5😱1
#ненависть #оффтоп

Глядя на околообразование, все больше прихожу к мысли, что лицензировать нужно не школы и программы, а преподавателей и авторов. Чтобы как с адвокатом или хирургом - нет лицензии, не подходи к людям. И какую-нибудь Клятву Аристотеля придумать.
👍35😁22💯7🔥1🤔1
#API

В разговоре отличное сравнение возникло: уровни зрелости REST API это как нормальные формы БД - описывают подходы к проектированию, но никак не отвечают на вопрос эффективности. Зрелый и нормальный - не значит эффективный для текущей задачи.

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

Хотя само слово “зрелость” выбрано максимально неудачно - Ричардсон, иди думай еще.
👍18🔥14😁6💯1
#API #интеграция

GraphQL. Не язык ты мне


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

Причины понятные:
◽️Если автор человек - тщеславие и личный бренд
◽️Опенсорсное решение - продвижение в массы в целях компании
◽️Проприетарное решение - нужно больше золота

Обыкновенные маркетинг, если кратко.

Та же история “языком запросов к API”. Что говорят авторы:
“GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data”.

С их слов GraphQL это:
◽️язык запросов к API, что бы это не значило
◽️некий рантайм, в котором эти запросы обрабатываются

Начнем с языка, что видим:
1️⃣ Все запросы имеют определенную структуру, близкую к JSON
2️⃣ Ответы представлены в виде JSON, который имеет структуру из запроса с заполненными значениями
3️⃣ Не привязан к конкретному транспорту
4️⃣ Доступные действия и данные описывают с помощью своего Schema Definition Language - SDL

Ничего не напоминает?

Если брать п.1-3, то практически полной аналогией можно назвать JSON-RPC.

Если брать п.1-4, то все это SOAP.

Фактически, преред нами сетевой протокол уровня 7+ по модели OSI.

Ок, что там с рантаймом?
Для обработки запросов нужен некоторый компонент, который будет их парсить, валидировать, собирать/обновлять инфу из источников, публиковать SDL. Больше всех на слуху Apollo Server, но есть куча других опенсорсных и проприетарных решений.

Что, опять дежавю? Все так, тезисы полностью распространяются на тот же SOAP. Или gRCP, если сделать скидку на его бинарность.

В итоге получаем, что GraphQL это:
1️⃣ Протокол передачи данных
2️⃣ Технология с различными реализациями
3️⃣ Отчасти архитектурный подход к взаимодействию с фронтами

Вот и все, никакой мистики.

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

А так, честный HATEOAS тоже можно языком запросов назвать, это даже корректнее будет.

Кто хочет копнуть глубже, посмотрите наш стрим с Денисом Лукьяновым, там еще куча материалов в описании.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍281
#архитектура

Первое правило аритектурного клуба - никому не рассказывать о клубе.

Участница последней встречи нарушила его и дала развернутый непредвзятый фидбек в двух частях: раз и два. За что мы ей бесконечно благодарны.

◽️Кто еще сомневается, можете почитать и решить, нужно ли это вам.

◽️Кто не в теме - мы регулярно встречаемся в сисдизайн клубе, где проектируем архитектуру под реальные задачи, а не избитые выдуманные кейсы из книг и ютуба. В прошлый раз была система A/B-тестов, в следующий раз будет риалтайм борда, которые активно растут на волне импортозамещения в РФ. Следующий раз - это 16го февраля.

П - прозрачность.

Кейс-клуб - сисдизайн здорового человека.

P.S. Тайминги лечим, верим в победу.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
#API #интеграция

REST и GraphQL


Продолжая прошлый пост. Если подумать, в REST и GraphQL заложены схожие идеи:

Граф объектов

◽️Согласно HATEOAS клиент перемещается по графу от объекта к объекту за счет их слинкованности и выполняет необходимые действия над объектами. Таким образом достигается само документируемость API.

◽️GraphQL сразу предоставляет схему графа, по которой клиент одним запросом получает необходимые объекты, заранее зная их структуру и связи между ними.

Разница в работе с графом определяет, возникают ли у нас проблемы с избыточными вызовами: N+1, получение разнородных объектов в одном ответе. Это корневая причина появления GraphQL.

Представления объектов

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

Стандартизация допустимых действий
◽️HTTP-глаголы в для реста
◽️Query и mutations в GraphQL

При этом на практике GraphQL используют поверх HTTP, где он оказывается на нулевом уровне зрелости реста (или в RPC Swamp, как обозвал его Ричардсон), наследуя все проблемы RPC over HTTP.

В итоге идеи близки, реализации противоположны - забавный дуализм.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🥰1🤔1
#интеграция #брокеры

Ничего мы вам не гарантировали. Часть 2
Начало тут

Если еще можно смириться с тем, что exactly once доставки не существует, то с at least once начинается откровенная шизофрения.

Использование at least once гарантирует, что сообщение будет доставлено не менее одного раза, верно? Внимание, вопрос: сколько раз реально может быть доставлено сообщение?

Правильно, сколько угодно. Или вообще не придти. Почему так?

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

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

Хотя таких случаев должно быть немного, на больших объемах может выстрелить. Но важно помнить - все врут.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍93👎1
the-websocket-handbook.pdf
1.1 MB
Классная мини книга про вебсокеты.

• История и проблематика
• Детали работы протокола
• Масштабирование и отказоустойчивость

#интеграция
👍19💩1
#интеграция #архитектура

На фоне стабильной тенденции к переходу из аналитиков в архитектуру не менее стабильно возникает вопрос: “А как это делать вообще?”

Есть минимум два варианта:

— закопаться в книгах по архитектуре и штурмовать вакансии архитектора

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

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

Сначала копнем в работу сетей и инфры, чтобы понять влияние на выбор технологий. Здесь же разберемся, как и почему работает балансировка. Дальше начинаем думать о надежности, и учимся использовать circuit breaker’ы, адаптивные ретраи и другие паттерны отказоустойчивости. Где-то рядом придется задуматься о производительности и кэшировании, а там и выборе технологии под кэш. А потом потребуют развесистый бизнес-процесс реализовать на несколько сервисов, и вот вам проектирование распределенной системы с транзакциями.

Таким образом получаем трек: локальные интеграции -> интеграционная архитектура -> полноценный сисдизайн. Останется еще с хранилищами попрактиковаться.

По этой логике мы проектировали курс интеграция и архитектура в распределенных системах. Вместе пройдем путь от уверенной работы с API, до проектирования сложной интеграционной архитектуры в распределенных системах.
Первый поток зашел на удивление хорошо, некоторые успели даже собесы пройти в процессе.
👍11🔥6
#интеграция

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

Рега тут
🔥22
Эти выхи буду на WAW. Кто еще там? Го чай пить и знакомиться.
А завтра утром веду воркшоп по сисдизайну - заходите, чтобы посмотреть, чем мы в нашей архсекте занимаемся.
🔥9
Выложили запись собеса сисаналитика в Т-Банке. Наверное, лучший из всех, что видел на ютубе.

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

Категорически рекомендую как нанимающим лидам, так и кандидатам.

У меня лишь один вопрос остался: если вот это все делает аналитик, то чем вообще занимается разработка?
🔥25🤮65👍4
WAW 2025

На выхах добрался до WAW, который оставил неожиданно приятные впечатления. За счет небольших размеров получилось очень лампово и душевно, было время обсудить интересное. Только 1,5 дня мало((

Выделялись три основных темы: сисдизайн, лидерско-манагерское, AI. Трек сисдизайна получился особо удачно, спасибо Ане Вичуговой, Зое Степчевой и скромному мне. Надеюсь, никого не упустил?

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

Я же делал воркшоп по сисдизайну, где разбирали кейс доставки карты в сокращенном виде. Прошло бодро и активно, 5 из 6 команд дошли до конца, все довели решение до рабочей версии.

Несколько закономерностей, которые заметил еще в рамках нашего кейс-клуба:

Реализация НФТ
Характерное поведение аналитика: определить требования к нагрузке, доступности, масштабированию… и забыть про них. Не происходит валидации, как мы реализовали требования на уровне архитектуры, основное внимание уделяется бизнес сценариям. Не надо так;)

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

Масштабирование
Нагруженные сервисы, стоит запускать в нескольких экземплярах. Если нет данных, чтобы оценить нагрузку и ресурсы, можно начинать с двух в качестве дефолтного варианта. Дальше будем смотреть, сколько нужно добавить. Ну и не забыть о балансировке.

На другие секции удалось только мельком заглянуть, ничего конкретного не скажу.
Спасибо оргам и всем участникам за конфу, встретимся через год ❤‍🔥

#конференции
20🔥7👍2
Отправка событий от бека к фронту

Лень монтажить вебинар, пока вынесу с него интересный вопрос:

- Если WebSockets, HTTP/2, SSE позволяют слать сообщения с бека на фронт, то почему в основном говорят о WebSockets для двухстороннего взаимодействия?

Server Sent Events
Чтобы получать события с сервера клиент кидает GET-запрос с указанием в заголовках, что хочет сохранить соединение и получать события. Если сервер так умеет, то создается длительное соединение, и он начинает слать сообщения клиенту, пока кто-нибудь соединение не закроет.
Работает SSE поверх HTTP/1.1 и выше.

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

Если честно, я даже не знаком с людьми, которые использовали SSE. Нашел пару примеров:
⁃ В SuperJob их юзают просто чтобы не заморачиваться, как я понял.
⁃ Тут их используют для реализации subnoscriptions в GraphQL. Ну ок, есть логика

У вас был такой опыт? Поделитесь в комментах, плз.

HTTP/2
Взаимодействия между клиентам и сервером делятся на стримы. Каждый стрим состоит из одного request-сообщения и одного response-сообщения. Каждое сообщение может состоять из одного и более фреймов.

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

Получается, что внутри стрима мы можем слать фреймы в двух направлениях. НО - создать стрим может только клиент. Т.е. парадигма request-response в протоколе сохраняется.

В теории так сделать можно, но разрабы нас за это сожгут, так мы предлагаем ручками лезть в потроха протокола. Так можно и сразу с TCP напрямую работать. Или кто-нибудь знает готовые либы под это?

На практике проще сразу брать gRPC, который использует эту механику. Но это новый стек, новые проблемы.
Либо заюзать те же SSE.

Почитать: Хардкорный разбор HTTP/2

WebSockets
Полнодуплексный протокол, в котором мы устанавливаем соединение, клиент кидает GET запрос с нужными заголовками и вместе с сервером переключается на общение поверх вебсокетов. Клиент и сервер могут в произвольном порядке слать друг другу сообщения, пока кто-нибудь не закроет соединение
Работает поверх TCP.

Позволяет слать события только в обе стороны: сервер <—> клиент.
Сложнее в реализации, чем SSE, т.к. многие не умеют его готовить, нужно затаскивать новый протокол и тулинг в проект.

Почитать: основы вебсокетов, мини книга с погружением.

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

#интеграция
2🔥20👍10👌1
#манагерское

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

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

Как продакту, мне интересно делать идеальные продукты с совершенным UX и мегафичами, кастдевить пользователей и получать восторженный фидбек. И чтобы все было аналитикой обвешано - тестить дерзкие гипотезы и дизраптить рынок. Потому что это мегакруто. Правда еще выручку растить нужно, и чтобы экономика сходилась, иначе инвесторы денег не дадут. А тут эти технари с нытьем про техдолг и костыли.

Как предприниматель (у мен одного ощущение, что слово “бизнесмен” сейчас воспринимают как пошлый атавизм из 90х?) в гробу я видал всю эту вашу итшечку и смузи-фичи. Каждое утро я просыпаюсь и думаю, как бы вообще ничего не делать и побольше заработать. Вчера продал пару новых проектов крупным партнерам и собрал концепт нового стратегического направления. Нужно быстро запустить все за пару недель, максимум месяц. В смысле, какой проект важнее? Все важно, они издеваются что ли?! Даже сроки внятные назвать не могут.

Ну и что?
Чтобы заниматься наиболее интересными для себя вещами, придется понять и принять интересы других. И будет это ой как непросто. А задача манагера на разных уровнях - развивать это принятие и понимание в обе стороны.
🔥17👍102
#архитектура

Есть академические штуки, о которых много говорят, но непонятно, как их применять на практике.

Например, CAP-PACELC теорема. Она рассматривает синхронизацию между нодами хранилища и задает нам два простых вопроса:

— Если сбой, что важнее: консистентость или доступность?

— Если штатно, что важнее: консистентность или скорость отклика?

Круто, и что мне с этим делать? Я архитектуру кафки и постгри проектировать не собираюсь. Чтобы кто-то садился и задавался вопросом: “Какую же модель мне выбрать для сервиса заявок: CP или AP??” - тоже никогда не встречал. Тогда зачем мне это кроме шаблонных собесов?

А если посмотреть шире?
Наш сервис-система-компания - это миллионы-миллиарды объектов, которые постоянно меняют свое состояние. Меняют в рамках определенных правил, ограничений, процессов, которые ведут к бизнес-цели. Фактически, мы занимаемся непрерывной синхронизацией состояний этих объектов.

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

Есть пара: процессинг заказов и платежный сервис, что критичнее
— консистетность или доступность?
— консистентность или время отклика?

А для пары процессинг заказов и бухгалтерия?

Из ответов следует выбор модели strong / eventually consistency. А из этого следует, как будем управлять распределенными транзакциями: оркестрация, хореография, воркфлоу и т.д. А из этого, где нам нужны будут ретраи с идемпотентностью, а где события будем кидать.

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

Часто фундаментальные концепции из computer science не дают конкретные рекомендации для локальных задач, но позволяют расширить сознание, чтобы более системно и целостно подходить к проектированию.
👍151
#архитектура

Выложили записи докладов с ArchDays’2024.

Был живьем, но большую часть времени провел на архкате. Буду теперь досматривать.
10