IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据架构复习 -> 正文阅读

[大数据]大数据架构复习

大数据架构复习

我复习 我复习,我复习不完了.jpg

README

题型:
??10个大题(10分/题)

预测

00导论 + 01 云计算概念
??云计算
02 虚拟化&容器化
??虚拟化技术,具体分类,运行模式(参考virtualbox例题,可覆盖很多考点)
??容器化的概念,与虚拟机的比较
03 大数据处理:分布式系统
??大数据处理的步骤(这个可能会融合在别的问题作为一个小问题,不会单独出一题)
??分片的方法(可能重点一致性哈希)
??副本建立策略,存在的问题
??一致性引起的相关内容(CAP、BASE、Paxos)
??*架构
04 Hadoop
??三大核心组件:HDFS、MapReduce、Yarn 各个组件的架构和工作流程等
05 Spark
??Spark支持的大数据三类事务,架构和运行流程
??根据RDD分区的依赖关系划分Stage
06 流式框架Flink
??流计算的概念和Flink中的各种概念考一些吧

00 导论

  • 大数据处理四个目标需求
    高性能、高可用、可伸缩、容错性

  • 分片、副本的特点
    分片:高性能、高可用、可伸缩
    副本:高性能、高可用、容错性

  • 三类云服务产品及应用场合
    ? 基础设施即服务 IaaS
    ? 平台即服务 PaaS
    ? 软件即服务 SaaS

01 云计算概念

  • 云计算定义、特征、三个服务模式、服务形态
    • 定义: 云计算是一种通过网络按需提供可动态伸缩的廉价计算服务。云它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务计算。
    • 特征:
      ? 资源虚拟化和池化统一管理
      ? 超大规模、弹性伸缩
      ? 按需自助提供服务
      ? 泛在接入、准确计费、价格低廉
    • 三个服务模式:
      ? 基础设施即服务 IaaS
      ? 平台即服务 PaaS
      ? 软件即服务 SaaS
    • 服务形态:
      ? 公有云:由第三方云服务提供商拥有和运营,并通过 Internet 提供服务的 IT 基础设施。
      ? 私有云:由专供一个企业或组织使用的云计算资源构成。
      ? 混合云:通过安全连接将公有云和私有云环境组合起来,允许在不同云环境之间共享数据和应用程序

02 虚拟化&容器化

虚拟化

  • 虚拟化技术:
    ? 服务器虚拟化:将一台计算机虚拟为多台逻辑计算机
    ? 存储虚拟化:将底层存储设备抽象化和统一池化管理,独立对外提供存储服务
    ? 网络虚拟化:对将一张物理网卡虚拟成多张虚拟网卡,通过虚拟机来隔离不同应用
    ? 桌面虚拟化:将用户桌面环境与其使用的终端设备解耦,在服务商存放每个人的完整桌面环境,用户使用终端设备通过网络访问自己的桌面

  • 运行模式:
    ? 寄居模式:运行在物理机的操作系统上
    ? 裸金属模式:直接运行在物理机的硬件上,提供接近于物理机的性能

  • 服务器虚拟化技术分类:
    ? 完全虚拟化:模拟了完整的底层硬件,操作系统完全不知道自己运行在虚拟机中
    ? 半虚拟化:客户OS知道自己运行在虚拟机环境中,不能直接调用内核的特权指令和敏感指令
    ? 硬件辅助虚拟化:改造 CPU,引入新的指令和运行模式,帮助 VMM 高效地识别和截获敏感指令,从 硬件层面支持虚拟化

例:简要说明virtualbox使用的虚拟化技术和运行模式


Virtualbox使用的是服务器虚拟化技术,即将一台计算机虚拟为多台逻辑计算机,每台虚拟机拥有独立的“硬件”。虚拟机“硬件”是使用物理机的硬件模拟而来的。虚拟机执行的工作,实际是由物理机硬件完成的。
其运行模式为寄居模式,即VMM运行在物理机的操作系统上,安装使用简易方便,性能较低。寄居模式下VMM可以充分利用host OS功能来操作硬件设备,但是经过中间环节导致系统损较大。

  • 存储虚拟化技术分类:
    ? 基于主机的虚拟化:在服务器主机上安装代理软件进行逻辑卷管理,通过逻辑卷把分布在多机上的物理存储设备映射成一个统一的逻辑虚拟存储空间,使服务器的存储空间可以跨越多个异构的磁盘阵列
    ? 基于存储设备的虚拟化:在一些中高级存储设备中,可以利用其存储控制器或者内部存储子系统实现虚拟化映射
    ? 基于网络的虚拟化:在网络设备上实现存储虚拟化,包括基于互联设备和基于路由器。

  • 容器化定义:
    容器化是在操作系统内核上的轻量级的虚拟化技术。利用共享的操作系统内核的功能,建立一系列资源相互隔离的封闭运行环境,这些封闭运行环境就像一个个容器,应用程序就部署运行在其中。

例:什么是容器化?容器与虚拟机又有何区别?请简要说明。


容器化是利用共享的操作系统的内核,建立一系列资源相互隔离的封闭运行环境,在其中部署应用程序运行的技术。

比较层面虚拟机容器化
隔离级别操作系统进程
隔离策略虚拟机监视器HypervisorCGroups
系统资源较多较少
启动时间分钟级秒级
镜像存储空间
集群规模上百上万

03 大数据处理:分布式系统

大数据处理的四个步骤:数据采集与预处理、数据存储与管理、数据处理与分析、数据解释与可视化

分布式计算的原理:分片、副本

3.1 分片

分片

例:假设一个企业网需要建设一个后端的缓存集群,用于缓存用户数据加速用户访问速度,因此希望每个特定的用户最好每次都访问一台固定的服务器节点,方法是将n台服务器节点编号为0~(n-1),通过[用户账户 % n]得到访问的服务器编号。但是,如果集群中某台服务器宕机了,则n就变成了n-1,于是取余计算就很可能得不到正确的服务器编号,导致用户请求定位到错误的服务器编号,造成大量的缓存失效。
请设计一种方案来改善这种情况:
(1)使得集群中部分服务器失效后不会造成大面积的缓存失效;
(2)原有的访问大部分还是保持在同一台服务器节点上;
(3)负载尽量均衡。


//思路:一致性哈希

3.2 副本

评价容错性的指标
(顺便复习:大数据的四个需求中,副本实现了三个,即高性能、高可用、容错性)
评价容错性的指标
建立副本的策略及各种策略存在一些问题,其中最大的问题就是一致性问题,故本章重点讨论。
副本建立及策略

例:简要说明分布式系统中的副本建立策略以及各种策略存在的问题
建立副本的策略:单主复制、多主复制、无主复制


问题从思路的三个方面考虑即可,这里略

一致性问题:
一致性问题
由CAP定理,三个特性最多满足两项。但是BASE原理弱化了一致性,允许系统中国的数据存在中间状态,追求分区容错性和可用性,所以出现了各种一致性模型:强一致性、单调一致性、会话一致性、最终一致性等。为了达到不同的一致性程度,需要不同的一致性协议。

例:分布式系统中是否能够在保证副本一致性的前提下,同时可以获得高可用和容错性。请简要阐述CAP定理和BASE理论的内容和作用。

例:学习Basic Paxos算法,针对5个节点的集群,模仿算法执行,莫说达成一致性的过程。尝试仿真出如下场景:(1)节点故障(2)并发操作请求(3)网络分区

  • 分布式系统中建立逻辑时钟的两种方法:
    ? Lamport时间戳:按照一定的规则为分布式系统中的每个事件都打上一个Lamport时间戳,通过比较时间戳的数值大小,就可以确定事件的偏序关系(缺点:无法比较因果关系)
    ? 向量时钟算法:向量时钟通过vector记录本节点和其他节点的Lamport时间戳

3.3 架构

  • 传统 BI 架构、批处理架构、流处理架构优缺点及适用场景
场景\架构BI架构批处理架构流处理架构
优点简单易用,技术选型时用大数据组件替换掉BI组件没有臃肿的ETL过程,数据的实效性高
缺点? 缺乏非结构化分析 ? ACID特性,影响性能? ETL数据预处理功能复杂、臃肿? 没有数据仓库对业务支撑的灵活性 ? 需要手工定制 ? 缺乏实时支撑 ? 不存在批处理,对数据的重播和历史统计无法很好的支撑? 对于离线分析仅仅支撑窗口之内的分析
适用场景传统的BI场景以BI场景为主,适于大规模历史数据的离线分析预警,监控,对数据有有效期要求的情况
  • Lambda 架构和 Kappa 架构原理及对比
    ? Lambda 架构:批+流
    优点:
    实时+离线分析,对数据分析场景涵盖全面。
    缺点 :
    需要维护批处理层和速度层两套系统:Hadoop & Stormn 同一个业务计算逻辑需要在两层分别实现和运维。
    ? Kappa 架构:简化了 Lambda 架构,删除批处理系统,所有数据都走实时路径,一切数据都视为流。通过流处理系统全程处理实时数据和历史数据

04 Hadoop框架

Hadoop框架

例:请简要说明Hadoop的三大核心组件及其作用。
Hadoop三大核心组件:HDFS、MapReduce、YARN
作用:
? HDFS是分布式存储框架,把文件分布式存储到多个计算机节点上,适合海量数据的存储。
? MapReduce是分布式计算框架,将大规模集群上的并行计算过程抽象为两个函数:Map、Reduce,采用“分而治之”策略,存储在分布式文件系统中的大规模数据集会被切分成许多独立的分片 split,这些分片被多个 Map 任务并行处理。
? Yarn作为资源调度平台,并且负责根据各种计算框架的负载需求,调整各自占用的资源,实现集群资源共享和资源弹性收缩。

例:简要说明HDFS体系结构的组成,副本存储策略以及数据读写过程。
体系结构:
(1)一个名称节点NameNode,作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问;
(2)多个数据节点DataNode,每个数据节点运行一个DataNode进程,负责处理客户端的读、写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。


副本存储策略:
(1)第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点;
(2)第二个副本:放置在与第一个副本不同的机架的节点上;
(3)第三个副本:与第一个副本相同机架的其他节点上;
(3)更多的副本:随机节点。


数据读写过程:
(1)HDFS提供了API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID。
(2)当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID。
(3)如果某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据;如果没有发现,就随机选择一个副本读取数据

  • HDFS 数据错误与恢复:
    ? 名称节点出错:名称节点保存了所有的元数据信息,如果出错则整个 HDFS 集群将失效。因此,HDFS设置了检查点机制,把这些元数据周期性的复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据SecondaryNameNode进行NameNode元数据数据的恢复。
    ? 数据节点出错:每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何 I/O 请求。名称节点会定期检查,如果发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为该数据库生成新的副本。
    ? 数据出错:客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据。

例:简要说明MapReduce的体系结构组成和工作流程。
体系结构:
(1)Client:用户编写的MapReduce程序通过Client提交到JobTracker端。 用户可通过Client提供的一些接口查看作业运行状态
(2)JobTracker:JobTracker负责资源监控和作业调度。JobTracker 监控所有TaskTracker与Job的健康状况
(3)TaskTracker:TaskTracker 周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作
(4)Task:Task 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动


工作流程:
(1)输入文件分片(Split),每一片都由一个MapTask来处理
(2)执行 Map 任务,写入缓存
(3)进行溢写(分区、排序、合并)
(4)在多个分区上进行后归并
(5)把数据输入给 Reduce 任务执行
(6)输出结果


例:简要说明YARN体系结构组成,各部分功能及工作流程。
体系结构:
(1)全局资源管理器 ResourceManager:负责整个系统的资源管理和分配
(2)ApplicationMaster:
? 与 RM 协商获取资源
? 与 NM 保持交互通信进行应用程序的启动、运行、监控和停止
? 定时向 RM 发送“心跳”消息,报告资源的使用情况和应用的进度信息
(3)NodeManager:
? 以“心跳”的方式与 RM 保持通信,向 RM 汇报作业的资源使用情况和每个容器的运行状态 ? 接收来自 AM 的启动/停止容器的各种请求 ? 跟踪节点健康状况,监控每个容器的资源(CPU、内存等)使用情况
(4)JobHistoryServer:统一管理YARN历史任务
(5)WebAppProxyServer:任务执行时的Web页面代理


工作流程:
(1)YARN中的 RM 负责接收和处理来自客户端的请求,为应用程序分配一个容器,在该容器中启动一个 AM
(2)AM 被创建后会首先向 RM 注册、采用轮询的方式申请资源
(3)RM 以“容器”的形式向提出申请的 AM 分配资源
(4)在容器中启动任务
(5)各个任务向 AM 汇报自己的状态和进度
(6)应用程序运行完成后,AM 向 RM 的应用程序管理器注销并关闭自己


05 Spark框架

Spark框架

  • 与 MapReduce 相比,Spark 的 Executor 的优点
    (1)利用多线程来执行具体的任务,减少任务的启动开销。
    (2) Executor 中有一个 BlockManager 存储模块,会将内存和磁盘共同作为存储设备,有效减少IO开销

例:简述大数据处理的三类场景,说明Spark对这三类典型场景的支持
(1)复杂的批量数据处理
(2)基于历史数据的交互式查询
(3)基于实时数据流的数据处理
Spark所提供的生态系统足以应对三种场景,即同时支持批处理、交互式查询和流数据处理


例:简要陈述Spark的运行架构和基本流程。
Spark架构:
集群资源管理器(Cluster Manager)
运行作业任务的工作节点(Worker Node)
每个应用的任务控制节点(Driver)
工作节点上负责具体任务的执行进程(Executor)


工作流程:
(1)首先为应用构建起基本运行环境,注册并申请资源
(2)资源管理器为 Executor 分配资源,并启动Executor进程
(3) SparkContext 根据 RDD 的依赖关系构建 DAG 图,DAG 图提交给 DAGScheduler 解析成 Stage,注册并申请 Taks
(4)Task在Executor上运行,反馈执行结果,运行完毕后写入数据并释放所有资源

  • 根据RDD分区的依赖关系划分Stage的方法:在DAG中进行反向解析
    ??1.宽依赖就断开
    ??2.窄依赖就把当前的RDD加入到Stage中,尽量划分在同一个Stage中

  • Stage的分类:
    ? ShuffleMapStage:不是最终的Stage,在它之后还有其他Stage,所以它的输出一定会经过Shuffle过程,并作为后续Stage的输入
    ? ResultStage:最终的Stage,没有输出,而是直接产生结果或存储。这种Stage是直接输出结果,其输入边界可以是从外部获取数据,也可以是另一个ShuffleMapStage的输出。在一个Job里必定有该类型Stage。

例:简要说明Spark中“stage”的概念及划分方法。
概念:
Stage 是 Job 的基本调度单位。一个 Job 会被拆分为多组 Task,每组任务被称为一个 Stage。


个人理解这里的划分方法是指在DAG中反向解析(因为我看有人的理解是Stage的分类,但是没有标准参考答案我也不清楚)

  • RDD的运行过程:
  1. 创建RDD对象;
  2. SparkContext负责计算RDD之间的依赖关系,构建DAG;
  3. DAGScheduler负责把DAG图分解成多个Stage,每个Stage中包含了多个Task,每个Task会被TaskScheduler分发给各个WorkerNode上的Executor去执行。

例:简要叙述Spark部署在YARN集群上,运行程序的两种模式。
Spark在YARN上运行应用程序的两种模式:
Client 模式(测试环境):Spark 的 Driver 程序运行在客户端进程中,在应用程序执行期间客户端不能关闭,关掉则作业就会挂掉。
Cluster 模式(生产环境):Spark 的 Driver 程序运行在由Yarn集群上的AppMaster进程中,可以在应用程序启动后关闭。

  • Spark Streaming 原理及缺点:
    ? 原理:Spark Streaming 的主要抽象是离散化数据流DStream,表示连续不断的数据流
    ? 缺点:能够达到秒级响应,但是无法实现毫秒级的流计算,对于实时性要求很高的应用无能为力

例:简要说明Spark解决流计算的基本思想和不足之处。
基本思想:把数据流以时间片为单位切成一段一段,每段视为一个批处理,通过Spark 批处理引擎模仿流计算


不足之处:能够达到秒级响应,但是无法实现毫秒级的流计算,对于实时性要求很高的应用无能为力

这是下一章开头的内容,放在这里是想说明正是 由于这种不足之处,所以引入了流式框架Flink

06 流式框架Flink

Flink

  • 流数据的特点:
    ? 数据快速持续到达,潜在大小或许无穷无尽。
    ? 数据来源众多,格式复 杂。
    ? 数据量大,但是不十分关注存储,一旦经过处理,要么被丢弃,要么被归档存储。
    ? 注重数据的整体价值,不过分关注个别数据。
    ? 数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素的顺序。

  • 流计算处理三个阶段:
    ? 数据实时采集阶段,通常采集多个数据源的海量数据,需要保证实时性、低延迟与稳定可靠。
    ? 数据实时计算阶段,对采集的数据进行实时的分析和计算,并实时反馈计算结果。
    ? 实时查询服务,经由流计算框架得出的计算结果可供用户进行实时查询、展示或储存。

例:简要说明流数据的特务点以及流计算的需求和处理流程。
参考上面知识点

  • Flink的设计思想:
    ? 事件驱动
    事件驱动型应用,是一类有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。
    ? 基于流的世界观
    一切都是由流组成的,离线数据是有界的流,实时数据是没有界限的流。
    ? 分层 API
    Flink 提供分层API架构,每一层API提供特定的抽象,服务于上层API。

例:说明Flink框架中处理时间和事件时间的概念和区别。
? 处理时间:是处理流的应用程序所在机器的本地时钟时间。处理时间的窗口中包含了一个时间段内来到机器的所有事件
? 事件时间:是流中的事件实际发生的时间。通常,在事件进入流处理程序前,事件数据就已经包含了时间戳。事件时间可以如实反应事情是怎么发生的
? 区别:
(1)处理时间和事件事件可能相差极大,因为存在延迟或者乱序到达的情况。
(2)处理时间提供低延迟,同时结果也取决于处理速度且不能保证确定性。事件时间保证结果确定性,同时还可以处理迟到的或者乱序的事件流

例:简要介绍Flink提供的窗口操作及其分类。
? 时间窗口:基于时间的窗口,支持两种滚动时间窗口和滑动时间窗口。
? 滚动窗口:按照固定的时间或者大小进行拆分。滚动窗口下窗口之间之间不重叠,且窗口长度是固定的。
? 滑动窗口:滑动窗口在滚动窗口的基础上增加了窗口的滑动时间,允许窗口的数据发生重叠。滑动窗口以一个步长(Slide)不断向前滑动,窗口的长度固定。
? 计数窗口:基于数量的窗口
? 会话窗口:该将某个时间段活跃较高的相关数据聚合在一起

例:什么是Flink的状态(stage),Flink如何保证在网络故障的情况下状态能够恢复并保持一致性。
状态:状态是指在流计算过程中计算节点的中间计算结果或元数据属性。


Flink采用检查点机制,定期对状态备份以提供恢复能力。所有任务的状态在某个时间点做一份拷贝,而这个时间点应该是所有任务都恰好处理完一个相同的输入数据的时刻,即状态一致检查点。

例:举例说明逻辑流图、物理数据流图的概念以及不同类型数据交换策略。
? 逻辑流图,表示计算逻辑,节点是算子。
? 物理数据流图,说明程序的执行方式,节点是任务。


数据交换策略:
? 前向策略:将数据从一个任务发送到接收任务。如果两个任务都位于同一台物理机上,这种交换策略可以避免网络通信
? 广播策略:将所有数据发送到算子的所有的并行任务上。因为这种策略会复制数据和涉及网络通信,所以代价相当昂贵
? 基于键控的策略:通过Key对数据进行分区,保证相同Key的数据将由同一任务处理
? 随机策略:随机分配,以便均匀地将负载分配到不同的计算任务

例:简要说明Flink架构中的主要角色及其功能。
? 作业管理器 JobManager:负责资源申请、协调任务的分布式执行、协调检查点和失败恢复。可以搭建 HA。
? 任务管理器 TaskManager:负责任务执行(基于 dataflow 划分的 task 任务);与 Job Manager 保持心跳沟通和汇报任务状态。

例:说明Flink on YARN的两种作业运行模式。
? 会话方式:在 YARN 集群内部启动一个 Flink 集群常驻,通过一个 YARN session 客户端接收 Flink 作业。使用Flink中的 yarn-session(yarn客户端),启动两个必要服务JobManager和TaskManager,此后 yarn-session 一直保持运行,等待接收客户端提交作业。客户端通过 yarn-session 提交作业。有大量比较小的作业,适合使用这种方式。
? 分离模式:使用 yarn-session 直接提交作业到YARN集群

例:说明Flink任务的调度与执行过程。
(1)程序代码 → 优化器&图生成器(Dataflow) → 客户端的 Actor 系统。
(2)Actor 客户端提交作业,发送 Dataflow 到 JobManager。
(3)JobManager 不断接受 TaskManager 的心跳消息,从而可以获取到有效的 TaskManager 信息。
(4)JobManager 通过调度器 Scheduler 在 TaskManager 中调度 task(flink 中最小的调度单元就是 task,对应的就是一个线程),真正负责执行任务的是 TaskManager 中的任务槽(task slot)
在程序运行的时候,task 与 task 之间是可以进行流数据传输的

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:05:45  更:2021-12-07 12:09:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:33:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码