JAVA面试题19

191. CAS 原理

CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS

Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

下图是 CAS 最基本的协议过程:

SSO 单点登录访问流程主要有以下步骤:

1. 访问服务:SSO 客户端发送请求访问应用系统提供的服务资源。

2. 定向认证:SSO 客户端会重定向用户请求到 SSO 服务器。

3. 用户认证:用户身份认证。

4. 发放票据:SSO 服务器会产生一个随机的 Service Ticket。

5. 验证票据:SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息:SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

192. 什么是 fastDFS

fastDFS 是一款 C 语言开发的,阿里巴巴开源的分布式文件管理系统,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。可以容易的解决在风不是项目中文件的统一管理问题。

193. fastDFS 的架构

FastDFS 架构包括 Tracker server Storage server以及Client三部分。客户端请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。

Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器。

服务端两个角色:

Tracker:管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。

Storage:实际保存文件,Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。

194:Storage的存储结构

Storage server(后简称storage)以组(group)为单位组织,一个group内包含多台storage机器,数据互为备份数据相同,但组和组之间的数据不同。

group内每个storage的存储依赖于本地文件系统,storage可配置多个虚拟磁盘,比如有10块磁盘,分别挂载在 /data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

storage接受到写文件请求时,选择其中一个虚拟磁盘来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个虚拟磁盘目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

返回的文件信息为:组名称,虚拟磁盘名称,一级路径,二级路径,文件名称,文件名称包括了文件的基本元数据信息(笔记大小,创建日期等)

 

195. fastDFS 的上传流程

1、存储服务器定时向调度服务器上报状态信息(磁盘和存储状态)

2、客户端请求调度服务器,申请上传文件

3、调度服务器根据存储服务器上传的状态信息,查询可用的存储服务器

4、调度服务器向客户端返回可用的存储服务器的 ip 地址和端口号

5、客户端将文件上传到存储服务器

6、存储服务器生成 fileID,将文件随机命名,存入到磁盘中

7、存储服务器向客户端返回 filId(路径信息和文件名)

8、客户端将文件信息存入到数据库中

 

196在程序中实现读写分离的原理:

在spring容器中配置多个数据源,分配关联到主库和从库,利用拦截器的方式获取执行操作的具体类型(select,insert,update,delete),根据执行类型,选择不同的数据源(主库,从库)进行数据的具体操作。

197.主从同步是如何工作的?

第一步:Master(主服务器)将对数据的操作记录到二进制日志当中

第二步:Slave(从服务器)通过I/O thread将拷贝主服务器的操作记录的二进制日志 Binary log到自己的Relay log

第三步: 从服务器通过SQL thread执行relay log中的操作,将主服务器中的数据也更新到从服务器中。

198. 什么是 MyCat

Mycat 的前身是阿里曾经开源的知名产品——Cobar。它的核心功能和优势是 MySQL 数据库分片,基于 Java 开发,实现了 MySQL 公开的二进制传输协议,

简单的说,MyCAT 就是:一个新颖的数据库中间件产品支持 mysql 集群,提供高可用性数据分片集群。你可以像使用 mysql 一样使用 mycat。对于开发人员来说根本感觉不到 mycat 的存在。

199. 为什么使用 MyCat

因为 mysql 单表最多支持 350W 条数据,同时并发过高时,因为数据库存储数据实际上还是将数据存储到了磁盘, 不可避免的会有 I/O 读写瓶颈问题,所以一般来说,服务器都会涉及数据库集群,包括读写分离和主从复制,这样 的话,就需要通过 spring 配置多数据源实现,管理和配置比较麻烦,需要配置 AOP 还需要代码实现,相对来说开 发和维护成本较高。

市面上的数据库中间件也有很多,mycat 一直维护和版本迭代相对稳定,而 mysql proxy、oneProxy 什么的,要不 版本不再更新,要么商业不开源,相对来说 mycat 是最适合企业级项目的线上数据库中间件产品;

200. MyCat 原理

逻辑库(schema)

通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。

逻辑表(table):

既然有逻辑库,那么就会有逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。

分片表:是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。 总而言之就是需要进行分片的表。

非分片表:一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,就是那些不需要进行数据切分的表。

分片节点(dataNode)

数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。

节点主机(dataHost)

数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的放在不同的节点主机(dataHost)。

更多面试题,请打开主页分栏 java面试 进行查看,谢谢 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值