为什么要使用分布式系统?
容错
减少延迟 / 提高性能
可用性
负载均衡
总而言之, 其实目的只有一个,"用户体验".
什么是分布式系统?
分布式系统是由使用分发中间件连接的自治计算机组成的网络. 它们有助于共享不同的资源和功能, 为用户提供单一且集成的连贯网络.
搭建一个简单的分布式系统
1)在服务器 (虚拟机) 上安装 Zookeeper(我这里使用 Docker 安装).
(1)去 docker-cn.com 获取镜像加速地址
(2)使用 docker pull registry.docker-cn.com/library/zookeeper 命令下载 Zookeeper
(3)使用 docker run --name zk01 -p 2181 --restart always -d zookeeper 命令安装 zookeeper
(4)使用 docker ps 命令查看进程, 至此 zookeeper 已安装完成, 具体的安装文档请参照 https://hub.docker.com/_/zookeeper
2)创建服务提供者, 服务消费者(我使用的开发工具是 IDEA).
(1)New Project 选择 Empty Project
(2)创建一个子工程作为服务提供者.
2.1 new Model 选择 Spring Initalizr 为了测试方便引入 web 模块.
2.2 创建一个 service
- package com.example.ticket.Service;
- public interface TicketService {
- public String getTicket();
- }
2.3 创建 serviceimpl, 注意引入的包
- package com.example.ticket.Service;
- import com.alibaba.dubbo.config.annotation.Service;
- import org.springframework.stereotype.Component;
- @Component
- @Service // 将服务发布出去
- public class TicketServiceImpl implements TicketService {
- @Override
- public String getTicket() {
- return "《厉害了, 我的国》";
- }
- }
2.4 引入 dubbo 和 zklient 相关依赖
- <!-- 引入 dubbo-->
- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>0.1.0</version>
- </dependency>
- <!-- 引入 zookeeper-->
- <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
- <dependency>
- <groupId>com.GitHub.sgroschupf</groupId>
- <artifactId>zkclient</artifactId>
- <version>0.1</version>
- </dependency>
2.5 配置 dubbo 的扫描包和注册中心地址
- # 当前应用的名称
- dubbo.application.name=provider-ticket
- # 注册中心的地址
- dubbo.registry.address=zookeeper:// 地址: 2181
- # 扫描哪些包(发布什么内容)
- dubbo.scan.base-packages=com.example.ticket.Service
(3)子工程作为服务消费者.
3.1 new Model 选择 Spring Initalizr 为了测试方便引入 Web 模块.
3.2 创建一个 UserService
3.3 引入 dubbo 和 zklient 相关依赖
- <!-- 引入 dubbo-->
- <dependency>
- <groupId>com.alibaba.boot</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>0.1.0</version>
- </dependency>
- <!-- 引入 zookeeper-->
- <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
- <dependency>
- <groupId>com.GitHub.sgroschupf</groupId>
- <artifactId>zkclient</artifactId>
- <version>0.1</version>
- </dependency>
3.4 配置 dubbo 的注册中心地址
- # 应用名称
- dubbo.application.name=consumer-user
- # 注册中心的地址
- dubbo.registry.address=zookeeper:// 地址: 2181
3.5 将所需服务提供者工程的 service copy 过来(一定要全类名相同), 之后的目录结构如下图
3.6 编写 UserService
- package com.example.user.Service;
- import com.alibaba.dubbo.config.annotation.Reference;
- import com.example.ticket.Service.TicketService;
- import org.springframework.stereotype.Service;
- @Service
- public class UserService {
- @Reference
- TicketService ticketService;
- public void hello(){
- String ticket = ticketService.getTicket();
- System.out.println("买到票了:"+ticket);
- }
- }
至此, 一个简单的分布式系统就搭建完毕.
来源: http://www.jianshu.com/p/4306d8434aba