Построение устойчивой и масштабируемой архитектуры
В основе такой архитектуры заложены принципы, позволяющие масштабировать систему и автоматически справляться с неполадками.
Что такое масштабируемость и устойчивость
Масштабируемость позволяет системе выдерживать высокие нагрузки и распределять их без сбоев. Устойчивость означает способность системы к самовосстановлению при сбоях, без потери данных и с минимальным вмешательством разработчиков. Эти качества можно достичь за счёт изоляции процессов: обрабатывая каждую задачу отдельно, можно быстро масштабировать обработку и выполнять только те операции, которые действительно необходимы.
Сообщения как основа архитектуры
Архитектуры, основанные на передаче сообщений, помогают строить системы, устойчивые к сбоям и готовые к масштабированию. Однако такие архитектуры добавляют сложности в разработку, так как требуют значительной настройки и большого объёма шаблонного кода. Без упрощений это может снижать скорость работы над основными задачами и даже вызывать у разработчиков неудовлетворённость.
Ориентация на бизнес-логику
Чтобы облегчить задачу разработчикам и сделать архитектуру полезной в повседневной работе, представлена концепция «Бизнес-ориентированной архитектуры». Её задача — позволить разработчикам сосредоточиться на бизнес-логике, а не на настройке инфраструктуры. Достичь этого помогают три опорных столпа:
1. Устойчивость сообщений — сообщения передаются по каналам, обеспечивая асинхронное выполнение и соблюдение шаблонов, таких как автоматические повторы и обработка ошибок. Это снижает вероятность неправильной настройки системы.
2. Декларативная конфигурация — вместо сложной ручной настройки применяется подход с атрибутами, где каждый метод помечается как обработчик команды. Это упрощает разработку, позволяет избежать ошибок конфигурации и позволяет новым разработчикам работать с системой без глубокого понимания её устройства.
3. Блоки построения — использование готовых решений, таких как агрегаты и проекции, помогает избежать повторяющегося кода, который загружает процесс разработки. Агрегаты позволяют сосредоточиться на бизнес-логике, упрощая процесс обновления и хранения данных, а проекции помогают быстро создавать представления данных.
👉Читать статью с примерами кода(Если не открывается попробуйте включить VPN)
В основе такой архитектуры заложены принципы, позволяющие масштабировать систему и автоматически справляться с неполадками.
Что такое масштабируемость и устойчивость
Масштабируемость позволяет системе выдерживать высокие нагрузки и распределять их без сбоев. Устойчивость означает способность системы к самовосстановлению при сбоях, без потери данных и с минимальным вмешательством разработчиков. Эти качества можно достичь за счёт изоляции процессов: обрабатывая каждую задачу отдельно, можно быстро масштабировать обработку и выполнять только те операции, которые действительно необходимы.
Сообщения как основа архитектуры
Архитектуры, основанные на передаче сообщений, помогают строить системы, устойчивые к сбоям и готовые к масштабированию. Однако такие архитектуры добавляют сложности в разработку, так как требуют значительной настройки и большого объёма шаблонного кода. Без упрощений это может снижать скорость работы над основными задачами и даже вызывать у разработчиков неудовлетворённость.
Ориентация на бизнес-логику
Чтобы облегчить задачу разработчикам и сделать архитектуру полезной в повседневной работе, представлена концепция «Бизнес-ориентированной архитектуры». Её задача — позволить разработчикам сосредоточиться на бизнес-логике, а не на настройке инфраструктуры. Достичь этого помогают три опорных столпа:
1. Устойчивость сообщений — сообщения передаются по каналам, обеспечивая асинхронное выполнение и соблюдение шаблонов, таких как автоматические повторы и обработка ошибок. Это снижает вероятность неправильной настройки системы.
2. Декларативная конфигурация — вместо сложной ручной настройки применяется подход с атрибутами, где каждый метод помечается как обработчик команды. Это упрощает разработку, позволяет избежать ошибок конфигурации и позволяет новым разработчикам работать с системой без глубокого понимания её устройства.
3. Блоки построения — использование готовых решений, таких как агрегаты и проекции, помогает избежать повторяющегося кода, который загружает процесс разработки. Агрегаты позволяют сосредоточиться на бизнес-логике, упрощая процесс обновления и хранения данных, а проекции помогают быстро создавать представления данных.
👉Читать статью с примерами кода(Если не открывается попробуйте включить VPN)
side-effects-detector
Эта библиотека анализирует php-код на предмет побочных эффектов.
Побочные эффекты классифицируются по категориям, чтобы их было легче отфильтровать в зависимости от вашего сценария использования.
Эта библиотека анализирует php-код на предмет побочных эффектов.
Побочные эффекты классифицируются по категориям, чтобы их было легче отфильтровать в зависимости от вашего сценария использования.
GitHub
GitHub - staabm/side-effects-detector: Analyzes php-code for side-effects.
Analyzes php-code for side-effects. Contribute to staabm/side-effects-detector development by creating an account on GitHub.
👍2
Forwarded from Библиотека задач по PHP | тесты, код, задания
😁18👍7❤1
Laravel под капотом — немного о макросах
В Laravel разработчики часто сталкиваются с ситуацией, когда нужного метода для работы со строками или коллекциями не оказывается под рукой. Чтобы решить эту проблему, Laravel предлагает удобный инструмент — макросы. Макросы позволяют добавлять кастомные методы к существующим классам фреймворка, что делает его более гибким и расширяемым.
В Laravel разработчики часто сталкиваются с ситуацией, когда нужного метода для работы со строками или коллекциями не оказывается под рукой. Чтобы решить эту проблему, Laravel предлагает удобный инструмент — макросы. Макросы позволяют добавлять кастомные методы к существующим классам фреймворка, что делает его более гибким и расширяемым.
DEV Community
Laravel Under The Hood - A Little Bit of Macros
Hello 👋 How often have you wished for a method that doesn't exist on collections or string...
❤🔥4👍2⚡1
Применение статических анализаторов архитектуры на примере гексагональной архитектуры
Отсутствие четкой структурированной архитектуры проектов — не редкость в ИТ. Одни этим пренебрегают из-за маленького масштаба проекта, другие — из-за сжатых сроков разработки, третьи — из-за отсутствия экспертизы в этом вопросе. Вместе с тем, движение по этому пути — практически всегда история с «отложенными последствиями»: со временем такие проекты становится сложно поддерживать, масштабировать, администрировать и фиксить.
Здесь рассказывается, почему важно структурировано выстраивать архитектуру проектов, а также показано на примере, с помощью каких инструментов можно отслеживать соответствие архитектуры изначальным требованиям.
Отсутствие четкой структурированной архитектуры проектов — не редкость в ИТ. Одни этим пренебрегают из-за маленького масштаба проекта, другие — из-за сжатых сроков разработки, третьи — из-за отсутствия экспертизы в этом вопросе. Вместе с тем, движение по этому пути — практически всегда история с «отложенными последствиями»: со временем такие проекты становится сложно поддерживать, масштабировать, администрировать и фиксить.
Здесь рассказывается, почему важно структурировано выстраивать архитектуру проектов, а также показано на примере, с помощью каких инструментов можно отслеживать соответствие архитектуры изначальным требованиям.
Хабр
Применение статических анализаторов архитектуры на примере гексагональной архитектуры
Отсутствие четкой структурированной архитектуры проектов — не редкость в ИТ. Одни этим пренебрегают из-за маленького масштаба проекта, другие — из-за сжатых сроков разработки, третьи — из-за...
👍3🔥1👏1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍2
PHP: Современная альтернатива для борьбы с усталостью от JavaScript
За последние годы PHP стал более современным, удобным и производительным. Для разработчиков, уставших от сложности JavaScript-экосистемы, PHP может предложить упрощённый и эффективный подход к разработке веб-приложений.
Проблемы JavaScript-экосистемы
JavaScript стал основой для создания интерактивных веб-приложений, но его экосистема осложнилась. Разработчики сталкиваются с избытком фреймворков (React, Angular, Vue), сложностью инструментов (Webpack, Babel) и частыми изменениями, приводящими к «усталости от JavaScript».
Эволюция PHP
Сегодня PHP значительно отличается от того, каким он был 10 лет назад. Его модернизация затронула основные аспекты разработки:
1. Современный синтаксис
PHP теперь поддерживает строгую типизацию, сокращённые функции (arrow functions) и возможности работы с несколькими типами (union types). Это делает код предсказуемым и понятным.
2. Высокая производительность
Выпуск версий PHP 7 и 8 принёс значительный рост скорости работы и снижение потребления памяти. Технологии вроде JIT-компиляции обеспечивают ещё большее ускорение.
3. Поддержка асинхронного программирования
Библиотеки ReactPHP и Amp позволяют использовать асинхронный подход. Это открыло возможности для создания реальных приложений в реальном времени, таких как чаты или онлайн-игры.
4. Современные фреймворки и инструменты
Laravel и Symfony предлагают удобные и надёжные решения для разработки. Composer упростил управление зависимостями, а инструменты вроде PHPUnit и PHPStan помогают поддерживать высокое качество кода.
5. Улучшенный опыт разработки
Нововведения, такие как оператор null coalescing (??) и конструкции вроде match, делают код чище и проще для поддержки. Ошибки теперь легче отлавливать благодаря улучшенной системе исключений.
Преимущества PHP перед JavaScript
Простота: Создание CRUD-приложений с помощью PHP проще, чем использование сложного стека JavaScript.
Стабильность: PHP сохраняет обратную совместимость, что минимизирует риск поломок кода.
Зрелость для веба: PHP идеально подходит для задач вроде управления контентом (WordPress, Drupal) и создания API.
Многие устаревшие стереотипы о PHP больше не актуальны. Сегодня язык предлагает современный инструментарий, активное сообщество и востребованность на рынке. Разработчики, готовые освоить новые возможности PHP, могут быстро адаптироваться и успешно применять его в работе.
Современный PHP — это не просто инструмент прошлого, а мощное решение для настоящего и будущего веб-разработки.
За последние годы PHP стал более современным, удобным и производительным. Для разработчиков, уставших от сложности JavaScript-экосистемы, PHP может предложить упрощённый и эффективный подход к разработке веб-приложений.
Проблемы JavaScript-экосистемы
JavaScript стал основой для создания интерактивных веб-приложений, но его экосистема осложнилась. Разработчики сталкиваются с избытком фреймворков (React, Angular, Vue), сложностью инструментов (Webpack, Babel) и частыми изменениями, приводящими к «усталости от JavaScript».
Эволюция PHP
Сегодня PHP значительно отличается от того, каким он был 10 лет назад. Его модернизация затронула основные аспекты разработки:
1. Современный синтаксис
PHP теперь поддерживает строгую типизацию, сокращённые функции (arrow functions) и возможности работы с несколькими типами (union types). Это делает код предсказуемым и понятным.
2. Высокая производительность
Выпуск версий PHP 7 и 8 принёс значительный рост скорости работы и снижение потребления памяти. Технологии вроде JIT-компиляции обеспечивают ещё большее ускорение.
3. Поддержка асинхронного программирования
Библиотеки ReactPHP и Amp позволяют использовать асинхронный подход. Это открыло возможности для создания реальных приложений в реальном времени, таких как чаты или онлайн-игры.
4. Современные фреймворки и инструменты
Laravel и Symfony предлагают удобные и надёжные решения для разработки. Composer упростил управление зависимостями, а инструменты вроде PHPUnit и PHPStan помогают поддерживать высокое качество кода.
5. Улучшенный опыт разработки
Нововведения, такие как оператор null coalescing (??) и конструкции вроде match, делают код чище и проще для поддержки. Ошибки теперь легче отлавливать благодаря улучшенной системе исключений.
Преимущества PHP перед JavaScript
Простота: Создание CRUD-приложений с помощью PHP проще, чем использование сложного стека JavaScript.
Стабильность: PHP сохраняет обратную совместимость, что минимизирует риск поломок кода.
Зрелость для веба: PHP идеально подходит для задач вроде управления контентом (WordPress, Drupal) и создания API.
Многие устаревшие стереотипы о PHP больше не актуальны. Сегодня язык предлагает современный инструментарий, активное сообщество и востребованность на рынке. Разработчики, готовые освоить новые возможности PHP, могут быстро адаптироваться и успешно применять его в работе.
Современный PHP — это не просто инструмент прошлого, а мощное решение для настоящего и будущего веб-разработки.
👍24😁6😢1🌚1
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Какие способы оптимизации производительности баз данных знаете?
Существует несколько основных способов оптимизации баз данных:
Индексирование: Убедитесь, что ваша база данных имеет правильные индексы для часто используемых запросов. Индексы позволяют ускорить поиск данных.
Оптимизация запросов: Напишите запросы таким образом, чтобы они были эффективными. Используйте инструкции JOIN, WHERE и GROUP BY там, где это необходимо, чтобы снизить объем возвращаемых данных.
Кэширование: Используйте кэширование результатов запросов там, где это возможно. Например, результаты запросов к базе данных могут быть кэшированы в Redis или Memcached.
Ограничение объема данных: Загружайте только те данные, которые действительно нужны. Используйте LIMIT и OFFSET при запросах, чтобы извлекать только необходимое количество записей.
Оптимизация структуры таблиц: Проведите анализ структуры таблиц и убедитесь, что она оптимально сбалансирована для ваших запросов. Иногда изменение типов данных, уменьшение размера полей или нормализация таблиц может улучшить производительность.
Использование транзакций: Используйте транзакции для группировки нескольких операций в одну единицу работы. Это помогает уменьшить накладные расходы на управление транзакциями и обеспечить целостность данных.
Масштабирование базы данных: При необходимости масштабируйте базу данных горизонтально или вертикально. Горизонтальное масштабирование (шардинг) позволяет распределить данные по нескольким серверам, а вертикальное масштабирование (разделение на таблицы) позволяет распределить данные по разным таблицам или базам данных.
Мониторинг и профилирование: Регулярно отслеживайте производительность запросов и операций базы данных с помощью инструментов мониторинга и профилирования. Это позволяет идентифицировать узкие места и проводить дальнейшую оптимизацию.
Существует несколько основных способов оптимизации баз данных:
Индексирование: Убедитесь, что ваша база данных имеет правильные индексы для часто используемых запросов. Индексы позволяют ускорить поиск данных.
Оптимизация запросов: Напишите запросы таким образом, чтобы они были эффективными. Используйте инструкции JOIN, WHERE и GROUP BY там, где это необходимо, чтобы снизить объем возвращаемых данных.
Кэширование: Используйте кэширование результатов запросов там, где это возможно. Например, результаты запросов к базе данных могут быть кэшированы в Redis или Memcached.
Ограничение объема данных: Загружайте только те данные, которые действительно нужны. Используйте LIMIT и OFFSET при запросах, чтобы извлекать только необходимое количество записей.
Оптимизация структуры таблиц: Проведите анализ структуры таблиц и убедитесь, что она оптимально сбалансирована для ваших запросов. Иногда изменение типов данных, уменьшение размера полей или нормализация таблиц может улучшить производительность.
Использование транзакций: Используйте транзакции для группировки нескольких операций в одну единицу работы. Это помогает уменьшить накладные расходы на управление транзакциями и обеспечить целостность данных.
Масштабирование базы данных: При необходимости масштабируйте базу данных горизонтально или вертикально. Горизонтальное масштабирование (шардинг) позволяет распределить данные по нескольким серверам, а вертикальное масштабирование (разделение на таблицы) позволяет распределить данные по разным таблицам или базам данных.
Мониторинг и профилирование: Регулярно отслеживайте производительность запросов и операций базы данных с помощью инструментов мониторинга и профилирования. Это позволяет идентифицировать узкие места и проводить дальнейшую оптимизацию.
👍8❤1
Какой подарок хотели бы на Новый Год?⬇️⬇️⬇️
Yii Mailer
Пакет предоставляет абстракцию для отправки электронной почты через интерфейсы mailer и message.
Фактическая отправка почты обеспечивается отдельными взаимозаменяемыми пакетами.
Пакет предоставляет абстракцию для отправки электронной почты через интерфейсы mailer и message.
Фактическая отправка почты обеспечивается отдельными взаимозаменяемыми пакетами.
GitHub
GitHub - yiisoft/mailer: Generic mailer
Generic mailer. Contribute to yiisoft/mailer development by creating an account on GitHub.
👏7🌚2❤1🔥1😁1
Реализация сценария использования DDD на PHP
Здесь рассматривается подход к реализации сценария использования (Use Case) в рамках Domain-Driven Design (DDD) на PHP. Примером служит класс TaxPersistUseCase, который используется для управления сохранением сущности налога. Подход демонстрирует использование интерфейсов и доменных классов для работы с данными, сохраняя четкое разделение компонентов и следуя принципам DDD.
Здесь рассматривается подход к реализации сценария использования (Use Case) в рамках Domain-Driven Design (DDD) на PHP. Примером служит класс TaxPersistUseCase, который используется для управления сохранением сущности налога. Подход демонстрирует использование интерфейсов и доменных классов для работы с данными, сохраняя четкое разделение компонентов и следуя принципам DDD.
DEV Community
Implementing a DDD Use Case in PHP
Implementing a DDD Use Case for in PHP This article explores a Domain-Driven Design (DDD)...
🌚8👍4
is_a() против Instanceof
is_a() и instanceof — это одна и та же функция: проверка принадлежности объекта к определенному классу. Однако выполняются они по-разному.
Использование оператора ::class безопасно в обоих случаях.
Использование имени является именем класса для instanceof, в то время как для is_a() оно является именем константы. Это может привести к путанице.
is_a() и instanceof — это одна и та же функция: проверка принадлежности объекта к определенному классу. Однако выполняются они по-разному.
Использование оператора ::class безопасно в обоих случаях.
Использование имени является именем класса для instanceof, в то время как для is_a() оно является именем константы. Это может привести к путанице.
😁5👍4
Как часто, по вашему мнению, следует менять место работы?
Ставьте реакции:
⚡ — раз в год
🔥 — раз в 2-3 года
❤️ — раз в 5-6 лет
🌚 — а можно менять работу?
Ставьте реакции:
⚡ — раз в год
🔥 — раз в 2-3 года
❤️ — раз в 5-6 лет
🌚 — а можно менять работу?
🔥113🌚95❤38⚡14🤩1
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
job.proglib.io
Вакансии в медиа «Библиотека программиста»
Количество проектов в редакции постоянно растет, так что нам всегда нужны специалисты
❤2
Forwarded from Библиотека джависта | Java, Spring, Maven, Hibernate
💡 Как избавиться от WebSockets и сэкономить $1 млн в год: неожиданные решения для оптимизации
Как снизить расходы на инфраструктуру и повысить эффективность? Оказывается, отказ от WebSockets может сэкономить миллионы. Вместо привычного подхода можно использовать решения, которые не только проще, но и лучше подходят для определённых задач, как, например, асинхронные очереди или SSE.
Знаете ли вы, как выбрать стратегию, которая одновременно сократит затраты и улучшит масштабируемость? Разберитесь в тонкостях оптимизации и найдите способ выжать максимум из вашей системы. 🚀
🔗 Читать статью
🔗 Зеркало
Как снизить расходы на инфраструктуру и повысить эффективность? Оказывается, отказ от WebSockets может сэкономить миллионы. Вместо привычного подхода можно использовать решения, которые не только проще, но и лучше подходят для определённых задач, как, например, асинхронные очереди или SSE.
Знаете ли вы, как выбрать стратегию, которая одновременно сократит затраты и улучшит масштабируемость? Разберитесь в тонкостях оптимизации и найдите способ выжать максимум из вашей системы. 🚀
🔗 Читать статью
🔗 Зеркало
😁9👍3