公司的項目基於阿里的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"/>