- 60
- 139 454
Константин Козловский
Russia
Приєднався 10 сер 2014
Полезная информация для IT специалистов в коммерческой разработке, стандарты разработки, инструменты и не только. Разработка IDE для архитекторов, разработчиков и аналитиков. Визуальное проектирование систем и бизнес-процессов. Более 12 лет опыта разработки Автоматизированных систем. Backend разработка.
Вы пишете логи неправильно! Всё о логах в коммерческой разработке
В крупных организациях и командах, работающих с высоконагруженными системами, требования к логированию значительно строже, чем в обычных приложениях. Часто разработчики не осознают важности качественного логирования и добавляют в логи избыточную или неинформативную информацию. Это не только усложняет диагностику и решение проблем, но и может привести к перегрузке систем и нехватке места на жестких дисках. В этом видео мы обсудим распространенные ошибки в логировании и способы их устранения, а также акцентируем внимание на ключевых аспектах и некоторых правилах, которые помогут сделать ваши логи более эффективными и полезными.
Тайм коды:
00:00 Интро
00:48 Уровни логирования
02:56 Бесполезные логи
03:22 Полезные логи
04:10 Логирование ошибок
05:29 Бесполезные и полезные логи ошибок
07:20 Напутствия :)
09:20 Немного про трейсинг
09:50 Подстановка переменных в логах
11:00 Бизнес и технические ошибки
11:54 Заключение
Тайм коды:
00:00 Интро
00:48 Уровни логирования
02:56 Бесполезные логи
03:22 Полезные логи
04:10 Логирование ошибок
05:29 Бесполезные и полезные логи ошибок
07:20 Напутствия :)
09:20 Немного про трейсинг
09:50 Подстановка переменных в логах
11:00 Бизнес и технические ошибки
11:54 Заключение
Переглядів: 3 330
Відео
Feature Toggles! Безопасные релизы с фича флагами
Переглядів 580Місяць тому
В этом видео мы погружаемся в мир фиче тогглов (feature toggles) и исследуем, как они могут значительно улучшить процесс разработки программного обеспечения. Вы узнаете, что такое фиче тогглы и как они позволяют командам гибко управлять функциональностью приложений, минимизируя риски при развертывании новых функций. Мы обсудим, как правильно ошибаться и учиться на своих ошибках, а также рассмот...
Обратная совместимость в Backend Разработке
Переглядів 6792 місяці тому
Расскажу на практических примерах о необычайно важном аспекте разработки - принципе сохранения обратной совместимости. Каждый профессиональный разработчик должен соблюдать этот принцип и заботиться не только о том как выглядит и работает код, а еще и о том как будет устанавливаться очередная версия программного обеспечения в продакшен среду. Обсудим две практические задачи, которые я часто испо...
Как научиться учиться в IT и не сгореть?
Переглядів 5883 місяці тому
Расскажу про обучение и дам пару советов о том как выстроить процесс эффективного обучения в IT сфере, никакой рекламы и промывания мозгов =) Поделюсь личным опытом. Поговорим про игры, гейм-дев и пет-проекты. Обучение в жизни очень похоже на прокачку в играх!
Базы данных в HighLoad. Советы и рекомендации по работе с БД в крупных проектах
Переглядів 9 тис.3 місяці тому
Мы работаем в большой высоконагруженной транзакционной системе, что добавляет определенные особенности в процесс разработки. Путём проб и ошибок, мы вывели для себя ряд стандартов и правил для работы с реляционными базами данных, которых придерживаемся уже длительное время. Эти рекомендации позволяют значительно снизить количество инцидентов и сосредоточиться на решении бизнес задач. Тайминги: ...
Главная КИБЕРБИТВА страны. Standoff. Хакеры против хакеров
Переглядів 1,6 тис.4 місяці тому
Хочу рассказать об очень эффектном и интересном событии, проходящем в России каждый год - Standoff. Главная кибербитва страны - место где хакеры соревнуются с хакерами. Поделюсь информацией о том, как проходит это мероприятие, каких правил придерживаются участники, как проходит кибербитва. Покажу впечатляющие моменты с публичной части данного мероприятия - киберполигона. Тайминги: 00:00 Вступле...
Сеть и сокеты. База для backend разработчика.
Переглядів 51 тис.5 місяців тому
Поговорим про базовые понятия, связанные с сетью. Сокеты, что это такое и как с ними подружиться. Базовые протоколы TCP / UDP и чем они отличаются. Прикладные протоколы HTTP/SMTP/POP3/IMAP/FTP/SSH/SFTP и другие. Коснемся пулов соединений и таймаутов. Всё что необходимо понимать backend разработчику и еще немного! Тайм коды: 00:00 Интро 00:15 Сокеты 02:20 Протоколы 04:00 TCP и UDP 05:24 Прикладн...
Spring Boot. БЫСТРЫЙ старт. Backend
Переглядів 9976 місяців тому
База по Spring Boot, немного истории, плюсы и минусы, что хорошо, а что плохо =) и в придачу топ 100 аннотаций, которые используются в моей команде. Класс приложения @SpringBootApplication @EnableScheduling @EnableCaching @EnableJms @EnableJpaRepositories @EnableAutoConfiguration @EnableAdminServer @EnableConfigServer @EnableDiscoveryClient @EnableEurekaServer @EnableFeignClients @EnableReactiv...
Как мы обновления в PRODUCTION ставим. В банке!
Переглядів 2,5 тис.6 місяців тому
Делюсь опытом нашей команды в установке обновлений и релизов. Вся боль, переживания, победы и поражения в одном видео. История развития процесса установки релизов с нуля. От хаоса до эры технологий. От ручной установки до полной автоматизации. От высоких рисков к высокой стабильности! Тайм коды: 00:00 Интро 00:40 Требования к обновлениям 01:11 Релизная политика 01:35 ХАОС 02:10 Как оценивать ре...
Теги к вашему видео бесплатно через нейросеть!
Переглядів 2916 місяців тому
Учимся продуктивно работать с Chat GPT на примере заполнения описания к шортсам на youtube. Всего лишь немного контекста, субтитры к видео и Chat GPT любезно подготовит для вас рыбу с текстом, который останется лишь отредактировать, немного оживить и готово. Дополнительно можно попробовать сгенерировать название и теги, в неограниченном количестве. Тайм коды: 00:00 Интро 00:56 Описание и теги к...
Java & Kotlin с нуля. Настройка окружения. Backend
Переглядів 7267 місяців тому
Один из самых сложных и запутанных моментов на старте любой профессии - настроить рабочее место и окружение. В этом ролике расскажу, как подготовить компьютер к backend разработке на Java & Kotlin, как скачать и установить JDK, какую среду разработки использовать и как ее настроить. Покажу простейший способ создать и запустить Spring Boot приложение, а также механизмы настройки сборщика Gradle....
Как я пережил DDOS атаку школьников? Backend
Переглядів 17 тис.8 місяців тому
Как я пережил DDOS атаку школьников? Backend
ТОП 4 ошибок в резюме айтишника. Почему не берут на работу?
Переглядів 1,2 тис.8 місяців тому
ТОП 4 ошибок в резюме айтишника. Почему не берут на работу?
ЭТО позволит тебе писать код быстрее. Скоростная разработка!
Переглядів 1,7 тис.8 місяців тому
ЭТО позволит тебе писать код быстрее. Скоростная разработка!
Git Gitlab Bitbucket Курс Для Новичков
Переглядів 2,1 тис.9 місяців тому
Git Gitlab Bitbucket Курс Для Новичков
ArchiBox. Интеграция со SpringBootAdmin
Переглядів 320Рік тому
ArchiBox. Интеграция со SpringBootAdmin
ArchiBox. IDE для архитекторов, аналитиков, разработчиков.
Переглядів 1,4 тис.Рік тому
ArchiBox. IDE для архитекторов, аналитиков, разработчиков.
Совсем пунктами согласен, но по поводу enumов есть ньюанс,по крайней мере в mySQL. Там с субпартицианированием могут быть проблемы. Не получится разделить таблицы. Например,я хотел разделить таблицу по дате - полугодия и по статусам. Статусы были строки: published и deleted. Для этого используется list of, а с ним range ограничен(
Ручки, ручки..... Бля! Яндекс насадил свой кривой перевод и теперь это как зараза везде.
Нужна пояснительная бригада)
Логирование для разных случаев делается по разному...
не поспоришь )
"Переливать данные между полигонами" типа скорпировать часть данных с прода на QA сервер? как это технически делают? Как принято делать в больших конорах?
Данные с прода на тестовые полигоны не заливают, это нарушает десятки правил) с теста на прод бывает, настраивают сложный договор на тесте, проверяют и переносят. Также распространена миграция данных между разными тестовыми полигонами
@ ну зависит от данных наверное, личные данные может и не заливают. Но рейты акций, почему нет?
@ если генерация синтетических данных для наполнения тестового контура невозможна, прибегают к процедуре обезличивания, этим занимаются целые команды, базу загружают в специальное место где каждую колонку с данными проверяют и подвергают обезличиванию с сохранением бизнес целостности, т.е если в базе ИНН организации встречается в нескольких местах, его обезличивают везде одинакого. Это очень сложная и кропотливая процедура.
Очень хороший обзор, но я бы добавил: 1. Не интерполируй данные в лог текст: разделяй все данные в отдельный лог контекст. 2. Обязательно implement поддержку для correlation id; чтобы отслеживать виртуальные threads. 3. Используйте позитивный logging, чтобы понять что происходит.
Позитивный логгинг? Что это:)
@@konstantin.kozlovskiy Positive Logging - это когда вы последовательно добавляете что было сделано, включая мельчайшие операции, результаты условий и любые действия. Когда просматривается лог, вы видите полную картину до мельчайших подробностей. Такие логи желательно включать в общий лог техт как отдельное предложение (аннотацию). Это же уменьшает количество логов, т.е. вы просто читаете один лог как телеграфную ленту о проделанной работе.
Вы неправильно видео снимаете. Люди с айкью 1, которым оно адресовано, не пишут бэкенд приложения. Где хотя бы объяснения ПОЧЕМУ не писать в инфо все что хочешь? Ноль пользы
в видео довольно четко описано что обилие инфо логов с бесполезной информацией забивает жесткие диски системы логирования, куда они отгружаются
Вот мне попался ролик "вы пишете логи неправильно". Если честно, моя первая реакция "да кем ты себя возомнил". Смотреть видео уже нет никакого желания, слишком высокомерное отношение к людям.
ничего личного, это лишь один из многих механизмов привлечения внимания пользователя
@@konstantin.kozlovskiy а зачем? Интересный контент не нуждается в клик бейтах.
Какой бы контент не был интересным, есть ряд характеристик у видео, которое влияет на количество показов в ленте рекомендаций, в настоящий момент каждый автор прилагает все возможные усилия для продвижения своего контента, к сожалению такие обложки работают)
хочется отметить стремление автора к грамотному написанию. и картиночка поправлена и название ролика. но теперь красный крест в превью собаки погрызли. нижняя правая часть куда-то делась. ну ничего. может станет не всё равно когда-нибудь и сделает как положено. (ролик естественно без просмотра)
а вы очень наблюдательны, спасибо)
На проде не только логи не нужны лишние, но и трейсы могут сильно заспамить. А еще много чего в виде стартера добавляют в подключаемые библиотеки, а между тем там пару артефактов конкретных надо, а не весь зверинец и такая проблема есть повсеместно. Бывает два три стартера друг друга перекрывают, но разбираться, в этом всем лень.
Константин так рассказывает, будто он сам читает наши логи и уже устал от того, как мы плохо логируем 😂
Не у него опыт, и там дай боже каждому выдержать это все. А говорит по делу.
@@olegchumin6634у него опыт? Но надо ещё неплохо бы допускать мысль, что у кого-то тоже может быть опыт, а потому не выебываться и писать нормальный заголовок к видео.
Очень грустно что вы не допускаете мысли, что громкий заголовок это лишь способ привлечения внимания пользователя, и такими заголовками пестрит весь интернет, если именно он привлек вас в комментарии к этому видео - значит это работает
О, это камень в лицо разработчиков Trassir
А Вы пишете "пишите" неправильно.
спасибо, исправил =))
Едите, пишите, думайте головой.
ПишИте - это повелительное наклонение, школота безграмотная…
Желаю и вам никогда не опечатываться
"есть логи которые не нужны в продакшене", - в том то и дело что никогда не знаешь какая именно инфа на продакшене тебе понадобится. Нормальное логирование сейчас это когда все логи подряд льются в консоль(в логах присутствует сквозной traceId), там их забирает стек логирвоания типа ELК, все это дело ораничивается скажем 1TB SSD(для фирмы стоит копейки), а дальше через веб морду типа графаны ты можешь глянуть что происхдило на проме во всех подробностях в любой момент времени(в приделах месячной давности), при этом все фильтруя как угодно. Единственное ограничение бывает, это когда сама запись в логах замедляет работу и следует ее поубавить, но обычно этого не просиходит так как приложение всеравно выводит логки в STDOUT(RAM) , а затем сбрщик асинхронно это дело забирает
В нашей системе генерируется около 400-500гб логов в день, держать логи в активном хранилище необходимо на протяжении 3 месяцев минимум, и это уже далеко не 1ТБ. В 99.9% случаев операции проходят штатно и не требуется в логах наблюдать детальную информацию, и только 0.01% требует разбора, где эта информация бы пригодилась. В таком случае (в рантайме, без перезагрузки) включаем debug, воспроизводим проблему и отключаем debug.
@@konstantin.kozlovskiy А если событие уже было, и ты не знаешь когда тебе включать дебаг? Ну то есть вот требуется разбор именно того самого события? У меня как-то был случай случайного списания с клиента пол мульта рублей, и поверь тогда нужны были все возможные данные которые только можно достать почему так произошло) Причем это был уникальный кейс который больше не повторялся, а связан он был с глюком оборудования
"Нормальное логирование сейчас это когда все логи подряд льются в консоль" - абсолютно дилетантское утверждение.
вероятно в таком случае не помогли бы никакие логи :)
@@ryanlashkevich9615 в противном случае само приложение занимается логирвоанием, чего быть не должно, так как нефиг ему тратить ресурсы еще и на передачу логов куданить по сети
Спасибо, очень полезно
Давно не виделись 🎉
привет =))
Больше 10-ти минут слушать откровенный бред - это перебор Автору советую связаться с разработчиками из OpenWay Group и "научить их уму-разуму" - они ведь всего то занимаются процессинговым ПО 🤣🤣🤣 Короче мальчик - NoSQL тебе в руки и не морочь голову начинающим
Слушай, это все прикольно, но что делать с миграциями? Ну вот считай меняется структура таблицы, и предыдущие фичи по сути перестают работать после релиза этой миграции, что тогда?
@@eclipsium_msk это тебе в соседний ролик про обратную совместимость, там я подробно рассказываю что все миграции должны быть с сохранением обратной совместимости
Обратная совместимость в Backend Разработке ua-cam.com/video/rXQsXlUzV70/v-deo.html
@@konstantin.kozlovskiy Хм, логично :D От души
Просто есть такой тип разработчиков, которые поделили весь мир на правильно и неправильно, на чужих и своих, на хуево и грамотно...Но они не понимают, что мир не делится на черное и белое в абсолюте. Они не понимают, что мир гораздо больше и шире, и что в нем на самом деле гораздо больше красок - целый диапазон и огромные палитры. И в разработке так же, как и во всем, не бывает абсолютно правильных и неправильных решений. Где-то комментарии действительно нужно, где-то они избыточны. Где-то есть смысл использовать ManyToOne, а где-то нет. Поля бывают обязательные и необязательные. Ситуации разные и нельзя применять один подход ко всем. Нужно быть гибким и руководствоваться разумным смыслом. Я встречал разрабов, которые не принимают Lombok, Hibernate, Spring и др. Они готовы написать собственный велосипед. Аргументируя это тем, что уж они-то точно знают как он работает. Но это глупость и нежелание развиваться, идти в ногу со временем...Вот, закипел мой пукан!!
Комментарии везде и это удобно....Просто браво....Особенно это удобно в полях типа fio, name, surname, middlename, age, status и тд....Действительно, если бы не было комментариев, хер бы кто догадался что это такое!!!
Не использовать @ManyToIne, OneToMany и тд....Может тогда еще не лошадях обратно будем ездить? Все равно куча людей нарушают правила за рулем. Очень много проблем, смертей, убытков и тд....Если у вас разработчики не умеют их использовать, зачем вы берете таких разработчиков?? Если ваши вам, чтобы решить ваши бизнес-процессы, нужно то тут, то там расставлять Lazy, Eager и тд, и при этом у вас постоянно проблемы, то может быть вы спроектировали неправильно приложуху?
Поля в таблице обязаны быть Nullable. Это ведет к тому, что в коде все поля тоже Nullable. Аргумент того, что бизнес-процесс меняется, и эти поля не нужны - очень абстрактный. С таким подходом можно сказать, разрабатывая архитектуру системы ни в чем нельзя быть уверенным. А вдруг через полгода придет бизнес и скажет, теперь мы отправляем транзакции не через партнера А, а через партнера Б. Да произойти может вообще все, что угодно. И только из-за этого ставить Nullable, это какая-то плохая идея. Ставить костыли, если изменится бизнес-процесс, это конечно плохо. Но ставить бесчисленное количество проверок в коде на null - еще хуже. С таким кодом почти невозможно работать! К тому же, есть бизнес-процессы, в которых железно есть NotNull поля. Например, Swift переводы, переводы на карту, заполнение анкетных данных и еще много чего. Если Имя Фамилия может быть пустое, зачем тогда вообще нужна эта сущность?? Swift переводы - много полей обязаны быть не Null. Нахрена там Nullable и лишний геморой с проверками??
:D ты собесы проводишь такие, чтобы забайтить людей на просмотр твоих видосов?)feature toggles изучено)
а как правильно?
Послушал, было интересно. Таких тем немного. Нехватает подробных разборов в глубину. Было бы интересно послушать про безопаность и практические примеры, например как получить к нему доступ извне, что говорилось в этом видео про "хакнуть" сканером
Мда, это тебе не на галере без тестов и с верой в Бога заливать фичи в прод... Смотрю тебя и всё больше узнаю о качественной разработке продукта, спасибо!
Вот бы в жизни были фиче-тоглы, взял да откатил что либо
Включил новую работу на 1% попробовать?)
А можно отдельного разрабочтика под фича тогл спрятать ? (=
Помнится когда то лет 5-6 назад попались уроки Евгения Волосатова там создавались на Java сокет серверы , рекомендую для практики
nicht schlecht
nicht schlecht
Какая чушь... вот, что бывает, когда ты школьник, которому для "бизнеса" хватило только на сервера и деплой. Диджитал оушен тут не причем. Ддос можно осуществить на любой провайдер. В вашем случае всему виной школоподход к бизнесу))
школоподход?
Насчет странного пункта про фото и возраст в резюме - это скорее всего особенность банков, там довольно нестандартные методы работы все-таки
Очень необычные, половинчатые советы. Например про UUIID id... Во первых, нет математической гарантии их неповторямости... и использовать UUID рационально только как дополнительное поле в качестве вторичного ID для связей между фрагментами распределенной БД... а для связей в локальных БД ясен перед должен использоваться быстрый и компактный INTEGER id... и самое главное для большой БД особенно на механических HDD - во избежание будущих тормозов на SELECT-запросах ни в коем случае нельзя создавать индексы по полям и функциям, которые участвуют в запросах и одинаковые значения которых равномерное распылены по всему объему записей - например по кодам операторов, по типам документов, по суммам платежей и т.д.
вы зачем даете доступ аналитикам напрямую в базу? пусть ходят по апи.
у нас в системе более 300 таблиц, API на всё не сделаешь
А не проще использовать nvim, там все горячее клавиши
Крутой ролик! Спасибо 🎉
Спойлер - в конце концов он объяснил что такое сокеты в 17:15
Если не ошибаюсь некоторые бд даже не позволяют создавать вторичные ключи
Жизненное, Костя. Спасибо!
непонятно с фигали инстаны приложения обновляются по одному? когда кубер например гасит их все разом не допуская такой ситуации чтобы разные версии одновременно существовали на сервере
Кубер работает согласно политике ролаута, можно настроить и сразу все и не сразу, погасите сразу все и получите даунтайм
Немного не в тему видео, но я бы API сделал бы POST /api/v1/contract а не POST /api/v1/create-contract, я бы избегал verb'а в названии endpoint без крайней необходимости
Может еще быть сложнее задача: если окажется что строк в базе так много, что добавление колонки повесит базу на несколько минут или часов, что не допустимо в текщем проекте.
если колонка добавляется nullable, то обычное ее добавление занимает миллисекунды. Но если таблица под высокой нагрузкой - может возникнуть лок, мы такие обновления (с DDL) всегда ставим в часы наименьшей нагрузки и всегда готовы механизмы остановки и перезапуска миграции
@@konstantin.kozlovskiy В таком случае, звучит так что нужно миграции на БД делать вручную, а не через embedded Liquibase. Верно? Или есть какие способы повлиять на установку при старте приложения?
9:52 - все, не прошел я собес((
Надеюсь информация в видео пригодится тебе на пути :))
5:00 - @JsonAlias над полем в dto???
Интересно, не сталкивался с таким решением, думаю для частного случая может подойти
Видео называется сокеты и сеть, и собственно где сокеты? Где по большому счету сеть? Перечислить протоколы и? Автор не зачёт.
[ˈsɒkɪt] -- сокит
Пожалуйста, поставь поп-фильтр на микрофон
Уже поставил)
UUID пойдет только для малого количества проектов. UUID занимает больше места, проблемы с индексацией (index fragmentation) будет все хуже и хуже. рандомность uuid боком обернется при инсертах, индексы будут корявые а не по порядку. а ведь есть еще понятие clustered and non clustered index, если вы сделали UUID pk то записи будут создаваться бардачно. nullable - это норм, какая разница менять валидацию в сервисах или nullable на true сделать? комментарии - а если это мне не удобно???????????????????????????? (говоришь как будто это всем удобно) не использования аннотации ManyToOne OneToMany и ManyToMany и тд, я согласен, без них жизнь становится все лучше и лучше. это единственный хороший совет а остальное это для веганов.
11:40 Еее ботоводы здесь) Что за игра была?
много игр было, Granado Espada, Black Desert, Albion и другие )