Pull to refresh
50
-5
Дмитрий @Nikopol_86

Team lead, Golang developer

Send message

Одна платформа, чтобы править всеми

Reading time18 min
Views27K

Привет! Меня зовут Миша, я работаю в Ozon Tech — руковожу направлением базовых сервисов в платформе. Ozon сегодня — это порядка 4000 разработчиков и более 3500 сервисов. Разработка постоянно развивается, количество сервисов увеличивается, и одна из сложных задач — это найти удобный для всех способ управлять тем, что происходит под капотом. 

Для этого мы сделали платформу: это внутренние стандарты, сервисы, процессы, инфраструктура для разработки. Можно сказать, что это такой «сервис для продуктовых разработчиков», который предоставляет удобные инструменты во все команды, обеспечивает единообразие подходов в разных командах, помогает внедрять изменения и новые технологии. Для нас платформа теперь — основа для разработки, на ней строятся все информационные системы, и сложно представить Ozon без неё.

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

Читать далее
Total votes 72: ↑70 and ↓2+68
Comments41

Как в Ozon следят за чувствительной информацией в логах и при чем тут Толкин?

Level of difficultyEasy
Reading time10 min
Views8.7K

Летом 2023 года во время выступления на одной из ИБ-конференций представителю вендора задали вопрос: «А как бороться с секретами и другой чувствительной информацией в логах? Контролировать миллионы записей в сутки довольно трудно». К моему удивлению, вендор ответил, что на текущий момент в России нет таких решений. Удивился я потому, что мы уже отладили к тому времени инструмент для решения именно этой проблемы. Но давайте обо всем по порядку. 

Читать далее
Total votes 25: ↑25 and ↓0+25
Comments9

Регулярные выражения (regexp) — основы

Reading time21 min
Views873K

Регулярные выражения (их еще называют regexp, или regex) — это механизм для поиска и замены текста. В строке, файле, нескольких файлах... Их используют разработчики в коде приложения, тестировщики в автотестах, да просто при работе в командной строке!

Чем это лучше простого поиска? Тем, что позволяет задать шаблон.

Например, на вход приходит дата рождения в формате ДД.ММ.ГГГГГ. Вам надо передать ее дальше, но уже в формате ГГГГ-ММ-ДД. Как это сделать с помощью простого поиска? Вы же не знаете заранее, какая именно дата будет.

Читать далее
Total votes 59: ↑51 and ↓8+43
Comments76

Как составить стратегию тестирования: версия настоящих инженеров

Reading time10 min
Views106K
Без стратегии тестирования можно наверняка обойтись, если есть бесконечное количество квалифицированных сотрудников, времени и денег. Словом, возможность пилить один релиз годами. В таких гипотетических идеальных условиях никакая стратегия не нужна, потому что вы можете тестировать ваш продукт всеми существующими способами как угодно долго, применяя техники в любом порядке, на несколько кругов, и рано или поздно каким-то путем вы придете к production ready качеству.

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

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


Читать дальше →
Total votes 11: ↑11 and ↓0+11
Comments9

Детализированные стратегии кэширования динамических запросов

Reading time7 min
Views4K
Сегодня я хотел бы поговорить о стратегиях кэширования для совокупных запросов к часто обновляемым данным, основанным на времени. На предыдущем месте работы я провел немало «мозговых циклов» и с удовольствием поделюсь некоторыми своими находками.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments2

Пользовательские агрегатные и оконные функции в PostgreSQL и Oracle

Reading time17 min
Views43K

В этой статье мы посмотрим, как в двух системах создавать пользовательские агрегатные и оконные (в терминологии Oracle — аналитические) функции. Несмотря на различия в синтаксисе и в целом в подходе к расширяемости, механизм этих функций очень похож. Но и различия тоже имеются.

Надо признать, что собственные агрегатные и оконные функции встречается довольно редко. Оконные функции вообще по каким-то причинам традиционно относят к разряду «продвинутого» SQL и считают сложными для понимания и освоения. Тут бы разобраться с теми функциями, которые уже имеются в СУБД!

Зачем тогда вообще вникать в этот вопрос? Могу назвать несколько причин:

  • Хотя оконные функции объективно сложнее обычных агрегатных, но ничего запредельного в них нет; это абсолютно необходимый инструмент для SQL-разработчика. А создание собственной оконной функции, даже совсем простой, позволяет лучше разобраться с тем, как работают стандартные.
  • Оконные и агрегатные функции — прекрасный способ совместить процедурную обработку с декларативной логикой. В некоторых ситуациях получается выполнить сложные действия, оставаясь в рамках парадигмы решения задачи одним SQL-запросом.
  • Да и просто интересная тема, а уж тем более интересно сравнить две системы.

Пример, на котором будем тренироваться — подсчет среднего, аналог стандартной функции avg для типа numeric (number в Oracle). Мы напишем такую функцию и посмотрим, как она работает в агрегатном и оконном режимах и может ли она вычисляться несколькими параллельными процессами. А в заключение поглядим на пример из реальной жизни.
Читать дальше →
Total votes 39: ↑39 and ↓0+39
Comments29

Как использовать ресурсы Kubernetes по максимуму для работы с Go-приложениями

Reading time12 min
Views7.7K

Привет! Меня зовут Антон Жуков, я руковожу группой разработки в Сбермаркете. В профессии я уже более 12 лет, с Golang работаю с 2016 года, а с Kubernetes — с 2018 года.

В этой статье расскажу об основах Kubernetes, возможных проблемах и решениях, а также о том, как грамотно использовать ресурсы этой платформы, чтобы выжать максимум из Go-приложений. Кроме того, в конце статьи я опишу кейс настройки GOMAXPROCS на примере нашего приложения и расскажу, как нам удалось повысить его производительность на 20-50%.

Читать далее
Total votes 24: ↑23 and ↓1+22
Comments3

Мультиплатформенные образы: что это такое и зачем они нужны

Reading time7 min
Views7.1K

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

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments4

Как набрать в IT-стартап команду разработки, которая действительно сделает продукт?

Reading time15 min
Views32K
Итак, вы решили дать миру новый программный продукт или сервис. У вас есть продуманная идея, видение, понятное позиционирование, несколько первых потенциальных клиентов и даже бюджет. В общем, дело за малым – собрать команду разработчиков и сделать продукт.

В этой статье мы рассмотрим правильные и неправильные решения при подборе людей, их мотивации и сохранении команды – вашего нового актива. Речь пойдет не о том, как набрать лучших людей и построить совершенную машину разработки, а о том, какие грубые ошибки в подборе людей и организации их работы могут погубить ваше начинание.
Читать дальше →
Total votes 28: ↑16 and ↓12+4
Comments23

Почему вам стоит отказаться от использования timestamp в PostgreSQL

Reading time10 min
Views61K

Не секрет, что работа с часовыми поясами — боль, и многие разработчики объяснимо стараются ее избегать. Тем более что в каждом языке программирования / СУБД работа с часовыми поясами реализована по-разному.

Среди тех, кто работает с PostgreSQL, есть очень распространенное заблуждение про типы данных timestamp (который также именуется timestamp without time zone) и timestamptz (или timestamp with time zone). Вкратце его можно сформулировать так:

Мне не нужен тип timestamp with time zone, т.к. у меня все находится в одном часовом поясе — и сервер, и клиенты.

В статье я постараюсь объяснить, почему даже в таком довольно простом сценарии можно запросто напороться на проблемы. А в более сложных (которые на самом деле чаще встречаются на практике, чем может показаться) баги при использовании timestamp практически гарантированы.

Читать далее
Total votes 96: ↑93 and ↓3+90
Comments136

Новый тип универсальных тонкопленочных антинакипных выпарных аппаратов

Level of difficultyMedium
Reading time14 min
Views1.8K

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

Работая в атомной отрасли, я проектировал установки для концентрирования растворов жидких радиоактивных отходов (ЖРО). Хотя проектировал – это громко сказано, так как перерисовку с небольшими отклонениями вряд ли можно назвать проектированием. В конце концов появилась идея о замене стеклянной колбы роторного испарителя на частично заполненную раствором обогреваемую горизонтальную металлическую обечайку (барабан), снабженную перекатывающимся стержнем для очистки поверхности от отложений под уровнем раствора и оснащенную трактами подвода упариваемого раствора и отвода концентрата. Этот способ был защищен патентом RU2488421C1 «Способ концентрирования жидких растворов».

Читать далее
Total votes 9: ↑9 and ↓0+9
Comments9

Распределённые транзакции

Level of difficultyMedium
Reading time10 min
Views32K

На собеседованиях на позицию middle/senior разработчика часто задают вопросы по распределенным транзакциям в микросервисной архитектуре.

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

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

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

Читать далее
Total votes 26: ↑23 and ↓3+20
Comments1

Практическое руководство по созданию Helm чарта или как избавиться от рутины при работе с YAML манифестами

Level of difficultyMedium
Reading time21 min
Views16K

Бывало ли у вас такое, что вы совершали одни и те же действия из раза в раз и наконец-то решили избавиться от всей этой рутины? Но вы решили отложить это решение на некоторое время, в частности из-за занятости или лени. Но вот вы решаете взять себя в руки и всё изменить! Также было и со мной - и вот в конце концов я решился пойти на оптимизацию развертывания сервисов в Kubernetes при помощи Helm и написать об этом статью!

Я уже успел развернуть несколько приложений в Kubernetes. Но в последнее время взаимодействовать с ресурсами через kubectl становится невыносимо больно. Поэтому я решил осуществить свою давнюю затею - написать свой Helm чарт. Сегодня мы вместе с тобой, Хабрюзер, создадим свой чарт, который можно будет использовать для деплоя собственных приложений!

Читать далее
Total votes 12: ↑11 and ↓1+10
Comments8

11 полезных плагинов для kubectl

Level of difficultyEasy
Reading time4 min
Views7.3K

Kubectl (Kubernetes Control) — это по сути основной интерфейс для взаимодействия с Kubernetes-кластером. Сторонние разработчики сделали для него много полезных плагинов, которые в той или иной ситуации могут облегчить работу инженера и сэкономить время. В этой статье рассмотрим 11 удобных плагинов для расширения функционала kubectl.

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments6

Про РЧ/СВЧ для программистов: об S‑параметрах и пользе логарифмов

Level of difficultyHard
Reading time11 min
Views9.3K

Те инженеры, которые по работе или в рамках хобби приходят в электронику из разработчиков прикладного программного обеспечения, однажды сталкиваются (непосредственно вживую или же через ту или иную документацию) с инженерами, изначально обучавшимися на радиоэлектронные специальности. Ввиду принципиального различия бэкграундов «программистам» бывает непросто осваивать новые для себя области знания. И дело не только в терминологии — в ряде случаев само восприятие тех или иных проблем может представляться, на первый взгляд, контринтуитивным. Опытные инженеры-электронщики зачастую склонны проявлять когнитивное искажение, называемое проклятием знания. Особо насущной данная проблема видится в дисциплинах, связанных с РЧ/СВЧ. Поэтому в рамках данного небольшого цикла мы попробуем разобраться в нескольких базовых понятиях этой области знаний. Сегодня мы поговорим про децибелы, волоконно‑оптические линии связи и S‑параметры.

Сложить степени
Total votes 48: ↑47 and ↓1+46
Comments29

Bash-скрипты: начало

Reading time11 min
Views1.7M
Bash-скрипты: начало
Bash-скрипты, часть 2: циклы
Bash-скрипты, часть 3: параметры и ключи командной строки
Bash-скрипты, часть 4: ввод и вывод
Bash-скрипты, часть 5: сигналы, фоновые задачи, управление сценариями
Bash-скрипты, часть 6: функции и разработка библиотек
Bash-скрипты, часть 7: sed и обработка текстов
Bash-скрипты, часть 8: язык обработки данных awk
Bash-скрипты, часть 9: регулярные выражения
Bash-скрипты, часть 10: практические примеры
Bash-скрипты, часть 11: expect и автоматизация интерактивных утилит

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.


Читать дальше →
Total votes 69: ↑61 and ↓8+53
Comments123

Ряд опытов на летние деньки

Level of difficultyMedium
Reading time9 min
Views11K
Картинка Freepik

Лето постепенно вступает в свои права, температура на улице повышается, и думать о чём-то серьёзном совершенно не хочется. Тут нам как раз помогут немножко поразвлечься простые опыты, которые может проделать каждый.
Читать дальше →
Total votes 59: ↑57 and ↓2+55
Comments6

Быстрый старт с Zsh и Powerlevel10k: двигаемся к терминалу мечты

Level of difficultyMedium
Reading time11 min
Views16K

Привет, Хабр!

Меня зовут Рожнев Андрей, участник профессионального сообщества NTA.

Делюсь личным опытом по настройке терминала в Unix‑подобных ОС (macOS, Fedora, Ubuntu и так далее).

Когда я только залетал в отрасль софтверной разработки, первое, что меня напрягло — конечно же терминал и его неотвратимость. По итогу же оказалось, что терминал — это твой верный друг и соратник на тернистом, но таком интересном пути в мир IT. Один из вариантов полюбить терминал — потратить какое‑то время, немного разобраться в теме и настроить всё это дело под себя любимого.

Читать далее
Total votes 6: ↑3 and ↓30
Comments0

Пол — это лава: разработка прототипа интерактивной светодиодной игровой платформы

Level of difficultyMedium
Reading time8 min
Views11K

Дурная голова рукам покоя не даёт… история началась несколько месяцев назад: я увидел в интернете забавное видео игры в комнате с пиксельным светодиодным полом и решил сделать подобное для своих детей. За эти месяцы я получил массу удовольствия от процесса разработки и даже заразился идеей масштабирования проекта, но обо всём по порядку! Внимание, ниже будет много фото! А в конце статьи есть видео работы.

Читать далее
Total votes 96: ↑96 and ↓0+96
Comments38

Библиотека разработчика микросервисов. Полезные книги на русском языке

Reading time10 min
Views13K

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

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments4
1
23 ...

Information

Rating
Does not participate
Date of birth
Registered
Activity

Specialization

Backend Developer, Software Architect
Senior
Git
OOP
PostgreSQL
SQL
Linux
Docker
Golang
MongoDB
Redis
REST