Всё о разработке | Леонид Ченский – Telegram
Всё о разработке | Леонид Ченский
640 subscribers
93 photos
7 videos
2 files
74 links
Рассказываю об актуальных проблемах, с которыми сталкивался в своей работе. Делюсь полезными материалами, курсами, статьями и просто своими мыслями.

GitHub: https://github.com/moguchev
Linkedin: https://www.linkedin.com/in/leonid-chenskii-b034a9229
Download Telegram
Стало интересно, что сейчас в Go community популярно использовать для генерации спецификации или кода из спецификации API в Go?
Anonymous Poll
14%
swagger-api/swagger-codegen
31%
go-swagger/go-swagger,
29%
swaggo/swag
31%
grpc-ecosystem/grpc-gateway
9%
OpenAPITools/openapi-generator
30%
oapi-codegen/oapi-codegen
🤔432👀2
Продолжаем опросы)

Второй год подряд ребята из DevCrowd проводят большое исследование Go-разработчиков:
• Что входит в обязанности и каких навыков не хватает
• Сколько в среднем зарабатывают в профессии в зависимости от грейда
• Какие инструменты, сервисы наиболее популярны
• Что читают, слушают и смотрят для профессионального развития.

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

👀Посмотреть результаты прошлого года
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👀2🔥1🆒1
Podlodka Go Crew снова в деле! Это онлайн-конференция, где обсуждаются актуальные темы для go-разработчиков.

В новом сезоне особое внимание уделяется архитектуре приложений на Golang. Сессии проводятся в удобное время — утром и вечером.

Чего ожидать?
- «От 1000 скриптов на Bash к (микро)сервисам на Go» — Максим Набоких поделится опытом миграции на Go в рамках крупнейшей kubernetes-платформы.
- «System design: Saga from zero to Temporal» — Антон Цитульский рассмотрит принципы оркестрации и хореографии, используя Temporal, и объяснит, как управлять бизнес-процессами в сложных системах.
- «Спецификации и код: Как выбрать правильный путь между генерацией и интеграцией?» — Леонид Ченский покажет плюсы и минусы разных подходов к работе с API-спецификациями и представит обзор инструментов, которые помогут с автоматизацией.

Билеты в продаже на сайте: https://podlodka.io/gocrew

Также делюсь с вами промокодом:

go_crew_4_drzJzG

Который даёт скидку в 500 руб💖
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥8👍321
ТРИ СПОСОБА РАБОТЫ С SQL БД В GO

В Go существует множество инструментов для работы с SQL базами данных. На данный момент я выделяю три основных подхода: автогенерация, ORM, и Query Builder-ы. Каждый из них предлагает свои преимущества и ограничения. Давайте я поделюсь своим мнением о каждом из них, чтобы понять, когда какой стоит выбирать.


1️⃣ Автогенерация
Автогенерация - генерация Go-кода на основе SQL-запросов. Данный подход чем-то напоминает работу со спецификациями API. Самый популярный инструмент на данный момент, который используется многими: sqlc. Он позволяет писать SQL-запросы, которые затем транслируются в чистый Go-код. Этот подход отлично подходит для случаев, когда требуется строгий контроль над SQL и высокая производительность.

Плюсы:
1. Статическая типизация: генерация строго типизированного Go-кода снижает вероятность ошибок и экономит время.
2. Высокая производительность: работает с «чистым» SQL, без лишних оберток.
3. Простота: нет необходимости изучать ORM или API библиотеки для написания запросов.
4. Поддерживает MySQL, PostgreSQL, SQLite.

Минусы:
1. Отсутствие гибкости: не подходит для сложных запросов с динамической логикой.

Когда использовать: если проект требует строгого контроля над SQL, и важна производительность.

2️⃣ ORM
Ох, сколько вопросов мне задавали про ORM-ки в Go... Большинство разработчиков пришедших в Go из других языков любят ORM и ждут, что в Go они тоже есть. Да они есть (к сожалению или к счастью). Но мне, как человеку, работавшему с ERP системами, где приходиломь писать огромные SQL запросы, на разработку которых могло уйти несколько дней, чтобы сделать его оптимальным, правильным да еще подобрать нужные индексы, ORM кажутся чем-то несерьезным (хотя возможно это не так). В общем новичкам я бы советовал вначале избекать ORM любой ценой.

Однака в Go, как я уже упомянул выше, есть ORM, и самая известная — GORM. GORM — фантастическая (как ее называют) ORM, предлагающая множество инструментов для работы с БД в стиле Active Record. Подходит для проектов, где требуется сложная логика запросов и удобная работа с моделями.

Плюсы:
1. Абстракция: значительно упрощает взаимодействие с базой данных (считайте что SQL, индексы вам знать не обязательно🙂).
2. Большая поддержка разного функционала (все-таки Gorm довольно давно развивается активно, так что там можно найти все что нужно)

Минусы:
1. Производительность: за абстракцию приходится платить сниженной производительностью.
2. Нужно погрузится в API библиотеки.

Когда использовать: отлично подходит для CRUD-приложений, где важнее скорость разработки, чем производительность.

3️⃣ Query Builder-ы

Query Builder-ы — незаменимая класика: гибкость, баланс и универсальность. Query Builder-ы (например, squirrel) позволяют писать SQL-запросы в Go-коде, сохраняя гибкость, но без излишней абстракции ORM. Это средний вариант между sqlc и GORM.

Плюсы:
1. Гибкость: удобно для динамических SQL-запросов.
2. Читаемость: позволяет строить сложные запросы пошагово.
3. Производительность: близка к ручному SQL, но проще в использовании.
4. Универсальность: легко встроится в любой проект, а API Query Builder-ов интуитивно понятны.
5. Низкий порог входа (если знаете SQL).

Минусы:
1. Типизация: не так безопасен, как sqlc, т.к. не генерирует типизированный код.
2. Требует понимания SQL и логики работы базы и индексов (ну а как без этого?)).
3. Не все Query Builder-ы cпособны осилить сложные запросы.
4. Для простых CRUD может стать утомительно писать одно и тоже (решается путем генерации шаблонного кода)

Когда использовать: оптимально для приложений со сложными, динамическими запросами.

Ставь 👍, если хочешь углубиться в эту тему поподробнее.
👍18🔥6👏2🙏21
Закрыт гештальт - мой первый контрибьют в "большой" OpenSource.

А вообще за последний год мне пришлось столкнуться с большим числом opensource проектов и погрузиться в них. Надеюсь сделаю когда-нибудь либу, которая наберет 1000 звезд на github😅

У кого есть принятые PR?)
🔥18322❤‍🔥1👍1👏1
В выходные записал практикум по gRPC. Оказалось, что 3 часов записи мало, чтобы уместить все темы и фишки😥
👍13🔥43👏1
Настало время постигать opensource и делать свои проекты. Хочу поделиться с вами своей реализацией менеджера транзакций: https://github.com/moguchev/transaction_manager (не претендует на 1000 звезд). Посмотрим хватит ли времени ее развивать дальше😅

Для тех, кто не знаком с тем, что такое менеджер транзакций и зачем он нужен в Go советую прочесть эту статью от Авито. В ней очень хорошо передана вся боль работы с транзакциями в коде и обяснено зачем в чистой архитектуре он нужен и какие проблемы решает.
752👍1🔥1
Как же быстро летит время...

Go исполнилось 15 лет! А кто застал работу на Go до 1.11?)
3🎉2🆒22
ЧТО БУДЕТ ПОСЛЕ МИКРОСЕРВИСОВ?

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

1️⃣Сложность управления. Увеличение количества микросервисов приводит к усложнению их координации, мониторингу и отладки. Каждый сервис требует отдельного управления, что увеличивает операционные затраты. Мониторинг становится по-настоящему сложной задачей, когда количество сервисов, инстансов БД и кешей переваливает за 10000.

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

3️⃣Сложность тестирования и отладки. Распределенная природа микросервисов затрудняет проведение интеграционного тестирования и отладки. Протестировать взаимодейтсие 2, 3, 4 сервисов еще вполне можно, но, когда фича затрагивает 10+ доменов, и в каждом домене еще по нескольку сервисов, учавствующих в цепочке взаимодействия, тестирование и координация интеграции превращается в тот еще квест)

4️⃣Снижение производительности из-за необходимости сериализации и передачи данных по сети между сервисами.

5️⃣Проблемы с управлением API, дороговизна изменения и актуализация API сервисов, передача лишних данных или наоборот недостаточных данных. У меня в сервисе был метод, на который было завязано более 80 других микросервисов, и потребовалось больше года, чтобы все клиенты смогли перейти на новый API.

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

Так, например, инженеры Google предложили разрабатывать приложения как логические монолиты, передавая их в автоматизированные среды выполнения, которые самостоятельно решают, где запускать рабочие нагрузки. По их словам, это позволило снизить задержки в 15 раз и сократить затраты до 9 раз. Для этого они разработали свой собственный фреймворк — Service Weaver

Команда Amazon Prime Video поделились своим опытом перехода от микросервисной к монолитной структуре для мониторинга видеопотоков, который привел к снижению операционных затрат на 90% и улучшению производительности.

Что это все значит? Да то, что ближайшие 2-3 года большие IT коммпании начнут пересматривать регламенты и подходы к разработке. Очевидно, мы будем наблюдать частичный возврат к монолитам и модульным монолитам. Разработчикам придется учиться работать с большой кодовой базой и уметь писать код так, чтобы в любой момент его можно было вынести на другой физический инстанс. В общем, господа разработчики, начинайте готовиться заранее 😉

От себя скажу, что эта тенденция реальная и она уже назревает и в Российских IT компаниях. Так что жду в следующем году на конференциях доклады касательно данного вопроса.
Please open Telegram to view this post
VIEW IN TELEGRAM
😨9👍652🔥1👏1
AI В ПОВСЕДНЕВНОЙ РАБОТЕ РАЗРАБОТЧИКА

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

Зато уже сейчас можно использовать все «блага цивилизации» (AI) и применять их в своей работе. Так, например AI-инструменты на подобие нашумевшего Github Copilot, можно встроить в IDE. Такие инструменты сильно ускоряют процесс разработки и сводят количество человеческих ошибок к минимуму. Если вас беспокоит вопрос безопасности вашей кодовой базы, то есть self hosted аналоги, например — tabby.

Также ChatGPT может стать реально вашим помощником, если научиться правильно пользоваться им (писать промты). Приведу плохой и хороший пример использования ChatGPT.

Задача: вам нужно интегрироваться с какой-то внешней системой (пусть это будет рассылка sms сообщений). У системы есть сайт с подробной документацией API. Правда, она текстовая, не в формате openapi, готовых SDK или клиентов на вашем языке нет…

Плохой пример: вы скармливаете ChatGPT ссылку на эту документацию и просите его, допустим, создать Go клиента к этой системе. С 99% вероятность ChatGPT вам выдаст, полурабочий код, который подойдет в качестве pet проекта для теста интеграции с системой, но никак не для enterprise разработки (банально эту будет тяжело поддерживать и вряд ли пройдет ревью от коллег). Поэтому дальше вам самим придется многое переписать, чтобы довести это до ума (или долго и упорно просить это сделать ChatGPT). Такой подход в лоб будет малоэффективным и ленивый разработчик быстро поплатится за то это🙂

Хороший пример:
Скоре всего, вы все же опытный и многоуважаемый разработчик. Ваш багаж знаний и опыт огромен, и, пожалуй, этим надо воспользоваться. Как бы вы интегрировались с системой по рассылке sms, не будь у вас ChatGPT? 🤔 «Если бы была openapi спецификация API, то я бы взял свой любимый инструмент кодогенерации, например oapi-codogen, сгенерировал клиента и готово! Имею поддерживаемый клиент с удобным API в коде»
Да, но у нас нет openapi спецификации… Тут на помощь и придет наш слуга — ChatGPT, который отлично подходит для рутинных задач. Заходим на страницу документации API. Сохраняем html страницы. Загружаем файл в ChatGPT и просим его перевести документацию в формат OpenAPI v3.0. Обязательно уточняем все наши пожелания (что обязательно должно попасть в спеку): какие методы, писать ли все коды ошибок, описание методов и моделей , приводить примеры и т.д. ChatGPT, как и разработчики, ленивый поэтому тут действует правило «Какое ТЗ, такой и результат». После этого у вас на руках готовая спецификация, и, если вдруг вы не работали с инструментами кодогенерации, можете также спросить у ChatGPT какие есть, и как с помощью них сгенерировать клиента. В нашем случае будет достаточно сделать //go:generate go run github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen --config=config.yaml ../../api.yaml. Готово!

В будущем AI ассистенты станут неотъемлемой частью нашей жизни. Я уверен, что от разработчиков потом будут требовать навыки умения работы с AI ассистентами. Почему? Да потому, что это ускоряет разработку, а значит повышает его эффективность, значит бизнес получает быстрее результат, значит быстрее получит потенциальную прибыль 💰
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥43🆒2
ВЫГОРАНИЕ — НАЧАЛО ЧЕГО-ТО БОЛЬШЕГО?

Добрый день, дорогие читатели!Хочу поделиться с вами своей историей о том, как я пришел к созданию курсов и преподаванию.

Когда я был мидлом, я брался за любые задачи, какой бы сложности они не были. Это был вызов, драйв, возможность прокачаться! Новые технологии, нестандартные задачи — всё это превращалось в увлекательную игру, где каждый шаг приносил чувство прогресса. Я постоянно читал книги, проходил курсы, изучал лучшие практики… В общем, я изучал всё, что можно было уже на «следующий день» применить в работе и испытать кайф от того, что задача сделана «по красоте». Конечно, тогда я часто овертаймил, но оно того стоило.

Когда меня повысили до сеньора, задачи стали сложнее, но мой подход оставался прежним: чем больше закрытых задач — тем больше удовольствия и пользы.
Но, как это часто бывает, однажды я перегорел. И даже трехнедельный отпуск не помог: работать больше не хотелось, задачи перестали приносить радость. Всё казалось однотипным: прикрутить кэш, отправить данные в брокер, шардировать таблицу, штамповать юнит-тесты… Я перестал чувствовать интерес и драйв.

В этот момент мне предложили поучаствовать в проекте Route256 — образовательной программе для разработчиков от Ozon. Я подумал: «Почему бы и нет? Хоть что-то новое»…

И знаете что? Меня затянуло! Сначала три потока Route256, потом три потока своих курсов, несколько докладов на конференциях — всё это перевернуло моё понимание работы. Одно дело изучать что-то для себя, и совсем другое — объяснять это другим. Ты начинаешь копать так глубоко, что не просто заучиваешь best practices, а понимаешь их корни: почему так, а не иначе? Что стоит за каждой рекомендацией? Это невероятно прокачивает твои знания.

Как говорится, хочешь разобраться в теме — попробуй объяснить её другим.

Сейчас я работаю над своим новым курсом по Go, и в планах — ещё много тем (где бы только найти на всё это время!). Ловлю настоящий кайф, когда удаётся простыми словами объяснить сложные вещи, а ещё больше радости приносит положительная обратная связь от коллег и учеников.

Был ли у вас подобный опыт выгорания или смена фокуса в карьере? Буду рад обсудить это в комментариях.
🔥1910👍432🤔1
Каждый второй go разработчик использует ChatGPT в своей работе согласно опросу dewcrowd.ru.

Интересная статистика, конечно, помогает понять основной тренд в индустрии.

Советую ознакомиться 🙂
10🔥4222
Появление 64-bit xid в PostgreSQL

Проблема долгих транзакций в PostgreSQL в основном была связана с 32 битным счетчиком транзакций. (Подробнее об этом написано в статье). Ребята и за PostgresPro первыми в мире занялись разработкой 64-bit xid.

Казалось бы, нужно просто поменять тип переменной, а не так все просто…
👍7🔥442
Вышла еще одна статья о кризисе микросервисной архитектуры в приложениях с AI функционалом. Следующие 2 года будут интересными и переломными, новые практики и технологии будут цениться больше остальных.

Пока я как и вы на знаю во что это выльется. Буду активно следить за трендами и рассказывать вам о них.
🔥9🤔3💯3👍1
Пора подводить итоги года)

Что ж, этот год был для меня очень насыщенным. Я завел свой телеграмм канал и набрал 350 (без одного😄) подписчиков! Честно, я думал, что с трудом наберу 100!
Спасибо вам, дорогие подписчики, за ваши реакции комментарии в постах.

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

С наступающим 2025 годом! Пусть он станет для всех нас годом новых возможностей и достижений! С праздником!
2🎉21👍64👏21
Как я перешел из продуктовой команды в инфраструктуру: итоги за год

Почти ровно год назад я сменил траекторию карьеры: из продуктовой команды, где я руководил двумя проектами в логистике, я перешел в инфраструктурную, став лидом команды в департаменте DBaaS.
Сейчас самое время подвести первые итоги.

Продуктовая разработка: скорость, highload и бесконечные встречи

В продуктовой команде я занимался двумя совершенно разными проектами:
1️⃣Highload-проект — ключевая часть логистики Ozon с жесткими требованиями:
🔍350k+ RPS, постоянные стресс-тесты, оптимизации и «танцы с бубном»
🔍минимальный Response Time (10-50ms 99q),
🔍высокая стабильность (особое внимание к тестированию и релизам),
🔍отсутствие downtime. Этот проект постоянно горел, и каждый день был похож на марафон: срочные задачи, дедлайны, стабильность любой ценой.
2️⃣Данные и аналитика — здесь highload сменился глубоким анализом. Нужно было переварить огромный бэклог от бизнеса, объединить данные из множества сервисов и создать стратегическое и уникальное решение, которое могло работать автоматизированно.

Работа была насыщенной: постоянные встречи с бизнесом, интеграции с соседними командами, контроль сроков. На одном дыхании мы запускали проекты и закрывали эпики. Но однажды я понял: все проекты для меня превратились в «перекладывание JSON -чиков из одного сервиса в другой». Завершение задач больше не приносило удовольствия.

Зачем я ушел в инфраструктуру?

На фоне выгорания мне вспомнился опыт работы с highload: Kafka, Redis, Postgres, Kubernetes, Go. Мне захотелось использовать этот опыт в более глубокой технической среде. Я поговорил с руководством, и мне предложили перейти в инфраструктурную команду, где предстояло:
🔍собрать команду с нуля,
🔍погрузиться в новые технологии,
🔍построить процессы с чистого листа.
Это был шанс выйти из зоны комфорта!

Чему пришлось учиться?
Мой продуктовый опыт оказался полезен, но этого было недостаточно. Мне пришлось:
🔍углубляться в Kubernetes, сети, Ansible;
🔍разбираться с CI/CD, observability;
🔍чтение документации, эксперименты, изучение чужого кода стали ежедневной рутиной.

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

Ключевые различия между продуктом и инфраструктурой

1️⃣Отсутствие формальных ролей
В инфраструктуре нет системных аналитиков, проектных менеджеров, скрам-мастеров. Ты делаешь всё сам: от сбора требований до проектирования. Это требует универсальности, четкого подхода к задаче и дисциплины, но одновременно дает большую свободу.
2️⃣Характер задач
В продукте сложнее понять, что конкретно хочет бизнес (он сам иногда не знает), а реализовать это — проще. Это похоже на игру в «Дженгу», где каждый новый блок должен не разрушить систему.
В инфраструктуре всё наоборот: ты знаешь, что нужно сделать, но реализация почти всегда — неизведанный путь. Приходится учиться на ошибках и жить с MVP.
3️⃣Роль команды
Инфраструктурные проекты требуют сильной синергии команды. Никто не знает всё, поэтому слаженная работа определяет успех. Также важно собрать экспертов своей области. Тут не получится уже взять джуна/мидла и научить его всему.
4️⃣Изменение фокуса
Появился баланс между встречами и временем на код. Ушли бесконечные митинги, зато добавились глубокие технические исследования.

Сложности и выводы

1️⃣Оценка результатов
В продукте успех проекта измеряется деньгами и масштабом влияния на пользователей. В инфраструктуре оценить значимость работы можно только спустя время, что добавляет неопределенности.
2️⃣Недостаток компетенций
Чувство, что ты знаешь недостаточно, никогда не покидает. Но я понял, что это нормально. Инфраструктура требует времени на освоение.
3️⃣Новая роль лидера
Быть тимлидом в инфраструктуре — это значит учиться у своей команды. Люди в команде часто знают больше, чем ты, и это правильно. Главное — уметь организовать их работу.

Итоги года

Год прошел стремительно. Чувствую ли я себя в своей тарелке? Скорее нет. Но я вижу перспективы и планирую 2025 год посвятить углублению экспертизы.
Please open Telegram to view this post
VIEW IN TELEGRAM
87🔥42👍1🆒11
Всё о разработке | Леонид Ченский
Как я перешел из продуктовой команды в инфраструктуру: итоги за год Почти ровно год назад я сменил траекторию карьеры: из продуктовой команды, где я руководил двумя проектами в логистике, я перешел в инфраструктурную, став лидом команды в департаменте DBaaS.…
⬆️Продолжение ⬆️

Больше книг, больше кода, больше экспериментов.
Признаться, иногда я скучаю по миру продуктовой разработки. Там была своя атмосфера: больше общения с бизнесом, больше видимого результата, чувствуешь себя значимым в команде. На неделю я бы с удовольствием вернулся в продукт. Но лишь на неделю)

Этот переход стал для меня настоящим вызовом. Если вы задумываетесь о смене направления в IT, знайте: это возможно. Главное — быть готовым учиться, ошибаться и адаптироваться.
Please open Telegram to view this post
VIEW IN TELEGRAM
72
Как пройти интервью по системному дизайну?

Доброе утро всем и с прошедшей первой рабочей неделей этого года!

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

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

Вообще есть 18 фундаментальных тем и понятий, которые хорошо бы знать:

1️⃣DNS (Domain Name System)
Как работают доменные имена и их преобразование в IP-адреса? Основа основ, которую часто любят спрашивать на собеседовании.

2️⃣Балансировка нагрузки (Load Balancer)
Как распределять трафик между серверами для обеспечения отказоустойчивости? Какие существуют стратегии балансировки нагрузки и как они работают?

3️⃣API Gateway
Маршрутизация, аутентификация, управление доступом, и множество других задач, которые может выполнять API Gateway, нужно только знать их и применять:)

4️⃣CDN (Content Delivery Network)
Как ускорить доставку контента пользователям по всему миру или в России от Калининграда до Камчатки?

5️⃣Кэширование (Caching)
Уменьшение задержек и нагрузки на систему за счёт хранения часто используемых данных. Уровни кеширования, стратегии инвалидации кешей, алгоритмы вытеснения и т.д.

6️⃣Базы данных (SQL и NoSQL)
Понимание их различий и подходящих кейсов использования Большая, но очень важная тема. Как-то раз мне на архитектурной секции «сеньор» аргументировал выбор MySQL, только потому что в основном он работал с ним. Такой аргумент, естественно, не тянул на сеньерскую позицию.

7️⃣Шардинг (Sharding)
В продолжение к предыдущей теме. Разделение базы данных для повышения производительности. Важно понимать как те или иные БД могут шардироваться, какие гарантии дают. Какие есть еще механизмы разделения данных?

8️⃣Индексы (Indexes)
Оптимизация поиска данных в базе. Какие есть индексы и когда стоит их применять.

9️⃣Репликация (Replication)
Дублирование данных для повышения доступности и отказоустойчивости.

1️⃣0️⃣Прокси-серверы (Proxies)
Контроль трафика и безопасность запросов между клиентами и серверами. Отличие reverse от forward proxy.

1️⃣1️⃣CAP и PACELC теоремы
Баланс между консистентностью, доступностью и устойчивостью к разделению сети, а также компромисы между задержками и консистентностью в распределённых системах.

1️⃣2️⃣. Микросервисы
Еще одна большая тема. Тут важны и паттерны организации, и выбор протоколов общения и схемы взаимодействия. Тут же и брокеры сообщений, мониторинг. В общем можно тут бесконечно углубляться.

1️⃣3️⃣. Consistent Hashing
Эффективное распределение данных между серверами.

1️⃣4️⃣. Long-Polling, WebSockets и Server-Sent Events
Технологии для связи в реальном времени.

1️⃣5️⃣. Bloom Filters
Структуры данных для проверки принадлежности элемента множеству.

1️⃣6️⃣. Кворум (Quorum)
Механизм обеспечения консистентности данных в распределённых системах.

1️⃣7️⃣. Лидер и ведомый (Leader and Follower)
Организация узлов для управления данными.

1️⃣8️⃣. Контрольная сумма (Checksum)
Метод проверки целостности данных.

Какие есть материалы для изучения ?:
- System Design Interview (Alex Xu).
Designing Data-Intensive Applications (Martin Kleppmann).
- Краткий обзор тем, которые я упомянул
- Практикуйтесь с задачами на проектирование. Разбирайте популярные кейсы, например, проектирование YouTube, WhatsApp или Facebook.

Системный дизайн — это не только про технологии. Это про ваш подход к решению задач, способность упрощать сложное и грамотно аргументировать свои решения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥422👏1
5 стадий жизни IT-компании: от стартапа до кровавого Энтерпрайза

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

Я попытался выделить 5 основных этапов жизни (классов) IT компаний. Важно учесть, что компания необязательно проходит все эти 5 этапов. Она может остановиться на одном из них в силу особенностей и масштабов бизнеса.

1. «Стартап»
На этом этапе компания только начинает путь, и ее цель — доказать жизнеспособность своей идеи. Это необязательно стартап в классическом его понимании, но большинство совсем маленьких контор, которые начинали с 0 обязательно прошли через этот этап.

Характерные черты:

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

- Хаос в процессах: чёткого плана развития на годы вперед — нет, задачи появляются почти спонтанно. Продуктовый фокус может меняться каждые пару месяцев. Всем не до процессов и повышение эффективности. Нет времени играть в менеджмент. Есть очень мало времени и мало людей и нужно дать результат ASAP.

- Идея важнее всего: многие готовы работать за энтузиазм, зарплаты ограничены, часто приходится вкладываться в "светлое будущее". Если повезло со стартовым капиталом, то может быть наоборот, совсем маленькая команда из очень дорогих экспертов. Но как правило это бывшие коллеги из Big Tech, которые решили начать что-то свое.

- Рискованность: никакой уверенности в завтрашнем дне. Сегодня есть инвестиции, завтра — нет. Идея и команда тут играет первостепенную роль.

- Широкий профиль сотрудников: требуются универсалы — Fullstack-разработчики, DevOps, которые одновременно могут заниматься веб-разработкой, инфраструктурой и даже тестированием и принтер настроить😉

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

Плюсы для разработчиков:
- уникальный опыт: стартапы не для всех, тут нет место джунам и зачастую даже мидлам. Нужно делать все самому и быстро разбираться в том, о чем еще вчера даже не слышал. Нужно быть экспертом или им стать находу.
-
быстрый рост (конечно, в случае успеха) и возможность НАПРЯМУЮ повлиять на продукт.
- возможность самому заложить фундамент и основу для будущих процессов разработки. Самому выбирать технологии. Полный карт-бланш (если это покрывает стартовый бюджет, конечно)

Минусы:
нестабильность, отсутствие процессов и много переработок.

2. Mini Tech
На этом этапе у компании уже есть видение продукта, первые доходы и планы по развитию.

Характерные черты:


- Финансовая стабильность: уже есть поток инвестиций или стабильная выручка (а в идеале и то, и то).

- Команды: минимум две команды разработки, может больше, но часть работы часто отдают на аутсорс (так пока дешевле).

- Первые процессы: появляются планы развития продукта и первые зачатки документации.

- Ограниченная культура: код-ревью и CI/CD могут только зарождаться. Есть уже некий регламент работы (конвенция), какие-то настроенные инструменты и окружения для разработки. Но это все еще в очень сыром виде.

- Зоопарк технологий: из-за отсутствия общей архитектуры и культуры кода продукт превращается в "лоскутное одеяло".

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

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

Минусы:
много технического долга и костылей, возможно текучка кадров.

Продолжение в следующем посте
👍9🔥431