Есть целых книг , которые занимались этой конкретной темой.Работа с задержкой, стабильностью, гибкостью и всеми другими возможностями при создании сервисов.
С очень общей точки зрения и относительно простого варианта использования, который звучит так, как у вас, я бы порекомендовал простые API на основе REST в каждом приложении.Вы определенно не хотите повторять код в PHP, который уже написан на Ruby, и наоборот.Время отклика не слишком велико между конкурирующими методами запросов на основе HTTP (во всяком случае, не так резко, как при разговоре о чем-то вроде HTTP против CORBA).Написание REST-ресурсов - это то, в чем хорошо работает Ruby on Rails, так что у вас в значительной степени есть это.PHP немного сложнее, и вам просто нужно структурировать запрашиваемый API таким образом, чтобы он соответствовал стандартам REST.После этого вам просто нужен HTTP-клиент для выполнения запросов к любому клиенту.Если у вас есть четко определенные конечные точки для каждого приложения, это не должно быть большой проблемой, чтобы жестко их кодировать.Если нет, то существует еще один шаблон проектирования вокруг корпоративных сервисных шин , которые помогают одному сервису находить другой, но, как правило, не поддерживают кроссплатформенность (по крайней мере, не PHP по отношению к Rails и обратно)Что я знаю, то есть!).
Для мира Ruby / Rails я могу рекомендовать HTTParty или Typheous в качестве клиентов HTTP (которые будут запрашивать REST-клиент другого приложения).Что касается мира PHP, вы можете заглянуть в эту ветку .У него есть несколько перечисленных.
Для ясности, это не единственный вариант - вы можете создавать полнофункциональные веб-сервисы и даже углубляться, создавая прямые сокетные соединения, и др.На самом деле все зависит от того, насколько тесно вы хотите, чтобы системы были, насколько они могут быть тесно связаны, насколько они близки (в смысле «топологии сети») и насколько быстро реагирует каждая система.
Относительно безопасности. Один из вариантов - настроить брандмауэр в каждой системе так, чтобы он принимал подключения только к определенным ресурсам, если они имеют определенный IP-адрес.Вы можете следовать аналогичной схеме на уровне приложения.Хотя вам может быть так же повезло с безопасностью стандартного сеанса HTTPS с базовой / дайджест-аутентификацией.
Надеюсь, это поможет.Я мог бы говорить об этом гораздо дольше, но я не знаю, есть ли какой-нибудь хороший способ дать один конкретный ответ на этот общий вопрос.Если есть что-то, на чем я могу остановиться, не стесняйтесь комментировать, и я сделаю это, как смогу.