高可用架构

其他

代码质量与技术债系列分享之一—如何做好CodeReview

CR预估代码可能出问题的地方进行充分自测,保证代码可运行不要指望别人帮你找出问题利用自动化工具进行前置检查单元测试检查新增单元测试检查方法行数过多圈复杂度过高代码规范检查lint
4月19日 上午 11:43
其他

携程火车票异常检测和根因定位实践

作者简介龙川泾渭,携程算法工程师,专注异常检测、根因分析、时间序列预测等领域。摘要携程火车票包含1000+的业务指标,人工监测指标的异常情况耗时费力,而由于业务差异,基于规则和简单统计学的检测方案只能覆盖到单个指标或者单类指标,并且不能随着新业务上线或者功能变动灵活动态的调整相应的规则,并不适用于大量不同业务线的指标。我们希望使用AI算法来代替人工,对指标进行全自动的监控,旨在发现指标的异常和导致异常的潜在原因。具体来说,对于异常检测,使用六种无监督检测算法计算异常得分,根据时间序列特性和指标的业务特点计算异常阈值,集成多种算法的异常结果进行硬投票,得到异常结果。对于根因定位,集成了Adtributor、Hotspot等四个算法做硬投票系统,按投票次数降序输出根因结果。此外根据指标的重要程度,设置不同的投票规则,来权衡精召率。一、背景最近几年,火车票业务持续高速成长,业务指标种类繁多,如何快速准确的发现指标的异常以及导致异常的原因,并及时排除问题显得尤为重要。基于AI的异常检出能力,可以根据指标的历史数据分布规律,实现实时监测,帮助开发人员尽早的发现问题和挖掘产生问题的原因。1.1
4月16日 下午 5:20
其他

大规模用户登录系统演进、便捷登录设计与实现

通过为不同产品线新增sub_token,可以实现对不同产品线的安全隔离。即使某个产品线的token泄露,攻击者也只能获取到与该产品线相关的sub_token,而无法影响其他产品线的安全。细粒度控制:
4月15日 下午 5:22
其他

MySQL 主从 AUTO_INCREMENT 不一致问题分析

0正常情况下,插入一行数据,影响的行数是1。此时查看主从节点表的autoincrement值,可以看到此时主从的AUTO_INCREMENT是一致的,都是4,即自增主键下一次申请的值是4。2.3
4月12日 下午 12:11
其他

这些年背过的面试题——Netty篇

在实现异步操作时,只能使用多线程模型,一个请求对应一个线程。但是,线程的资源是有限且宝贵的,创建过多的线程会增加线程切换的开销。同步非阻塞I/O(NIO):应用进程向内核发起
4月11日 上午 10:43
其他

分布式系统Consul一致性实现即Raft日志复制原理

算法主要包含两个部分,分别是leader选举和日志复制,leader选举我们不分析,我们主要分析日志复制的实现原理,下面我们以consul的key
4月9日 上午 10:29
其他

美团大规模KV存储挑战与架构实践

资源。对此,我们的解决方案是工作多线程,也就是说把请求处理的过程也多线程化。如上图所示,在工作多线程方案下,每个线程都会去处理请求,并且每个线程会完成从收包到请求处理,然后到发包的整个过程,是一个
4月8日 上午 10:22
其他

收藏|如何画好一张架构图?

BU,跨团队协作沟通)。02怎样的架构图是好的架构图架构图的好坏标准(个人拙见仅供参考):一张图片胜过千言万语。结构清晰:观点明确、层次分明、内容清晰。用户轻易看出架构图表达的观点/关系/思想/逻辑
3月26日 下午 2:33
其他

干货 | 为业务系统赋能,携程机票最终行程系统架构演进之路

查询,极大地增加了数据库压力和影响查询性能。经过数据统计,分析得到特定的业务字段查询其实就涵盖了非订单号查询的大多数,从而增加其二级索引表就可以有效解决
3月22日 上午 9:28
其他

微信支付混沌工程实践

演习演习通常是有明确的执行计划和预期,要求注入故障的影响已知且明确。更关注人的反应和应急响应计划,还包括非系统因素都在考量范围。比如验证某个系统失效后的,人为干预流程、机制是否顺畅等。
3月21日 上午 10:58
其他

Kafka 痛点专题|AutoMQ 如何解决 Kafka 冷读副作用

Kafka)作为一款成功的流处理平台已经在各行各业中有广泛的应用,并且具备极其强大的软件生态。但是,其一些缺点也给使用者带来了很大的挑战。AutoMQ
3月19日 上午 10:20
其他

Sharding-JDBC源码解析与vivo的定制开发

Sharding-JDBC是在JDBC层提供服务的数据库中间件,在分库分表场景具有广泛应用。本文对Sharding-JDBC的解析、路由、改写、执行、归并五大核心引擎进行了源码解析,并结合业务实践经验,总结了使用Sharding-JDBC的一些痛点问题并分享了对应的定制开发与改造方案。本文源码基于Sharding-JDBC
3月15日 下午 2:44
其他

数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)

有状态的服务是否适合放置在容器中并交由K8s编排托管(例如生产环境的数据库)的话题依然争论不止。本文基于Elasticsearch/Clickhouse在B站生产环境的容器化/K8s编排能力落地,
3月14日 下午 12:53
其他

一文详解全栈可观测的实现路径

的数据库,观测平台将开始在内部采集这个实例对应相关联观测的数据,最后把数据呈现给用户,这是用户不可见的部分。4)业务应用业务应用关联的采集,和业务要绑定在一块,这种技术形态目前有这么几类。一是
3月12日 下午 12:35
其他

携程 Redis On Rocks 实践,节省 2/3 Redis成本

作者简介patpatbear,携程软件技术专家,负责携程缓存内核的维护,热爱开源,专注于高性能、分布式NoSQL系统的建设和应用。一、背景redis使用内存作为存储介质,具有良好的性能和低延迟,但其内存容量通常成为瓶颈,且内存价格较高,导致redis使用成本较高。随着SSD磁盘性能的不断提高,NVMe
3月11日 上午 8:39
其他

微信工程师:常见性能优化方案与实用工具

性能优化是降本增效路上必不可少的手段之一,在合适的时机采用合理的手段进行性能优化,一方面可以实现系统性能提升的目标,另一方面也可以借机对腐化的代码进行清理。在程序员的面试环节中,性能优化的问题也几乎是必考题。然而性能优化并非一锤子买卖,需要一直监控,一直优化。过早的优化、过度的优化,以及优化
3月6日 上午 8:19
其他

vivo 在离线混部探索与实践

YARN模式下申请的container内存大小,不止是由Spark任务本身的内存参数决定,还会被YARN的资源粒度参数所影响。所以这块要做一些适配对标工作。在任务量比较大的情况下,Spark
3月4日 上午 9:02
其他

Sora:技术细节推测与原理解读,行业影响与成功关键

官方介绍页里就有无数象征自由的纸飞机在无序地探索自由,你也应该乘上想象的翅膀,探索你的知识财富与精神自由~本篇仅仅为个人的思考和总结,如有不妥之处,欢迎指正与交流。参考文献[1]
2月22日 上午 8:46
其他

Spring 七种事务传播性介绍

MANDATORY必须在事务中执行。如果外层方法A没有开启事务,方法B抛出异常。如果外层方法A开启了事务,方法B加入事务,方法A&B在同一事务中执行。例子:以上例子,方法A没有加事务注解,方法B
2月19日 上午 8:46
其他

B站大型开播平台重构

本期作者1.背景"凡事预则立,不预则废。"——《礼记·中庸》在文章的开头,我们可以先来了解一下直播业务的大致业务架构。将直播业务简单分为两大类场景"看播"、"开播",前者主要面向C端观看用户,后者主要面向B端开播主播。主播通过"开播工具"的开播产品功能,经由"开播平台"完成一系列开播动作,最后将媒体信息采集推送到多媒体服务器,C端观看用户就可以从CDN看到直播的视频流内容。从数据流向来讲,"开播"场景是产生数据和触发关键事件的源头。这些数据或事件会涉及多个领域,如安全合规信息、房间信息、主播信息、开播场次信息、安全审计信息、多媒体信息等。打个不太准确的比喻。开播系统对于直播平台的重要性,等同于订单系统对于交易平台的重要性。开播工具作为播端功能入口,直接面向官方开播工具(直播姬、粉版大加号、三方工具如OBS开播)的用户以及内部平台方的用户(其他业务线、产品&运营),对开播体验负责。开播平台在其中的职责,是向开播工具和其他平台方提供开播相关的平台化业务能力,如开关播、开通直播间、切换分区等。同时,开播平台与同级的业务平台一起协作,才能支撑起完整的开播工具产品能力,如语聊房业务需要开播工具管理平台(开播工具类支持)、主播互动平台(主播互动能力支持)、流媒体服务端共同参与才能完成,从不同的维度帮助开播工具生态完善化。一些涉及到的业务/技术名词,在此我们也做出列举并做出简单介绍:名词名词简述领域驱动设计(DDD)DDD
2月6日 上午 9:48
其他

千万级高性能长连接Go服务架构实践

下行请求qps,延时、成功率下行请求根据业务场景的不同,分为批量单播和组播,且不同业务对应请求qps要求不一样,一般批量单播需要支持到百万级ups,组播要支持到千万级ups,且支持横向扩容。GEEK
2月4日 上午 9:35
其他

高并发架构设计(三大利器:缓存、限流和降级)

引言高并发背景互联网行业迅速发展,用户量剧增,系统面临巨大的并发请求压力。软件系统有三个追求:高性能、高并发、高可用,俗称三高。三者既有区别也有联系,门门道道很多,全面讨论需要三天三夜,本篇讨论高并发。高并发对系统的挑战性能下降、资源竞争和稳定性问题等。什么是高并发高并发的定义高并发是指系统或应用程序在同一时间段内接收到大量并发请求的能力。具体来说,高并发环境下系统需要能够同时处理大量的请求,而不会出现性能问题或响应延迟高并发的特点1.大量请求:高并发场景下,系统需要同时处理大量的请求,这些请求可能来自于不同的用户或客户端。2.同时访问:这些请求几乎同时到达系统,需要在短时间内进行处理和响应。3.资源竞争:由于大量请求同时到达,系统的资源(如CPU、内存、网络带宽等)可能会面临竞争和争夺。4.响应时间要求高:高并发场景通常对系统的响应速度有较高的要求,用户期望能够快速获取响应结果。高并发场景和应用高并发场景广泛应用于热门网站、电商平台、社交媒体等互联网应用中。例如,在电商平台上有大量用户同时浏览、搜索商品,提交订单等操作;社交媒体平台上有大量用户同时发布、点赞、评论等操作。这些场景需要系统能够同时处理大量请求,并保证系统的性能、可用性和用户体验。高并发的影响系统性能的下降和延迟增加资源竞争和资源耗尽系统稳定性和可用性的挑战高并发应对策略缓存:缓解系统负载压力,提高系统响应速度限流:控制并发访问量,保护系统免受过载影响降级:保证核心功能的稳定性,舍弃非关键业务或简化处理缓存简介在网站或APP的开发中,缓存机制是一个不可或缺的环节,可以提高网站或APP的访问速度,降低数据库压力。在高并发环境下,缓存机制的作用更加明显,不仅可以有效减轻数据库的负载,还可以提高系统的稳定性和性能,从而给用户带来更好的体验。工作原理缓存的工作原理是先从缓存中获取数据,如果有数据则直接返回给用户,如果没有数据则从慢速设备上读取实际数据并且将数据放入缓存。常用技术浏览器缓存简介浏览器缓存是指将网页中的资源(如HTML、CSS、JavaScript、图像等)存储在用户的浏览器内部,以便在后续请求同一资源时可以直接从本地缓存中获取,而无需再次从服务器下载。适用场景浏览器缓存适用于那些静态内容变化较少的网页和静态资源,可以显著提升网站性能和用户体验,并减少服务器的负载。常见用法使用浏览器缓存可以通过设置响应头中的Expires和Cache-Control字段来控制缓存的行为。1.使用Expires字段:Expires字段指定了缓存的过期时间,是一个具体的日期和时间。服务器可以在响应头中添加Expires字段,告诉浏览器在该时间之前可以直接从缓存中获取资源,而无需再向服务器发起请求。例如:Expires:
2月1日 上午 8:26
其他

vivo 海量微服务架构最新实践

的平台工程实践路径,持续迭代优化平台能力,提升研发效率与开发者体验。参考阅读:代码理解技术应用实践介绍一文详解
1月31日 上午 8:39
其他

【收藏】Twitter工程师从0到1教你设计百万级并发应用

从0到100万用户的扩展设计一个拥有上百万用户的系统是很有挑战性的,这将是一个不断优化、持续改进的过程。在本章中,我们先创建一个单用户的系统,然后逐渐将其扩展成可以服务上百万用户的系统。读完本文,你将掌握几个能帮助你破解系统设计面试难题的技巧。本文节选自Alex所著《搞定系统设计:面试敲开大厂的门》,亚马逊2500人打出4.6分,豆瓣8.4分好书。01单服务器配置万里征途总是从第一步开始的,构建一个复杂系统也是如此。我们从简单的部分着手,先让所有的功能都在一个服务器上运行。图1-1展示了如何配置单台服务器,让一切都在其上运行,包括Web应用、数据库、缓存等。研究请求流和流量源头有助于我们理解这个配置。我们先来看请求流(如图1-2所示)。1.用户通过输入域名(例如api.mysite.com)来访问网站。通常,域名系统(DNS)是由第三方提供的付费服务,它并不是由我们的服务器来托管的。2.IP地址被返回给网页浏览器或者移动应用。在图1-2所示的例子中,被返回的IP地址是15.125.23.214。3.一旦获知IP地址,HTTP请求就被直接发送给Web服务器。4.Web服务器返回HTML页面或者JSON响应来渲染页面。接下来,我们研究一下流量源头。Web服务器的流量有两个源头:Web应用和移动应用。—Web应用:它运用服务器端语言(Java、Python等)来处理业务逻辑、数据存储等;它还使用客户端语言(HTML和JavaScript)来展示内容。—移动应用:HTTP是移动应用与Web服务器之间的通信协议。而JSON(JavaScript
1月25日 上午 8:57
其他

Rust又被降本增效选中!Rust替代Python,亚马逊云成本降为1/4!

众所周知,Lambda函数和大型运行时是一个糟糕的组合,因为跟本机代码相比,冷启动速度较慢,内存需求更高。另一方面,许多开发人员使用Java和Python比使用Rust等系统语言开发起来会更有效率。
1月22日 上午 8:22
其他

一文详解 Java 限流常见的四种限流算法

一、限流为什么要进行限流?1.瞬时流量过高,服务被压垮?2.恶意用户高频光顾,导致服务器宕机?3.消息消费过快,导致数据库压力过大,性能下降甚至崩溃?……什么是限流?限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。在高并发系统中,出于系统保护角度考虑,通常会对流量进行限流。在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。有哪些限流算法?常见的四种限流算法,分别是:固定窗口算法、滑动窗口算法、漏桶算法、令牌桶算法。二、限流算法1.
1月17日 上午 8:11
其他

代码理解技术应用实践介绍

技术效果探索一套通用的代码理解方案,构建白盒级软件知识图谱,在C++/GO上落地实践基础能力:覆盖多语言,高效易扩展支持3种语言、10+种代码实体数据源C/C++效率突破,效率缩短近9倍,增量效率
1月15日 上午 9:51
其他

我是如何实现Go性能5倍提升的?

读取旧x.........我们完全可以通过简单业务逻辑调整,比如调整处理的先后顺序等移除DeepCopy。优化前后性能对比如下:性能有5倍左右提升,折算到成本上的收益是巨大的。02Go
1月10日 上午 8:33
其他

AIOps在美团的探索与实践——事件管理篇

事中快恢当故障事件发生后,需要尽可能降低服务的异常对其他用户的影响,提升服务的可用性。可以从MTTD(平均检测时间)、MTTT(最短定位时间)、MTTR(平均修复时间)这三个指标入手。图4
1月9日 上午 8:40
其他

万字长文谈B站变更管控体系设计与实践

背景随着企业规模的扩大和技术日趋复杂,对生产环境的稳定性需求日益凸显,尤其对于大型互联网企业而言,稳定性的重要性不可忽视。在这一背景下,变更管理显得尤为关键,因为变更通常是导致线上故障的首要因素。据谷歌SRE统计,高达70%的生产事故与线上服务的变更直接相关。因此,防控住变更带来的风险将有助于从源头上杜绝大部分潜在风险,确保企业生产环境的可靠性和稳定性。本文将基于当下变更管控的困局,引入变更的核心概念定义,然后围绕变更管控的逻辑思考,进而解答变更管控为何要做、如何去做和怎么来做这三个核心问题。最后为大家介绍B站目前的变更管控平台实践情况,期望可以为读者提供一个全新的变更管控思路和启示。当下变更管控困局变更已然是一个老生常谈的话题了,相信大家都不陌生。在技术标准里面,ITIL的每个版本里面,都有他的篇幅描述,在ITIL中对于变更管理的核心是通过合理的流程和步骤来确保变更的有效管理,最小化潜在风险,保障服务的稳定性和可靠性。更多的是在强调对于将要发起的变更流程的规划、控制、评估和记录。但是缺少对于变更执行过程的过程管控,这里涉及对于过程对象的定义、过程自身的定义和过程的干预等等。在笔者与业界一些公司的沟通交流中也发现,目前大家对于变更的重视程度已然达到了顶峰。在实践过程中,基本上是围绕变更方案评审,变更发起前控制(重大活动/节假日等关键时间控制),变更事件记录这些开展变更管理工作。这种做法应对传统的IT架构是足够的,但是在目前围绕云原生+微服务的这套复杂技术体系来看,存在着诸多问题,诸如:评审围绕流程驱动,在评审环节依靠人的经验来确保方案的正确性,过于依赖经验并难以持续保证效果由于资源的稀缺性,难以确保每个变更都能够纳入评审,仅能覆盖部门高优重保的大型变更计划评审行为仅能约束变更的发起,无法保障变更执行过程按照要求切实有效执行,比如强制分区灰度要求,强制观察时间要求等基于人操作的变更和平台操作的变更,围绕技术平台的基础设施和业务平台的配置变更,散落在各个地方,各自对于变更用了各自的流程定义和描述,难以收归一起管理和分析单纯的变更记录,难以支撑当下复杂场景下由某个边缘变更、底层变更导致的级联故障定位由于缺乏完整的变更管控技术框架,难以实现公司内部所有变更的平台托管,即无法知晓到底存在多少变更行为,哪些地方会发起变更,每次变更具体是变了什么东西,变更影响具体影响了什么对象和范围等面对以上诸多局限,我们秉承技术问题还需要技术解法的原则,将变更作为一个独立的技术域,抽象和定义了变更的对象概念,规划和设计了变更管控技术框架,围绕这个框架打通从变更元信息定义、变更平台/场景接入、变更防控到变更分析的全流程链路,来实现变更的一体化和多层次管控。下面我们从变更的定义出发,看整个变更管控体系是如何设计和落地的。什么是变更?变更定义日常变更无处不在,那到底什么才是稳定性领域中的变更呢?通过对行业理论和实践总结的梳理,我们认为变更是指任何对服务运行状态造成影响的行为。这些影响可能源自研发、SRE、产品或运营的各种活动。从本质上来讲,稳定性问题通常是服务从一种稳定状态转变为不稳定状态的熵增过程。变更生命周期在上面对于变更的定义里面,我们明确了几个关键的点,服务,状态变化和过程。一个变更的生命周期,其实就是对于变更过程从变更发起、执行到结束的描述和管理。传统中,一个完整的变更流程包含变更计划、变更预审、变更评审、变更执行和变更校验等环节。在变更执行环节,往往会围绕变更对象的范围,拆分多个批次进行变更的灰度化,减少因异常变更熵增带来的影响面过大问题。变更平台/场景关于状态变化和变更过程的描述,我们采用了“变更平台”和“变更场景”这一概念。变更平台是指发起变更的平台,其负责提供具体变更的功能。变更平台会托管一系列变更场景,以数据库管控平台为例,它涵盖了新建数据库、扩容实例、SQL
1月8日 上午 9:56
其他

放弃PHP转投Go,10万行代码重构升级一步到位!

行数,圈复杂度的平均值大约在10到20之间。我们要重构的底层页代码平均复杂度达到了66.25,最高的代码复杂度达到了1234。代码复杂度分布图使用静态分析代码整体的项目后的
1月4日 上午 8:44
其他

一文浅谈CodeReview中的一些思考

引言正如图中调侃的衡量代码质量的唯一有效标准就是CodeReview过程中WTF/min,从中可以看出CodeReview对于保障代码质量的重要性。CodeReview在日常的开发过程中也越来越被重视,它在提高代码质量同时促进团队成员之间的知识共享和技能提升方面发挥了诸多作用,本文将主要围绕CodeReview展开,简单聊聊在CodeReview过程中的心得和思考。CodeReview的重要性CodeReview是开发过程不可或缺的重要一环,如果将代码发布比作一个工厂的流水线,那么CodeReview就是流水线接近于重点的质检员,他要担负着对产品质量的保障工作,将“缺陷”从众多的“产品”中挑出,反向推动“生产方”改进生产质量。CodeReview的作用:1.改善代码质量:通过CodeReview机制,可以让团队其他同学帮忙协助把关代码质量,发现代码中潜在的质量问题,并给出改进建议,从而推动团队整体代码代码质量的提升。2.能够实现知识共享,统一认知:CodeReview过程是知识碰撞的过程,是学习别人的知识体系促进自我成长的过程,通过CR这样的过程能够将不同成长阶段的成员之间知识水位尽量拉齐,能够有效的提升团队编程的整体水平。3.能够及时潜在安全和性能问题等:通过CodeReview能够及时发现代码中潜在的安全问题和性能问题,例如:SQL注入问题、方案安全漏洞问题、部分业务场景查询实现性能较差等问题。总之,通过严格的CodeReview能够帮助团队成员养成良好的编程习惯和规范,从提高整个团队的代码质量和团队认知拉齐。CodeReview实践经验在CodeReview实验经验章节中,第一部分,将主要介绍CodeReview关注的哪些方面,通过表格的方式进行梳理和归纳;后续部分将主要围绕各个分类下的问题汇总以及从个人的视角出发提出建议。接下来,将主要围绕2个问题展开讨论:1.CodeReview应该关注那些问题;2.CodeReview问题点解读与建议。CodeReview关注哪些CodeReview关注的点比较多,这里简单做了一些归类,梳理了一部分核心关注点和场景问题。关注点分类关注点细分核心关注点常见问题代码规范与质量命名变量命名、方法命名、类命名、包命名命名拼写错误、命名与实际含义不符(超出或小于)、用词不准注释是否有注释、注释是否合理通篇无注释、注释不准确日志打印日志打印级别、日志打印参数、日志格式、异常打印、是否应该打印日志日志打印级别误用、日志参数未打印、日志格式不规范、异常信息未打印、打印日志过多异常处理异常是否抛出、是否规范的异常编码等异常该抛出未抛、肆意的使用RuntimeException等逻辑正确业务逻辑是否正常空指针问题、逻辑不正确等代码风格一致代码风格与应用整体风格一致代码风格不一致(如)代码复杂度圈复杂度大量嵌套if导致非常复杂等架构设计关注分层分层是否合理、是否存在跨层调用分层混乱、跨层调用关注扩展性扩展适配硬编码扩展性低业务域划分业务域划分清晰业务域划分混乱性能问题慢SQL索引设计、是否存在慢SQL语法索引未设计、慢SQL用法如like
1月2日 上午 10:38
其他

从变更 license 协议,到联合创始人离职,是时候考虑 Consul 的国产化平替方案了

往往由两个团队来维护,无法做到同步迭代做改造。另外,服务的发布也往往无法做到同时发布,如果任意一方直接迁移到Nacos,另外一方未及时完成改造和发布,将会对业务的连续性造成影响。Nacos
2023年12月29日
其他

RocksDB 在 vivo 消息推送系统中的实践

服务崩溃,也不会影响整个系统的消息推送。每个应用至少分配三个缓存分片,即使其中一个分片出现问题,仍有另外两个分片在支撑,容错率更高。MT自定义能力更强,面对多变的业务需求,可以快速满足。3.1
2023年12月26日
其他

爬虫与反爬-B站接口安全的风控介绍

1、接口反爬背景接口反爬,或者说更广义的接口安全,一直以来都是网站和app绕不开的基础问题。尤其是平台的规模扩大,各种功能性的接口包含的信息量越来越多,这也让各种目的的脚本爬虫有了获利的空间和爬取数据的动力。而对于一个平台而言,爬虫流量不同于正常流量,基本上无法带来正向的效益(除了搜索引擎爬虫尚且有推广平台的效果),它们对平台的危害是多方面的:(1)对平台开发和运维,爬虫大量的恶意请求极大地占用了平台服务端带宽和计算资源,让平台无故增加了运维的成本,一些保护程度较低的接口还可能被爬虫流量撑爆,甚至会连锁反应造成平台的故障。(2)对于用户来说,个人的活动和隐私信息或多或少会存放在平台上,爬虫会造成用户的信息泄露,这些信息还可能会被用于诈骗等犯罪活动,导致无法挽回的恶劣影响。(3)对平台运营来说,平台上的活动信息被爬取,使得羊毛党团伙能够在第一时间获取到活动的相关信息,大量羊毛党小号涌入活动会挤占正常用户的活动参与名额,不仅危害业务功能的正常秩序,还会造成活动资金被羊毛党薅走,严重降低活动的运营效果。在B站,目前已知容易被爬虫攻击的接口,包括但不限于视频信息接口、用户信息接口、评论内容接口、直播间弹幕/礼物接口、直播抽奖信息接口、主站活动信息接口等等。这些爬虫怀着各种各样的目的,游走于互联网的灰色地带,有的是为了获取B站的运营数据(比如视频信息接口爬虫、用户信息接口爬虫);有的是为了在获利的场景更高效率地薅羊毛(比如直播抽奖信息接口爬虫、主站活动信息接口爬虫);随着NLP对话模型的火热,甚至会出现为模型提供语料而诞生的ugc内容爬虫(比如评论内容接口爬虫)。在站外开源的社区内部,也有一些会针对B站的api进行破解的项目,这些项目提供的接口,也会被爬虫团伙研究利用,成为爬虫的技术基础。为了解决爬虫肆虐的问题,风控、网关、前端、服务端合作推动了接口反爬的事项。而在推动接口安全能力不断完善的过程中,也遇到了不少的问题,同时产出了一些解决问题的探索和思考,下面将通过几个方面来介绍:(1)接口安全整体框架结构(2)风控接口接入方式改造、爬虫风险感知/识别以及处置能力演进(3)网关验签组件的设计和应用2、反爬数据流框架介绍接口流量在整个反爬防控过程中的数据流向如图所示。在整个请求的链路中,包含了两层异常识别的阶段:一层是网关侧在apigw上部署的验签组件,能够对粗暴的恶意接口调用进行识别并直接拦截请求;第二层是风控侧基于上报的设备、ip、账号等特征构建的异常流量识别策略体系,在识别出现的异常流量后,可以对该请求的主体在前端发起真人校验的处置(验证码、引导登录等)。具体来说,前端在请求时,首先会经由网关上报数据到apigw,此时验签组件会先解码请求的参数,校验参数准确无误后(校验不通过的请求会被直接拦截),apigw会将流量发送到风控的GAIA引擎,风控策略判定该请求是否有异常,对疑似爬虫的请求,会返回异常信号;前端在接收到异常信号后,会进入验证交互流程,通过拉起验证码/登录弹窗、请求验证网关/账号鉴权的方式对用户进行真人校验。这样的部署,请求的流量通过apigw作为中转直接到达风控平台,其中异常流量能够被拦截在服务网关之前,一定程度可以起到对业务服务的保护作用。2.1
2023年12月20日
其他

解密最受欢迎的开源 Serverless 框架:流量篇

registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:160e4dc8流量弹性Cloud
2023年12月18日
其他

回归单体成为潮流?腾讯文档如何实现灵活架构切换

软件架构从来没有所谓的银弹,好的架构除了良好的设计,更少不了持续的迭代优化。腾讯文档在业务挑战之下,实现了一种灵活切换单体、微服务的架构设计方案,对业界同类型同场景项目具备较高可借鉴性。本文将详细介绍腾讯文档在实现单体服务和微服务切换过程中所采用的具体方法和技术,以及所取得的收益。在软件开发领域,选择合适的架构设计至关重要。单体服务和微服务架构各有优缺点,分别适用于不同场景。本文将重点探讨腾讯文档如何在这两种架构之间灵活切换,以适应不同业务场景的需求。单体服务架构将所有功能集成到一个应用中,简单且易于维护,适合中小型项目。但随着项目规模扩大,可能面临可扩展性差、部署困难等挑战。相反,微服务架构将应用拆分为多个独立服务,具有解耦、隔离、弹性等优势,适用于大型项目。然而,微服务架构使系统更复杂,需要考虑服务拆分、调用、部署等方面,可能导致成本增加。腾讯文档面临在单体服务和微服务架构之间做出权衡的挑战。在
2023年12月15日
其他

大模型在代码缺陷检测领域的应用实践

生成式的方法生成式模型百花齐发,有闭源的如chatgpt、文心一言,有开源的如llama、bloom和starcode等。我们主要尝试文心一言、llama和bloom,通过prompt(few
2023年12月13日
其他

从腾讯视频架构重构,看DDD的概念与方法

实际上是通过一些诸如“隐喻、分层、抽象、提炼”的手法,把一个复杂的大系统大而化小,分而治之。例如,通过使用“隐喻、分层、抽象、提炼”的手法,将一个处于混沌状态的系统建模为一种清晰的结构,用
2023年12月11日
其他

Kubernetes创始人发声!K8s在被反噬!

全部工作人员都需要提高标准,同时愿意说“不”,“愿意对我们很像要的东西说不,愿意对看起来不是坏主意的事情说不,愿意对本身看起来显而易见且容易的事情说不,愿意对贡献了我们看起来真正想要的东西说不!”
2023年12月4日
其他

【京东技术双十一】记一次线上问题引发的对 Mysql 锁机制分析

背景在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!最近双十一开门红期间组内出现了一次因
2023年12月1日
其他

云厂商CDN故障后,连夜设计了云边端协同新方案

针对以上典型场景,做了以下优化:用户侧前端静态资源业务上要求缓存有效期较短,对可用性要求高;在其他常规稳定性建设基础上,我们在第三方云存储内备份了全站静态资源文件;在源站整体不可用的最坏情况下,依赖
2023年11月22日
其他

腾讯开源 tRPC:多语言、高性能 RPC 开发框架

互联网发展早期,业务场景差异大,试错迭代速度很快。这导致其后台服务使用的语言技术栈、开发框架、通信协议、服务治理系统、运维平台等或多或少存在差异。业务发展到一定阶段后,跨业务合作越来越多,组织架构调整也愈发频繁。技术体系差异,特别是开发框架的不统一,给业务互通带来巨大成本,也导致开发和运营的效率难以快速提高。同时,随着云原生技术的发展,业务越来越多地使用开源技术和云组件。拥抱云原生已经是一种主流趋势。上述问题在腾讯内部也同样存在,且因为规模大、业务类型多,更加难以解决,更必须解决。tRPC
2023年11月2日
其他

微服务回归单体,代码行数减少75%,性能提升1300%

浏览器搜索的内容接入和计算层,主要负责腾讯域内的内容接入和处理,当前接入了多个合作方的上千类内容。正如前面《如何避免旧代码成包袱?5步教你接手别人的系统》中提到,这是一套包含
2023年9月21日
其他

AI-Driven Development :尝试一种全新的软件开发模式

20px,样式是:...按钮距离上一个元素的距离是104,样式是:...我已同意这行距离上一个元素的距离是:20,样式是:...字体颜色:4A4A4A链接颜色:#55D8E4试一下以下两张图展示的是
2023年9月12日
其他

JVM 内存大对象监控和优化实践

大对象优化后的core服务GC情况尽管优化后,因内部异常导致获取核心业务失败的异常请求数显著减少,但是依然存在。为了找到最后这一点异常产生的原因,我们打算对core服务内存中的对象大小进行监控。图7
2023年8月30日
其他

浅谈统一权限管理服务的设计与开发

节点属性变更用户提交申请之后,由审批人进行审批,审批结束会回调MPS给用户进行授权,根据一些业务平台的需求MPS支持了事件回调,业务平台可以配置回调方法,当自动授权后可触发业务平台回调。GEEK
2023年8月28日
其他

从0到1:哔哩哔哩智能客服系统的设计与实现

有一点关心内存则使用"..,Flat","..."的含义是聚类,聚类后,"Flat"的含义是不压缩,存储大小与原始数据集相同,通过"nprobe"参数平衡准确度和性能;d.
2023年8月18日
其他

从9G到0.3G,腾讯会议对他们的git库做了什么?

ff75cc5cdbf0423a24b4f5438e52683210813ba0可以看到只有一个父,其父是7ffe6782272879056ca9618f1d85a5f9716f8e90
2023年8月11日
其他

vivo 自研鲁班分布式 ID 服务实践

系统分库分表随着系统的持续运作,常规的单库单表在支撑更高规模的数量级时,无论是在性能或稳定性上都已经难以为继,需要我们对目标逻辑数据表进行合理的物理拆分,这些同一业务表数据的拆分,需要有一套完整的
2023年8月3日