2 навыка, которые помогли мне стать middle SA за 9 месяцев
Рассказываю, как мой неочевидный жизненный опыт помог быстро освоиться в профессии СА📣
⌨️ Копирайтинг
С детства я мечтал зарабатывать деньги. Я из небольшого городка на юге Якутии❄ , поэтому возможностей подработки для подростка почти не было. Но у меня был интернет👨💻
Я перепробовал многие способы заработка – тыкал по рекламе, писал отзывы, комментарии. За месяц написания отзывов я получил всего500 рублей . Звучит как пустая трата времени, но я понял, что в интернете можно зарабатывать🤑
А затем наткнулся на копирайтинг, на чем и остановился лет на 9-10. Копирайтинг научил меня писать без воды, без повторов, канцеляризмов и мусора. Я безупречно писал сочинения в школе, мне легко дался диплом в универе, а в работе СА с энтузиазмом подхожу к документации любого объема и формата
👩💻 Базовые навыки программирования
В университете я выбрал инженерную специальность – робототехника🤖, так как у меня математический склад ума. К робототехнике я никогда не питал страсти, просто учился ради «престижной» вышки. По классике по специальности я не проработал ни дня.
Начиная с 3 курса нас преследовало программирование, причем каждые полгода почему-то менялся язык👨💻 . Мой максимум до этого этапа – это школьный курс по Паскалю и проект с черепашкой. Мне было тяжело, но накостылять говнокод все же смог. На магистратуре я уже целенаправленно выбрал C++, выпускной проект был полностью на этом языке
Может показаться, что я тру прогер, но нет – в C++ я дошел максимум до ООП включительно, а указатели и списки так и не понял. Код выпускного проекта тоже лучше никому не показывать😁. Зато в профессии СА мне пригодились знания базовых алгоритмов и структур данных: знал все эти ваши стринги и варчары, умею читать код
❓ Технарь или гуманитарий?
🌧 Я не достиг успеха в копирайтинге: остановился на сайте про видеоигры, куда пишу по сей день небольшие обзоры за копейки, а в текстах встречаются досадные ошибки
🌧 Я не достиг успеха в программировании: для меня это очень утомительное занятие
🌧 Я не стал робототехником: мне нравится разбираться в сложных системах, но я банально не умею паять и слаб в электротехнике
💡 Но как только я узнал, что СА это грань между технарем и гуманитарием, я понял, что это мое. И о своем прошлом опыте я не жалею: неотточенные навыки заиграли новыми красками на работе в IT. И благодаря им я довольно быстро стал middle
Не бойтесь нетривиального опыта – в системном анализе пригодится все
—————
⬇ А какие неочевидные навыки пригодились вам в IT? Пишите в комментариях
P.s. на фото я пытаюсь работать инженером-электроником, продержался две недели 😁
#истории_системный_анализ
Рассказываю, как мой неочевидный жизненный опыт помог быстро освоиться в профессии СА
⌨️ Копирайтинг
С детства я мечтал зарабатывать деньги. Я из небольшого городка на юге Якутии
Я перепробовал многие способы заработка – тыкал по рекламе, писал отзывы, комментарии. За месяц написания отзывов я получил всего
А затем наткнулся на копирайтинг, на чем и остановился лет на 9-10. Копирайтинг научил меня писать без воды, без повторов, канцеляризмов и мусора. Я безупречно писал сочинения в школе, мне легко дался диплом в универе, а в работе СА с энтузиазмом подхожу к документации любого объема и формата
В университете я выбрал инженерную специальность – робототехника🤖, так как у меня математический склад ума. К робототехнике я никогда не питал страсти, просто учился ради «престижной» вышки. По классике по специальности я не проработал ни дня.
Начиная с 3 курса нас преследовало программирование, причем каждые полгода почему-то менялся язык
Может показаться, что я тру прогер, но нет – в C++ я дошел максимум до ООП включительно, а указатели и списки так и не понял. Код выпускного проекта тоже лучше никому не показывать😁. Зато в профессии СА мне пригодились знания базовых алгоритмов и структур данных: знал все эти ваши стринги и варчары, умею читать код
Не бойтесь нетривиального опыта – в системном анализе пригодится все
—————
P.s. на фото я пытаюсь работать инженером-электроником, продержался две недели 😁
#истории_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤4👍1🐳1
Просто о репликации
Продолжаем изучать сложные термины БД. Ранее разобрались, что репликация – это создание копий БД с поддержкой актуальности. Погрузимся в эту тему чуть глубже
➡ Хозяева и рабы
📌 Пару терминов перед началом:
• Master (хозяин) – основная БД
• Slave (раб) – «подчиненная» БД, т.е. реплика. Может быть несколько для одного Master
Выделяют несколько видов репликации:
• Master-Slave. Основная БД для записи данных, а реплики – для чтения (и иногда для записи). Если Master падает, Slave поднимается по карьерной лестнице и становится Master без права возврата первого😼
• Master-Master. В распределенных системах у каждого сервака свой Master: они синхронизируют записи и могут распределять нагрузку, но есть риск конфликта👊
• Каскадная. Один раб выступает хозяином для другого. Данные реплицируются по уровням Master -> Slave -> Slave. Надежно, но долго
• Равноправная (Peer-2-Peer). Оковы сняты – каждый узел самостоятелен и может писать, читать и отправлять изменения. Но опять высок риск конфликта🙈
Где что использовать:
• Master-Slave – для систем с нагрузкой на чтение (веб-приложения, аналитика)
• Master-Master – для систем с несколькими дата-центрам (например, в разных странах)
• Каскадная – для больших систем (Wikipedia, соцсети)
• Peer-2-Peer – для распределенных систем (блокчейн)
➡ Как происходит репликация
Есть два типа взаимодействия:
• Синхронная репликация – отправляем данные на реплику и ждем подтверждения о записи ✅
• Асинхронная репликация – отправляем данные на реплику и не ждем ответа, а лукавим и говорим клиенту, что все ОК😏
Синхронная гарантирует строгую согласованность: при чтении из любой реплики получим одни и те же данные. Поэтому такой вид применяется в банках, платежных сервисах, системах бронирования
Для асинхронной тоже есть применение там, где задержка в обновлении данных (а это от миллисекунд до минут) некритична: соц. сети, блоги, интернет-магазины
➡ Кто рассылает изменения
И еще одна небольшая классификация касается инициатора изменений:
• Мастер сам отправляет изменения репликам – это push-модель
• Реплики самостоятельно стягивают данные у мастера – это pull-модель
Push-модель подойдет для систем с высокой скоростью обновлений (банки, финансовые транзакции), pull-модель – для систем, где не требуются минимальные задержки (например, аналитика)
—————
В следующем посте поговорим про партиционирование, а затем про босса этой мини-подборки – шардирование
#полезное_системный_анализ
Продолжаем изучать сложные термины БД. Ранее разобрались, что репликация – это создание копий БД с поддержкой актуальности. Погрузимся в эту тему чуть глубже
• Master (хозяин) – основная БД
• Slave (раб) – «подчиненная» БД, т.е. реплика. Может быть несколько для одного Master
Машины тоже добиваются отмены рабства, поэтому сейчас также используются термины Primary-Replica или Leader-Follower. Но для простоты понимания остановимся на Master-Slave
Выделяют несколько видов репликации:
• Master-Slave. Основная БД для записи данных, а реплики – для чтения (и иногда для записи). Если Master падает, Slave поднимается по карьерной лестнице и становится Master без права возврата первого
• Master-Master. В распределенных системах у каждого сервака свой Master: они синхронизируют записи и могут распределять нагрузку, но есть риск конфликта
• Каскадная. Один раб выступает хозяином для другого. Данные реплицируются по уровням Master -> Slave -> Slave. Надежно, но долго
• Равноправная (Peer-2-Peer). Оковы сняты – каждый узел самостоятелен и может писать, читать и отправлять изменения. Но опять высок риск конфликта🙈
Где что использовать:
• Master-Slave – для систем с нагрузкой на чтение (веб-приложения, аналитика)
• Master-Master – для систем с несколькими дата-центрам (например, в разных странах)
• Каскадная – для больших систем (Wikipedia, соцсети)
• Peer-2-Peer – для распределенных систем (блокчейн)
Есть два типа взаимодействия:
• Синхронная репликация – отправляем данные на реплику и ждем подтверждения о записи ✅
• Асинхронная репликация – отправляем данные на реплику и не ждем ответа, а лукавим и говорим клиенту, что все ОК
Синхронная гарантирует строгую согласованность: при чтении из любой реплики получим одни и те же данные. Поэтому такой вид применяется в банках, платежных сервисах, системах бронирования
Для асинхронной тоже есть применение там, где задержка в обновлении данных (а это от миллисекунд до минут) некритична: соц. сети, блоги, интернет-магазины
И еще одна небольшая классификация касается инициатора изменений:
• Мастер сам отправляет изменения репликам – это push-модель
• Реплики самостоятельно стягивают данные у мастера – это pull-модель
Push-модель подойдет для систем с высокой скоростью обновлений (банки, финансовые транзакции), pull-модель – для систем, где не требуются минимальные задержки (например, аналитика)
—————
В следующем посте поговорим про партиционирование, а затем про босса этой мини-подборки – шардирование
#полезное_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥2
Отзыв на воркшопы System Education🧑🎓
Как-то довелось мне посетить два воркшопа от System Education – один на тему «Брокеры сообщений RabbitMQ и Apache Kafka», второй о «SQL. От проектирования до эксплуатации». Рассказываю свои впечатления
1⃣ Проектирование Apache Kafka и RabbitMQ
• Дата: сентябрь 2023
• Длительность: 4 занятия по 4 часа
• Стоимость: ~20000 руб (для компаний), для физлиц было дешевле, но точную сумму не вспомню
• Страница воркшопа
Тогда мои знания про Kafka и RabbitMQ были очень плачевны🚨 , поэтому надеялся на воркшопе как минимум разобраться в принципах работы. Моя цель была не просто выполнена, а перевыполнена
Начну с плюсов:
➕ Глубокая и действительно интересная практика. Теория была, но практика заняла бОльшую часть воркшопа. На первых двух занятиях мы запустили сервисы на Python, подняли инстанс Kafka и отработали два сценария – спаминг сообщений в Телеграм и наполнение таблицы в Google (т.е. были еще и интеграции, вау). На следующих двух занятиях проделали то же самое для RabbitMQ. И все это с нуля!
➕ Множество заготовленных материалов. Помимо статей перед стартом организаторы подготовили код сервисов на Python. Код мог запустить каждый ученик онлайн без настройки окружения и прочих мучений. А еще ведущие помогали, если код не работал по каким-то причинам
➕ Профессиональные ведущие. Мне запомнилась Анна Вичугова – она отвечала на все вопросы, помогала как могла и была вовлечена в процесс
Но есть и минус:
❌ Командная работа. Во время занятий мы делились на команды и переходили в комнаты для групповой работы. То ли мне так везет, но всегда в моей команде были очень неактивные люди, которые все время молчали. Приходилось брать лидерство, но было чувство, что я болтаю сам с собой
✔ Эти занятия меня очень впечатлили – я не ожидал, что будет настолько интересная практика. Сказать, что я стал гораздо лучше разбираться в Kafka и RabbitMQ, это ничего не сказать
Но следующий воркшоп меня впечатлил не так сильно
2⃣ SQL. От проектирования до эксплуатации
• Дата: январь 2024
• Длительность: 2 занятия по 4 часа
• Стоимость: на тот момент ~5000 руб (физлиц), ~10000 руб (для компаний)
• Страница воркшопа
С этим воркшопом я планировал закрыть пробел по проектированию реляционных БД. Правда, там было не только проектирование, но еще и SQL-запросы, которые меня интересовали меньше. К сожалению, воркшоп не оправдал мои ожидания
Плюсы:
➕ Заготовленные материалы. Была и теория, и практические задания, и домашку, и мои любимые «командные» кейсы. Тут не придраться
➕ Формат обучения. За один уикенд можно изучить и проектирование, и базовый SQL
Минусы:
❌ Самого проектирования было сильно мало. Две трети воркшопа мы занимались SQL-запросами, а про проектирование БД я ничего нового не узнал
❌ Чувствовалась спешка со стороны ведущего. Из-за частых вопросов от аудитории мы сильно выбились из графика. В итоге сложные JOIN пробежали буквально за пару минут. Возможно, блок с вопросами стоило вынести в конец
⚠ Воркшоп не оправдал моих ожиданий. Для junior он будет полезен, но для middle стоит поискать более углубленные программы
➡ Итог
Если говорить о воркшопах, то формат от System Education мне понравился – можно быстро закрыть какую-то проблемную для себя тему. Но нужно точно понимать, что именно ты хочешь, и внимательно изучить программу - возможно, уже и так все знаешь. А еще может встать вопрос цены - она довольно кусачая
————
⬇ А вы проходили воркшопы от System Education? Какие у вас впечатления? Пишите в комментах
#курсы_системный_анализ
Как-то довелось мне посетить два воркшопа от System Education – один на тему «Брокеры сообщений RabbitMQ и Apache Kafka», второй о «SQL. От проектирования до эксплуатации». Рассказываю свои впечатления
P.s. не реклама. Я действительно прошел воркшопы (сертификаты в комментах) и просто пишу свое мнение
• Дата: сентябрь 2023
• Длительность: 4 занятия по 4 часа
• Стоимость: ~20000 руб (для компаний), для физлиц было дешевле, но точную сумму не вспомню
• Страница воркшопа
Тогда мои знания про Kafka и RabbitMQ были очень плачевны
Начну с плюсов:
Но есть и минус:
Но следующий воркшоп меня впечатлил не так сильно
• Дата: январь 2024
• Длительность: 2 занятия по 4 часа
• Стоимость: на тот момент ~5000 руб (физлиц), ~10000 руб (для компаний)
• Страница воркшопа
С этим воркшопом я планировал закрыть пробел по проектированию реляционных БД. Правда, там было не только проектирование, но еще и SQL-запросы, которые меня интересовали меньше. К сожалению, воркшоп не оправдал мои ожидания
Плюсы:
Минусы:
P.s. тогда оформление сайта было другим, и я точно не помню, был ли указан уровень подготовки
Если говорить о воркшопах, то формат от System Education мне понравился – можно быстро закрыть какую-то проблемную для себя тему. Но нужно точно понимать, что именно ты хочешь, и внимательно изучить программу - возможно, уже и так все знаешь. А еще может встать вопрос цены - она довольно кусачая
P.s. Еще в этой школе есть «буткемпы» для БА и СА (интенсивная программа обучения). Слышал, что это имба, могут прокачать с нуля до middle, но сам не проходил, да и ценник ну слишком высокий (сейчас от 164 000 руб до 205 000 руб. за 3 месяца). За «буткемпы» ничего сказать не могу
————
#курсы_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥4❤🔥2
Просто о партиционировании
Продолжаю цикл небольших материалов про сложные термины на темы БД: на этот раз разберемся с партиционированием
📌 Определение
Вспомним, что партиционирование – метод разделения большой таблицы на несколько маленьких на одном сервере
Но что такое большая таблица? В этом контексте это миллиарды строк😰 . Представьте стог сена, где спрятана игла. Чтобы найти ее, нужно немало времени. Также и в системах: очевидно, с таким объемом данных она будет медленнее работать
💡 Виды партиционирования
Тут проще, чем с репликацией. Выделяют два способа распила таблицы: вертикальный и горизонтальный
➡️ Горизонтальное партиционирование
Представьте, что мы разрезаем таблицу горизонтально. Сделать это можно так:
• По диапазону значений (Range Based). Например, по ID или дате – в одной партиции храним записи с ID от 0 до 500 000, в другой от 500 000 до 1 000 000
• По спискам (List Based). Например, по странам или категориям – в одной партиции храним данные по России, в другой по Вьетнаму
• По хэшу ключа (Hash Based). Тут посложнее: берем хэш-функцию, в качестве значений – один из столбцов (например, user_id). Результат делится на N, где N – количество партиций. Остаток от деления определяет номер партиции, куда мы запишем данные. Плюс такого способа: равномерное распределение
• По ключу (Key Based). Как Hash Based, но используется само значение ключа
Где что подойдет:
• Range – для логов и исторических данных
• List – для географически распределенных систем
• Hash/Key – для равномерного распределения данных
➡️ Вертикальное партиционирование
А теперь таблицу делим вертикально, по колонкам
Предположим, у нас таблица с тремя атрибутами: ID, name, email. Вжух – и теперь у нас две таблиц:, в первой id и name, во второй id и email
На практике этот способ деления встречается редко
⚠️ Партиционирование – не панацея
Партиционирование не подойдет, если:
❌ Маленькие таблицы (до 1 млрд строк) – расходы ресурсов будут неоптимальными
❌ Если запросы затрагивают все партиции – скорость выполнения не снизится, а может даже и увеличится
И подойдет, если:
✅ У нас огромная таблица – свыше 1 млрд записей
✅ Мы столкнулись с техническими ограничениями сервера – физически нет места
✅ Нужно удалить/архивировать данные – например, логи
✅ Нужно распределить нагрузку из-за частых запросов по одному критерию (например, по дате)
🆚 Индексы vs партиционирование
Казалось бы, зачем пилить таблицу, если есть индексы? Да, они тоже ускоряют работу с данными, но они не подойдут для огромных таблиц, т.к. тоже занимают место на диске. И индексы используются для «точечных» поисковых запросов, а не для выборки групп данных. В общем, разные задачи
Однако оба метода можно комбинировать – разбить большую таблицу на партиции, а внутри сделать индексы
—————
Остался последний термин, который я хотел бы разобрать – шардирование. И о нем уже в следующем посте
А вы сталкивались с партиционированием на проекте? Пишите, если был опыт
#полезное_системный_анализ
Продолжаю цикл небольших материалов про сложные термины на темы БД: на этот раз разберемся с партиционированием
Вспомним, что партиционирование – метод разделения большой таблицы на несколько маленьких на одном сервере
Но что такое большая таблица? В этом контексте это миллиарды строк
Тут проще, чем с репликацией. Выделяют два способа распила таблицы: вертикальный и горизонтальный
Представьте, что мы разрезаем таблицу горизонтально. Сделать это можно так:
• По диапазону значений (Range Based). Например, по ID или дате – в одной партиции храним записи с ID от 0 до 500 000, в другой от 500 000 до 1 000 000
• По спискам (List Based). Например, по странам или категориям – в одной партиции храним данные по России, в другой по Вьетнаму
• По хэшу ключа (Hash Based). Тут посложнее: берем хэш-функцию, в качестве значений – один из столбцов (например, user_id). Результат делится на N, где N – количество партиций. Остаток от деления определяет номер партиции, куда мы запишем данные. Плюс такого способа: равномерное распределение
• По ключу (Key Based). Как Hash Based, но используется само значение ключа
Где что подойдет:
• Range – для логов и исторических данных
• List – для географически распределенных систем
• Hash/Key – для равномерного распределения данных
А теперь таблицу делим вертикально, по колонкам
Предположим, у нас таблица с тремя атрибутами: ID, name, email. Вжух – и теперь у нас две таблиц:, в первой id и name, во второй id и email
На практике этот способ деления встречается редко
Партиционирование не подойдет, если:
И подойдет, если:
✅ У нас огромная таблица – свыше 1 млрд записей
✅ Мы столкнулись с техническими ограничениями сервера – физически нет места
✅ Нужно удалить/архивировать данные – например, логи
✅ Нужно распределить нагрузку из-за частых запросов по одному критерию (например, по дате)
🆚 Индексы vs партиционирование
Казалось бы, зачем пилить таблицу, если есть индексы? Да, они тоже ускоряют работу с данными, но они не подойдут для огромных таблиц, т.к. тоже занимают место на диске. И индексы используются для «точечных» поисковых запросов, а не для выборки групп данных. В общем, разные задачи
Однако оба метода можно комбинировать – разбить большую таблицу на партиции, а внутри сделать индексы
—————
Остался последний термин, который я хотел бы разобрать – шардирование. И о нем уже в следующем посте
А вы сталкивались с партиционированием на проекте? Пишите, если был опыт
#полезное_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12🤓1
This media is not supported in your browser
VIEW IN TELEGRAM
Просто о шардировании
Шардирование – слово, которое боятся произносить, как имя Волан-Де-Морта
📌 Определение
Вспомним пример из предыдущего поста, но заменим носки на книги📚: по 300 штук у нас хранятся дома, в гараже, на даче и у родителей
Принцип шардирования – разделение данных и хранение их на разных серверах. Части целого называют шардами
➡ Когда используют шардирование?
Когда на сервере не хватает ресурсов для хранения. 1200 книг забили нашу единственную комнату в съемной однушке, поэтому мы приняли решение хранить их в разных местах💡
➡ Головная боль шардирования
Тут как с партиционированием – по диапазону, по ключу. Например, книги можно шардировать по фамилиям авторов – в один шард от А до Ж, во второй от З до М и так далее
Когда я куплю новую книгу, то отвезу ее в определенное место согласно своим же правилам
Есть несколько методов маршрутизации:
– На стороне клиента. Мы знаем, в какие шарды что записано. Появляется логика на клиенте
– На стороне сервера. Кто-то другой за нас держит эту инфу, а мы просто передаем ему книгу. Дополнительная логика на сервере
– Маршрутизация встроена в БД. Все происходит автоматически, но такая функция встречается редко
Мы не задумывались о порядке, поэтому книжка Вигерса лежит между «Война и мир» и «Кулинарные рецепты Гордона Рамзи» 😁
Нужна
Сложности в самом процессе: допустим, это займет пару часов, но в этот период могут поступать новые данные
Способы решения:
1️⃣ На время допустить только чтение (проще всего)
2️⃣ Читать из старого шарда, а записывать в новый
3️⃣ Логическая репликация – делаем между старым и новым шардами логическую репликацию и переключаемся на новый
Мы литературный гений, поэтому прочитали еще 300 книг. Осознали, что нужно еще одно место для хранения. Арендуем склад (это будет наш пятый шард) и думаем, как перераспределить нашу кипу
По научному это
Тут на помощь придет такой метод, как Consistent Hashing – когда книги распределяются так, чтобы при добавлении нового места не пришлось перекладывать все заново
➡️ Примеры использования шардирования
1. Социальная сеть. Миллиарды лайков, постов, комментов. Шардируем по user_id и храним данные и действия пользователей в рамках одного шарда
2. Мессенджеры. Миллиарды сообщений. Шардируем по chat_id, храним их на разных шарах
3. Маркетплейсы. Тонны товаров и заказов. Товары можно шардировать по product_id, а заказы по user_id
—————
⬇️ Доводилось ли вам работать с системами, где использовалось шардирование? Пишите в комментах
#полезное_системный_анализ
Шардирование – слово, которое боятся произносить, как имя Волан-Де-Морта
Вспомним пример из предыдущего поста, но заменим носки на книги📚: по 300 штук у нас хранятся дома, в гараже, на даче и у родителей
Принцип шардирования – разделение данных и хранение их на разных серверах. Части целого называют шардами
– Не путаем с репликацией. Тогда бы у всех книг было бы по 3 копии, и по 1200 книг мы бы хранили в разных местах. А если купили новую – пришлось бы делать копии
– Не путаем с партиционированием. Тогда бы все книги лежали дома (т.е. на одном сервере), но в разных углах
Когда на сервере не хватает ресурсов для хранения. 1200 книг забили нашу единственную комнату в съемной однушке, поэтому мы приняли решение хранить их в разных местах
Как распределить книги?
Тут как с партиционированием – по диапазону, по ключу. Например, книги можно шардировать по фамилиям авторов – в один шард от А до Ж, во второй от З до М и так далее
Когда я куплю новую книгу, то отвезу ее в определенное место согласно своим же правилам
Как понять, куда везти новую книгу?
Есть несколько методов маршрутизации:
– На стороне клиента. Мы знаем, в какие шарды что записано. Появляется логика на клиенте
– На стороне сервера. Кто-то другой за нас держит эту инфу, а мы просто передаем ему книгу. Дополнительная логика на сервере
– Маршрутизация встроена в БД. Все происходит автоматически, но такая функция встречается редко
Что делать, если нужно перераспределить книги?
Мы не задумывались о порядке, поэтому книжка Вигерса лежит между «Война и мир» и «Кулинарные рецепты Гордона Рамзи» 😁
Нужна
перебалансировка (Rebalancing) – процесс перераспределения данных между существующими шардами
Сложности в самом процессе: допустим, это займет пару часов, но в этот период могут поступать новые данные
Способы решения:
Что делать, если нужно добавить новое место хранения для книг?
Мы литературный гений, поэтому прочитали еще 300 книг. Осознали, что нужно еще одно место для хранения. Арендуем склад (это будет наш пятый шард) и думаем, как перераспределить нашу кипу
По научному это
Решардинг (Resharding) – процесс изменения схемы шардирования (добавление/удаление шардов)
Тут на помощь придет такой метод, как Consistent Hashing – когда книги распределяются так, чтобы при добавлении нового места не пришлось перекладывать все заново
1. Социальная сеть. Миллиарды лайков, постов, комментов. Шардируем по user_id и храним данные и действия пользователей в рамках одного шарда
2. Мессенджеры. Миллиарды сообщений. Шардируем по chat_id, храним их на разных шарах
3. Маркетплейсы. Тонны товаров и заказов. Товары можно шардировать по product_id, а заказы по user_id
—————
#полезное_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤🔥1
📖 Прочитал книгу «Микросервисы. Паттерны разработки и рефакторинга» и делюсь мнением
• Автор: Крис Ричардсон
• Объем: 544 с.
💡 О чем книга?
По шагам о микросервисной архитектуре: автор начинает с описания монолитного ада😈 , затем приступает к проектированию микросервисов с нуля по этапам, от сбора требований до развертывания. Для наглядности используется один сквозной пример – приложение по доставке еды FTGO а-ля Яндекс.Еда 🍟
В основном книга о всевозможных паттернах микросервисной архитектуры: о их плюсах и минусах, принципах работы, о том, когда что выбрать. Описаны шаблоны, о которых я уже слышал («База данных на сервис», «API Gateway»), так и специфичные для разработки типа «Предохранитель», «CQRS» и другие
Бонусом в конце каждой главы приведен код на Java с подробным разбором – в теории можно самому все спроектировать👨💻
А теперь о том, что понравилось, а что нет глазами СА
⭐️ Что понравилось
➕ Структура повествования и сквозной пример. Постепенно вместе с автором опускаешься в глубины микросервисов и по кирпичикам выстраиваешь одну систему
➕ Много схем и изображений. Визуально все воспринимается намного проще
➕ Подробно разжеваны технические моменты. Удалось понять CQRS, узнал про тестирование, лучше стал понимать межсервисное взаимодействие
🤔 Что не понравилось
⚠ Четверть книги – разбор кода. Это не минус, просто эти куски текста тяжело понимаются даже при условии, что умеешь читать код. Для полного понимания потребуется спроектировать несколько своих сервисов
⚠ Некоторые главы так и остались темным лесом, а именно Глава 6 «Разработка бизнес-логики с порождением событий» и Глава 12 «Развертывание микросервисов». Этот материал отправил меня в нокаут на пару дней
➡ Кому подойдет?
Для СА уровня от middle, которые желают разобраться с микросервисной архитектурой. Еще будет очень полезна разработчикам, которые на практике работают с микросервисами
⬇ Итог
Отличная книга, в которой собрана, на мой взгляд, вся нужная информация про микросервисы
Но в полной мере книгу удастся понять, если на личном опыте пережил процесс разработки микросервисов с нуля до эксплуатации
Если такого опыта нет, то информация все равно будет полезной – начнете разбираться в паттернах, выучите их названия и поймете, почему микросервисы это сложно. Просто пропускайте листинги с кодом и не расстраивайтесь, если глава осталась непонятной – к ней всегда можно вернуться позже
—————
Читали ли эту книгу? Если да, то как вам?
#книги_системный_анализ
• Автор: Крис Ричардсон
• Объем: 544 с.
По шагам о микросервисной архитектуре: автор начинает с описания монолитного ада
В основном книга о всевозможных паттернах микросервисной архитектуры: о их плюсах и минусах, принципах работы, о том, когда что выбрать. Описаны шаблоны, о которых я уже слышал («База данных на сервис», «API Gateway»), так и специфичные для разработки типа «Предохранитель», «CQRS» и другие
Бонусом в конце каждой главы приведен код на Java с подробным разбором – в теории можно самому все спроектировать
А теперь о том, что понравилось, а что нет глазами СА
Для СА уровня от middle, которые желают разобраться с микросервисной архитектурой. Еще будет очень полезна разработчикам, которые на практике работают с микросервисами
Отличная книга, в которой собрана, на мой взгляд, вся нужная информация про микросервисы
Но в полной мере книгу удастся понять, если на личном опыте пережил процесс разработки микросервисов с нуля до эксплуатации
Если такого опыта нет, то информация все равно будет полезной – начнете разбираться в паттернах, выучите их названия и поймете, почему микросервисы это сложно. Просто пропускайте листинги с кодом и не расстраивайтесь, если глава осталась непонятной – к ней всегда можно вернуться позже
—————
Читали ли эту книгу? Если да, то как вам?
#книги_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11
Моему каналу чуть больше месяца, и я неимоверно рад, что решился завести его🥳. Мне приятно делиться своими находками и опытом, рассказывать о своем пути СА и объяснять сложные термины простыми словами. Большое вам спасибо за реакции, комменты – очень ценю 🫡
В будущих постах я обязательно поделюсь роудмапом по становлению Solution Architect и своими шагами на пути к этому, а еще расскажу об одном проекте, который пока на стадии проработки. В общем, дальше – больше
А пока что хочу рассказать, что решил принять участие в конкурсе телеграм-каналов. Надежд не питаю, так как канал совсем молодой, но заявку уже одобрили
– Ссылка на лендинг конкурса: https://tg-contest.tilda.ws
– Группа канала конкурса: @tg_contest_main
В группе публикуют лучшие посты участников, там же будет читательское голосование. Не призываю голосовать за меня, просто информирую о своем участии
—————
Please open Telegram to view this post
VIEW IN TELEGRAM
tg-contest.tilda.ws
Конкурс авторских Telegram-каналов — найди читателей, найди интересный контент
Конкурс для авторов Telegram-каналов и их читателей. Подайте заявку, найдите новых подписчиков, голосуйте за любимые каналы и откройте для себя лучшие голоса Telegram. Всё по любви и без инфоцыганства.
🏆10☃2❤1
На этой неделе я в отпуске, поэтому решил написать про важность отдыха. Сегодня – история о неудачной попытке поработать в двух местах сразу без маховика времени
В IT есть такая «темка» – брать в работу несколько проектов помимо основной работы, оформляя их по самозанятости или ИП
Случайно мне выпал шанс поработать так – я увольнялся и переходил на новое место, но первый работодатель не хотел меня отпускать и предложил перейти на договор ГПХ
«Хмм, дополнительный заработок, круто» – подумал наивный я
Как же я ошибался...
Решил работать с двух ноутбуков, поставил их рядом. Тут стоит упомянуть, что рабочего места у меня как такового не было, максимум – журнальный столик
В голове все выглядело отлично, на деле все пошло через
В итоге обе работы смешались в какого-то монстра, приходилось еще дорабатывать до глубокой ночи. А еще врал и тут, и там: основной работодатель не знал о моей «шабашке»
Само собой это повлияло на менталку и здоровье в целом. Я стал более раздражительным, сон был ужасным, забил на близких и друзей, забыл про прогулки и наслаждение жизнью
Апогеем стали внезапные
В итоге в таком режиме я продержался всего полтора месяца
В тот период жизни мое ментальное состояние было не очень - частая смена работы, относительно недавний вход в IT, частые переезды и первые серьезные отношения
Я не думал о своем состоянии, поэтому подобный рабочий режим стал последней каплей в чашу под названием
Работать на двух работах в IT можно. Но нужно понять, готов ли ты к этому, и есть ли у тебя на это ресурс (как физический, так и моральный). И ответить на главный вопрос: надо ли это тебе вообще?
Я не был готов к такому опыту из-за:
– Малого опыта в профессии
– Отсутствия подходящей рабочей обстановки
– Недоговоренностей с работодателем
– Непростого периода в жизни
– Отсутствия явной цели
Главное из этого опыта – понял, что нельзя изнурять себя. Думал, что выдержу многое, но ошибся. Это привело к последствиям для здоровья, о которых я даже и представить не мог ранее. Поэтому я начал ценить отдых, вернулся к хобби, проработал work-life balance – и больше не проверяю себя на прочность
—————
#истории_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🤷♂1🔥1
Продолжаю рассказывать про свои отношения с отдыхом – на этот раз о том, почему мой первый отпуск случился в 26 лет
Получив магистра по робототехнике, в 23 года я вернулся в родной город в заснеженной Якутии 🥶. Там из роботов - максимум микроволновка
Но работать надо было, поэтому устроился инженером по связи в Мегафон. Я не шарил за связь, но у меня был напарник, благодаря которому я продержался полгода
Дальше был сумбур – поработал в родном городе 2 недели в другом месте, понял, что нужно ехать в Москву. После переезда удалось найти работу инженером-программистом. Но предприятие оказалось в антураже СССР с тестировщиками, которым уже за 70. Чувствовал себя некомфортно, поэтому снова уволился через 2 недели 😧
В итоге прыгал между работами и нифига не отдыхал
Однако в Москве довольно быстро получилось войти в IT. Причем не абы где, а в Москва-Сити
И вот через полгода я ждал, что наконец-то наступит мой первый заслуженный отпуск, но и тут не повезло – на работе перестали платить зарплату, и я уволился 🤯
Отдыхать не стал, устроился в другое место. Но это оказался аутстафф, тогда мне, новичку в сфере, этот формат не пришелся по вкусу, и я уволился через 2 месяца 🥴. И тут же устроился на место, где работаю сейчас
🌴 Первый отпуск
И только тут случился мой долгожданный отпуск длиной в 1 неделю. Мы с женой отправились на Красную Поляну – замечательное место, чтобы отдохнуть от всего 🏔
Однако мой мозг отличника переживал за работу и проекты – поэтому я заходил в рабочие чаты, отвечал на сообщение и в целом был включен в работу. Классическая ошибка: в итоге в отпуске не скажу, что отдыхал😫
Правда, в следующий отпуск уже учел эти нюансы, да и стал относиться ко всему проще. Выключил уведомления, о работе не переживал и вообще забыл о ней. И только тогда я наконец-то полноценно отдохнул две недели, и это было прекрасно
Что я понял из своего опыта:
➡️ Херня случается. Если вынуждены уволиться и есть подушка безопасности – лучше взять перерыв в одну-две недели и постараться отдохнуть
➡️ В отпуске забываем про чаты и работу. Поверьте, и без вас справятся
➡️ Если есть возможность – делать отпуск насыщенным. Посетить другую страну, начать что-то новое, съездить на природу
➡️ Не работать без отпусков. Выгорание гарантировано – см. предыдущий пост
—————
#истории_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7💯2❤1🤔1
Помните, я вписался в конкурс тг-каналов?
Я выбрал трек «Карьера», и меня добавили в уютный чатик. Там я увидел других интересных авторов, которые тоже пишут про свой карьерный путь
Кто-то только начинает его и рассказывает о первых достижениях, а кто-то уже занимает (или занимал) руководящую должность и делится неочевидным опытом управленца. HR-менеджеры, Data-аналитики, Карьерные коучи, Продакты, Маркетологи – пишут специалисты из разных предметных областей, но в основном IT
💡 Мы объединили наши каналы в папку, чтобы не потеряться. Делюсь этой находкой с вами - возможно, тоже найдете для себя интересных авторов
💎 Папка карьерных каналов
Я выбрал трек «Карьера», и меня добавили в уютный чатик. Там я увидел других интересных авторов, которые тоже пишут про свой карьерный путь
Кто-то только начинает его и рассказывает о первых достижениях, а кто-то уже занимает (или занимал) руководящую должность и делится неочевидным опытом управленца. HR-менеджеры, Data-аналитики, Карьерные коучи, Продакты, Маркетологи – пишут специалисты из разных предметных областей, но в основном IT
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥4❤🔥1
Как понять, что сбор требований завершен? Чек-лист для СА
Все зависит от методологии
➡ Сбор требований в Agile
В Agile сбор требований происходит в рамках отдельной фичи. Вот как понять, где финиш:
✅ Не можете придумать новые use case или user story для этой фичи
✅ На встречах обсуждается одно и то же
✅ Заказчик уже говорит о фичах на будущее, а не о текущей
✅ Новые требования выходят за рамки фичи
✅ Новые требования имеют низкий приоритет
✅ У разработки после груминга нет или крайне мало вопросов
Если выполнены все эти пункты, можно говорить, что требования собраны 🎉
➡ Сбор требований в Waterfall
В Waterfall, в отличие от Agile, сбор требований покрывает весь продукт
Критерии завершенности сбора такие же, но нужно декомпозировать ТЗ на отдельные фичи
➡ Можно ли собрать все-все требования?
Перфекционисты захотят собрать все-все требования и будут раз за разом пересматривать их, особенно в случае малейших изменений. Это сильно затянет разработку
Все требования собрать невозможно (особенно в Agile) – заказчику что-то приснилось, или прочитал новости о какой-то трендовой фиче. Или во время разговора с коллегой родились новые идеи. Даже если все-все требования собраны, высок риск, что уже завтра они поменяются
Правильнее и проще собрать необходимые требования для реализации фичи, а уже потом улучшать ее
⬇ Итог
Изменение требований – это норма. Главное тут – вовремя остановиться. Не собрать все-все требования, а собрать и согласовать столько, сколько необходимо для релиза. А оценить достаточность требований можно по чек-листу выше
—————
💬 А как у вас со сбором требований на проекте? Часто ли меняются? Пишите в комментариях
#полезное_системный_анализ
Все зависит от методологии
В Agile сбор требований происходит в рамках отдельной фичи. Вот как понять, где финиш:
✅ Не можете придумать новые use case или user story для этой фичи
✅ На встречах обсуждается одно и то же
✅ Заказчик уже говорит о фичах на будущее, а не о текущей
✅ Новые требования выходят за рамки фичи
✅ Новые требования имеют низкий приоритет
✅ У разработки после груминга нет или крайне мало вопросов
Если выполнены все эти пункты, можно говорить, что требования собраны 🎉
Требования могут измениться уже на этапе аналитики/разработки, но это тема для отдельной дискуссии. Могу рассказать о своем опыте - ставь 👍, если интересно
В Waterfall, в отличие от Agile, сбор требований покрывает весь продукт
Критерии завершенности сбора такие же, но нужно декомпозировать ТЗ на отдельные фичи
У меня был проект в госсекторе. Сначала встречи очень частые, каждую неделю или несколько раз в неделю. Ближе к середине проекта раз в 2 недели. После уже сбор требований не проводится
Перфекционисты захотят собрать все-все требования и будут раз за разом пересматривать их, особенно в случае малейших изменений. Это сильно затянет разработку
Все требования собрать невозможно (особенно в Agile) – заказчику что-то приснилось, или прочитал новости о какой-то трендовой фиче. Или во время разговора с коллегой родились новые идеи. Даже если все-все требования собраны, высок риск, что уже завтра они поменяются
На одном из моих проектов так и было - 3 месяца на разработку, а сбор требований происходил вплоть до последней недели. Заказчик постоянно накидывал свои хотелки, а мы их не отбивали. В итоге проект вышел тяп-ляп
Правильнее и проще собрать необходимые требования для реализации фичи, а уже потом улучшать ее
Изменение требований – это норма. Главное тут – вовремя остановиться. Не собрать все-все требования, а собрать и согласовать столько, сколько необходимо для релиза. А оценить достаточность требований можно по чек-листу выше
—————
#полезное_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍5💯2
Работали/знакомы с перехватчиком трафика Charles или любым другим сниффером?
Anonymous Poll
18%
Знаю что это, применял(а) в работе
11%
Знаю что это, не применял(а) в работе
71%
Не знаю что это, не применял(а) в работе
Как увидеть запросы в режиме онлайн? Используем Charles
Не знаете, как смотреть API-запросы в режиме реального времени? Держите классный инструмент - Charles
➡ Принцип работы
Charles – сниффер (sniffer – перехватчик) HTTP/HTTPS трафика. Работает как прокси-сервер: вклинивается в цепочку «Клиент - Сервер», перехватывает все запросы и отображает их в интерфейсе программы
Работает для веб и мобилки, но наиболее эффективно для мобильных приложений, т.к. для веб проще посмотреть запросы через WebTools. Однако для работы нужна будет дебаг-сборка приложения, а не прод – там запросы закрыты
➕ В Charles мне понравились следующие фишки:
• Можно увидеть порядок вызова запросов
• Отображается полная информация о запросе и ответе
• Можно подменить запрос и посмотреть, что будет
⚠ Однако есть и некоторые трудности
• Сложно настраивать. У меня Charles работает только на Android, на iOS трудности с сертификатами
• Громоздкий интерфейс – легко потеряться
• Бесплатная версия на 30 дней, а потом ограничение по времени работы
➡ Когда Charles пригодится СА
• При онбординге на проект
• При изучении задачи на доработку/улучшение фичи
• При выявлении багов и изучении проблемы
➡ Мой опыт
Использовал Charles на трех проектах, все мобильные приложения. На двух из них восстанавливал документацию, на третьем нужно было понимать, как дорабатывать существующую функциональность – что нужно изменить в запросе, в каком порядке вызывать новый
Благодаря прокси наглядно видел, в каком порядке вызываются запросы, какие из доки уже устаревшие, какой реальный ответ от сервера приходит
⬇ Итог
Если вы работаете с мобильным приложением, и вам непонятно, как оно работает с технической стороны – качайте дебаг-сборку и установите Charles или любой другой proxy
Также делюсь статьей с Хабра про установку на все платформы и обзор функциональности Charles
————
Как думаете, пригодится в работе?
👍 Да, нужно попробовать
🤷♂️ Нет, не потребуется
#инструменты_системный_анализ
Не знаете, как смотреть API-запросы в режиме реального времени? Держите классный инструмент - Charles
Charles – сниффер (sniffer – перехватчик) HTTP/HTTPS трафика. Работает как прокси-сервер: вклинивается в цепочку «Клиент - Сервер», перехватывает все запросы и отображает их в интерфейсе программы
Работает для веб и мобилки, но наиболее эффективно для мобильных приложений, т.к. для веб проще посмотреть запросы через WebTools. Однако для работы нужна будет дебаг-сборка приложения, а не прод – там запросы закрыты
Есть еще другие снифферы: Proxyman, Fiddler, Wireshark. Суть одна, отличаются интерфейсом, набором функций и платформами
• Можно увидеть порядок вызова запросов
• Отображается полная информация о запросе и ответе
• Можно подменить запрос и посмотреть, что будет
• Сложно настраивать. У меня Charles работает только на Android, на iOS трудности с сертификатами
• Громоздкий интерфейс – легко потеряться
• Бесплатная версия на 30 дней, а потом ограничение по времени работы
• При онбординге на проект
• При изучении задачи на доработку/улучшение фичи
• При выявлении багов и изучении проблемы
Использовал Charles на трех проектах, все мобильные приложения. На двух из них восстанавливал документацию, на третьем нужно было понимать, как дорабатывать существующую функциональность – что нужно изменить в запросе, в каком порядке вызывать новый
Благодаря прокси наглядно видел, в каком порядке вызываются запросы, какие из доки уже устаревшие, какой реальный ответ от сервера приходит
Если вы работаете с мобильным приложением, и вам непонятно, как оно работает с технической стороны – качайте дебаг-сборку и установите Charles или любой другой proxy
Также делюсь статьей с Хабра про установку на все платформы и обзор функциональности Charles
————
Как думаете, пригодится в работе?
👍 Да, нужно попробовать
🤷♂️ Нет, не потребуется
#инструменты_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥6🤷♂3
Сохраняйте список паттернов микросервисной архитектуры (МСА), который пригодится системному аналитику при:
– Распиле монолита на микросервисы
– Проектировании МСА
– Подготовке к собеседованию
– Изучении принципов МСА
Okay, let’s gooo
🔹 Паттерны проектирования
1. Разбиение по бизнес-возможностям – на каждую хотелку бизнеса по одному микросервису. Пример: сервис управления доставкой
2. Разбиение по поддоменам – отдельный микросервис для каждой сущности. Пример: сервис заказов (сущность заказ)
🔹 Паттерны декомпозиции
1. «Душитель» (Strangler) – постепенный переход с монолита на МСА, по завершении монолит отключается
2. «Слой антикоррупции» (Anti-Corruption Layer) – когда полностью отказаться от монолита невозможно. В этом случае добавляется сервис-прослойка для связи с новыми микросервисами
🔹 Паттерны коммуникации микросервисов
1. API-шлюз (API Gateway) – единая точка входа для клиентов. Для маршрутизации запросов и не только
2. Бэкенды для фронтендов (Backend for Frontends, BFF) – отдельные API-шлюзы под разные платформы (Web, Mobile, Desktop) или роли (Клиент, Ресторан, Курьер)
🔹 Паттерн управления данными
1. База данных на сервис – у каждого микросервиса своя БД
2. Сага (Saga) – про управления транзакциями в микросервисной архитектуре с откатом при ошибках
3. API-композиция – сервис для агрегации данных из нескольких источников
🔹 Паттерны мониторинга микросервисов
1. Проверка работоспособности (Health Check) – эндпоинт /health для проверки статуса сервиса
2. Трассировка запросов – каждому внешнему запросу назначается уникальный ид (traceId) для отслеживания в цепочке вызовов
3. Агрегация логов – централизованный сбор логов со всех сервисов
🔹 Паттерны построения UI
1. Сборка интерфейса на стороне клиента – фронт запрашивает данные и формирует интерфейс самостоятельно
2. Или на стороне сервера – сервак отдает готовые страницу, фронт просто отображает
—————
Паттернов больше, но остальные чаще нужны разработчикам. Подробнее про все эти шаблоны я читал в книге «Паттерны проектирования микросервисной архитектуры», о которой рассказывал ранее
🤩 Естественно
🗿 Нет, списка достаточно
#полезное_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩9👍3❤2🔥1
Проект провалился, я виноват? 🌧
Однажды я вел сразу два проекта, и оба считаю неудачными
Первый фейл
Заказчик хотел автоматизировать работу своих менеджеров, чтобы у них все было в одном месте. Срок был сильно сжатый
Что пошло не так:
🔴 Заказчик накидывал свои хотелки как только мог, мы их не отбивали
🔴 В основе решения иностранный сервис, который в итоге ушел из РФ
🔴 Как СА я не поспевал за темпом разработки, поэтому ребята делали не так, как хотел заказчик
🔴 Тут случился мой конфликт с разрабом с последующим его увольнением. Это затормозило разработку важнейшей фичи
В итоге мы не успели в срок и дорабатывали решение за счет компании, а результатом заказчик остался недоволен (да и мы тоже)
Второй фейл
Второй проект – из гос. сектора. Несложный, но дико непонятный из-за специфичной сферы деятельности компании
Что пошло не так:
🔴 Работали по дырявому ТЗ с противоречивыми требованиями, поэтому возник сильный разрыв ожиданий
🔴 Из-за сферы деятельности не понимали, правильно ли делали или нет
🔴 Выяснилось, что наш заказчик и не заказчик вовсе, а есть другой заказчик, но об этом узнали на финальном демо
Итог: успели в срок и сделали все по ТЗ, но из-за разрыва ожиданий и неопределенности со стороны заказчика дорабатывали систему за свой счет
✍️ Какие уроки извлек
После этих проектов у меня было чувство вины – где-то я мог лучше, где-то из-за моих ошибок замедлили разработку, где-то нужно было лучше защищать технические решения
Но спустя время понял, что моя вина минимальна. Вот почему не стоит винить себя в провале
🟢 Не все мы можем контролировать и предугадать. Бюджеты урезают, кто-то халтурит, у кого-то другой темп работы, санкции прилетают, что там в голове у заказчика - никто не знает
🟢 Виноват не конкретный человек, а вся команда. Если ты часто косячишь, тебя просто уволят. Если тебе тычут на ошибки, этот человек не умеет общаться. Если команда ищет виноватых вместо решения – стоит найти компанию получше. Во всей моей практике удар принимала вся команда, и мы вместе решали проблему
🟢 Иногда твоей квалификации просто не хватает. Это нормально что-то не знать. Одно дело, когда ты соврал на собеседовании, другое – когда от тебя хотят большего, чем ты можешь
Что можно сделать, чтобы минимизировать вероятность провала:
1 Делиться своими переживаниями с командой и руководителем
2. Защищать свои решения и конструктивно обсуждать их с командой
3. Принимать, что ошибки – часть работы
4. Учиться на ошибках, выписать их и провести саморефлексию
5. Делать свою работу честно и добросовестно, чтобы не винить себя
6. Если не справляешься, попросить помощи – коллеги, в чате аналитиков, у ментора, у ChatGPT
Провал проекта — это почти всегда системная проблема, а не вина одного человека. Если ты честно выполнил свою работу, но проект всё равно сорвался — значит, были другие факторы. Анализируй, учись и двигайся дальше
———————
⬇️ А у вас были неудачные проекты? Пишите, что чувствовали и какие уроки извлекли
#истории_системный_анализ
Однажды я вел сразу два проекта, и оба считаю неудачными
Первый фейл
Заказчик хотел автоматизировать работу своих менеджеров, чтобы у них все было в одном месте. Срок был сильно сжатый
Что пошло не так:
🔴 Заказчик накидывал свои хотелки как только мог, мы их не отбивали
🔴 В основе решения иностранный сервис, который в итоге ушел из РФ
🔴 Как СА я не поспевал за темпом разработки, поэтому ребята делали не так, как хотел заказчик
🔴 Тут случился мой конфликт с разрабом с последующим его увольнением. Это затормозило разработку важнейшей фичи
В итоге мы не успели в срок и дорабатывали решение за счет компании, а результатом заказчик остался недоволен (да и мы тоже)
Второй фейл
Второй проект – из гос. сектора. Несложный, но дико непонятный из-за специфичной сферы деятельности компании
Что пошло не так:
🔴 Работали по дырявому ТЗ с противоречивыми требованиями, поэтому возник сильный разрыв ожиданий
🔴 Из-за сферы деятельности не понимали, правильно ли делали или нет
🔴 Выяснилось, что наш заказчик и не заказчик вовсе, а есть другой заказчик, но об этом узнали на финальном демо
Итог: успели в срок и сделали все по ТЗ, но из-за разрыва ожиданий и неопределенности со стороны заказчика дорабатывали систему за свой счет
После этих проектов у меня было чувство вины – где-то я мог лучше, где-то из-за моих ошибок замедлили разработку, где-то нужно было лучше защищать технические решения
Но спустя время понял, что моя вина минимальна. Вот почему не стоит винить себя в провале
🟢 Не все мы можем контролировать и предугадать. Бюджеты урезают, кто-то халтурит, у кого-то другой темп работы, санкции прилетают, что там в голове у заказчика - никто не знает
🟢 Виноват не конкретный человек, а вся команда. Если ты часто косячишь, тебя просто уволят. Если тебе тычут на ошибки, этот человек не умеет общаться. Если команда ищет виноватых вместо решения – стоит найти компанию получше. Во всей моей практике удар принимала вся команда, и мы вместе решали проблему
🟢 Иногда твоей квалификации просто не хватает. Это нормально что-то не знать. Одно дело, когда ты соврал на собеседовании, другое – когда от тебя хотят большего, чем ты можешь
Что можно сделать, чтобы минимизировать вероятность провала:
1 Делиться своими переживаниями с командой и руководителем
2. Защищать свои решения и конструктивно обсуждать их с командой
3. Принимать, что ошибки – часть работы
4. Учиться на ошибках, выписать их и провести саморефлексию
5. Делать свою работу честно и добросовестно, чтобы не винить себя
6. Если не справляешься, попросить помощи – коллеги, в чате аналитиков, у ментора, у ChatGPT
Провал проекта — это почти всегда системная проблема, а не вина одного человека. Если ты честно выполнил свою работу, но проект всё равно сорвался — значит, были другие факторы. Анализируй, учись и двигайся дальше
———————
#истории_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤6⚡2
Собес на 20 минут – red флаг при трудоустройстве? 🚩
Вас тоже бесят супер короткие собесы, после которых сидишь и думаешь: это ты так круто себя показал, или после твоего отключения они там сидят и ржут?
🔹 Мой опыт
У меня было два таких собеса, оба в известные банки. На первом человек просто не был подготовлен к собесу – вероятно его попросили подменить коллегу. Поэтому это был короткий и лайтовый разговор, с которым бы справился и джун (а я собеседовался на senior), а после мне прилетел оффер. Но подобный собес меня смутил, непонятно, что там делают и чем занимаются, поэтому отказал
Второй собес поинтереснее. 30 минут, из них первые 15 минут про проект и поверхностные вопросы СА, остальные 15 нерелевантные должности вопросы (деплоил ли проект, мигрировал ли БД) и бесполезная болтовня про жизнь. Я понял, что что-то не так
Прилетел отрицательный фидбек – сказали, что очень слабый специалист❓
Потом прочитал подробнее и понял, что интервьюеры сделали ошибочный вывод о некоторых скилах: они просто не задали правильные вопросы. Наверное, стоило спрашивать меня не о сериалах, а о моей работе, а еще можно было поработать на 10 минут дольше
🔹 Другой опыт
Иной опыт у моей супруги – при трудоустройстве в IT-компанию, где она сейчас работает, у нее был сухой и короткий технический собес, после которого она сильно расстроилась. Не было понятно ничего, она думала, что провалила
Но уже через час ей прилетел положительный фидбек и приглашение на следующий этап
🔹 Почему так получается
Такие собеседования сильно зависят от интервьюера:
1. Он – очень скиловый человек, с завязанными глазами определяет компетенции кандидата и найдет человека в багажнике на парковке
2. У него плохое настроение или «таких как вы у меня 10 человек в день»
3. Он оказался тут случайно, попросили подменить – приходится выкручиваться
4. У него не развиты софт-скиллы
5. Проводит собес и параллельно работает
6. Не умеет проводить собес, поэтому это сухой и быстрый опрос с вопросами из статьи с Хабра «Топ 100 вопросов системному аналитику на собесе»
Но в любом случае кандидат остается в смятении. Даже если придет положительный фидбек, осадок скорее всего останется. Исключение – если мастерски попал в ожидания
🔹 Что делать после отрицательного фидбека
Чтобы сухой отказ не расстраивал, поинтересуйтесь, что было не так:
1. Запросите подробный фидбек
2. Запросите критерии оценки
3. Проанализируйте свои ответы и сделайте выводы
Так можно понять, это вы где-то не так ответили, или интервьюер не успел раскрыть ваши навыки
——————
⚠️ Короткие собесы – не всегда red flag, но часто сигнализируют о слабом интервьюере или неорганизованности. Если после такого общения остается осадок – стоит насторожиться
На мой взгляд собес нужно уметь проводить: готовиться к нему, уметь сбавлять напряжение, выдерживать темп, в идеале – сделать из этого целостную историю (разобрать все скиллы на одном сквозном примере). Такой подход требует опыта – и времени больше, чем 20-30 минут
⬇ А у вас были подобные собесы? Какой результат, что чувствовали? Пишите в комментариях
#собеседования_системный_анализ
Вас тоже бесят супер короткие собесы, после которых сидишь и думаешь: это ты так круто себя показал, или после твоего отключения они там сидят и ржут?
🔹 Мой опыт
У меня было два таких собеса, оба в известные банки. На первом человек просто не был подготовлен к собесу – вероятно его попросили подменить коллегу. Поэтому это был короткий и лайтовый разговор, с которым бы справился и джун (а я собеседовался на senior), а после мне прилетел оффер. Но подобный собес меня смутил, непонятно, что там делают и чем занимаются, поэтому отказал
Второй собес поинтереснее. 30 минут, из них первые 15 минут про проект и поверхностные вопросы СА, остальные 15 нерелевантные должности вопросы (деплоил ли проект, мигрировал ли БД) и бесполезная болтовня про жизнь. Я понял, что что-то не так
Прилетел отрицательный фидбек – сказали, что очень слабый специалист
Потом прочитал подробнее и понял, что интервьюеры сделали ошибочный вывод о некоторых скилах: они просто не задали правильные вопросы. Наверное, стоило спрашивать меня не о сериалах, а о моей работе, а еще можно было поработать на 10 минут дольше
🔹 Другой опыт
Иной опыт у моей супруги – при трудоустройстве в IT-компанию, где она сейчас работает, у нее был сухой и короткий технический собес, после которого она сильно расстроилась. Не было понятно ничего, она думала, что провалила
Но уже через час ей прилетел положительный фидбек и приглашение на следующий этап
🔹 Почему так получается
Такие собеседования сильно зависят от интервьюера:
1. Он – очень скиловый человек, с завязанными глазами определяет компетенции кандидата и найдет человека в багажнике на парковке
2. У него плохое настроение или «таких как вы у меня 10 человек в день»
3. Он оказался тут случайно, попросили подменить – приходится выкручиваться
4. У него не развиты софт-скиллы
5. Проводит собес и параллельно работает
6. Не умеет проводить собес, поэтому это сухой и быстрый опрос с вопросами из статьи с Хабра «Топ 100 вопросов системному аналитику на собесе»
Но в любом случае кандидат остается в смятении. Даже если придет положительный фидбек, осадок скорее всего останется. Исключение – если мастерски попал в ожидания
Есть и обратная сторона – когда кандидат действительно очень слабый. Но в посте подразумеваю, что с кандидатом все норм
🔹 Что делать после отрицательного фидбека
Чтобы сухой отказ не расстраивал, поинтересуйтесь, что было не так:
1. Запросите подробный фидбек
2. Запросите критерии оценки
3. Проанализируйте свои ответы и сделайте выводы
Так можно понять, это вы где-то не так ответили, или интервьюер не успел раскрыть ваши навыки
——————
⚠️ Короткие собесы – не всегда red flag, но часто сигнализируют о слабом интервьюере или неорганизованности. Если после такого общения остается осадок – стоит насторожиться
На мой взгляд собес нужно уметь проводить: готовиться к нему, уметь сбавлять напряжение, выдерживать темп, в идеале – сделать из этого целостную историю (разобрать все скиллы на одном сквозном примере). Такой подход требует опыта – и времени больше, чем 20-30 минут
#собеседования_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤3🔥1
Частые вопросы про паттерны МСА на собесе СА 📌
Тут рассказал про основные паттерны МСА, а сейчас – про вопросы по этой теме, которые мне задавали на собесе
Тут важно понимать, что такое API Gateway и зачем он в системе. BFF – Backend for Frontend (Бэкенды для Фронтендов) – подход, при котором используется несколько API Gateway под разные платформы (мобильные девайсы, десктоп, веб) или роли (клиент, курьер, ресторан). BFF используется, например, в Uber.
Это снижает нагрузку, разграничивает API и позволяет отдать разные Gateway на поддержку разных команд. Но если в системе роли плюс-минус похожи, а функциональность платформ одинаковая, в шаблоне нет смысла
В ответе говорим про два шаблона из группы «Паттерны декомпозиции» – Strangler или Anti-Corruption Layer. Аналитику сначала нужно изучить функциональность, а затем спроектировать будущие сервисы на основе этих паттернов
О нем я не писал, но на собеседовании меня однажды спросили. CQRS (Command Query Responsibility Segregation) – паттерн, разделяющий операции чтения (запросы, queries) и записи (commands). При этом под чтение и запись создаются разные модели данных.
Шаблон применяется, когда в системе есть дисбаланс по операциям (например, чтение чаще чем запись), и он помогает масштабировать систему. Не стоит применять, если у вас простое CRUD-приложение или нет требований к масштабируемости
Когда в одной операции задействовано несколько микросервисов, и один может не обновить/записать данные – возникает несогласованность
Тут на помощь придет паттерн Saga – бизнес-транзакция разбивается на цепочку локальных транзакций. Если хотя бы одна не выполнится – запускаются компенсирующие транзакции (откат). Подробнее разберем в следующем посте
Обращаемся к группе «Паттерны проектирования». Каждый сервис должен отвечать за отдельную бизнес-область (домен, сущность): базу данных, бизнес-логику и API мы проектируем в пределах этой области.
Тут может возникнуть проблема с «Божественными классами», когда одна сущность включает несколько других – в этом случае ее нужно декомпозировать
Тут поможет шаблон «Агрегация логов» – то есть централизованный сбор логов со всех сервисов для возможности мониторинга
Конечно, каждый сервис может локально собирать логи, но так их будет сложнее анализировать, а рано или поздно их объем повлияет на производительность сервиса
Еще один неочевидный паттерн для СА – «Предохранитель» (Circuit Breaker). Шаблон основан на отслеживании количества неудачных запросов к сервису
Если мы отправили 50 запросов сервису, а он не ответил, то Circuit Breaker временно блокирует вызовы к нему, переключаясь на fallback-логику (например, кэш или заглушу). За это время сервис восстановится и продолжит свою работу
➡ Итог
Перед собеседованием на проект, где есть МСА, нужно повторить:
🔹 API Gateway vs BFF
🔹 Saga
🔹 Strangler vs Anti-Corruption Layer
🔹 Паттерны проектирования
🔹 (вряд ли попадется, но вдруг) Circuit Breaker, CQRS
—————
⬇ Сохраняйте эти вопросы – пригодятся на собеседовании. В следующем посте расскажу простыми словами про самый важный паттерн микросервисной архитектуры
#полезное_системный_анализ
Тут рассказал про основные паттерны МСА, а сейчас – про вопросы по этой теме, которые мне задавали на собесе
Что такое BFF?
Тут важно понимать, что такое API Gateway и зачем он в системе. BFF – Backend for Frontend (Бэкенды для Фронтендов) – подход, при котором используется несколько API Gateway под разные платформы (мобильные девайсы, десктоп, веб) или роли (клиент, курьер, ресторан). BFF используется, например, в Uber.
Это снижает нагрузку, разграничивает API и позволяет отдать разные Gateway на поддержку разных команд. Но если в системе роли плюс-минус похожи, а функциональность платформ одинаковая, в шаблоне нет смысла
Задача – разделить монолит на микросервисы. Что будешь делать?
В ответе говорим про два шаблона из группы «Паттерны декомпозиции» – Strangler или Anti-Corruption Layer. Аналитику сначала нужно изучить функциональность, а затем спроектировать будущие сервисы на основе этих паттернов
О чем паттерн CQRS?
О нем я не писал, но на собеседовании меня однажды спросили. CQRS (Command Query Responsibility Segregation) – паттерн, разделяющий операции чтения (запросы, queries) и записи (commands). При этом под чтение и запись создаются разные модели данных.
Шаблон применяется, когда в системе есть дисбаланс по операциям (например, чтение чаще чем запись), и он помогает масштабировать систему. Не стоит применять, если у вас простое CRUD-приложение или нет требований к масштабируемости
Как решается проблема согласованности данных в микросервисах?
Когда в одной операции задействовано несколько микросервисов, и один может не обновить/записать данные – возникает несогласованность
Тут на помощь придет паттерн Saga – бизнес-транзакция разбивается на цепочку локальных транзакций. Если хотя бы одна не выполнится – запускаются компенсирующие транзакции (откат). Подробнее разберем в следующем посте
Как определяются границы микросервисов? / С чего начать проектирование?
Обращаемся к группе «Паттерны проектирования». Каждый сервис должен отвечать за отдельную бизнес-область (домен, сущность): базу данных, бизнес-логику и API мы проектируем в пределах этой области.
Тут может возникнуть проблема с «Божественными классами», когда одна сущность включает несколько других – в этом случае ее нужно декомпозировать
Как организовать мониторинг и логирование микросервисов?
Тут поможет шаблон «Агрегация логов» – то есть централизованный сбор логов со всех сервисов для возможности мониторинга
Конечно, каждый сервис может локально собирать логи, но так их будет сложнее анализировать, а рано или поздно их объем повлияет на производительность сервиса
Как повысить отказоустойчивость микросервиса?
Еще один неочевидный паттерн для СА – «Предохранитель» (Circuit Breaker). Шаблон основан на отслеживании количества неудачных запросов к сервису
Если мы отправили 50 запросов сервису, а он не ответил, то Circuit Breaker временно блокирует вызовы к нему, переключаясь на fallback-логику (например, кэш или заглушу). За это время сервис восстановится и продолжит свою работу
Перед собеседованием на проект, где есть МСА, нужно повторить:
🔹 API Gateway vs BFF
🔹 Saga
🔹 Strangler vs Anti-Corruption Layer
🔹 Паттерны проектирования
🔹 (вряд ли попадется, но вдруг) Circuit Breaker, CQRS
—————
#полезное_системный_анализ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤🔥1👻1