問題原因
很多2B的項目當(dāng)初設(shè)計的時候都是按照SAAS模式來設(shè)計的,但是推廣運營的時候,發(fā)現(xiàn)很多企業(yè)并不接受SAAS模式,特別是大企業(yè)更希望可以私有化部署,可以保證數(shù)據(jù)的安全性。所以就需要對原有的微服務(wù)進(jìn)行私有化部署。
問題分析
原本的微服務(wù)設(shè)計,對于運維的復(fù)雜度提高非常多,如果要私有化部署需要考慮成本、復(fù)雜度問題。所以需要做大量的減法,因為甲方就會給你一臺服務(wù)器。所以基于部署資源情況,期望所有的微服務(wù)部署到一個tomcat中。那么分析下URL如下:
http://www.itdecent.cn:80/writer
協(xié)議://Domain域名:Port端口/Path路徑
通過分析Tomcat支持通過Path、Port、Domain來部署多應(yīng)用
問題解決
方案一:Path路徑來部署
通過Path路徑來部署,控制啟動順序的方式如下:
1、server.xml 的 Context 配置啟動。
2、conf\Catalina\localhost 下的 Context 配置啟動,如果需要/訪問,請取名為ROOT.xml。
3、webapps下的 啟動。
方案二:domain的方式部署
通過domain的方式部署,無法控制啟動順序。
方案三:Port的方式部署
通過Port的方式部署,順序控制靈活,根據(jù)server的排序啟動。
<Service name="app1">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="app1" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="/app/app1" path="" reloadable="true"/>
</Host>
</Engine>
</Service>
<Service name="app2">
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="app2" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="/app/app2" path="" reloadable="true"/>
</Host>
</Engine>
</Service>