2015-11-30 2 views
1

У меня есть сложная служба appengine, написанная на PHP, теперь я хочу частично ее перенести в часть Python.Часть обновления для Google App Engine

Предположим, что у меня есть 2 части: /signIn/.... и /data/.... Сначала я хочу перенести часть /signIn/, затем /data/ позже.

Тем не менее, поскольку мой сервис большой, поэтому я хочу построить новую часть /signIn/ на Python, затем воспользуйтесь Traffic Splitting, чтобы выполнить некоторые тесты A/B на этой части.

Моя проблема заключается в том, что разделение трафика может применяться только для версий, поэтому мои старые и новые версии должны быть в одном модуле, и том же модуле означает, что они должны быть написаны на одном языке (я был здесь не так, см. обновленная часть). Но я перехожу от PHP к Python.

Что для меня лучше всего подходит?

Спасибо,

Решение

С порцией Dan Cornilescu, это то, что я делаю:

  1. Разбить приложение в 2-х модулей: по умолчанию и старой версии.
  2. Отправка /signIn/ в модуль по умолчанию, остальное - в модуль старой версии.
  3. Сделать еще одну версию /signIn/ (модуля по умолчанию) в Python
  4. Настройка разделения трафика медленно увеличивать запросы процента в Python часть. Это позволит нам протестировать и убедиться в отсутствии серьезной ошибки.

Примечание: /signIn/ часть должна быть модуль по умолчанию, так как разделение трафика GAE работает только на модуле по умолчанию.

Я подтвердил, что мы можем сделать 2 версии на разных языках для модуля.

ответ

1

Одним из возможных подходов является разделение вашего PHP-приложения на модули на 1-м шаге. Это не полностью потраченное впустую усилие, большинство из которых понадобятся, чтобы позволить вашему приложению работать в нескольких модулях, не связанных с изменением языка. Я подозреваю, что на самом деле вы не можете использовать A/B-тестирование - несоответствие между модулями. Неизбежные.

После того, как выполняется разделение модулей, вы можете продолжить свой второй шаг - переключение языка для выбранного модуля (модулей), с использованием A/B-тестирования, как вы планировали.

Более смелый подход заключается в смешении 2 и записи модуля /signin/ непосредственно в python. На стороне PHP вы просто удалите часть /signin/ (часть ранее упомянутого 1-го шага). Должно работать очень хорошо, пока вы стараетесь использовать только независимые от приложения языки средства для межмодульной коммуникации/работы: пути запроса, файлы cookie, ключи хранилища данных/memcache и т. Д. Хороший разбор модулей почти наверняка обеспечит это.

У вас есть варианты тестирования, отличные от A/B, например: https://stackoverflow.com/a/33760403/4495081.

Вы также можете иметь новый код/​​модуль, способный обслуживать те же запросы, что и старые, бок о бок/одновременно и с помощью файла dispatch.yaml, чтобы точно контролировать, какой модуль фактически выполняет запросы. Это может позволить очень целенаправленную миграцию, потенциально предлагая более высокую уверенность в тестировании.

Я также не совсем уверен, что на разных языках у вас нет двух версий одного и того же модуля - версии должны быть довольно автономными экземплярами, каждый из которых выполняет свои собственные запросы по-своему, используя самый низкий уровень , независимые от языка сервисы GAE. AFAIK ничего не останавливает полное переписывание и развертывание приложения с той же версией или нет - я это сделал, изучая GAE. Но я не переключил языки, это правда. Я бы попробовал, но у меня нет времени изучать новый язык прямо сейчас :)

+0

Я только что вчера проверил, мы можем сделать 2 версии в разных языках. – Tarzan

+0

Спасибо, я понял. Тем не менее, мне нужно сохранить '/ signIn /' часть как на PHP, так и на Python, и около 50% запросов будут направлены на части PHP, остальное на Python. Я могу удалить часть PHP только тогда, когда я уверен, что часть Python совместима и не имеет никакой ошибки. – Tarzan

+0

@ Tarzan Cool, спасибо за подтверждение моей теории! –