公司的項目基於阿里的Dubbo微服務框架開發。為了符合相關監管部門的安全要求,公司購買了華東1、華東2兩套異地服務器,一套是業務服務器,一套是災備服務器。准備在這兩套服務器上實現Dubbo的分布式服務,如下圖:

這里只羅列了部分服務器作為參考說明。其中 api 是消費者服務,driver 和 order 是 提供者服務。華東1 和 華東 2 分別是兩個局域網,局域網內可用內網通信。兩個局域網只能通過外網通信。
二、消費者分布式服務
消費者的分布式是通過 Nginx 配置負載均衡和反向代理實現的。我們把 Nginx 部署在華東1的 api 服務器上,Nginx的配置如下:
1、負載均衡
#gzip on;
upstream tomcatServer {
#華東1服務器走內網
server 192.168.27.101:8680 weight=10;
#華東2服務器走外網
server 139.159.257.207:8680 weight=10;
}
2、反向代理
# HTTPS server
#
server {
listen 443 ssl;
server_name api.gogo.cn;
ssl_certificate /usr/local/certapi/api.pem;
ssl_certificate_key /usr/local/certapi/api.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
proxy_connect_timeout 500;
proxy_send_timeout 500;
proxy_read_timeout 500;
client_max_body_size 200m;
location / {
# root html;
# index index.html index.htm;
proxy_pass http://tomcatServer/;
}
}
三、提供者分布式服務
Dubbo 將 zookeeper 當作注冊表來實現微服務框架。zookeeper 其實已經幫我們做好了負載均衡,如上圖:我們把不同服務器上 driver、order 同時注冊到同一個zookeeper 中,當我們調用 driver、order 服務時,zookeeper 會在兩台服務器之間權衡分配,做負載均衡。在 applicationContext.xml 做如下配置...
服務提供者:
<!-- dubbo 配置 -->
<dubbo:application name="ts_provider_order"/>
<dubbo:registry address="${zookeeper.host}"/>
<dubbo:protocol name="dubbo" port="-1"/>
<dubbo:provider timeout="60000" retries="0" threadpool="cached" threads="1000" accepts="1000"/>
<dubbo:consumer check="false"/>
<dubbo:annotation package="com.soft.ts"/>
服務消費者:
<!-- dubbo 配置 -->
<dubbo:application name="ts_admin"/>
<dubbo:registry address="${zookeeper.host}" />
<dubbo:protocol name="dubbo" port="-1" />
<dubbo:consumer check="false" timeout="60000" retries="0"/>
<dubbo:annotation package="com.soft.ts"/>

