当前位置: 首页 > 后端技术 > PHP

PHP依赖镜像问题出现后,阿里工程师的“神操作”让人叹为观止!

时间:2023-03-29 21:37:24 PHP

阿里妹攻略:上个月PHP开发者在网上反映无法访问Composer镜像。阿里云90后工程师顾勇连夜开始调研。快速解决问题后,他收到了一大波问题群用户的红包。顾勇最终谢绝了红包,接受了阿里科技的邀请,聊了聊这件事背后的技术。一则新闻,前段时间,由于国际网络不稳定,导致国内各大Composer镜像间歇性无法访问,这对国内PHPer的制作造成了很大的影响。受此影响,国内各种Composer服务都出现了同样的问题,而阿里工程师的解决方案堪称“简单粗暴”,效率高到没有朋友!阿里云的PHPComposer最初是由阿里巴巴内部90后工程师顾勇开发和启发的。作为负责开发阿里云产品PHPSDK的工程师,在工作中经常会遇到同样的问题:虽然基于最新版本的PHP发布了新的SDK,但由于没有镜像工具,导致用户安装失败实时同步版本。此外,云效平台企业开发者使用镜像工具的体验也受到此问题的困扰。为此,阿里巴巴技术团队设计、开发并开源了这套阿里云镜像工具。国际网络不稳定导致的镜像问题,阿里巴巴工程师顾勇第一时间响应PHPer诉求,连夜排查问题。“我们程序员离不开这个,越早解决越好。”最终,我们成功定位问题,完??成系统更新,解决了大家的燃眉之急。群里的开发者主动发红包感谢他。顾勇很是感动,然后拒绝了他:“应该的,不能收红包。”对于PHP开发者来说,Composer是不可或缺的依赖包管理工具。存放Composer依赖包的Packagist,经常会因为网络问题让国内的开发者头疼。国内开发者通常安装依赖很慢,或者超时安装失败,但是没有稳定的镜像服务可以使用。Packagist鼓励开发者创建镜像,但目前的镜像也不稳定且不可靠。推出阿里云Composer镜像今年7月,阿里云提供了Packagist/Composer全量镜像服务。其秒级同步能力、快速稳定的下载服务、页面动态数据展示,获得了开发者的一致好评。阿里云Composer镜像升级从11月16日开始,由于Composer镜像时断时续无法访问,不少网友反映通过阿里云钉钉服务群无法访问阿里云镜像,主要是zlib_decode和404错误。在测试其他镜像进行对比时,发现其他镜像也存在这种情况。收到反馈后,我们第一时间排查问题:问题定位:阿里工程师立即查看系统状态和日志,未发现异常。初步怀疑是CDN接入层因为接收国际网延迟不可用。验证:阿里工程师将同样的数据回传到国内的Bucket,已经多次多地域测试成功。坚决升级:以前偶尔遇到这种问题,都当成正常现象处理。不过,这一次时间持续时间长,影响范围广。回家。现有Packagist镜像的已知问题1)同步数据不是Packagist根数据。事实上,官方根数据并没有对外公开,??开发者通常访问的数据是镜像,甚至是镜像的镜像。当客户端发起请求时,请求会被官方DNS定向到其他镜像站点,而这些镜像数据和根数据之间已经存在延迟。但由于国际网络或系统设计原因,第一次出现官方镜像站点和根数据不同步数小时的情况。2)代码包dist不处理。大多数依赖包的源码都存放在github和gitlab上。由于网络问题,用户的下载速度会变慢,甚至下载失败。这也是镜像站点需要注意的。一般镜像只提供元数据(包数据)。比如官方推荐的Webysther的镜像代码镜像同步系统是没有处理dist的。3)本地文件存储。目前已知的其他镜像系统将文件存储在本地,或者至少在上传之前存储在本地。这样不仅消耗了大量的本地磁盘空间,而且对系统的最大子目录也有限制,会造成系统致命的瓶颈。优化版使用的软连接方案也会随着包的无限增长而需要重构。4)单进程,性能差,消耗大量CPU和内存资源。而且数据处理时间长,更新速度慢。系统的设计使得无法分配任务,同步间隔越长,同步时间越频繁。5)没有数据错误统计,官方源数据有错误,也需要直观展示,让开发者了解情况。6)系统同步状态,数据不可视化,是否更新了镜像?什么时候更新?今天更新了多少?下一次更新是什么时候?这些数据开发者并不知道。阿里云镜像的优势阿里云镜像架构的核心目标是实时、快速读取、稳定、可移植、可扩展、数据自愈能力。那么阿里云镜像和其他镜像有什么区别呢?阿里云镜像是如何实现秒级同步的?官方合作在数据方面,阿里云与Packagist正式合作。与Packagist沟通后,阿里云已经在距离官方根数据最近的城市节点部署了服务器。同时,阿里云的服务器IP地址加入了Packagist白名单,允许直接频繁访问其根数据(Meta)。系统获取并解析Meta后,从代码仓库下载源码压缩包,然后通过阿里云洛神网络无限带宽将数据传回国内,保证国内用户及时获取最新数据并最大限度地快速地进行。开发者使用Composer安装依赖数据,都是镜像,甚至是镜像的镜像。比如新加坡的官方镜像几个小时都没有更新几次,以此为镜像源的镜像站点就无法为开发者提供正常的服务。实时阿里云实时同步源数据对于以下场景的用户具有重要意义:1.急需更新补丁依赖的用户。当发现某个依赖包有bug时,用户往往需要在修复后第一时间升级更新。镜像同步越及时,服务越稳定,用户补丁修复越早,止损也越及时。2.用于检查依赖包发布状态的包开发者。对于包开发者来说,发布包后,可以第一时间查看发布状态,并通过安装命令验证作品的可用性。阿里云自主研发的自研高性能系统同步系统,Golang编写,使用Redis作为任务队列,心跳协程分发更新的数据文件到任务队列,30个协程分工获取数据并发送回到国内OSS。这意味着要同步的数据不再是单个进程一个一个按顺序传输,而是多个协程,甚至是多台机器上的多个协程协同工作,大大缩短了同步时间。仅分发有效任务。在任务分配机制中,任务是不重复的。由于内存会记录已经成功处理的任务和已经分发的任务,不会分发旧文件,不会释放相同的任务,避免了无效和重复的工作,大大减少了工作量和延迟。重试机制系统有数据获取错误的重试机制,系统会对因网络问题临时访问错误的源数据和代码包的请求进行重试。文件存储AlibabaCloudComposer完整镜像,依托阿里云强大的OSS存储源数据和代码压缩包,不占用本地磁盘,可以轻松移植和扩展系统,同时避免了最大子目录的问题。错误记录记录并统计官方错误。阿里云在官方记录中记录了一些错误,方便内部随时排查,也可以更准确的了解Packagist的情况。未通过自我修复成功处理的任务不会记录下来,将在下一次同步时以非常短的间隔修复。使用重试修复执行不正确的任务。如需手动修复,只需删除对应的KEY,系统即可重新执行并更新状态。CDN支持外部镜像数据,对接阿里云全国CDN节点。阿里云强大的网络基础设施,为开发者提供如丝般顺畅的用户体验。状态数据可视化镜像系统的数据状态可视化。在AlibabaCloudComposer全量镜像官方页面,为开发者动态展示Packagist上次更新时间、阿里云同步耗时、CDN下次刷新时间、系统同步状态和数据。“我知道我知道的。”免费全量镜像站,开发者福音。阿里巴巴镜像站的历史可以追溯到2011年,从最初的阿里巴巴内部需求,扩展到为更多开发者提供免费资源,以提供更快更稳定的镜像。资源。从最初的几款设备,发展成为涵盖主流语言和操作系统的全镜像站。而且,在这个过程中,我们一直坚持免费为开发者提供镜像资源,不断追求更快更稳定的服务。目前阿里云镜像站不仅提供Centos、Ubuntu、Fedora、ArchLinux、Deepin等10多个发行版的软件安装源和ISO下载服务,还提供各种开发语言的包管理镜像服务例如Python和Php,以及nvidia-cuda、homebrew、kubernetes等10多个垂直仓库的镜像服务。包文件下载量每月超过7亿次。国内镜像做的是将所有的安装包和元数据缓存到自己的服务器上,通过国内CDN加速实现Composer的require/install/update操作,达到最快的速度。阿里云的PHPComposer完整镜像可以实现与官方PHPPackagist的实时同步。通过自主研发的图像同步系统,实现多方协同同步和数据自愈能力。在保证快速同步的同时,还能快速修复网络问题。不稳定导致的数据错误。最后,欢迎在留言区分享你的经验。本文作者:顾勇阅读原文文字来自阿里云合作伙伴“阿里科技”。如需转载,请联系原作者。