Язык описание интерфейсов (API различных проектов)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
Gineaser
Сообщения: 157
Статус: Evrashka
ОС: Arch Linux

Язык описание интерфейсов

Сообщение Gineaser »

Как администратору одного из достаточно нагруженных для нашего региона web-ресурса пришлось столкнуться с очередной интересной задачей.
Опишу суть дела.
Проект написан на php. Пока он развивался, программистами набирали не опытных студентов, знаний у них было не достаточно для написания хорошего кода. Поэтому в качестве основы выбрали джумлу, которая со временем обрастала кучей модулей, самописных.
Но программисты не стояли на месте и развивались, применяли новые технологии, ввели раздел тестирования, переписали многие части проекта уже с соответствием новым тенденциям веб-разработки. Но все же в коде проекта еще присутствует уйма грязи, да и проекты все разношерстные и используют разные "движки", можно так сказать.
API же взаимодействия между проектами оставалось старое. Я не разработчик и достаточно далек от этой темы, но знаю что обмен происходит через soap с генерированием каких то структур в XML или Json.
Когда начал администрировать этот ресурс столкнулся с такой проблемой, что сервер иногда проседал под нагрузкой, причем железо достаточно не слабое, в качестве фронтэнда использую nginx с кешированием кода и статики, бекэндом является php-fpm, почти во всем проекте в полной мере сейчас используется возможности memcache, многое вынесено из mysql в redis. Средняя нагрузка на сайт примерно 200-250 человек онлайн. Начал анализировать логи.
Как выяснилось далее проекты общаются между собой через центральное API по http, сам проект генерирует к себе, тем самым, огромное кол-во запросов. Примерные цифры таковы: при 100 пользователях онлайн я получаю около 250+ запросов в секунду.
Начал обсуждать эту тему с программистами и как выяснили они не знают и не представляют каким образом можно сейчас изменить систему, изменив способ обмена данными между проектами.
Я решил почитать по этому вопросу, рассмотреть различные системы обмена данными между проектами и нашел несколько продуктов, которые используются на таких крупных системах как Evernote, Twitter, last.fm, 2gis
Это Apache Thrift и Google Protobuf

Вопрос у меня такой. Хотелось бы все эти общения между проектами перенести на уровень внутрисистемных сообщений, как администратор я это вижу в виде какого то демона, который является сервером API для проектов, отдавая в своей форме готовые структуры данных проектам по запросу. Т.е. делает то, что сейчас осуществляется через http, забивая канал, нагружая вебсервер.

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