开篇词|聚沙成塔,构建高性能、分布式爬虫项目
郑建勋
讲述:郑建勋大小:10.42M时长:11:24
你好,我是郑建勋。欢迎跟我一起学习 Go 语言,踏上搭建高并发、分布式、微服务爬虫项目的征程。
不知道你有没有发现,我们身边许多宏伟的杰作其实都是由很简单的元素组成的。金字塔和狮身人面像就是一堆沙石,作为生物体遗传密码的 DNA,也不过就是由几种基础的核苷酸组合而成,当图灵在 1936 年提出计算机的概念模型时,谁又能够想到,仅仅让机器遵循一些简单的规则就足以构建出今天丰富多彩的数字世界呢。
同样地,今天软件工程中许多眼花缭乱的框架与概念,都不过是基础元素的整合。但是简单元素的灵活组合,逐渐带来了让人无法轻易掌控的复杂度。在实践中,我发现很多同学都有下面的困惑:
疲于应付需求,程序缺乏设计,代码也不规范,最终导致程序越来越难以扩展和维护。
不懂语法背后的运行机制,也不知道如何提升,无法解决包括性能问题在内的复杂系统问题。
不能跳出开发,从上层视角思考整个系统的技术选型与架构设计。
困在自己的一亩三分地里,没有大规模云原生、分布式系统、微服务集群的实战经验。
而我在这个专栏中,正是尝试对一个大规模的后端系统进行拆解,用 Go 语言构建出可扩展、高并发、分布式、微服务的爬虫项目,从 0 到 1 为你呈现这个大型积木的设计和建造过程。
你将收获的不只是开箱即用的爬虫框架,构建复杂项目的顶级技艺和进阶路线,更有关于如何学习的深刻洞见。
拨云见雾,走出进阶焦虑
没有人能一看到谜题就瞬间解出答案,摆脱思维定势,找到正确的进阶之路是每个求知者都会遇到的挑战。
回顾我的职业生涯,和你一样,我也遇到了许多困扰,几度面临焦虑,体验过一次次知识的跨越。所以我想在开启正式的学习之前,我们可以先交流下经验,或许会有事半功倍的效果。我的职业生涯,大体上可以分为四个阶段。
第一阶段:照猫画虎。
初入职场的时候,我会为独立完成一个小项目感到兴奋。那时候我能够实现基本的功能,喜欢倒腾 Go 语言的奇淫技巧,但不求甚解。后来,我逐渐意识到只是琢磨一门语言的语法和技巧对成长的贡献较小。实践中我仍然难以解释程序表现出的奇怪现象,难以解决困难的问题,也很难成为市场经济中的稀缺资源,这段时间我也陷入过迷茫。
第二阶段:深入原理。
于是,我转而系统学习表面知识背后的底层原理,其中就包括了 Go 语言语法背后的底层原理。从基本类型的结构到 Go 运行时和 Go 编译时原理,我阅读了市面上与 Go 语言相关的大部分书籍、文章和相关源码。
对 Go 语言的深入理解帮助我看到了 Go 程序的毛细血管,我开始能够排查、定位、解决程序遇到的复杂问题。更重要的是,凭借对 Go 设计理念的了解,我能够更顺畅地设计开发出高性能、可扩展的程序了。
第三阶段:总览全局。
如果说前两个阶段还只是困在单一程序中的自娱自乐,那么设计复杂系统的实战经验让我有幸站在更高的角度驾驭大规模系统。
这一时期,我开始跳出开发单一程序的狭隘视角,站在巨人的肩膀上,借助业内的一些知名开源组件完成复杂系统的架构设计。 技术选型涉及到对不同组件之间的优劣判断,而前一个阶段的积累让我能够比较容易窥探到这些知名开源技术的原理,从而看出不同组件之间微妙的差异,让优秀的组件为我所用。
这个阶段,我在一家人工智能中台部门工作。我们的系统需要应对海量的数据,也需要面临分布式系统具有的固有挑战:扩展性、一致性与可用性。对这些复杂问题的体系化思考和丰富的实战经验让我拥有了驾驭复杂分布式系统的能力。
第四阶段:赋能业务。
如果说前三个阶段还只是不食人间烟火似的技术修炼,那么真正将技术转化为生产力的是技术与业务的深度融合。
这一时期我在一家大型互联网公司的中台部门工作,需要对接全公司所有的产品线。一开始我常常疲于奔命地应付需求,需要面对难以扩展的屎山代码,保证系统的极高稳定性。这让我不得不进一步思考复杂业务需求之下的技术解决之道。也正是因此,我在微服务治理和稳定性建设上积累了丰富的经验。
回顾我的职业生涯,每一次进阶都离不开前一个阶段打好的铺垫、离不开有意识的自我突破,也离不开理论与实践的相辅相成。在这个专栏中,我也希望从最简单的问题入手,层层深入,理论融合实践,带你一起完成一个具备扩展性、高并发、分布式、微服务的复杂系统。
我也给你画了一张课程的思维导图,方便你根据自己的实际情况按图索骥。
课程特色
为了实现课程的目标,我会用一种创造性的方式把知识点串联起来,形成 Go 语言和系统设计的完整知识体系与方法论。我们这门课主要有下面几个特点。
特色一:在“玩”中学,爬虫为基座
爬虫涵盖的知识点非常广泛,例如网页前端、数据解析、数据存储、可视化分析等等。另外,爬虫对高并发的网络处理有极高的要求,而 Go 语言在开发网络服务方面正好有天然的优势。
此外,爬虫具有很高的商业价值,互联网就像一座免费的数字金矿,借助爬虫可以诞生种类繁多的商业模式。依靠一些创意和想象力,爬虫甚至能够成为一家百亿市值公司的核心引擎,想想今日头条,你就不会觉得我在夸夸其谈了。
当然,针对学习,爬虫还有个重要的特点,那就是它生动有趣。比起一些传统的电商学习项目,爬虫项目更具有可玩性,你可以收集、过滤、组合和提炼互联网中任何你感兴趣的信息,这就给我们的学习之旅增加了不少趣味。
所以,我们的专栏会以爬虫项目贯穿始终,从需求拆解和架构设计开始,帮助你独立完成能够支撑海量爬虫任务的高并发系统、具有故障容错能力的分布式系统、具备可扩展性和领域驱动的微服务系统。 在这个过程中,你会将学到的知识融会贯通起来。
特色二:谋定而动,写出“好”代码
这个专栏不只是要讲解如何写代码,更重要是教会你如何书写出好代码。
所以我在专栏中不仅会给出一流团队的编码规范与扫描工具,还会讲解 Go 语言中的设计哲学。例如,Go 中为什么没有继承?如何用面向组合的设计理念使代码具备扩展性?其他系统的设计对我们系统有哪些启发?Linux 的 VFS 层与 Go 的接口的设计有什么异曲同工之妙?
Linux VFS 与Go接口有异曲同工之妙,来自《Learning Modern Linux》
只有遵循 Go 语言的编码规范与设计哲学,才能让我们摆脱过去的思维定势,摆脱疲于应付需求的现状,书写出简洁、高效、健壮和可扩展的代码。
特色三:“深”入原理,理论结合实践
要系统掌握 Go 语言,可不是单纯的语法堆砌这么简单。了解语法背后的故事,才能够让我们知其然,也知其所以然。在本专栏中,我将在项目开发中,融入底层原理知识,理论结合实践告诉你为什么代码要这样写,它背后的机制是怎样的。
举个例子,在 Go 中简单一行代码就能实现 HTTP 请求,但我会从 TCP/IP 网络模型讲起,带着你看看一个网络包是如何层层封装、路由流转,又是如何被硬件接收、被操作系统处理的。
更进一步,我还会讲解 Go 语言为什么天然就适合开发网络服务。它背后借助 “I/O 多路复用 + 非阻塞 I/O+ 协程调度 + 同步编程”的模式,为什么能够简单高效地处理高并发网络服务。
Go网络模型
特色四:硬核实战,“调”试复杂问题
代码是调试出来的,在专栏中,我会为你总结出系统的性能分析方法论,并放出丰富的实战案例,手把手教你调试代码,定位线上复杂问题。
例如,下面这张图就是本专栏要讲解的性能分析实战案例之一,分析这张图会发现,系统垃圾回收的辅助标记过程存在异常,进一步分析,会发现它是导致系统 P99 飙升的直接原因,并最终导致了单个程序的性能非常低下。
性能优化实战案例
特色五:不畏浮云遮望眼,掌“控”更大规模系统
此外,我还会跳出开发单一程序的狭隘视角,为你系统介绍大型互联网产品的整个生命周期。
我还会为你介绍大规模微服务集群的典型架构,深入探讨微服务协议、架构、治理等问题。
同时,我们还将看到面临更大规模数据量、更复杂的业务和更多服务时的固有挑战,并深入浅出地讲解分布式系统在可用性与一致性之间的抉择。
当我们掌握了构建复杂系统的一整套方法论,就不会拘泥于特定的系统与细节了。当我们有能力掌控全局、创造真正的价值,又怎会困在内卷的恶性循环中患得患失呢?
我是谁?
最后,再简单介绍一下我自己吧。“人的梦想是不会结束的”,黑胡子的这句话也许正是我多年来不惧艰辛、在技术上持续攀登的注脚。
2021 年底,我推出了我的第一部作品《Go 语言底层原理剖析》,这本书帮助我获得了电子工业出版社年度优秀作者和 CSDN 年度十大 IT 图书的荣誉。
在工作之余,我也乐于在社区分享自己在 Go 语言方面的经验和学习心得,为 Go 源码库和 Go 第三方精度库贡献了诸多代码。
4 年前,我作为 51CTO 高级讲师和专家博主,帮助了上百位同学从 0 到 1 用 Go 语言搭建完整的项目,并找到了相关工作。我还在为华为特训营等企业内训项目提供培训和技术支持,在联想超级课与极客时间每日一课分享技术知识。今年,我也开始在 B 站和博客上以视频和文章的形式讲授 Go 语言的基础知识(《Go 语言开挂入门之旅》)。这些经历帮助我储备了丰富有趣的教学案例。
对 Go 语言深入的理解、与主题契合的工作经历、与教育的渊源和经验都在无形中将我推向了这门课程的创作。我希望能带给你的是抓住 Go 语言时代红利的机会;是对 Go 项目编码标准与规范的灵活运用;是对 Go 语言底层原理的深刻理解;是构建大规模高并发、分布式、微服务项目的实战经验;还有对更大规模系统的把控能力。我希望能帮助你最终打破成长困境,实现技术上的重要跨越。
志在山顶的人,不会贪恋山腰的风景、不会畏惧向上的艰辛。即刻出发,我们高处见!
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文是一篇以Go语言为工具,分享作者郑建勋的职业经历和技术成长的技术文章。文章主要包括作者的职业生涯经历和技术成长的四个阶段,以及他对于学习和技术进阶的思考。作者介绍了本专栏的课程特色,包括以爬虫项目为基座,教授如何写出“好”代码等。通过本专栏,读者将学习到构建高并发、分布式、微服务的爬虫项目所需的知识和技能,以及如何书写出高质量的代码。文章内容丰富,涵盖了技术实践经验和理论知识,适合对构建复杂系统感兴趣的读者阅读学习。作者还介绍了Go语言的底层原理,性能分析实战案例以及大规模系统的架构和挑战,为读者提供了深入学习的机会。通过本文,读者可以获得对Go语言底层原理的深刻理解,以及构建大规模高并发、分布式、微服务项目的实战经验,帮助他们实现技术上的重要跨越。
2022-10-1143人觉得很赞给文章提建议
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
《Go 进阶 · 分布式爬虫实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(33)
- 最新
- 精选
- Payne欸嘿, 如果有逆向部分的内容就更好了呀
作者回复: 逆向分析一般在分析小程序等场景下用得比较多,有需要会考虑特别补充哦
2022-10-11归属地:北京9 - Kevin看了一下课程描述,不愧是有经验的开发和讲师,无论是选题还是课程安排,都非常吸引人。确认过眼神,你是棒棒的课程!
作者回复: 冲鸭!
2022-10-11归属地:北京6 - MiracleWong我们各自努力,高处相见!
作者回复: 索隆: 总有一天不是我就是你,一定要成为世界最强的剑豪💪🏻
2022-10-14归属地:北京5 - 阿兵刚买了大佬的书,正好结合大佬的课程一起深度学习Go语言
作者回复: 一起进步哦~
2022-10-11归属地:北京5 - 谢谢您嘞看完开篇词发现是B站关注列表里的!
作者回复: 哈哈
2022-10-21归属地:北京3 - zjycff零基础可以学吗?老师
作者回复: 可以的呀,实际上我在课程中已经提供了体系化的基础学习知识,必然物超所值。
2022-10-19归属地:北京3 - 农民园丁请问老师,这些图是用哪个软件画出来的?
作者回复: 必须安排上最专业的Adobe Illustrator
2022-10-15归属地:北京3 - 愤毛阿青非常期待,和老师一起拨开go语言的云雾
作者回复: 共同努力呀!
2022-10-12归属地:北京3 - brqi非常好,感觉有go的落地场景、性能调优、海量服务等场景
作者回复: 加油呀💪🏻
2022-10-12归属地:北京3 - 拭心看着不错,刚学习 Go 半年左右,还停留在写 CRUD 阶段,期望可以跟着学到更复杂的知识!
作者回复: 持续精进💪🏻
2022-10-12归属地:北京3
收起评论