Go进阶 · 分布式爬虫实战

开篇词|聚沙成塔,构建高性能、分布式爬虫项目

郑建勋

Go语言技术专家,《Go语言底层原理剖析》作者

你好,我是郑建勋。欢迎跟我一起学习 Go 语言,踏上搭建高并发、分布式、微服务爬虫项目的征程。

不知道你有没有发现,我们身边许多宏伟的杰作其实都是由很简单的元素组成的。金字塔和狮身人面像就是一堆沙石,作为生物体遗传密码的DNA,也不过就是由几种基础的核苷酸组合而成,当图灵在1936年提出计算机的概念模型时,谁又能够想到,仅仅让机器遵循一些简单的规则就足以构建出今天丰富多彩的数字世界呢。

同样地,今天软件工程中许多眼花缭乱的框架与概念,都不过是基础元素的整合。但是简单元素的灵活组合,逐渐带来了让人无法轻易掌控的复杂度。在实践中,我发现很多同学都有下面的困惑:

  • 疲于应付需求,程序缺乏设计,代码也不规范,最终导致程序越来越难以扩展和维护。
  • 不懂语法背后的运行机制,也不知道如何提升,无法解决包括性能问题在内的复杂系统问题。
  • 不能跳出开发,从上层视角思考整个系统的技术选型与架构设计。
  • 困在自己的一亩三分地里,没有大规模云原生、分布式系统、微服务集群的实战经验。

而我在这个专栏中,正是尝试对一个大规模的后端系统进行拆解,用Go语言构建出可扩展、高并发、分布式、微服务的爬虫项目,从0到1为你呈现这个大型积木的设计和建造过程。

你将收获的不只是开箱即用的爬虫框架,构建复杂项目的顶级技艺和进阶路线,更有关于如何学习的深刻洞见。

拨云见雾,走出进阶焦虑

没有人能一看到谜题就瞬间解出答案,摆脱思维定势,找到正确的进阶之路是每个求知者都会遇到的挑战。

回顾我的职业生涯,和你一样,我也遇到了许多困扰,几度面临焦虑,体验过一次次知识的跨越。所以我想在开启正式的学习之前,我们可以先交流下经验,或许会有事半功倍的效果。我的职业生涯,大体上可以分为四个阶段。

  • 第一阶段:照猫画虎。

初入职场的时候,我会为独立完成一个小项目感到兴奋。那时候我能够实现基本的功能,喜欢倒腾Go语言的奇淫技巧,但不求甚解。后来,我逐渐意识到只是琢磨一门语言的语法和技巧对成长的贡献较小。实践中我仍然难以解释程序表现出的奇怪现象,难以解决困难的问题,也很难成为市场经济中的稀缺资源,这段时间我也陷入过迷茫。

  • 第二阶段:深入原理。

于是,我转而系统学习表面知识背后的底层原理,其中就包括了Go语言语法背后的底层原理。从基本类型的结构到Go运行时和Go编译时原理,我阅读了市面上与Go语言相关的大部分书籍、文章和相关源码。

对Go语言的深入理解帮助我看到了Go程序的毛细血管,我开始能够排查、定位、解决程序遇到的复杂问题。更重要的是,凭借对Go设计理念的了解,我能够更顺畅地设计开发出高性能、可扩展的程序了。

  • 第三阶段:总览全局。

如果说前两个阶段还只是困在单一程序中的自娱自乐,那么设计复杂系统的实战经验让我有幸站在更高的角度驾驭大规模系统。

这一时期,我开始跳出开发单一程序的狭隘视角,站在巨人的肩膀上,借助业内的一些知名开源组件完成复杂系统的架构设计。 技术选型涉及到对不同组件之间的优劣判断,而前一个阶段的积累让我能够比较容易窥探到这些知名开源技术的原理,从而看出不同组件之间微妙的差异,让优秀的组件为我所用。

这个阶段,我在一家人工智能中台部门工作。我们的系统需要应对海量的数据,也需要面临分布式系统具有的固有挑战:扩展性、一致性与可用性。对这些复杂问题的体系化思考和丰富的实战经验让我拥有了驾驭复杂分布式系统的能力。

  • 第四阶段:赋能业务。

如果说前三个阶段还只是不食人间烟火似的技术修炼,那么真正将技术转化为生产力的是技术与业务的深度融合。

这一时期我在一家大型互联网公司的中台部门工作,需要对接全公司所有的产品线。一开始我常常疲于奔命地应付需求,需要面对难以扩展的屎山代码,保证系统的极高稳定性。这让我不得不进一步思考复杂业务需求之下的技术解决之道。也正是因此,我在微服务治理和稳定性建设上积累了丰富的经验。

回顾我的职业生涯,每一次进阶都离不开前一个阶段打好的铺垫、离不开有意识的自我突破,也离不开理论与实践的相辅相成。在这个专栏中,我也希望从最简单的问题入手,层层深入,理论融合实践,带你一起完成一个具备扩展性、高并发、分布式、微服务的复杂系统。

我也给你画了一张课程的思维导图,方便你根据自己的实际情况按图索骥。

图片

课程特色

为了实现课程的目标,我会用一种创造性的方式把知识点串联起来,形成Go语言和系统设计的完整知识体系与方法论。我们这门课主要有下面几个特点。

特色一:在“玩”中学,爬虫为基座

爬虫涵盖的知识点非常广泛,例如网页前端、数据解析、数据存储、可视化分析等等。另外,爬虫对高并发的网络处理有极高的要求,而Go语言在开发网络服务方面正好有天然的优势。

此外,爬虫具有很高的商业价值,互联网就像一座免费的数字金矿,借助爬虫可以诞生种类繁多的商业模式。依靠一些创意和想象力,爬虫甚至能够成为一家百亿市值公司的核心引擎,想想今日头条,你就不会觉得我在夸夸其谈了。

当然,针对学习,爬虫还有个重要的特点,那就是它生动有趣。比起一些传统的电商学习项目,爬虫项目更具有可玩性,你可以收集、过滤、组合和提炼互联网中任何你感兴趣的信息,这就给我们的学习之旅增加了不少趣味。

所以,我们的专栏会以爬虫项目贯穿始终,从需求拆解和架构设计开始,帮助你独立完成能够支撑海量爬虫任务的高并发系统、具有故障容错能力的分布式系统、具备可扩展性和领域驱动的微服务系统。 在这个过程中,你会将学到的知识融会贯通起来。

特色二:谋定而动,写出“好”代码

这个专栏不只是要讲解如何写代码,更重要是教会你如何书写出好代码。

所以我在专栏中不仅会给出一流团队的编码规范与扫描工具,还会讲解Go语言中的设计哲学。例如,Go中为什么没有继承?如何用面向组合的设计理念使代码具备扩展性?其他系统的设计对我们系统有哪些启发?Linux的 VFS 层与Go的接口的设计有什么异曲同工之妙?

图片

只有遵循Go语言的编码规范与设计哲学,才能让我们摆脱过去的思维定势,摆脱疲于应付需求的现状,书写出简洁、高效、健壮和可扩展的代码。

特色三:“深”入原理,理论结合实践

要系统掌握Go语言,可不是单纯的语法堆砌这么简单。了解语法背后的故事,才能够让我们知其然,也知其所以然。在本专栏中,我将在项目开发中,融入底层原理知识,理论结合实践告诉你为什么代码要这样写,它背后的机制是怎样的。

举个例子,在Go中简单一行代码就能实现HTTP请求,但我会从TCP/IP网络模型讲起,带着你看看一个网络包是如何层层封装、路由流转,又是如何被硬件接收、被操作系统处理的。

更进一步,我还会讲解Go语言为什么天然就适合开发网络服务。它背后借助 “I/O多路复用+非阻塞I/O+协程调度+同步编程”的模式,为什么能够简单高效地处理高并发网络服务。

图片

特色四:硬核实战,“调”试复杂问题

代码是调试出来的,在专栏中,我会为你总结出系统的性能分析方法论,并放出丰富的实战案例,手把手教你调试代码,定位线上复杂问题。

例如,下面这张图就是本专栏要讲解的性能分析实战案例之一,分析这张图会发现,系统垃圾回收的辅助标记过程存在异常,进一步分析,会发现它是导致系统P99飙升的直接原因,并最终导致了单个程序的性能非常低下。

图片

特色五:不畏浮云遮望眼,掌“控”更大规模系统

此外,我还会跳出开发单一程序的狭隘视角,为你系统介绍大型互联网产品的整个生命周期。

图片

我还会为你介绍大规模微服务集群的典型架构,深入探讨微服务协议、架构、治理等问题。

图片

同时,我们还将看到面临更大规模数据量、更复杂的业务和更多服务时的固有挑战,并深入浅出地讲解分布式系统在可用性与一致性之间的抉择。

当我们掌握了构建复杂系统的一整套方法论,就不会拘泥于特定的系统与细节了。当我们有能力掌控全局、创造真正的价值,又怎会困在内卷的恶性循环中患得患失呢?

我是谁?

最后,再简单介绍一下我自己吧。“人的梦想是不会结束的”,黑胡子的这句话也许正是我多年来不惧艰辛、在技术上持续攀登的注脚。

2021年底,我推出了我的第一部作品《Go语言底层原理剖析》,这本书帮助我获得了电子工业出版社年度优秀作者和CSDN年度十大IT图书的荣誉。

在工作之余,我也乐于在社区分享自己在Go语言方面的经验和学习心得,为Go源码库和Go第三方精度库贡献了诸多代码。

4年前,我作为51CTO高级讲师和专家博主,帮助了上百位同学从0到1用Go语言搭建完整的项目,并找到了相关工作。我还在为华为特训营等企业内训项目提供培训和技术支持,在联想超级课与极客时间每日一课分享技术知识。今年,我也开始在B站和博客上以视频和文章的形式讲授Go语言的基础知识(《Go语言开挂入门之旅》)。这些经历帮助我储备了丰富有趣的教学案例。

对Go语言深入的理解、与主题契合的工作经历、与教育的渊源和经验都在无形中将我推向了这门课程的创作。我希望能带给你的是抓住Go语言时代红利的机会;是对Go项目编码标准与规范的灵活运用;是对Go语言底层原理的深刻理解;是构建大规模高并发、分布式、微服务项目的实战经验;还有对更大规模系统的把控能力。我希望能帮助你最终打破成长困境,实现技术上的重要跨越。

志在山顶的人,不会贪恋山腰的风景、不会畏惧向上的艰辛。即刻出发,我们高处见!

教程推荐

Lua在线教程

PHP在线教程

C#在线教程

Dart在线教程

Nginx在线教程

MySQL8 管理手册在线教程

随机推荐

轻上西梅饮膳食纤维植物果蔬汁益生菌元风味饮料评测数据如何?性...

轻上西梅饮膳食纤维植物果蔬汁益生菌元风味饮料品牌口碑如何?图...

朗适RS100实际效果怎样?专业达人评测分享!

狮王小狮王儿童氟防蛀牙膏 20g评测性价比高吗?达人专业评测?

狮王小狮王儿童氟防蛀牙膏 20g使用体验怎么样?小白买前必看评测...

追致手持小风扇「2024新款」珍珠白使用舒适度如何?深度爆料评测...