本文记录一些概念的定义或解释,都是网上 copy 来的,作回顾之用。
Java 相关
NoSQL 是什么
NoSQL(Not only SQL)是对不同于传统的关系型数据库的统称,广义地说,所有非关系型数据库都可称为 NoSQL。比如 Redis、MongoDB。
ZooKeeper 是什么
开源的分布式应用协调服务器,其为分布式系统提供一致性服务。其主要功能包括:配置维护、域名服务、分布式同步、集群管理等。ZAB 协议是 Paxos 算法的工业实现算法。
ZooKeeper 的三类角色:
- Leader:事务请求的唯一处理者,也可以处理读请求。
- Follower:可以直接处理客户端的读请求,并向客户端响应;但不会处理事务请求,只会将请求转发给 Leader;对 Leader 发起的事务提案具有表决权;同步 Leader 中事务处理结果;Leader 选举过程的参与者,具有选举权与被选举权。
- Observer:可以理解为不参与 Leader 选举的 Follower,在 Leader 选举过程中没有选举权与被选举权;同时,对于 Leader 的提案没有表决权。用于协助 Follower 处理更多的客户端读请求。Observer 的增加,会提高集群读请求处理的吞吐量,但不会增加事务请求的通过压力,不会增加选举的压力。
微服务组件包括哪些
一个完整的微服务包括的组件:注册中心,配置中心,熔断,限流,链路跟踪,路由
在微服务中,有些组件为必须组件(必须启动存在),客户端才能正常调用
- 必须组件:注册中心,后台服务(Provider)
- 非必须组件:配置中心,熔断,限流,链路跟踪,路由
什么是路由?路由是指根据请求 URL,将请求分配到对应的处理程序,它只是 API 网关的一个功能点。
什么是注册中心
注册中心可以说是微服务架构中的地址簿,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时,就在这里找到服务的地址,进行调用。
为什么需要注册中心
服务注册中心给客户端提供可供调用的服务列表,客户端在进行远程服务调用时,根据服务列表然后选择服务提供方的服务地址进行服务调用。服务注册中心在分布式系统中大量应用,是分布式系统中不可或缺的组件。
注册中心是整个服务调用的核心部分,如果服务不存在注册中心,那么通过网关会调用不到,导致失败。
什么是反向代理
理解代理:代理本质上是一个服务器,可以类比为一个中介,A 和 B 本来可以直连,中间插入一个 C,C 就是中介。
- 正向代理:服务端不知道真实的客户端是谁,客户端请求的服务都由代理服务器代替来请求。如通过 VPN 访问谷歌,VPN 就是一个正向代理服务器。
- 反向代理:反向代理是代理服务器将客户端请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给客户端。客户端不感知代理的存在。
反向代理的作用有:
- 提升服务器安全,如保护内网免受 web 攻击
- 实现负载均衡
区别:
两者的区别在于代理的对象不一样:正向代理代理的对象是客户端,反向代理代理的对象是服务端。
图中提及的 LAN 是 Local Area Network,中文名叫做局域网。
dependencyManagement 和 dependencies 的区别
dependencyManagement即依赖管理。它的作用是申明一些依赖,但不会实际引入这些依赖,真正会引入引入的依赖是 dependencies 中配置的。
dependencyManagement一般是在父工程的 pom.xml 中使用,dependencyManagement 申明当前工程可能会使用到的一些依赖,子模块需要用哪个就在自己的 pom.xml 中添加依赖,不过不需要加版本号了,会继承父工程 dependencyManagement 中申明的版本号。
这么做的目的:
- 在父模块中使用 dependencyManagement 声明依赖能够统一项目内依赖的版本,子模块无须声明版本,避免出现子模块中同一依赖项版本不一致的情况,降低依赖冲突的几率。
- dependencyManagement 申明了依赖,子模块需要什么依赖就自己引入,避免引入一些不必要的依赖。
另外,dependencyManagement 结合 import 标签,可以将目标 pom.xml 中的 dependencyManagement 配置导入合并到当前 pom.xml 的 dependencyManagement 中。
<dependencyManagement>
<dependencies>
<!--导入依赖管理配置-->
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0</version>
<!--依赖范围为 import-->
<scope>import</scope>
<!--类型一般为pom-->
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
集群与分布式的区别
集群是个物理形态,分布式是个工作方式。
分布式是将一个系统分成不同的服务,部署在不同的服务器,每个节点独立工作,多个节点对外完成系统整体功能。
集群是将一个系统部署到几台服务器上,实现同一业务。集群强调组织性与关联性,多台机器统一管理,最终目的是高可用。
分布式的每一个节点,都可以做集群,而集群并不一定就是分布式的。
这两者是相辅相成的。