Почему приложение 12 Factor должно быть автономным?
В статье 12 Factor о привязке портов http://12factor.net/port-binding есть требование, чтобы каждое приложение было автономным и не имело времени выполнения, например Tomcat. По какой причине это рекомендуется... каковы преимущества автономных приложений для микросервисов?
2 ответа
Чтобы понять правила привязки портов и автономных приложений, полезно взглянуть на вещи с точки зрения платформ, предназначенных для запуска 12-факторных приложений, таких как Heroku или Deis.
Эти платформы масштабируют приложения на уровне процессов. Когда процессы масштабируются, платформа пытается разместить этих дополнительных рабочих за сеткой маршрутизации, чтобы они могли начать обслуживать трафик. Если приложение не является автономным и, например, тесно связано с интерфейсным сервером Apache, используя mod_jk
- невозможно выполнить масштабирование, запустив более изолированные рабочие процессы.
Привязка портов существует для решения проблемы "брокерства портов" на уровне платформы. Если бы каждый работающий с приложением слушал порт 80, возникли бы конфликты. Чтобы решить эту проблему, привязка порта является соглашением, согласно которому приложение прослушивает порт, выделенный платформой, и который передается как $PORT
переменная окружения. Это гарантирует, что a) работник приложения прослушивает правильный порт и b) платформа знает, куда направить трафик, предназначенный для этого работника.
Я думаю, потому что это дает вам большую гибкость, когда приходит время для масштабирования вашего приложения. Если вы используете tomcat, вам нужно будет скопировать ваш.war и поместить его в другой tomcat, а затем распределить нагрузку по вашим запросам на любой из них.
Вместо этого, если ваше приложение имеет автономный http-сервер, вы можете просто запустить другой экземпляр в другом порту и забыть обо всех этих штуках с tomcat. Вам все равно придется балансировать свои запросы в любом из экземпляров приложения, но это выглядит более простым.