分布式架構試水-zookeeper+dubbo+springboot

隨著互聯網的發展,應用系統變得越來越龐大,單體應用由於存在著「修改一點全部都需部署」的問題,讓開發和測試做了好多重複的工作,苦不堪言。我們需要引入「微服務」的理念,對項目根據業務進行模塊化拆分。

比如,一個商城系統可以拆分為產品product服務、訂單order服務、用戶user服務。服務之間的通訊(比如用戶服務需要查看某一用戶的訂單數據)就需要用到RPC(遠程過程調用),需要服務提供者將服務發佈到註冊中心(zookeeper)中,然後服務消費者來調用自己需要的服務。註冊中心就相當於服務的中介起到牽線搭橋的作用。

分佈式架構試水-zookeeper+dubbo+springboot

一、技術簡介

1、Zookeeper

Zookeeper是一個分佈式的、開放源碼的分佈式應用程序協調服務。它是一個為分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。

Zookeeper主要用來做註冊中心,下面會使用docker安裝啟動Zookeeper。

①下載zookeeper鏡像。使用docker中國的鏡像加速。

 docker pull registry.docker-cn.com/library/zookeeper

②啟動zookeeper,使用鏡像的ID啟動。

 docker run --name zk01 -p 2181:2181 --restart always -d 397be0d8fa45

2、Dubbo

分佈式架構試水-zookeeper+dubbo+springboot

Dubbo是阿里巴巴開源的分佈式服務框架,最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度的松耦合)。從服務模型的角度來看,Dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是需求方消費服務,所以基於這一點可以抽象出服務提供方(provider)和服務消費方(consumer)兩個角色

使用dubbo來作為rpc框架來保證服務的調用。

下圖是dubbo的架構圖,中文文檔http://dubbo.apache.org/books/dubbo-dev-book/design.html

分佈式架構試水-zookeeper+dubbo+springboot

1.Provider: 暴露服務的服務提供方.

  1. Consumer: 調用遠程服務的服務消費方。
  2. Registry: 服務註冊與發現的註冊中心。
  3. Monitor: 統計服務的調用次調和調用時間的監控中心。
  4. Container: 服務運行容器。
  • 調用關係說明:
  • 服務容器負責啟動,加載,運行服務提供者。
  • 服務提供者在啟動時,向註冊中心註冊自己提供的服務。
  • 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
  • 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
  • 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
  • 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

3、創建服務提供者和消費者兩個工程

提供者:

①服務提供者,引入bubbo的Springboot的starter

 com.alibaba.boot dubbo-spring-boot-starter 0.2.0

引入zookeeper的客戶端工具

 com.github.sgroschupf zkclient 0.1

②配置application配置文件

dubbo.application.name=provider-do#註冊中心地址dubbo.register.address=zookeeper://172.20.10.8:2181#dubbo的掃描包dubbo.scan.base-packages=com.pcx.providerdo.service

③在服務的類中添加dubbo的@service啟動application即可.

package com.pcx.providerdo.service;​import com.alibaba.dubbo.config.annotation.Service;import org.springframework.stereotype.Component;​@Component@Servicepublic class DoserviceImpl implements DoService {​ @Override public String doThing() { return "我在做事-----------------"; }}

for dubbo config bean [name : 1] has been registered.成功發佈

消費者:

①引入依賴

②配置註冊中心地址

dubbo.application.id=consumer​dubbo.register.address=zookeeper://172.20.10.8:2181

③使用:

package com.pcx.consumer.service;​import com.alibaba.dubbo.config.annotation.Reference;import com.pcx.service.DoService;import org.springframework.stereotype.Service;​@Servicepublic class GoService {​ @Reference DoService doService;​ public void hello(){ String s = doService.doThing(); System.out.println("你在幹啥"+s); }}

控制檯打印「你在幹啥我在做事---------------」

即可。


分享到:


相關文章: