关于我们
![]() ![]() |
聚沙成塔:Go语言构建高性能、分布式爬虫项目 ![]() 本书是颇具创新性的 Go 语言实战指南,巧妙地将理论知识与实践案例串联起来,为读者搭建了一套完整的知识体系和方法论。本书以爬虫项目为基础,全面阐述了 Go 语言在网络服务开发中的卓越性能,并深入探讨了如何利用 Go 语言打造高并发的爬虫系统、高性能的分布式系统,以及可扩展的领域驱动的微服务系统。本书有助于 Go 语言开发者根据编码规范,编写出简洁、高效、健壮且易于扩展的代码。同时,本书可以作为高等院校计算机和软件工程等相关专业师生的参考资料。 高效的编码规范与研发工具 深入 Go 语法背后的底层机制 高性能与可扩展的程序设计方法 复杂线上案例的全方位分析 大规模分布式系统的架构之道 或许你并未察觉,身边的奇迹往往由简单的元素组成。金字塔和狮身人面像由沙石堆砌而成,作为生物体遗传密码的DNA,也不过是由几种基础的核苷酸组合而成的。当图灵在1936年提出图灵机的概念时,谁又能够想到,仅仅让机器遵循一些简单的规则就足以构建出今天丰富多彩的数字世界。 同样地,今天软件工程中许多令人眼花缭乱的框架与概念,都不过是基础元素的整合。但是简单元素的灵活组合,逐渐带来了让人无法轻易掌控的复杂度。在实践中,我发现很多开发者有下面的困惑。
本书正是尝试对一个大规模的后端系统进行拆解,用Go语言构建出可扩展、高并发、分布式、微服务的爬虫项目,从0到1为你呈现这个大型积木的设计和建造过程。你收获的将不只是开箱即用的爬虫框架,构建复杂项目的顶级技艺和进阶路线,更有关于如何学习的深刻洞见。 拨云见雾,走出进阶焦虑没有人能一看到谜题就瞬间想出答案,摆脱思维定势、找到正确的进阶路线是每个求知者都会遇到的挑战。 回顾我的职业生涯,也遇到过许多困扰,几度面临焦虑,体验过一次次知识的升华。所以我想在开始正式学习之前,可以先交流一下经验,或许会有事半功倍的效果。我的职业生涯大体上可以分为四个阶段。
初入职场的时候,我会为独立完成一个小项目感到兴奋。那时候我能够实现基本的功能,喜欢研究Go语言的技巧,但不求甚解。后来,我逐渐意识到只琢磨一门语言的语法和技巧对成长的贡献较小。在实践中我仍然难以解释程序表现出的奇怪现象,难以解决困难的问题,也很难独当一面,这使我陷入迷茫。
于是,我转而系统学习知识背后的底层原理,其中就包括Go语言语法背后的底层原理,从基本类型的结构到Go运行时和Go编译时原理。我阅读了大量与Go语言相关的书籍、文章和源码。
如果说前两个阶段还只是我困在单一程序中的自娱自乐,那么设计复杂系统的实战经验让我有幸站在更高的位置驾驭大规模系统。 这一时期,我开始跳出开发单一程序的狭隘视角,站在巨人的肩膀上,借助业内的一些知名开源组件完成复杂系统的架构设计。技术选型涉及对不同组件之间的优劣判断,而前一个阶段的积累让我能够比较容易触达这些知名开源技术的原理,从而看出不同组件之间微妙的差异,让优秀的组件为我所用。 这个阶段,我在一家人工智能公司的中台部门工作。我们的系统需要应对海量的数据,也需要面临分布式系统具有的固有挑战:扩展性、一致性与可用性。对这些复杂问题的体系化思考和丰富的实战经验让我拥有了驾驭复杂分布式系统的能力。
如果说前三个阶段还只是不食人间烟火似的技术修炼,那么真正让我将技术转化为生产力的是技术与业务的深度融合。 这一时期,我在一家大型互联网公司的中台部门工作,需要对接全公司所有的产品线。一开始我常常疲于应付需求,需要面对难以扩展的代码,保证系统的极高稳定性。这让我不得不进一步思考复杂业务需求之下的技术解决之道。也正因如此,我在微服务治理和稳定性建设方面积累了丰富的经验。 回顾我的职业生涯,每次进阶都离不开前一个阶段的铺垫、有意识的自我突破,也离不开理论与实践的相辅相成。在本书中,我希望从最简单的问题入手,层层深入、理论结合实践,带你一起实现一个具备扩展性、高并发、分布式、微服务的复杂系统。 我也给你绘制了一张本书的思维导图,方便你根据自己的实际情况按图索骥,欢迎你在配套资源中下载查看。我会用一种创造性的方式把知识点串联起来,形成Go语言和系统设计的完整知识体系与方法论。本书主要有以下几个特点。 特色一:在玩中学,以爬虫为基座爬虫涵盖的知识点非常广泛,例如网页前端、数据解析、数据存储、可视化分析,等等。另外,爬虫对高并发的网络处理有极高的要求,而Go语言在开发网络服务方面正好有天然的优势。 此外,爬虫具有很高的商业价值,互联网就像一座免费的数字金矿,借助爬虫可以创造种类繁多的商业模式。依靠一些创意和想象力,爬虫甚至能够成为一家百亿市值公司的核心引擎。 当然,针对学习,爬虫还有一个重要的特点,那就是它生动有趣。比起一些传统的电商学习项目,爬虫项目更具有趣味性,你可以收集、过滤、组合并提炼互联网中任何你感兴趣的信息。 所以,本书以爬虫项目贯穿始终,从需求拆解和架构设计开始,帮助你独立完成能够支撑海量爬虫任务的高并发系统、具有故障容错能力的分布式系统、具备可扩展性和领域驱动的微服务系统。在这个过程中,你会将学到的知识融会贯通。 特色二:谋定而后动,写出好代码本书不只讲解如何写代码,还教你如何写出好代码。因此,我在书中不仅会给出一流团队的编码规范与扫描工具,还会讲解Go语言中的设计哲学。例如,Go中为什么没有继承?如何用面向组合的设计理念使代码具备扩展性?其他系统的设计对我们的系统有哪些启发?Linux的 VFS 层与Go接口的设计有什么异曲同工之处?只有遵循Go语言的编码规范与设计哲学,才能让我们摆脱思维定势,摆脱疲于应付需求的现状,写出简捷、高效、健壮和可扩展的代码。 特色三:深入原理,理论结合实践要系统掌握Go语言,可不是单纯的语法堆砌这么简单。了解语法背后的故事,才能够让我们知其然,亦知其所以然。我将在本书的项目开发中融入底层原理知识,通过理论结合实践的方式告诉你为什么代码要这样写,它背后的机制是怎样的。 举个例子,在Go语言中,一行简单的代码就能实现HTTP请求,但我会从TCP/IP网络模型讲起,带着你看一看一个网络包是如何层层封装、路由流转的,又是如何被硬件接收、被操作系统处理的。 更进一步地,我还会讲解Go语言为什么天然适合开发网络服务,为什么它借助I/O多路复用 非阻塞I/O 协程调度 同步编程的模式,能够简单高效地处理高并发网络服务。 特色四:硬核实战,调试复杂问题代码是调试出来的,我会在本书中为你总结系统的性能分析方法论,并给出丰富的实战案例,手把手教你调试代码,定位线上复杂问题。 特色五:不畏浮云遮望眼,掌控更大规模系统此外,我还会跳出开发单一程序的狭隘视角,为你系统介绍大型互联网产品的整个生命周期。同时,我还会为你介绍大规模微服务集群的典型架构,深入探讨微服务协议、架构、治理等问题。最后,我们还将看到在更大规模数据量、更复杂的业务和更多的服务时下面临的固有挑战,并深入浅出地讲解分布式系统在可用性与一致性之间的权衡。 当我们掌握了构建复杂系统的一整套方法论,就不会拘泥于特定的系统与细节了。当我们有能力掌控全局、创造真正的价值时,又怎会困在内卷的恶性循环中患得患失呢?
本书附带一个配套的爬虫项目,它可以帮助你更好地理解和实践书中的内容。 本书在各个章节使用了特定的标签,如vx.x.x,这些标签对应项目的不同阶段。要查看特定阶段的代码,你可以在GitHub项目页单击Tags选项,然后选择对应的标签。 对于熟悉命令行的读者,你可以先克隆这个项目(通过git clone [URL]命令,其中[URL]是项目的链接),然后使用git checkout [tagname]命令在本地查看和使用对应标签的代码。 成都慧眸科技创始人 《Go语言底层原理剖析》作者 极客时间专栏作家
第1篇 项目准备
你还可能感兴趣
我要评论
|