Pull to refresh
9
0
Ivan Nemets @oneNevan

PHP developer

Send message

Разработка ПО действительно так сложна? Или это мы делаем ее такой?

Level of difficultyEasy
Reading time9 min
Views12K

В новом переводе от команды Spring АйО, Siva Katamreddy, девелопер адвокат в AtomicJar (Testcontainers), поделился своими мыслями о популярных в наши дни TDD, Clean, Hexagonal, Onion и Ports & Adapters. Он также постарался ответить на вопрос, который, возможно, волнует не только его: "Действительно ли мы, разработчики, так любим всё усложнять?".

Читать далее
Total votes 32: ↑29 and ↓3+30
Comments72

Как тимлиду совмещать работу в IT с жизнью

Level of difficultyEasy
Reading time7 min
Views13K

Привет, Хабр! Я Саша Шутай, руководитель направления PHP в AGIMA. Хочу обсудить важные для тимлидов вопросы: как управлять бэклогом и правильно распределять время, нормально ли отвлекаться во время работы, как овертаймить, не выгорать и успевать жить. Статья в первую очередь будет полезна начинающим тимлидам. Ну а матерые руководители команд найдут в ней советы по оптимизации работы.

Читать далее
Total votes 19: ↑16 and ↓3+15
Comments20

Паттерн: Сага

Reading time2 min
Views143K

Привет, Хабр! Представляю вашему вниманию перевод статьи "Pattern: Saga" автора Chris Richardson.


Ситуация


Есть приложение, к которому применялся паттерн Database per Service. Теперь у каждого сервиса приложения есть своя собственная база данных. Некоторые бизнес транзакции охватывают сразу несколько сервисов, так что нужен механизм, обеспечивающий согласованность данных между этими сервисами.


Например: давайте представим, что мы разрабатываем интернет магазин, где у клиента есть кредитный лимит. Приложение должно гарантировать, что новый заказ не превышает кредитный лимит клиента. Так как Заказы и Клиенты — различные базы данных, то приложение не может использовать локальные ACID транзакции.


Проблема


Как обеспечить согласованность данных между сервисами?


Решение


Необходимо каждую бизнес транзакцию, которая охватывает несколько сервисов, реализовывать как сагу.


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


Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments10

CAP-теорема: принципы согласованности, доступности и устойчивости

Reading time8 min
Views7.3K

CAP-теорема, сформулированная Эриком Брюэром в 2000 году, сразу же приковала внимание специалистов в области распределенных систем и стала неотъемлемой частью арсенала знаний для разработчиков, стремящихся к созданию эффективных и устойчивых систем. 

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

Читать далее
Total votes 13: ↑7 and ↓6+2
Comments0

Практический пример декомпозиции монолитного PHP приложения

Level of difficultyMedium
Reading time26 min
Views9K

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

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

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

Ручная пила для PHP-монолита

Level of difficultyMedium
Reading time11 min
Views7K

Привет! Это третья и заключительная часть истории поиска надёжного способа работы с транзакциями в распределённых системах.

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

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

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

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity

Specialization

Backend Developer
Lead
English
PHP
MySQL
Git
Linux
Docker
Symfony
Magento
JavaScript
PhpUnit