分布式 Dubbo+Zookeeper
什么是分布式系统
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就想单个相关系统
首先需要明确的是,之哟普单个节点的处理能力无法满足日一整张的计算,存储任务的时候,且硬件的提升高昂得不偿失的时候,我们才需要考虑分布式
Dubbo
Dubbo官网: http://dubbo.apache.org/zh-cn/index.html
Dubbo定义
Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
架构演变
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
基本概念
提供者提供服务(container)注册服务到Registry注册中心,通知消费者去加载消费。通过Monitor监控
前台 中台 后台
dubbo 安装
Dubbo在github上托管: https://github.com/apache/dubbo-admin/tree/master 是一个springboot项目,打包运行即可
dubbo-admin:是个监控管理后台
在项目目录下打包:mvn clean package -Dmaven.test.skip=true 跳过测试
运行:java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
开启zookeeper服务在浏览器访问,默认用户名密码为root/root
RPC
定义
RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
RPC 是一种技术思想而非一种规范或协议
基本原理
步骤
核心:通讯,序列化
Dubbo就是帮我们解决了通讯,序列化等一系列繁琐的问题的框架
Zookeeper注册中心
Zookeeper下载地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/
注册中心参考:
安装到本地或服务器上测试
通过zkServer.cmd启动服务端,如果闪退,
在这个文件中加入pause
处理错误:拷贝一份zoo.cfg
开启服务端,开启客户端就能进行一些操作了
如ls /,create -e /aaa 111,get /aaa;
整合spring boot使用
- 添加依赖
<!--导入依赖 dubbo + zeekeeper-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--问题:日志冲突-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.8</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
-
配置properties文件
server.port=8001 #服务应用的名字 dubbo.application.name=provider-server #注册中心的地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #哪些服务要被注册 dubbo.scan.base-packages=edu.xalead.service
-
服务提供者
package edu.xalead.service; import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; // @Service @Component public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "Hello Dubbo"; } }
-
服务消费者
-
依赖与提供者一直
package edu.xalead.service;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
@Service
public class UserService {
//去注册中心拿到服务
@Reference//引用远程, pom坐标,可定义路径相同的接口名
TicketService ticketService;
public void buyTicket(){
String ticket = ticketService.getTicket();
System.out.println("在注册中心拿到一张票"+ticket);
}
}
-
配置properties文件
server.port=8002 #消费者去哪里拿,需要暴露自己的名字 dubbo.application.name=consumer-server #注册中心的地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
欢迎访问我的个人博客:http://www.ayjup.cn