40、资源调度:深入内存管理与垃圾回收你好,我是郑建勋。 程序的快速运行离不开内存这个重要的资源,存储在内存里的数据可以比磁盘等介质更快地被CPU访问。但是内存是有限的,当多个进程共用内存空间时更是如此。因此,合理安排、组织、管理、释放内存是构建高效程序的基础。 现代高级语言一般都为我们...2025-12-13Go进阶-分布式爬虫实战
41、线上综合案例:节约线上千台容器的性能分析实战你好,我是郑建勋。 当我们对Go程序进行性能分析时,一般想到的方式是使用pprof提供的一系列工具分析CPU火焰图、内存占用情况等。 诚然,通过分析CPU耗时最多的流程,设法对CPU耗时最多的函数进行优化,毫无疑问能够改善程序整体的状况。然而,优化了...2025-12-13Go进阶-分布式爬虫实战
42、他山之石:etcd架构之美你好,我是郑建勋。 这节课,我们来聊一聊我们将在分布式项目中使用的重要中间件:etcd。 etcd这个名字是 etc distributed 的缩写。我们知道,在Linux中etc目录存储了系统的配置文件,所以etcd代表了分布式的配置中心系统。然而...2025-12-13Go进阶-分布式爬虫实战
43、分布式协调:etcd读写、MVCC原理与监听机制你好,我是郑建勋。 这节课,我们重点来看看etcd的读写流程,以及它的两个重要特性:MVCC原理和监听机制。 写的完整流程我们先来看看etcd怎么完整地写入请求。 客户端通过GRPC协议访问etcd-server服务端。 如果是一个写请求,会访问...2025-12-13Go进阶-分布式爬虫实战
44、一个程序多种功能:构建子命令与flags你好,我是郑建勋。 之前,我们介绍了Worker的开发以及代码的测试,但之前的程序其实还是单机执行的。接下来让我们打开分布式开发的大门,一起看看如何开发Master服务,实现任务的调度与故障容错。 考虑到Worker和Master有许多可以共用的代码...2025-12-13Go进阶-分布式爬虫实战
45、Master高可用:怎样借助etcd实现服务选主你好,我是郑建勋。 上一节课,我们搭建起了Master的基本框架。这一节课,让我们接着实现分布式Master的核心功能:选主。 etcd选主API我们在讲解架构设计时提到过,可以开启多个Master来实现分布式服务的故障容错。其中,只有一个Maste...2025-12-13Go进阶-分布式爬虫实战
46、Master任务调度:服务发现与资源管理你好,我是郑建勋。 在上一节课程中,我们实现了Master的选主,这一节课,我们继续深入Master的开发,实现一下Master的服务发现与资源的管理。 Master服务发现首先我们来实现一下Master对Worker的服务发现。 Master需要监...2025-12-13Go进阶-分布式爬虫实战
47、故障容错:如何在Worker崩溃时进行重新调度你好,我是郑建勋。 上一节课,我们用随机的方式为资源分配了它所属的Worker。这一节课,让我们更进一步优化资源的分配。 对资源进行分配不仅发生在正常的事件内,也可能发生在Worker节点崩溃等特殊时期。这时,我们需要将崩溃的Worker节点中的任务...2025-12-13Go进阶-分布式爬虫实战
48、完善核心能力:Master请求转发与Worker资源管理你好,我是郑建勋。 这节课,让我们继续优化Master服务,实现Master请求转发和并发情况下的资源保护,同时实现Worker对分配资源的监听。 将Master请求转发到Leader首先我们需要考虑一下,当Master是Follower状态,同时还...2025-12-13Go进阶-分布式爬虫实战
49、服务治理:如何进行限流、熔断与认证你好,我是郑建勋。 在之前我们已经完成了Master与Worker的核心功能。在大规模微服务集群中,为了保证微服务集群正常运行,还需要添加许多重要的功能,包括限流、熔断、认证与鉴权。这节课,就让我们来看看如何实现这些功能。 限流限流指的是对给定时间内...2025-12-13Go进阶-分布式爬虫实战