流程:
适用场景:
敏捷开发描述了一套软件开发的价值和原则,如果你感兴趣的话可以看看敏捷宣言提出的 4 种价值观和 12 条原则1。敏捷宣言是 2001 年由数十位行业专家达成一致的敏捷软件开发方法。
敏捷开发的核心思想是拥抱变化,强调对于变化的适应性,更强调开发者与业务专家、客户之间的互动,强调持续改进和持续交互产品,持续提高客户满意度。
敏捷框架
Scrum
看板(kanban)
极限编程(XP)
精益软件开发(Lean Software Development)
价值观
个体和互动 高于流程和工具
工作的软件高于详尽的文档
客户合作高于合同谈判
响应变化高于遵循计划
原则
需求分类
需求分析
PRD(Product Requirements Document)
需求评审
来自
在需求分析的最初阶段需要出一份市场需求文件(MRD,Market Requirements Document),主要讨论项目的商业价值,用于决策是不是真的要做这个项目。
需要讨论的话题包括:
功能需求描述了软件的功能。例如,一个购物商城需要提供商品展示功能、购物车功能、支付功能。又如我们开发的爬虫项目,需要具备任务的增删查改、任务调度、代理、限流等功能。
功能需求详细描述了软件系统在行为方面的能力,开发者后续需要完成对应功能的开发。许多项目不成功的主要原因就是不充分的用户调研、不完整的功能需求或者误解了功能需求。
非功能性需求,是指软件产品为满足用户业务需求而必须具有的,除了功能需求以外的特性。
人员:
1、QA 测试应该是必须存在的一个环节,虽然开发者是应该做好测试,但是开发者也只能做好自己负责模块的测试,特别是在微服务环境下,每个开发者只关注自己负责的服务,对于系统整体的集成测试、性能测试,还是需要专门的 QA 来完成。另一方面,QA 其实也可以对开发者所交付的东西的质量进行监督,可以发现开发者疏忽的问题。 开发者会思维固化,不容易发现逻辑之外的错误,当局者迷 旁观者清。
Scrum 框架的缺点:感觉 Scrum 框架更讲究迅速,看起来更适合小型、要求先快速交付一版的新项目,很多环节由文档转变为面对面沟通,对于长期迭代的项目来说,可能会导致一些重要材料的丢失,如果项目人员流动大,可能会对后续的长期维护埋坑。 不知道是否理解正确。
开发规范:
好的代码需要具备特性:
服务之间的通信,最常用的是 HTTP、Thrift 和 gRPC 协议。以使用最多的 HTTP 协议为例,大多数 Web 服务使用了 RESTful 风格的 API。RESTful 规范了资源访问的 URL,规定了使用标准的 HTTP 方法,例如 GET、POST、PUT、DELETE 等,并且明确了这些方法对应的语义。除此之外,接口规范还需要定义状态码如何赋值、如何保证接口向后兼容等一系列问题。
大型公司会单独管理 API 接口,甚至会有一套专门描述软件组件接口的计算机语言,被称为 IDL(接口描述语言,Interface description language)。
IDL 通过独立于编程语言的方式来描述接口,每一种编程语言都会根据 IDL 生成一套自己语言的 SDK。即便是相同的语言,也可能生成不同协议(例如 HTTP 协议 、gRPC 协议)的 SDK。使用 IDL 有下面几个好处:
日志的好处:
日志相关;
测试分类:
go官方提交规范 react提交规范
A successful Git branching model
Gitflow分支定义:
GitHub Flow 工作流中,通常有一个管理者维护的主仓库。一般开发者无法直接提交代码到主仓库,但是可以为主仓库代码提交变更。在通过了自动化 CI 校验和代码评审(Code Review)之后,维护者会将代码合并到主分支中。GitHub Flow 工作流的详细过程如下。
CI/CD DevOps
自动检查:
合并完成:
SRE
SRE 工程师通常是围绕着缩减下面的几个时间来提高整个系统的稳定性水平:
SLO(服务水平指标):
信息聚合
行业见解:许多公司使用网络爬虫将特定行业的海量信息存储到数据库中,并通过 Excel、Tableau 这样的数据分析软件分析判断,从中获得特定行业的见解。例如,一家公司可能会抓取和分析大量有关石油价格、出口和进口的数据,经过分析后将他们的见解出售给世界各地的石油公司。一些公司通过网络爬虫获取数据,分析企业的实际经营情况,来判断是否要进行投资或者做空。
预测:爬虫技术本质上获取的是信息,但是要放大信息的价值,更多时候需要对信息进行预测。例如,知道俄乌开战的信息,能够预测出未来石油、黄金价格的暴涨。又如政府进行舆情监测,需要将特定事件相关的全部新闻资讯采集下来,以监控并预测事件发展态势、及时进行疏导与评估疏导效果。未来可能是无法预测的,但现实的种种迹象却表明了未来大概率的模样,这就和天气预报一个道理,看起来不可思议,但是蕴含了科学。和你分享一段我的体会,2022 年 1 月 22 日封城前夜,我看到一篇医学文章,文中通过流行病学研究,结合国际旅行概率、潜伏期、发现病例的平均时间,就用概率预测了背后实际可能的发病人数。
数据爬取协议
数据爬取策略
深度优先搜索、广度优先搜索
超时控制
限流
重试
代理
海量任务并发执行
架构设计
分布式架构设计
数据解析
HTML、CSS、JavaScript、图片、音频、视频
HTML组成
HTML 常见的标签及其作用
文档对象模型
JavaScript 语法
文本处理技术
数据存储
数据分析与可视化
分布式系统的设计、高并发模式的选择、文本的解析与存储、HTTP 网络协议、代理在内的核心技术栈。
IP 校验:对于不需要登录就能够访问的网站来说,信息具有公开性,服务器无法识别到访问者的具体身份。但是这并不是说来访者就没有办法被追踪到了,服务器可以用间接的方式识别用户,例如识别并监控客户端的访问 IP 等。当特定 IP 在一段时间内访问的频率、次数达到一定限定阈值后,服务器可以采取返回错误码或者拒绝服务的方式起到反爬虫的目的。在当下,由于 IPV4 地址不足,出现了 NAT 等技术,局域网内的用户进行外部访问时会共享同一个公网 IP 地址,因此,如果服务器对这种 IP 地址进行阻断,会导致大量正常的用户被拦截在网站之外。客户端解决 IP 校验比较有效的方式是,使用大量网络代理隐藏源 IP 地址,让服务器以为是不同的 IP 在访问一样。
HTTP Header 校验:还有一些服务器会校验客户端传递的 HTTP Header,例如,User-Agent 字段用于表明当前正在使用的应用程序、设备类型、操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎等。浏览器会在该字段自动填充数据,例如,当前我的谷歌浏览器的 User-Agent 字段为:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
如果服务器识别 User-Agent 字段发现不是用户通过浏览器发出的,服务器可能会拒绝服务。解决这类 HTTP Header 校验的方式是在请求头中添加浏览器的标识,让你的请求看起来就像是通过浏览器发出的。
验证码:验证码又被称为全自动区分计算机和人类的公开图灵测试(CAPTCHA)。顾名思义,验证码是一种区分用户是机器还是人类的自动程序。验证码包括简单的数字验证码、字母数字验证码、字符图形验证码、极验验证码等,能够输入正确验证码的访问者被服务器认定是人类,否则被认为是爬虫。一些简单的验证码测试可以借由打码平台辅助完成,这些平台通过脚本上传验证的图片,再由打码公司雇用人工进行识别。对于一些更加复杂的验证码,破解的难度和成本还会更高。考虑到验证码一般是在 IP 地址访问过于频繁之后才会出现,一个解决思路就是当页面弹出验证码时,通过切换 IP 的方式避开验证码的输入。
登陆限制:此外,登录限制也是一种有效保护数据的方式。当用户需要访问重要的数据或者更多的数据时,需要登录才能继续查看。例如,知乎用户如果想查看更多数据就需要先登录网站。这种策略也是一把双刃剑,因为需要登录的页面是不能被搜索引擎检索的,这就降低了网站的曝光度。解决登录限制的方式是提前登录,然后借助 cookie 在已经登录的情况下访问数据。如果单个用户的访问频率受到了限制,还可以准备大量的账号来操作,但这样做的成本太高了。
CSS 数据伪装:一些网站借助了 CSS 对 HTML 元素的渲染功能来实现反爬虫机制。也就是说,不在 HTML 元素中放入真实的值。例如,一个产品的实际价格为 888 元,服务器会将特定 HTML 标签的数字修改为 999 元,并利用 CSS 的规则巧妙地将 999 渲染为 888。但是如果我们单纯地获取 HTML 文本的数据,就可能出错。要解决这一问题,我们需要先手动识别出这种数据伪装的规则。由于网站每次更新后这种数据伪装规则都可能发生变化,所以还需要识别当前网站的版本。更复杂的解决方案则是使用 OCR,对区域内的图像进行文字识别。
sign 参数签名:一些 API 会对参数进行签名(sign),以此拒绝非法请求。这种机制常见于手机 App 中。签名通常包含了时间戳、请求的参数体等信息。这样即便请求被非法抓包或捕获,也无法修改请求的内容或者重新访问,因为服务器会对时间戳和参数进行验证,并且只有在一定时间范围内这个请求才是有效的。
在下面这个例子的 HTTP GET 方法中,在 url 中加入的 time 参数为当前的时间戳,sign 为生成的参数签名(如果是 POST 方法,这些参数会放入 content 中)。
要破解 sign 参数签名的规则一般比较困难,除了试错法,一种可能的机制是使用反编译技术获得加密算法。此外我们还可以模拟用户操作应用,并通过抓包的方式截获流量中的信息,但这种方式效率较低。
「此文章为3月Day10学习笔记,内容来源于极客时间《Go分布式爬虫实战》,强烈推荐该课程!/推荐该课程」 ↩︎
价值观
个体和互动 高于流程和工具
工作的软件高于详尽的文档
客户合作高于合同谈判
响应变化高于遵循计划
原则