这是我参与「第四届青训营 」笔记创作活动的第2天
一、发布者订阅者模式
定义:对象间的一种一对多依赖关系,使得每当一个对象的状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
import java.util.ArrayList;
import java.util.List;
public class PsPattern {
public static void main(String[] args) {
Publisher publisherA = new A();
publisherA.addSubscriber(new xiaoming());
publisherA.addSubscriber(new fangyuan());
// 一旦公众号状态改变
publisherA.notifySubscribers();
}
}
interface Publisher { // 公众号
void addSubscriber(Subscriber s);
void notifySubscribers();
}
class A implements Publisher {
private List<Subscriber> allSubscribers = new ArrayList<>(); // 维护所有订阅者
@Override
public void addSubscriber(Subscriber s) {
allSubscribers.add(s); // 添加一个订阅者对象
}
@Override
public void notifySubscribers() {
allSubscribers.forEach(subscriber -> subscriber.getArticle());
}
}
interface Subscriber { // 订阅方
void getArticle();
}
class xiaoming implements Subscriber {
@Override
public void getArticle() {
System.out.println("xiaoming获取到新文章");
}
}
class fangyuan implements Subscriber {
@Override
public void getArticle() {
System.out.println("fangyuan获取到新文章");
}
}
运行结果:
一旦公众号发布新内容,就通知所有订阅者,订阅者作为公众号的观察者,二者构成依赖关系。
二、Cluster/Distributed 概念
当一台服务器的单机处理能力和硬件资源无法承担用户压力时,可以将一个应用复制多份部署在多台应用服务器上,这些应用服务器为用户提供完全相同的服务,称之为一个集群。集群中的每个应用服务器为一个节点,互相分担压力,当有节点挂掉之后其他节点仍能保证应用正常运行,即系统的处理压力能力成倍数增长。用户访问集群中的任何一台服务器都可以获得相同的服务,在集群节点很多的情况下,为用户们建立一个统一的访问入口Dispatcher【负载均衡服务器】,类似交换机,它配置了所有集群节点的服务地址信息并将用户请求有选择地转发到集群中的某个节点。特性:1、高伸缩性(可以根据实际的需求和用户请求量动态调整集群节点的规模)2、高可用性(即使集群某节点发生故障,整个系统也不会瘫痪)
分布式架构:将一个完整的系统按照业务功能拆解成一个个独立的子系统,按照业务功能去分别实现各个服务。例如音乐播放器可拆分为注册登录服务、播放服务、下载服务等。同样分布式系统的各个服务仍然需要部署在各自的应用服务器上,可以将某一服务模块复制多份形成集群部署。
三、Kafka入门了解
distributed,partitioned,replicated commit log service.分布式&分区&多副本的提交日志服务。
a distributed streaming platform having three key capabilities : 分布式流处理平台
- publish and subscribe to streams of records 发布/订阅消息队列
- store streams of records 存储信息流(多副本实现容错性)
- process streams of records 流处理框架