莫张周刘王 发表于 2024-9-20 13:52:41

Go分布式爬虫笔记(五)_golang分布式爬虫架构

​https://img-blog.csdnimg.cn/img_convert/1d913bc09a80d338d44d1f76fc4a7a36.png​
体系级别

体系级别优化与架构计划:


[*]怎样对服务进行拆分
[*]怎样将服务链接在一起
[*]服务调用的关系以及调用频率
各种标题:


[*]怎样让服务随着负载的增加具有可扩展性?
[*]是否采取 DDD 的架构计划?
[*]怎样进行分布式的和谐?
[*]选择何种中央件、缓存数据库与存储数据库?
[*]使用何种通讯方式?
[*]怎样计划缓存与数据库的关系,才气制止缓存失效之后大量数据直接打到数据库导致的服务相应变慢乃至服务雪崩的标题呢?
[*]分布式体系中数据的同等性,如果业务可以或许接受读取到的数据不是最新写入的数据,那么就一定能计划出比强同等性读取相应延长更低的体系。
服务管理:


[*]监控、告警
[*]降级策略(限流、重试、降级、熔断)
[*]分布式追踪与分布式日记网络
程序计划和构造级别

程序计划


[*]功能的拆分
[*]流程的抽象
[*]使用何种情势构造代码
[*]界说清晰的模块间的接口界限
[*]使用何种框架
[*]并发处理模子
[*]搭建的开辟流程和规范
[*]重点指标体系的计划和监控
高性能程序计划的几个原则:


[*]流程异步化
为了外部用户的体验,低沉延长,有时我们可以联合业务对流程进行异步化,快速返回结果给外部用户。这可以提高用户体验、服务的 QPS 与吞吐量。
例如,使命执行完毕后必要将一些数据存入缓存中。这时可以直接返回结果,并异步地写入数据库。又如,调用一个执行周期很长的函数,可以先直接返回,然后在执行完毕后哀求用户给的回调地点。不过要注意的是,无论怎样异步化,终究是必要执行使命的。
[*]在执行的关键阶段哀求并行化,尽可能把串行改为并行。
你可能听说过华罗庚烧水沏茶的故事,这个故事的要点,就是将整个大使命分割为小使命,让关键使命并行进行处理,这个方案可以大大镌汰整个使命的处理时间。
[*]合理选择与实际体系匹配的并发模子
根据自身服务的差别,必要相识 Go 语言在网络 I/O、磁盘 I/O,CPU 密集型体系在程序处理过程中的差别处理模子。并根据差别的场景选择差别的高并发模子。
[*]无锁化与缓存化,包管并发的威力。
试想一个极端的不合理的锁计划,它可能会让全部的用户协程等待某一个协程执行完成,导致并行处理退化为串行执行。无锁化并不是完全不加锁,而是要合理计划并发控制。
例如计划无锁的结构,在多读少写场景用读锁替换写锁,用局部缓存来镌汰对于全局结构的访问(关于怎样计划无锁化结构,你可以参考 sync.pool 库、go 内存分配、go 调理器等模块在并行处理中的极致优化)。
怎么用工具和指标来验证程序实际并行的服从呢?


[*]协程数量
[*]调理器的运行方式
获取协程数量的方式:


[*]借助 Debug 库中的 NumGoroutine 函数,GOMAXPROCS 还可以获取逻辑处理器 P;
[*]使用 runtime/metrics 包,获取运行时 metric,进而获取到协程数量;
[*]通过 pprof 获取当前的协程数量。
调理器:Go调理跟踪


[*]启动 GODEBUG 特定情况变量方式,检察调理器日记;
[*]通过 pprof 和 trace 工具,可视化分析调理器的运行状态。
代码实行级别



[*] 合理代码优化

[*] 代码规范

[*]目次结构规范
[*]测试规范
[*]版本规范
[*]目次结构规范
[*]代码评审规范
[*]开辟规范
[*]参考UBER 开源的 Go 语言开辟规范

[*] 数据结构与算法

[*]算法优化
[*]数据结构优化

[*] 缓存:空间换时间

[*]CPU多级缓存
[*]Go运行时调理器
[*]Go内存分配器
[*]sync.pool

[*] 复杂度
[*] benchmark对比

[*] 刻意的优化

[*]放入接口中的数据会进行内存逃逸,需不必要优化?

https://img-blog.csdnimg.cn/img_convert/4ecca1c6644cea188f3c097aef819efc.png
https://img-blog.csdnimg.cn/img_convert/3f1f2f03a20d425986bb18a29b6dda80.png
网上学习资料一大堆,但如果学到的知识不成体系,遇到标题时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提升。
79mkD-1726037820859)]
[外链图片转存中…(img-6svtDpX6-1726037820860)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到标题时只是浅尝辄止,不再深入研究,那么很难做到真正的技能提升。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Go分布式爬虫笔记(五)_golang分布式爬虫架构