关于Port Binding的12 Factor文章 http://12factor.net/port-binding要求每个应用都有 是自包含的,没有注入运行时,例如Tomcat的。对于 这个建议是什么原因......微服务自包含应用程序的优点是什么?
答案 0 :(得分:9)
要了解有关端口绑定和自包含应用的规则,从设计用于运行12因素应用的平台(如Heroku或Deis)的角度查看内容非常有用。
这些平台正在流程级别扩展应用程序。当进程按比例放大时,平台会尝试将这些额外的工作人员放在路由网格后面,以便他们可以开始提供流量。如果应用程序不是自包含的,并且例如使用mod_jk
与前端Apache服务器紧密耦合 - 则无法通过运行更多孤立的工作进程进行扩展。
存在端口绑定以解决平台级别的“端口代理”问题。如果每个应用程序工作者在端口80上进行侦听,则会发生冲突。为了解决这个问题,端口绑定是一种约定,通过该约定,应用程序侦听平台已分配的端口 - 并将其作为$PORT
环境变量传入。这确保了a)应用程序工作者在正确的端口上进行侦听,并且b)平台知道将路由到该工作者的流量路由到何处。
答案 1 :(得分:3)
我认为这是因为在扩展应用程序时,它可以为您提供极大的灵活性。如果你使用tomcat,你必须复制.war并将其放入另一个tomcat中,然后将你的请求负载平衡到其中任何一个。
相反如果你的应用程序有一个自包含的http服务器,你就会在另一个端口运行另一个实例而忘记所有的tomcat东西。您仍然需要将您的请求负载均衡到您的任一应用实例,但似乎更直接。