PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Распределенные системы роутинга на примере Framework Foton

    Распределенные системы роутинга на примере Framework Foton

    Аватар автора Распределенные системы роутинга на примере Framework Foton

    Константин

    Иконка календаря09 октября 2026
    распределениероутингfotonseniorИконка уровня senior
    Картинка поста Распределенные системы роутинга на примере Framework Foton

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

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

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

    После переезда на микросервисы многие думают: да лучше бы я туда и не лез.

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

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

    И в угоду чему?

    Если в общем тому, чтобы хоть как то справится с текучкой тех долга по проектам.

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

    Какой же выход из такой ситуации?

    Создавать раздельные, предсказуемые и контролируемые системы - это и есть суть распределенных систем.

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

    Но, кто вам сказал, что нужно делать монолит - распределенная система может иметь ряд кластеров на разных серверах, но в чем же отличие от обычных микросервисов?

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

    Посмотрите на пример декларации микросервиса

    {    
        "auth":{   },  //здесь содержатся настройки авторизации
        "exit":true,  //если true, то микросервис выключен, если false либо удален микросервис доступен
        "format":"xml",  //стандартно может быть xml,json,txt
        "log":false/true,  //пишем или не пишем логи
        "event":"event", //имеет три варианта event,api,data
        "name":"service", //название сервиса
        "arg":[{         //параметры вызова
            "model":"html",
            "table":"seo",
            "methods":{"echo":{"data":true}},
            "format":"X" 
        }],     
        "services":
        { //микросервисы для вызова при event:event
            "servis1":
            {
                //микросервис 1
            },        
            "servis2":
            {
               //микросервис 2
            }        
        }  
    }
    

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

    Давайте пойдем дальше и посмотрим что же такое полноценная распределенная система и ограничивается ли она прослойками для микросервисов?

    Оказалось, что нет, она намного больше этого.

    Опишем пример типов запросов на Framework Foton:

    1 тип - mvc - это стандартный тип запроса, он основной, если на конце строки запроса не указан ни один из типов вызывается mvc, поиск производится в таблице router по регулярным выражениям либо по названию mvc шаблона, если это не запрещено в настройках системы.

    Пример - /news/firstnews.html

    2 тип - ajax - этот тип данных вызывает методы ajax класса внешнего модуля. Например заглянув в network инспектора браузера при сохранении страницы в модуле визуальный редактор вы увидите такой путь /htmlred/files.ajax - это и есть роутинг ajax запроса, название модуля/название метода класса Ajax.ajax, также вы можете создавать файлы для представления методов в директории /dev/module/вашмодуль/ajax/вашметод.php

    3 тип - micro - это тип для микросервисов, вы можете вызвать его через например alisa.micro, общая шина обработки запросов вызывается через all.micro

    4 тип - ajaxadmin - если в админ панели вы нажмете обновление шаблонов и посмотрите в инспектор то увидите /updatesectionall.ajaxadmin, это вызов метода класса Ajaxadmin/Admin расположенного по пути /app/ajax/admin/admin.php, работает только когда пользователь авторизован в системе.

    5 тип - ajaxsite - аналогичный предыдущему, только он работает и когда пользователь не авторизован, вызывает метод контроллера AjaxsiteSite по пути /app/ajax/site/site.php через название метода.ajaxsite, также как и ajaxadmin имеет неограниченный уровень вложенности, после установки вам доступна конструкция для теста /test/test2/test3.ajaxsite, вы можете написать /test/test2.ajaxsite для отображения шаблона представления, по структуре вам нужно создать директорию по названию метода в директории site и в ней либо контроллер для последующей обработки либо файл index.php с шаблоном для вывода, в шаблоне также работает доступ к массиву $data из метода

    6 тип - modul - это внешние модули, при обращении /antivirus.modul происходит отработка всех публичных методов контроллера dev/modul/antivirus/controller.php модуля и вызов представления. Но можно обращаться и к вложенным модулям, например вот так /shop/visualeditor.modul

    7 тип - tpl - это внутренние типы данных для отображения в интерфейсе ресурс контроллера, они расположены по пути /app/type/site, принадлежат конкретному сайту и включают css,js,php контроллер и php представление метода в формате названиетипа_названиеметода.php , обычно контроллер содержит метод index, первый аргумент это $id - номер записи, остальные аргументы можно добавлять, но также нужно добавить эти значения через запятую после названия типа: в модели данных, в представлении также доступен массив $data

    8 тип - face - интерфейсы, расположены по пути /app/face/admin/ и работают только в админ панелях. включают css,js,php контроллер и php представление метода в формате названиеинтерфейса/названиеметода.php , в представление также передается массив $data

    9 тип - widget - виджеты сайта, расположен по пути dev/widget/site и принадлежит конкретному сайту. контроллер расположен в файле index.php и содержит основной вызываемый метод index, хотя может содержать и другие, в директории index файл template.php является представлением, в представлении доступен массив $data из return метода.

    10 тип - tplfront - аналогично tpl, только вызывает именно  css, js файлы внутреннего типа данных.

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

    Это не только снижает нагрузку и облегчает тестирование, но и помогает лучше и быстрее разобраться в проекте, делает все состояния более прозрачными и консистентными.

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

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

    Все типы запросов могут быть представлены через текучий интерфейс view

    <?php
    $this->core->view()->tpl->html->echo->end(['name'=>'test','value'=>'test']); 
    $this->core->view()->tplfront->html->echo->end(['name'=>'test','value'=>'test']); 
    $this->core->view()->widget->htmlredactor->end(['value'=>'test','name'=>'name']);
    $this->core->view()->mvc->company->end();
    $this->core->view()->ajaxsite->test->test2->test3->end();
    $this->core->view()->ajaxadmin->method->end();
    $this->core->view()->ajax->shop->codeBlock->end();
    $this->core->view()->modul->shop->end();
    $this->core->view()->face->lists->end();
    $this->core->view()->micro->alisa->end();
    

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

    Иконка глаза19

    Комментарии

    0

    Постройте личный план изучения JavaScript Advanced - продвинутые концепции языка и ООП до уровня Middle — бесплатно!

    JavaScript Advanced - продвинутые концепции языка и ООП — часть карты развития Frontend, Backend, Mobile

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    TypeScript с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    React и Redux Toolkit

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Neovim

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста OpenCode Desktop: установка и подключение Claude
    Иконка аватараАнтон
    Иконка календаря09 октября 2026
    AI-инструментыDevOpsopenai+ 2middleИконка уровня middle

    OpenCode Desktop: установка и подключение Claude

    OpenCode Desktop — графическое приложение OpenCode: тот же агент, что работает в терминале, но с оконным интерфейсом. Скачивается и ставится оно в России штатно, а вот подключить к нему Claude с первой попытки не выйдет, и дело не в блокировках: встроенная форма добавления своего провайдера в приложении не работает и отвечает ошибкой на любые данные. Рабочий путь — описать провайдера в opencode.json руками. Готовый OpenAI-совместимый эндпоинт с оплатой рублями даёт AI для кода от PurpleSchool. Ниже — установка OpenCode Desktop на macOS, Windows и Linux, разбор ошибки и конфиг целиком.

    Иконка чипа0
    Иконка глаза37
    Иконка комментариев0
    Картинка поста Настройка очередей с retray на laravel и Foton сравнение
    Иконка аватараКонстантин
    Иконка календаря08 октября 2026
    очередиlaravelretray+ 3middleИконка уровня middle

    Настройка очередей с retray на laravel и Foton сравнение

    Создание очередей с retray на примерах фреймворков Laravel и Foton

    Иконка чипа0
    Иконка глаза48
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря08 октября 2026
    AI-инструментыopenaiapi+ 2middleИконка уровня middle

    OpenCode Zen или свой API-ключ: что выгоднее в России

    OpenCode Zen — это шлюз с отобранными командой OpenCode моделями, где вы платите по факту за токены. Свой API-ключ — это когда вы подключаете к OpenCode отдельного провайдера и платите ему. Для разработчика из России выбор решается не ценой за токен, а способом оплаты: в Zen нужно привязать биллинг и платить в долларах, а ключ российского прокси оплачивается рублёвой картой.

    Иконка чипа0
    Иконка глаза99
    Иконка комментариев0
    Иконка чипа0