当前位置:
首页 > 互联网+ > 大数据 > 分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载

分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载

书名:分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载

推荐语:掌握云存储理论动手搭建分布式对象存储架构

作者:胡世杰著

出版社:人民邮电出版社

出版时间:2018-06-01

书籍编号:30471135

ISBN:9787115480552

正文语种:中文

字数:195488

版次:

所属分类:互联网+-大数据

全书内容:

分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载






内容提要


本书从云存储的需求出发讲述对象存储的原理,循序渐进地建立起一个分布式对象存储的架构,并且将软件实现出来。全书共8章,分别涉及对象存储简介、可扩展的分布式系统、元数据服务、数据校验和去重、数据冗余和即时修复、断点续传、数据压缩和数据维护等。本书选择用来实现分布式对象存储软件的编程语言是当前流行的Go语言。


本书适合从事云存储方面工作的工程师或架构师,也适合想要学习和实现分布式对象存储的读者。



git clone https://github.com/stuarthu/go-implement-your-object- storage.gitsudo apt-get install git

前言



早在几年前,云存储还只是存在于业界大佬们口中的一个概念,其应用场景仅供大公司使用。突飞猛进的网络技术似乎在一瞬间就把这个概念普及到千家万户,现在云存储已经是大家司空见惯的一个网络服务了。比如大家用的百度云盘、已经成为实质上的业界标准的亚马逊S3、微软的OneDrive、苹果公司的iCloud和谷歌的Google Cloud等。


现在市面上和云存储相关的图书本来就不多,而专门讲述对象存储实现的书就更是难得一见,且内容大多以OpenStack、Swift和Ceph这些已经较为成熟的开源软件的架构和实现为例。读者一开始就知道怎么做,然后解释为什么要这么做。


本书则另辟蹊径,完全从云存储的需求出发讲述对象存储的原理,循序渐进、从无到有地建立起一个分布式对象存储的架构,并且将软件实现出来。换句话说,本书首先介绍为什么要这么做,然后解释怎么做。


本书选择用来实现分布式对象存储软件的编程语言是Go,但并不是非它不可的。读者也可以在了解对象存储的原理之后选用其他的语言来实现。


在读完本书之后,每一位读者都将对对象存储服务这一概念有一个较为深入的理解,部分读者甚至能够实现自己的对象存储服务。



对象存储是云存储的一部分,它提供了云存储后端的存储服务。云存储是建立在对象存储之上的一个整体的解决方案,除了后端的存储服务之外,它还需要包括各种操作系统和平台上运行的客户端、身份认证、多种管理和监控功能等。


本书主要集中在对象存储的原理架构和实现上,对云存储其他组件也会有一定的介绍,但不会是本书的主要内容。



传统的高端服务器性能强劲、成本高昂,以前只有大公司用来搭建自己的私有存储。互联网生态下的云存储则用数量弥补质量,以大量低成本的普通PC服务器组成网络集群来提供服务。相比传统的高端服务器来说,同样价格下分布式存储提供的服务更好、性价比更高,且新节点的扩展以及坏旧节点的替换更为方便。



如果你是云存储方面的学者、工程师或架构师,那么本书适合你。


如果你是一位对云存储感兴趣的人或者是云存储的用户,那么光凭看这本书你可能无法实现一个自己的对象存储服务,但是在读完本书之后,你依然能够学到很多相关的知识。


对Go语言和HTTP/REST协议的了解可以帮助你实现并执行本书中的代码,但这不是必需的。本书对每一段代码都会有详细的解释来帮助读者了解其内容。即使对语言和协议一无所知的读者也能了解代码的含义和执行效果。


如果你是一位对云存储比较熟悉的读者,你可能已经了解对象存储服务的架构以及一些常见问题的成因,但这也不是阅读本书所必需的条件。本书会以提出问题并解决问题的方式介绍对象存储服务的架构设计。即便是对对象存储一窍不通的读者也可以在这个过程中亲眼见证对象存储服务的架构是如何一步步丰满起来的。



第1章,我们提出了一个单机版的对象存储原型系统,介绍了最简单的对象REST接口。


第2章,我们将这个原型系统进行了扩展,将它分拆成接口服务和数据服务,使得这些服务可以互相独立地提供服务功能,让我们的系统得以自由扩展。


第3章,我们又往系统中加入了元数据服务,用于保存描述对象的元数据,包括对象的名字、版本、大小、散列值等。有了元数据服务,我们就可以使得对象的名字和对象的内容解耦合。


第4章,我们实现对象数据的校验和去重,使得名字不同但内容相同的对象可以共享同一份存储实体,这样做可以降低对存储空间的要求。


第5章,为了增强数据的可靠性,我们提出了数据冗余的概念并实现了RS纠删码。我们在对象数据存取的过程中以流的形式进行编解码,可以在一定程度上修正对象数据的损坏。


第6章,为了战胜现实世界不良的网络环境,我们实现了断点续传。客户端在下载对象时自由指定下载数据的偏移量,也可以通过特殊的接口以分批的方式上传对象的数据。


第7章,我们介绍数据压缩。在大多数情况下,数据压缩都应该在客户端实现。但如果你需要设计一个通过浏览器就可以使用的对象存储系统,且你的大多数对象的数据都适合进行压缩,那么可以参考我们在本章实现的gzip数据压缩,进一步降低对存储空间和下载带宽的要求。


第8章,我们讨论了对象存储系统的数据维护,并实现了3个工具,它们可用于清理过期的对象数据和元数据,检查和修复当期的数据。



我们没有实现一个专门的客户端来配合对象存储系统,只是在部分章节中提到一个配套的客户端可以起到的作用。本书使用Linux下的curl命令作为我们的客户端进行功能测试,可以帮助我们更好地了解客户端和服务端之间发生的交互行为。但是一个美观UI的专门的客户端对用户来说会更加友好。


我们没有涉及用户管理,虽然用户管理是云存储系统的一个基本组成部分,但是这部分和其他系统的用户管理没什么区别,一个用户信息数据库就可以满足大多数要求,有兴趣的用户可以自行查阅相关书籍。


我们没有提到信息安全方面的内容,本书为了方便起见,使用的通信协议都是HTTP,而事实上一个云存储系统对外一定是使用HTTPS协议,服务端和客户端之间需要建立SSL的双向认证。除此之外,用户合法身份的授权和验证等功能通常都会有一个专门的身份认证系统来进行管理,而服务端客户端则可以通过JWT和身份认证系统打交道。


我们没有实现对象存储系统的监控。系统监控包括对日志的实时收集和分析,对系统KPI的收集和可视化等。我们在这里推荐的做法是使用Logstash收集和分析系统日志和KPI,记录在ElasticSearch中并用Kibana进行可视化。这些功能不涉及Go语言实现,而是通过各种工具的配置来进行。本书不展开讨论。



本书的代码使用Go语言实现,使用的Go编译器的版本是1.8.1,开发和运行环境是Ubuntu 16.04。


本书中所有Go语言代码实现都可以在github上找到,在Linux环境可以用git命令下载:


github.com是一个在线的软件项目管理仓库,Ubuntu下的git客户端可以用apt-get下载安装:


编译Go代码需要运行Go编译器,读者可以在Go语言官网下载最新的Go编译器。



胡世杰,上海交通大学硕士,目前任七牛云技术专家,是私有云存储服务的负责人。他是分布式对象存储系统专家,在该领域拥有多年的架构、开发和部署经验,精通C/C++/Perl/Python/Ruby/Go等多种编程语言,熟悉ElasticSearch/RabbitMQ等开源软件。


除了自己写作,他还致力于技术书籍的翻译,是《JavaScript面向对象精要》《Python和HDF5大数据应用》《Python高性能编程》等著作的译者。



感谢我的妻子黄静和岳父黄雪春在我写书的日子里对我的支持,让我能够没有后顾之忧地写作。感谢人民邮电出版社的陈冀康编辑在本书写作和出版过程中的大力协助,感谢好友高博启发了我自己写作的念头,以及对本书推广所做的一切工作。



资源与支持


本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。



本书提供如下资源:


本书所有示例源代码;


本书作者针对书中内容的配套视频讲解。


读者请通过本书封底的刮刮卡观看。也可通过异步社区“课程”频道订阅。


要获得以上配套资源,请在异步社区本书页面中点击分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载 ,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。



作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。


当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。


分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载



我们的联系邮箱是contact@epubit.com.cn。


如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。


如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。


如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。


如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。



“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。


“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。


分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载


异步社区


分布式对象存储:原理、架构及Go语言实现pdf/doc/txt格式电子书下载


微信服务号



PUT /objects/<object_name>GET /objects/<object_name>func main() { http.HandleFunc(\"/objects/\", objects.Handler) log.Fatal(http.ListenAndServe(os.Getenv(\"LISTEN_ADDRESS\"), nil)) }func Handler(w http.ResponseWriter, r *http.Request) { m := r.Method if m == http.MethodPut { put(w, r) return } if m == http.MethodGet { get(w, r) return } w.WriteHeader(http.StatusMethodNotAllowed) }func put(w http.ResponseWriter, r *http.Request) { f, e := os.Create(os.Getenv(\"STORAGE_ROOT\") + \"/objects/\" + strings.Split(r.URL.EscapedPath(), \"/\")[2]) if e != nil { log.Println(e) w.WriteHeader(http.StatusInternalServerError) return } defer f.Close() io.Copy(f, r.Body) }func get(w http.ResponseWriter, r *http.Request) { f, e := os.Open(os.Getenv(\"STORAGE_ROOT\") + \"/o

....

本站仅展示书籍部分内容

如有任何咨询

请加微信10090337咨询

本站仅展示书籍部分内容
如有任何咨询

请加微信10090337咨询

再显示