Pull to refresh
0
Сергей Жуков@devalineread⁠-⁠only

Программист

Send message

Как перейти от монолита к микросервисам без сложностей и рисков? Четыре проверенных паттерна

Level of difficultyMedium
Reading time3 min
Reach and readers19K

При переходе от монолитной к микросервисной архитектуре разработчики часто сталкиваются с несколькими проблемами.

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

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

Использование в практике таких паттернов как Strangler Fig Pattern, Parallel Run Pattern, Decorating Collaborator Pattern и Change Data Capture позволяет разработчикам значительно снизить риски и проблемы, возникающие при таком сложном переходе.

Давайте рассмотрим основные концепции этих паттернов.

Читать далее

Как тестировать подписочный экран в мобильном приложении

Level of difficultyEasy
Reading time2 min
Reach and readers3.1K

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

Подписку мы чаще всего покупаем на подписочном экране (можно еще услышать, что его называют subscreen или paywall). Поэтому сегодня будем тестировать именно его.

Читать далее

90% разработчиков не понимают принцип инверсии зависимостей из SOLID. DIP — это не про абстракции

Reading time4 min
Reach and readers107K

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

Почему такая трактовка неверна и в чем же суть принципа — об этом и пойдет речь далее.

Читать далее

7 основных этапов реагирования на ИТ-инциденты, используя мониторинг Monq

Level of difficultyMedium
Reading time17 min
Reach and readers4.3K

Эффективное реагирование на инциденты — это ключевая задача команды ITOps (IT Operations), которая помогает поддерживать стабильность и безопасность ИТ-инфраструктуры предприятия. Весь процесс состоит из нескольких этапов, каждый из которых играет важную роль в минимизации ущерба, восстановлении работы и предотвращении будущих сбоев. В этой статье разберем сущность каждого этапа, чтобы показать как обеспечить систематизированное и оперативное реагирование на инциденты в ИТ-среде.

Читать далее

Про рабочую тревожность и про то, как с ней справляться

Level of difficultyEasy
Reading time4 min
Reach and readers12K

Я тревожный человек. Мне часто кажется, что вот-вот случится что-то плохое. В работе происходит многое. Тут и коммуникации, и планы-дедлайны, и задачи разные. И так получается, что тревожность влияет на работу, а работа влияет на тревожность.

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

Читать далее

Todo-лист на максималках: разбираем архитектуру крупного приложения

Level of difficultyHard
Reading time31 min
Reach and readers16K

В этой статье я покажу, как устроена многослойная архитектура крупного реактивного web-приложения, и особенности его запуска под Electron. Материал будет полезен, если вы планируете начать свою разработку, хотите попробовать себя в роли архитектора, вас не пугает Shared Workers, Service Workers или, в конце концов, вы хотите это попробовать или разобраться.

Читать далее

Как спроектировать мобильное приложение маркетплейса за 7 шагов

Level of difficultyEasy
Reading time12 min
Reach and readers4.9K

Маркетплейсы занимают ключевую роль в цифровой экономике: на площадках проще покупать и продавать. На Wildberries и Ozon пришлось 78% всех заказов в российской электронной торговле за второе полугодие 2023 года, а количество заказов увеличилось до 5,1 млрд.

В этом материале мы рассмотрим основные шаги для запуска мобильного приложения своего маркетплейса. Статья охватывает разные методы разработки — от nocode-платформ до кастомных решений и гибридных подходов с использованием headless CMS. Это поможет выбрать технологии и стратегии для проекта.

Читать далее

Репликация данных с использованием Debezium и Kafka

Level of difficultyMedium
Reading time5 min
Reach and readers7.2K

В этой статье мы рассмотрим эволюцию стратегий репликации данных, начиная с ручных подходов и заканчивая автоматизированными решениями, использующими современные технологии, такие как Kafka и Debezium. Ниже описан пример примененный в компании Wildberries.

Читать далее

Перевод CLI-приложения на Python: локализация click и typer с GNU gettext

Level of difficultyMedium
Reading time18 min
Reach and readers4.8K

Для регистрации ПО в реестре Минцифры России нужно соблюсти несколько условий, одно из них — наличие русского языка на сайте и в документах. И хотя требований к языку в самом программном обеспечении я не нашёл (может быть, пока), но задача по русификации интерфейса появилась.

Мы в «Тантор Лабс» развиваем корпоративную платформу баз данных Tantor XData, один из её компонентов — CLI (интерфейс командной строки) на Python с библиотекой Typer, которая, в свою очередь, написана поверх Click. Этот инструмент мы и попробуем русифицировать, а в идеале — научимся переводить приложение на разные языки, если потребуется.

В статье рассмотрим концепции и инструменты, применяемые для локализации, включая использование библиотеки gettext в Python, а также стандарты, предоставляемые GNU gettext. Разберём работу с .pot, .po и .mo файлами, а также обработку плюральных форм, учитывающих языковые особенности множественных чисел.

Читать далее

Простой мини-чат на FastApi: Современный интерфейс, вебсокеты и SQLAlchemy с деплоем

Reading time40 min
Reach and readers57K

Привет, друзья! Сегодня я подготовил для вас увлекательную практическую статью о создании мини-чата на FastApi. Мы погрузимся в мир вебсокетов, узнаем, зачем они нужны и как применяются в реальных приложениях. Также я продемонстрирую работу с асинхронной SQLAlchemy на примере взаимодействия с базой данных SQLite.

Для создания современного интерфейса мы обратимся к интересному и бесплатному сервису Websim.ai, который за пару минут сгенерирует нам интерфейс, включая страничку для входа/регистрации и страницу самого чата.

Чтобы наш чат мог обслуживать множество пользователей одновременно, мы выполним деплой нашего FastApi приложения. Для этого воспользуемся сервисом Amvera Cloud. Нам нужно будет подготовить файлы приложения, написать код, создать файл с настройками (можно сгенерировать на сайте или скопировать мой код), а затем доставить файлы на сервис. Для доставки можно использовать встроенный терминал или GIT, используя стандартные команды PUSH/PULL.

Но прежде чем мы погрузимся в код, давайте кратко обсудим, что такое вебсокеты и как они работают в контексте FastApi.

Читать далее

Мутации в микросервисах: применяем Temporal

Level of difficultyMedium
Reading time10 min
Reach and readers51K

Всем привет!
В прошлой статье была поставлена задача о надёжных мутациях и транзакциях в архитектуре Профи, в этой статье разберём один из вариантов решения — применить workflow-engine Temporal.

Читать далее

Льем из Postgres в Elastic консистентно

Level of difficultyMedium
Reading time5 min
Reach and readers10K

Предположим, что у нас есть Postgres, Kafka и Elastic. В Postgres живет сущность, например, item.

Иногда возникает необходимость создать поисковый индекс отдельно от основной базы.

Например, если мы не хотим обрушивать поисковый трафик на Postgres мы можем вынести данные из него в Elastic.

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

Но что если данные нам нужны актуальные, и ситуация, что через секунду после записи сущности в Postgres запрос на её чтение отдает Not Found - неприемлема?

Читать далее

Как сократить время ответа в 2 раза, добавив одну строку кода

Level of difficultyMedium
Reading time9 min
Reach and readers69K

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

В этой статье мы поделимся:

1. Описанием, как мы использовали инструменты Jaeger и Grafana для выявления узких мест в производительности, что привело к выявлению критических проблем со сборщиком мусора;

2. Анализом влияния различных настроек сборщика мусора на время ответа, что позволило сократить его вдвое для 99% запросов;

3. Когда и почему стоит рассматривать изменение стандартных настроек сборщика мусора (на примере нашего случая).

Читать далее

Как мы внедрили генеративную модель в объявления на Авто.ру. Доклад Яндекса

Reading time6 min
Reach and readers3.5K

Фронтенд‑разработчики из Авто.ру Максим Алмаев и Дмитрий Размолодин рассказали на внутреннем митапе, как их команда запустила генерацию описаний машин в помощь тем, кто публикует объявления на сервисе. Вы узнаете, зачем разработчики лимитировали нагрузку, как победили проблему галлюцинаций и что помогло убедиться в корректной работе решения.

Переложили выступление ребят в текст для удобства читателей Хабра.

Читать далее

Настройка Nginx multiple reverse proxy для k3s+istio

Level of difficultyEasy
Reading time4 min
Reach and readers21K

Всем читателям, привет! Хочется поделиться своим опытом по созданию Nginx reverse proxy для интересного кейса.

Есть 1 ip и на него нацелено n доменов
Есть n серверов (за NAT)
Когда пользователь заходит на домен_1 попадает на сервер_1
Когда пользователь заходит на домен_2 попадает на сервер_2
Когда пользователь заходит на домен_n попадает на сервер_n

Читать далее

Сравнение инструментов для генерации thumbnails: imgproxy, thumbor, imaginary, picfit, imageproxy и weserv/images

Reading time5 min
Reach and readers8.6K

Жил был один новостной проект. Время шло, одни фичи добавлялись, вторые удалялись... Одной из важнейший фишек была генерация превьюшек к картинкам (thumbnails), а именно - быстрая генерация (до 5 минут) всех thumbnails. Все было хорошо, пока не начали поступать жалобы, что, иногда, генерация не успевает за 5 минут все сделать. Начали "копать" и обнаружили интересную вещь: мы генерим 112 превьюшек к одной картинке. Нашей "радости" не было предела. После небольших дискуссий было решено увеличить maxReplicas до 60 в HPA (проблема возникала когда загружалось больше 80 картинок), так как это самое быстрое и дешевое решение.

Читать далее

Как мы разработали приложение для знакомств в Telegram

Level of difficultyEasy
Reading time4 min
Reach and readers6K

С уходом Tinder из России и Беларуси открылась довольно широкая ниша для приложений специализирующихся на знакомствах. Некоторые из таких приложений пошли в жестокую монетизацию, высасывая из пришедших бедолаг деньги, не рассчитывая на длительный успех, некоторые заняли свою нишу и ведут себя более скромно. Однако по нашему субъективному мнению не все пользователи тиндер нашли для себя замену и все еще жаждут новых знакомств. Поэтому мы решили ворваться в этот рынок и сделать доступное для всех приложение, где каждый смог бы найти для себя кого‑то интересного. Сейчас все расскажем подробнее.

Читать далее

gRPC: проблемы и решения при переходе с REST

Level of difficultyMedium
Reading time6 min
Reach and readers15K

Вот уже 24 года мы используем сложный для понимания, завязанный на особенности HTTP REST-протокол. Не пора ли переходить к чему-то более современному?

Привет! Меня зовут Игорь Алексеев и я работаю бэкенд-разработчиком в компании Garage Eight. Некоторое время назад я внедрил gRPC для части своих сервисов. В этой статье поговорим о том, что такое gRPC, сравним его с возможными альтернативами, рассмотрим преимущества gRPC и пробежимся по проблемам, которые возникают почти в каждом проекте, где этот протокол приходится внедрять.

Читать далее

Системный аналитик. Краткий гайд по профессии. Часть 2. Сбор, анализ и документирование требований (UML, BPMN)

Level of difficultyEasy
Reading time13 min
Reach and readers111K

Из этой статьи вы узнаете о типах требований и рассмотрите пример их оформления, познакомитесь с основными методами их сбора, рассмотрите основные типы диаграмм (Use Case, Sequence, State, Class, ER-diagram, BPMN) и инструменты, используемые при их документировании.

Предыдущая статья: Системный аналитик. Краткий гайд по профессии. Часть 1

Читать далее

Микросервисы для тех, кто прикидывается разработчиком. Часть 2

Level of difficultyEasy
Reading time4 min
Reach and readers31K

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

Читать далее...

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Specialist
Средний
Python
Docker
Django
FastAPI
Blockchain
Solidity
JavaScript
Nuxt.js
Безопасность сетей