Spark内核机制解析及性能调优

Spark内核机制解析及性能调优 pdf epub mobi txt 电子书 下载 2025

王家林 著
图书标签:
  • Spark
  • 内核
  • 性能调优
  • 大数据
  • 分布式计算
  • 数据处理
  • JVM
  • 内存管理
  • 调优实战
  • 源码分析
想要找书就要到 静思书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 机械工业出版社
ISBN:9787111554424
版次:1
商品编码:12034497
品牌:机工出版
包装:平装
丛书名: 大数据科学丛书
开本:16开
出版时间:2017-01-01
用纸:胶版纸
页数:344

具体描述

编辑推荐

适读人群 :大数据开发者
  源码入手分析spark核心机制

内容简介

  本书致力于Spark内核的深入解析,带领读者掌握Spark内核的各个关键知识点。具体内容由详细讲述RDD提供的功能以及内部实现的机制开始,通过源码引导读者深入理解Spark的集群部署的内部机制、Spark内部调度的机制、Executor的内部机制、Shuffle的内部机制,进而讲述Tungsten的内部机制,接着又进一步深入分析了SparkStreaming的内部机制。本书的后部分,是任何Spark应用者都非常关注的Spark性能调优的内容。本书可以使读者对Spark内核有更深入彻底的理解,从而实现对Spark系统深度调优、Spark生产环境下故障的定位和排除、Spark的二次开发和系统高级运维。本书的每章开篇均有重点介绍以引导读者有目的有重点的阅读或查阅。本书适合于对大数据开发有兴趣的在校学生。同时,对有分布式计算框架应用经验的人员,本书也可以作为Spark源码解析的参考书籍。

目录

前言
第1章RDD功能解析
1.1RDD产生的技术背景及功能
1.2RDD的基本概念
1.2.1RDD的定义
1.2.2RDD五大特性
1.2.3RDD弹性特性的7个方面
1.3创建RDD的方式
1.3.1通过已经存在的Scala集合创建RDD
1.3.2通过HDFS和本地文件系统创建RDD
1.3.3其他的RDD的转换
1.3.4其他的RDD的创建
1.4RDD算子
1.5RDD的Transformation算子
1.5.1Transformation的定义
1.5.2Transformation在RDD中的角色定位及功能
1.5.3Transformation操作的Lazy特性
1.5.4通过实践说明Transformation的Lazy特性
1.6RDD的Action算子
1.6.1Action的定义
1.6.2Action 在RDD中的角色定位及功能
1.7小结
第2章RDD的运行机制
2.1RDD依赖关系
2.1.1窄依赖(Narrow Dependency)
2.1.2宽依赖(Shuffle Dependency)
2.2有向无环图(Directed Acyclic Graph,DAG)
2.2.1什么是DAG
2.2.2DAG的生成机制
2.2.3DAG的逻辑视图
2.3RDD内部的计算机制
2.3.1RDD的计算任务(Task)
2.3.2RDD的计算过程
2.4RDD中缓存的适用场景和工作机制
2.4.1缓存的使用
2.4.2缓存的适用场景
2.4.3缓存工作机制解析
2.5RDD的检查点(Checkpoint)的适用场景和工作机制
2.5.1Checkpoint的触发
2.5.2Checkpoint的适用场景
2.5.3Checkpoint工作机制解析
2.6RDD容错原理及其四大核心要点
2.6.1RDD容错原理
2.6.2RDD容错的四大核心要点
2.7通过WordCount实践RDD内部机制
2.7.1WordCount案例实践
2.7.2解析RDD生成的内部机制
2.8小结
第3章部署模式(Deploy)解析
3.1部署模式概述
3.2应用程序的部署
3.2.1应用程序部署的脚本解析
3.2.2应用程序部署的源代码解析
3.3Local与Local-Cluster部署
3.3.1Local部署
3.3.2Local[*]与Local[N]部署
3.3.3Local[*,M]与Local[N,M]部署
3.3.4Local-Cluster[S,C,M]部署
3.4Spark Standalone部署
3.4.1部署框架
3.4.2应用程序的部署
3.4.3Master的部署
3.4.4Worker的部署
3.4.5内部交互的消息机制
3.4.6Master HA的部署
3.5Spark on YARN的部署模型
3.5.1部署框架
3.5.2应用程序的部署
3.6小结
第4章Spark调度器(Scheduler)运行机制
4.1Spark运行的核心概念
4.1.1Spark运行的基本对象
4.1.2Spark运行框架及各组件的基本运行原理
4.2Spark Driver Program剖析
4.2.1什么是Spark Driver Program
4.2.2SparkContext原理剖析
4.2.3SparkContext源代码解析
4.3Spark Job的触发
4.3.1Job的逻辑执行(General Logical Plan)
4.3.2Job具体的物理执行
4.3.3Job触发流程源代码解析
4.4高层的DAG调度器(DAGScheduler)
4.4.1DAG的定义
4.4.2DAG的实例化
4.4.3DAGScheduer划分Stage的原理
4.4.4DAGScheduer划分Stage的具体算法
4.4.5Stage内部Task获取最佳位置的算法
4.5底层的Task调度器(TaskScheduler)
4.5.1TaskScheduer原理剖析
4.5.2TaskScheduer源代码解析
4.6调度器的通信终端(SchedulerBackend)
4.6.1SchedulerBackend原理
4.6.2SchedulerBackend源代码解析
4.6.3Spark程序的注册机制
4.6.4Spark程序对计算资源Executor的管理
4.7小结
第5章执行器(Executor)
5.1Executor的创建、分配、启动及异常处理
5.1.1Executor的创建
5.1.2Executor的资源分配
5.1.3Executor的启动
5.1.4Executor的异常处理
5.2执行器的通信接口(ExecutorBackend)
5.2.1ExecutorBackend接口与Executor的关系
5.2.2ExecutorBackend的不同实现
5.2.3ExecutorBackend中的通信
5.3执行器(Executor)中任务的执行
5.3.1Executor中任务的加载
5.3.2Executor中的任务线程池
5.3.3任务执行失败处理
5.3.4剖析TaskRunner
5.4小结
第6章Spark的存储模块(Storage)
6.1Storage概述
6.1.1Storage的概念
6.1.2Storage的设计模式
6.2Storage模块整体架构
6.2.1通信层
6.2.2存储层
6.2.3Partition与Block的对应关系
6.3不同Storage Level对比
6.4Executor内存模型
6.5Tachyon
6.5.1Tachyon简介
6.5.2Tachyon API的使用
6.5.3Tachyon在Spark中的使用
6.6小结
第7章Shuffle机制
7.1Shuffle概述
7.2Shuffle的框架
7.2.1Shuffle的框架演进
7.2.2Shuffle的框架内核
7.2.3Shuffle框架的源代码解析
7.2.4Shuffle 的注册
7.2.5Shuffle读写数据的源代码解析
7.3基于Hash的Shuffle
7.3.1基于Hash的Shuffle内核
7.3.2基于Hash的Shuffle写数据的源代码解析
7.4基于Sort的Shuffle
7.4.1基于Sort的Shuffle内核
7.4.2基于Sort的Shuffle写数据的源代码解析
7.5基于Tungsten Sort的Shuffle
7.5.1基于Tungsten Sort的Shuffle内核
7.5.2基于Tungsten Sort的Shuffle写数据的源代码解析
7.6小结
第8章钨丝计划(Project Tungsten)
8.1钨丝计划(Project Tungsten)概述
8.2内存管理模型
8.2.1现有内存管理的机制
8.2.2Project Tungsten内存管理的模型及其源代码的解析
8.3基于内存管理模型的Shuffle二进制数据处理
8.3.1插入记录时二进制数据的处理
8.3.2spill时二进制数据的处理
8.4小结
第9章性能优化
9.1Spark的配置机制
9.1.1

前言/序言

  起源于美国加州大学伯克利分校AMP实验室的Spark是当今大数据领域最活跃、最热门的大数据计算处理框架,2009年Spark诞生于AMP实验室,2010年Spark正式成为开源项目,2013年Spark成为Apache基金项目,2014年Spark成为Apache基金的顶级项目。Spark成功构建了一体化、多元化的大数据处理体系,成功使用Spark SQL、Spark Streaming、MLlib、GraphX解决了大数据领域的Batch Processing、Stream Processing、Adhoc Query等核心问题,Spark SQL、Spark Streaming、Mllib、GraphX四个子框架和Spark核心库之间互相共享数据及相互操作,Spark生态系统强大的集成能力是其他大数据平台无可匹敌的。
  本书主要面向的对象是广大的Spark爱好者和大数据开发者,以Spark内核解析及性能调优为主导,由浅入深,对Spark内核运行机制从源代码角度加以详细解析,全书共分9章,分别是:RDD的功能解析、RDD的运行机制、部署模式(Deploy)解析、Spark调度器(Scheduler)运行机制、执行器(Executor)、Spark的存储模块(Storage)、Shuffle机制、钨丝计划(Project Tungsten)以及性能优化。读者通过对这些内容的深入学习,将能够较为透彻地掌握Spark这一大数据计算框架的应用方法。
  参与本书编写的有王家林、段智华、张敏等。
  在本书阅读过程中,如发现任何纰漏或有任何疑问,可以加入本书的阅读群(QQ:284078981)提出问题,会有专人答疑。同时,该群也会提供本书所用案例源代码。
  如果读者想要了解或者学习更多大数据相关技术,可以关注DT大数据梦工厂微信公众号DT_Spark及QQ群284078981,或者扫描下方二维码咨询,也可以通过YY客户端登录68917580永久频道直接体验。
  王家林老师的新浪微博是http://weibo�眂om/ilovepains/,欢迎大家在微博上与作者进行互动。
  由于时间仓促,书中难免存在不妥之处,请读者谅解,并提出宝贵意见。
  王家林2016.10.8日

《深入理解分布式计算:架构、原理与实践》 书籍简介 在当今数据爆炸式增长的时代,海量数据的处理与分析已成为各行各业的核心挑战。分布式计算技术应运而生,它能够通过将计算任务分解到多台计算机上并行执行,从而极大地提升处理速度和规模。本书《深入理解分布式计算:架构、原理与实践》正是为了系统性地阐述这一关键技术而编写。我们致力于为读者构建一个全面、深入且实用的分布式计算知识体系,从最基础的架构概念出发,逐步剖析核心原理,并结合丰富的实践案例,帮助读者真正掌握分布式计算的精髓,应对复杂的数据处理需求。 本书并非对某个特定框架的详尽剖析,而是着重于构建一个通用的、跨框架的分布式计算思维模型。我们认为,理解分布式系统的底层逻辑和设计哲学,远比记忆特定API和配置项更为重要。只有掌握了这些核心要素,才能在面对不同的分布式框架时,迅速理解其设计意图,并有效利用其优势。 第一部分:分布式计算的基石——理论与架构 在这一部分,我们将带领读者回到分布式计算的起源,深入探讨其产生的背景、解决的核心问题以及不同发展阶段的关键技术演进。我们将首先阐述分布式系统的基本定义,区分集中式与分布式系统的根本差异,并探讨分布式系统带来的挑战,如一致性、可用性、容错性、网络延迟等。 接着,我们将详细介绍分布式系统的经典架构模式。这包括但不限于: 主从(Master-Slave)架构:解析其工作原理,优缺点,以及在哪些场景下仍然具有重要价值。我们将探讨主节点失效如何影响系统可用性,以及相应的容错机制。 对等(Peer-to-Peer)架构:分析其去中心化的优势,以及如何通过分布式哈希表(DHT)等技术实现高效的节点发现和数据查找。 面向服务的架构(SOA)与微服务架构:讨论服务间的通信、发现、路由等关键问题,以及如何通过API网关、服务注册中心等组件构建灵活可伸缩的分布式应用。 随后,我们将深入探讨分布式系统中的核心一致性模型。理解不同一致性级别(如强一致性、最终一致性、因果一致性)的概念及其在实际应用中的权衡至关重要。我们将介绍几种主流的一致性算法,例如: Paxos算法:作为分布式一致性理论的基石,我们将详细解析其设计思想、多轮投票过程以及如何保证在网络分区和节点失效下的安全与可靠。 Raft算法:以其易于理解和实现的特点,Raft算法已经成为许多分布式系统的首选。我们将深入剖析其领导者选举、日志复制、状态机同步等过程,并通过图示和伪代码的方式,清晰地展示其工作流程。 Gossip协议:在无需中心协调者的情况下,如何实现节点间的状态传播和信息同步?Gossip协议提供了一种优雅的解决方案,我们将探讨其概率性传播机制和在去中心化系统中的应用。 此外,我们还将重点讲解分布式系统中的容错机制。分布式系统不可避免地会面临节点故障、网络中断等问题,如何设计能够优雅地处理这些异常情况的系统是成功的关键。我们将介绍: 故障检测与隔离:如何及时发现失效节点,并将其从集群中隔离,避免影响整体服务的可用性。 数据冗余与备份:通过副本机制,确保在部分节点失效时,数据仍然可以被访问。我们将讨论不同的副本策略(如主副本、多副本)及其优劣。 状态恢复与重试机制:当操作失败时,如何设计合理的重试策略,以及如何保证操作的幂等性,避免重复执行带来的副作用。 第二部分:分布式计算的实战——核心技术与模式 在掌握了理论基础后,我们将转向分布式计算的实际应用。这一部分将聚焦于构建和运行分布式系统所需的核心技术和设计模式。 首先,我们将深入理解分布式存储系统。数据是分布式计算的载体,高效可靠的分布式存储是整个系统的基石。我们将探讨: 分布式文件系统(DFS):以HDFS为例,解析其NameNode与DataNode的协同工作模式,块(Block)存储机制,以及高可用性设计。 分布式数据库:介绍关系型与NoSQL数据库在分布式环境下的演进,如分布式事务、分片(Sharding)、复制(Replication)等概念。我们将涵盖不同类型的NoSQL数据库,如键值存储、列族存储、文档存储、图数据库,并分析它们在特定场景下的适用性。 分布式缓存:解释分布式缓存如何通过在内存中存储常用数据,显著降低对后端存储的访问压力,提高读取性能。我们将介绍一致性哈希(Consistent Hashing)在分布式缓存中的应用,以最小化节点增减时的数据重分布。 接着,我们将聚焦分布式通信。在分布式系统中,节点之间的通信是必不可少的。我们将详细讲解: 远程过程调用(RPC):解析RPC的基本原理,以及Protobuf、Thrift等序列化协议如何实现高效的数据传输。我们将对比不同的RPC框架,并探讨其在性能、易用性、扩展性方面的考量。 消息队列(Message Queue):介绍消息队列在解耦系统、异步处理、削峰填谷等方面的作用。我们将深入理解消息的发布/订阅模型、点对点模型,以及Kafka、RabbitMQ等主流消息队列的设计特点。 然后,我们将探讨分布式调度与任务管理。在大型分布式系统中,如何有效地管理和调度海量任务,确保它们按时、高效地完成,是一个复杂但关键的问题。我们将: 理解任务调度器(Scheduler):分析其职责,包括任务的提交、分发、监控、重试等。 探讨资源管理:介绍YARN、Kubernetes等资源管理器如何有效地分配计算、内存、网络等资源给不同的应用程序。 分析工作流编排:介绍Airflow、Luigi等工具如何定义、调度和监控复杂的任务依赖关系,构建可靠的数据处理流程。 第三部分:分布式计算的优化与进阶——性能调优与实践经验 理论与技术理解是基础,而真正的挑战在于如何将这些知识转化为高性能、高可用的分布式系统。在这一部分,我们将聚焦于分布式计算的性能调优和实战经验。 首先,我们将深入分析分布式系统的性能瓶颈。性能问题往往是多方面因素共同作用的结果,我们需要掌握系统性的分析方法: 监控与度量:强调建立完善的监控体系,收集关键指标(如延迟、吞吐量、错误率、资源利用率),并通过可视化工具进行展示。 日志分析:讲解如何通过高效的日志收集和分析系统,快速定位问题根源。 性能剖析(Profiling):介绍在分布式环境中进行性能剖析的技术,以找出代码中的热点和低效环节。 接着,我们将深入探讨数据在分布式系统中的优化策略。数据是分布式计算的生命线,数据的存储、传输和访问效率直接影响整体性能。我们将涵盖: 数据序列化与压缩:对比不同序列化格式(如JSON, XML, Avro, Protobuf)的性能特点,以及数据压缩技术(如Gzip, Snappy, LZ4)如何有效减少传输开销。 数据分区与索引:讲解如何通过合理的数据分区策略,将数据分散到不同的节点,实现并行查询;以及如何设计高效的分布式索引,加速数据检索。 内存管理与垃圾回收:在分布式环境中,内存是宝贵的资源。我们将探讨如何优化内存使用,并理解分布式垃圾回收的挑战与策略。 然后,我们将着重讲解网络通信的优化。网络延迟是分布式系统性能的天然敌人,高效的网络通信是关键。我们将介绍: 批量处理(Batching):通过将多个小请求合并成一个大请求,显著减少网络开销。 连接复用(Connection Pooling):避免频繁建立和关闭连接带来的损耗。 异步通信与事件驱动:利用非阻塞I/O和事件驱动模型,提高系统的吞吐量和响应速度。 此外,我们还将分享一些重要的实践经验和最佳实践: 架构演进与弹性设计:如何在系统发展的过程中,保持其灵活性和可伸缩性,应对不断变化的需求。 灰度发布与A/B测试:如何在不影响现有用户的情况下,安全地部署新版本,并验证其效果。 灾难恢复与业务连续性:为应对极端情况,设计能够快速恢复业务的方案。 成本优化:在保证性能和可靠性的前提下,如何有效地控制分布式系统的运行成本。 总结 《深入理解分布式计算:架构、原理与实践》旨在为读者提供一个从概念到实践的完整认知框架。本书不拘泥于特定技术栈,而是着力于构建读者对分布式系统核心原理的深刻理解。通过对架构模式的剖析、关键理论的阐述,以及对实战技术的深入讲解,我们期望读者能够具备独立设计、构建、部署和优化复杂分布式系统的能力。无论您是初入分布式计算领域的开发者,还是经验丰富的系统架构师,本书都将是您探索分布式世界、解决海量数据处理难题的宝贵指南。掌握分布式计算,就是掌握应对未来数据挑战的钥匙。

用户评价

评分

这本书的名字就足以让我眼前一亮:《Spark内核机制解析及性能调优》。我一直对大数据处理的底层原理充满好奇,尤其对Spark这样一款如此流行且强大的分布式计算框架,了解其“心脏”的运作方式,并在此基础上掌握优化性能的秘诀,绝对是技术进阶的必经之路。虽然我还没有来得及翻开这本书,但仅从书名,我便能预见到其中蕴含的价值。它不仅仅是知识的堆砌,更像是为你打开一扇通往Spark内部世界的大门,让你从“使用”层面跃升到“理解”层面。想象一下,当你在实际工作中遇到性能瓶颈,不再是束手无策地调整几个参数,而是能够洞悉原因,直击要害,进行精准的调优,那将是多么大的成就感!这本书的出现,恰恰满足了我对这种深入探索的渴望。我期待它能够清晰地阐述Spark的核心组件,例如DAGScheduler、TaskScheduler、Executor的生命周期,以及Shuffle过程的细节,这些都是理解Spark性能的关键。同时,“性能调优”更是直接切中了广大Spark用户的痛点,我希望书中能提供一套系统性的方法论,辅以大量的实践案例,让我能够学以致用地解决工作中遇到的性能问题,将Spark的潜力发挥到极致。

评分

《Spark内核机制解析及性能调优》这个书名,本身就透露出一种深度和实用性的结合。在日常工作中,我们经常会遇到Spark作业运行效率不高、资源利用不充分的问题,这时候如果能够对Spark的内核机制有深入的理解,就能事半功倍地解决这些难题。这本书的出现,就像是为我提供了一把解锁Spark性能秘密的钥匙。我迫切地希望书中能够详细地阐述Spark的执行模型,包括DAG的生成、Stage的划分、Task的调度执行过程,以及Spark的内存管理策略(如堆内、堆外内存的分配与回收),还有Spark的容错机制是如何工作的。只有理解了这些“幕后故事”,我们才能更好地理解为什么某些操作会成为性能瓶颈,以及如何针对性地进行优化。而“性能调优”的部分,更是直接指向了实际应用中的痛点。我期待书中能够提供一套完整的调优框架,从数据倾斜的识别与解决,到Shuffle过程的优化,再到Executor的参数调整,甚至是如何根据具体的业务场景选择最合适的Spark配置。我希望这本书能让我从一个Spark的使用者,蜕变成一个Spark的精通者,能够游刃有余地应对各种复杂的大数据处理挑战。

评分

当我在书架上看到《Spark内核机制解析及性能调优》时,我的内心是激动和期待的。作为一名长期与大数据打交道的技术人员,Spark早已成为我工作中的利器。然而,在实际应用中,我常常感到,虽然能够熟练地使用Spark提供的API,但对于其底层运行的精妙之处却知之甚少,尤其是在性能调优方面,很多时候只能凭借经验和猜测来摸索,效果往往不尽如人意。这本书的书名精准地抓住了我的痛点和需求——深入理解Spark的“内核机制”,并在此基础上掌握“性能调优”的精髓。我非常渴望书中能够揭示Spark是如何处理分布式任务的,例如其任务调度器的原理、Shuffle过程的内部机制、内存管理和垃圾回收的策略,以及Spark的容错机制是如何保障作业的可靠性。更重要的是,我希望书中能提供一系列系统化、可落地的性能调优方法论,不仅包括如何诊断和解决常见的性能问题,如数据倾斜、反序列化开销过大等,还能深入讲解如何根据不同的业务场景,如批处理、流处理、交互式查询等,进行精细化的参数配置和代码优化。这本书无疑是我提升Spark技能、解决实际工作中性能瓶颈的宝贵资源。

评分

当我在书店的货架上看到《Spark内核机制解析及性能调优》这本书时,一股强烈的学习冲动油然而生。近几年来,大数据技术发展迅猛,Spark作为其中的佼佼者,其应用场景之广泛,性能之优越,已经毋庸置疑。然而,很多时候,我们停留在API层面,能够熟练地编写Spark程序,却对背后的运行机制知之甚少。这就像一个熟练的司机,却对汽车的发动机原理一窍不通。而这本书,顾名思义,正是要带领我们深入Spark的“引擎盖”之下,一探究竟。我尤其看重“内核机制解析”这一部分,它意味着书中将不仅仅是表面化的介绍,而是要深入到Spark的源码层面,讲解Stage的划分、Task的调度、内存管理、容错机制等等。这些底层细节的理解,对于提升Spark程序的健壮性和稳定性至关重要。而“性能调优”则更是锦上添花,它能够帮助我们解决实际生产环境中遇到的各种性能瓶颈,比如作业运行缓慢、内存溢出、资源浪费等问题。我非常期待书中能够提供一些行之有效的调优策略,并且能够结合实际的案例进行说明,这样我们才能更好地将理论知识转化为实践能力,真正地成为一名出色的Spark工程师。

评分

这本书的书名《Spark内核机制解析及性能调优》犹如一盏指路明灯,照亮了我技术提升的道路。在当前这个数据爆炸的时代,Spark已经成为处理海量数据的首选工具之一。然而,仅仅掌握Spark的API和基本用法,在面对复杂的业务场景和严苛的性能要求时,往往会显得力不从心。我一直认为,要真正驾驭Spark,就必须深入理解其底层的运行机制。这本书的出现,恰好满足了我这一迫切的需求。我期待它能够带领我穿越Spark的抽象层面,去窥探其内部的运作原理,比如Spark如何将一个计算任务分解成一个个Stage,Stage又如何进一步分解成Task,以及这些Task是如何在集群中被分配和执行的。更重要的是,书中“性能调优”的部分,更是我最为期待的。它预示着我将有机会学习到如何识别Spark作业中的性能瓶颈,并掌握各种有效的调优技巧,例如如何优化Shuffle过程、如何合理配置内存和CPU资源、如何选择合适的数据格式和存储方式等等。我希望这本书能够提供一套系统性的、可操作的调优指南,让我在实际工作中能够更高效地运用Spark,解决遇到的各种性能挑战,最终实现性能的最大化。

评分

差评,书角都卷了

评分

还行

评分

很不错的书,正版新书

评分

发货快,书质量很好

评分

还是v都不会写不行不行不到家见识见识你说你是男的女的男的女的

评分

很好很实用

评分

???????????

评分

一般般啦啦

评分

到位工作调动,有可能从事大数据相关工作,所以在京东买了这几本书,很不错。一直相信京东,物流快,服务也很好,赞一个。。

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有