开发者学堂课程【基于 Zookeeper、Dubbo 构建互联网分布式基础架构:互联网基础架构演进(3)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/635/detail/10162
基于 Zookeeper、Dubbo 构建互联网分布式基础架构(1)
简介:
使用分布式需要一个注册中心,一个监控中心。原来是将一个项目跑到一些集群上面,而分布式是将一个大的项目分别拆开为多个模块,让其跑到不同的服务器上面,这叫做分布式。
优点:
每个 tomkeeper 上的负载就会变低,因此可以集中一部分服务器来满足更高性能的需求,例如秒杀的订单,需要大部分的服务器来处理。
一.使用分布式的一些问题
二.注册中心:Zookeeper
三.Dubbo 框架
四.演示功能
一、使用分布式的一些问题
(1)拆完之后会出现新的问题吗?现在有两个模块,二分之一的模块等等,他们之间是如何通信的呢?
例如有A和B两个模块,如果A里面需要用到B,他们分别又在两个不同的服务器上,则可以将其拆分变成服务,将B变成一个服务,A去引用B.
(2)服务之间的问题?A如何找到B然后引用它呢?
因为A和B不在一个服务器上,会出现A是一个集群,B也是一个集群,A要知道B的服务器地址,才能交互,A和B在两台不同的服务器上面,要想进行通信交互必须通过网络,通过网络必须知道互相的地址,但B的地址A是不知道的.
(3)如何让A知道B的地址呢?
A没有办法主动知道B的地址,所以需要找一个连接体,让A去找B,B去找A,这样的过程叫服务的注册和发现.
二.注册中心:Zookeeper
服务器交互是需要规范的,不是随便发一个数据就能交互,服务器要定协议,指定A或者B通过途径按照要求来交互,则出现Dubbo框架。
三、Dubbo 框架
一种分布式框架,第一种功能为用来分装各种协议,第二种功能为具有服务的治理功能,支持很多协议。
注:服务治理:记录调用的过程)
四.演示功能
新建一个项目,创建一个子模块
业务层 发布一个服务
控制层 远程控制业务层
(1) Project
project xmlns-"http://maven,apache.org/P0M/4.0.0"xmlns:xsi-"http://www.w3.org/2001/XMLSchema-xsi:schemaLocation-"http://maven.
apache.org/P0M/4.0.0
http://maven.apache,org/xsd/maven-4.0.0,<modelVersion>4.0.0</modelversion>
<groupId>com. qianfeng</groupId>
<artifactId>tes tduboodemo</artifactId,<vers ion>1.0</version>
<packaging> jar</packaging>
<name>testduboodemor/name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
<dependencies>
<dependency>
<groupId> junit</groupId>
<artifactId>junit</artifactId><version>3.8.1</vers ion>
<scope>test</scope>
</dependency>
</dependencies>
</project>
(2) Testweb
<version>1.0</version>cmodules>
cmodulestestweb</modules</modules>
<packaging>pom</packaging>
<name>test duboodemo</name>
<url>http://maven.apache,org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId><version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId><artifactId>spring-webmvcs/artifactId><version>4.3.13.RELEASE/version>
</dependency>
</dependencies>
(2)testcontroller
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;
Created by iackiechan on 2018/3/21/下午8:16
@RestController
public class TestController {
//这里应该声明一个service,但是刚才说过,service最终会变成一个web项目,也就是我们无法直接依赖了,但是此处仍然需要声明对象,怎么办?
//解决方式,我们将service 的接口声明和实现进行拆分,如何拆分,将service 创建为一个项目,jar包格式的项目?
为什么这么创建,因为除//control会用到service外,我们的serviceimpl实现中也用到了这个接口@RequestMapping("/getData")
public String getData(String name ) {
return null;
}