1 分布式系统中的相关概念
1.1 大型互联网项目架构目标
传统项目和互联网项目
传统项目:例如 OA、HR、CRM 等,服务对象为:企业员工
互联网项目:天猫、微信、百度等,服务对象为:全体网民
互联网项目特点:用户多;流量大、并发高;海量数据;易受攻击;功能繁琐;变更快
大型互联网项目架构目标:
- 高性能:提高快速的访问体验
- 高可用:网站服务一直可以正常访问
- 可伸缩:通过硬件增加/减少,提高/降低处理能力
- 高可拓展:系统间耦合低,方便的通过增加/移除方式,增加/减少新的功能/模块
- 安全性:提供网站安全访问和数据加密,安全存储等策略
- 敏捷性:随需应变,快速响应
1.2 集群和分布式
集群:一个业务模块,部署在多台服务器上(很多“人”一起,干一样的事)
分布式:一个大的业务系统,拆分为小的业务模块,分别部署在不同的机器上(很多“人”一起,干不一样的事。这些不一样的事合起来是一件大事)
【注】在一般项目中,集群和分布式是并存的
1.3 架构演进(分布式)
单体架构
垂直架构
分布式架构
【注】分布式的每一部分都可以独立的启动
SOA架构
微服务架构
【注】Dubbo 是 SOA 时代的产物, SpringCloud 是微服务时代产物
2 Dubbo 概述
2.1 Dubbo 概念
阿里巴巴开源的一个高性能、轻量级的Java RPC 框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案
官网:http://dubbo.apache.org
2.2 Dubbo 架构
3 Dubbo 快速入门
3.1 Zookeeper 安装
官网下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.6.4/apache-zookeeper-3.6.4-bin.tar.gz
3.2 Dubbo 快速入门
定义服务接口
public interface HelloService {
String sayHello(String name);
}
实现服务接口
public class HelloServiceImpl implements HelloService {
public String sayHello(String name) {
return "Hello, " + name;
}
}
配置 Dubbo 服务提供者
<!-- dubbo-provider.xml -->
<dubbo:application name="hello-provider" />
<dubbo:registry address="zookeeper://localhost:2181" />
<dubbo:protocol name="dubbo" port="20880" />
<dubbo:service interface="com.example.HelloService" ref="helloService" />
<bean id="helloService" class="com.example.HelloServiceImpl" />
配置 Dubbo 服务消费者
<!-- dubbo-consumer.xml -->
<dubbo:application name="hello-consumer" />
<dubbo:registry address="zookeeper://localhost:2181" />
<dubbo:reference id="helloService" interface="com.example.HelloService" />
编写服务消费者代码
public class HelloConsumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-consumer.xml");
HelloService helloService = (HelloService) context.getBean("helloService");
String result = helloService.sayHello("Dubbo");
System.out.println(result);
}
}
编写服务提供者代码
public class HelloProvider {
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-provider.xml");
context.start();
System.in.read();
}
}
4 Dubbo 高级特性
4.1 dubbo-admin 管理平台
- dubbo-admin 管理平台,是图形化的服务管理页面
- 从注册中心中获取到所有的提供者/消费者进行配置管理
- 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能
- dubbo-admin 是一个前后端分离的项目,前端使用 vue ,后端使用 springboot
4.2 dubbo 常用高级配置
1、序列化
【注】将来所有的 pojo 类都需要实现 Serializable 接口
2、地址缓存
注册中心挂了,服务是否可以正常访问?
可以,因为 Dubbo 服务消费则会在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心,当服务器提供者地址发生变化时,注册中心会通知服务消费者
3、超时
4、重试
【网络抖动】网络突然断开又立马连接
【retries】重试两次,一共三次
5、多版本
6、 负载均衡
7、集群容错
8、服务降级