很多时候在引用前端库 cdn 的时候,会担心这个前端库什么时候挂掉。想做一个东西,监测并自动寻找最优的前端库。

2019-11-15 11:09:19 +08:00
 Jackyxiaoc
最近在做一个项目的时候发现,引用了不同的前端库对网页的速度影响很大。一个不小心前端库挂掉了,所有页面就废了还得冲上去换。

打算做一个原理是 A 域名—自动跳转—B/C/D……等等前端库地址的。
自动寻找速度最快的。保证了前端库的高可用和高速。
如果有这个东西,大家会用吗?
7840 次点击
所在节点    奇思妙想
62 条回复
jeremaihloo
2019-11-15 11:21:01 +08:00
首先,你要做一个什么?程序?如果是个程序,你这个程序的并发怎么解决?如果你这个程序挂了呢?你是不是要做一个程序监控你这个程序?那如果监控你这个程序的程序挂了呢?

前端库放在 CDN 上是最靠谱的了吧,CDN 都不靠谱的话,你其他的也更不靠谱了
lxk11153
2019-11-15 11:21:01 +08:00
前端库挂掉了 和 你做的这个东西挂掉了 有什么区别?
mcfog
2019-11-15 11:22:16 +08:00
这个东西除了天然会慢一次跳转(即使是第二次也不能缓存所以冷热情况下都慢)还有一个具备实用性的前提:你的 A 的基础设施的可用性高于 B/C/D……当中的最大值,地理分布也要优于 B/C/D 或者至少不能差太多,否则相当于为了 0.00 几的不稳定或者跑路的风险而让终端用户每次先绕地球跑过来找你 A 一圈再去 B 或者 C 的当地 CDN

不如做的简单一点就只做可用性检测、统计和警报就行了,比如订阅 B 这家服务中国大陆不可用超过 5 分钟 /C 这家全球任意地点 TTFB 超过 300 毫秒之类的告警(用于应急处理),以及周或者月频率的可用性和速度评测(用于选择)
Jackyxiaoc
2019-11-15 11:28:40 +08:00
@jeremaihloo 感谢您的回复。cdn 库的速度也是不一样的 压力大了某个节点挂了很正常
这个小系统单纯作为转发,压力比 cdn 小得多。不容易挂。


@lxk11153 感谢您的回复。这个东西承受的压力单纯是一个转发,不承受流量。当然比 cdn 稳吧。

@mcfog 感谢您的回复。这个东西除了天然会慢一次跳转,确实是这样,但是有的前端库挂了的时候,不稳定的时候,甚至几秒的加载速度。单纯的告警容易出问题,一挂了就得上去改代码了。A 的可靠性确实要高,不然肯定还不如 cdn。
wunonglin
2019-11-15 11:32:22 +08:00
没有
mcfog
2019-11-15 11:32:49 +08:00
@Jackyxiaoc 如果你的检测和告警质量高,别人足够信任你,就可以做自动化收到你的告警自动更换备用前端库,这样可以做到无性能损耗
stevenkang
2019-11-15 11:35:45 +08:00
cdn x2 吗?

可以考虑给各大 cdn 库做镜像,然后公布检测的健康度,让使用者自行选择。

或者用 DNS 解析(如果可以的话),哪个库稳定你就解析到哪个库上去
Jackyxiaoc
2019-11-15 11:38:44 +08:00
@mcfog 确实应该从监控一步一步做起。


@stevenkang 不是,只是一个单纯的跳转。如果 A 公共库挂了,就自动引用 B 公共库。
Jackyxiaoc
2019-11-15 11:39:29 +08:00
@mcfog https://unpkg.com/vant@2.1.8/lib/vant.min.js 这个链接为例子,有时候加载 500ms 有时候 1.3s 。每一次都不一样。
wunonglin
2019-11-15 11:47:07 +08:00
@Jackyxiaoc

#9 请问如何解决多运营商,多地域的不同性动态引用。。这得需要投资大量服务器吧,你这东西怎么盈利?还是纯公益?如果你这东西没盈利的话,我如何知道你的服务什么时候“挂”,那这样是不是又要所谓的 CDNx3,一套嵌一套,母猪带胸罩
Jackyxiaoc
2019-11-15 12:10:31 +08:00
@wunonglin 其实原理有点像这个: https://www.superbed.cn/help 单纯的转发并不需要很多服务器...
antscript
2019-11-15 12:12:06 +08:00
虽然这个问题应该是 CDN 供应商考虑的,但提供一个思路供发散,从 DNS 解析入手,域名只用一个,你负责将请求解析到符合要求的 CDN 地址即可,既不需要前端来处理这种情况,也没有缓存的问题。
wunonglin
2019-11-15 12:13:17 +08:00
@Jackyxiaoc #11 可是前段库用 cdn 的意义就是要快速呀,你自己 title 都说了“保证了前端库的高可用和高速”,按你这样转发的话,鱼和熊掌是不能兼得的
ibegyourpardon
2019-11-15 12:13:20 +08:00
你这个更适合作为一个 npm 包,用于前端在构建打包的时候自动检测,并寻找到合适的替换上去。

而不是在上线之后再做个检测替换。

你现在的思路还是不对。
wunonglin
2019-11-15 12:14:42 +08:00
@Jackyxiaoc #11 所以说你想做一个高可用的还是要做一个快速的,或者是你有什么好办法可以两者都兼得的?
Jackyxiaoc
2019-11-15 12:27:28 +08:00
@antscript 感谢,确实是个好办法。

@wunonglin 感谢回复。其实我个人目前测试的结果是头条的库质量最好,然后后台一个排名综合评分。一旦检测失败了就指过去下一个排名的库。

@ibegyourpardon 感谢回复。我学习一下。
wunonglin
2019-11-15 12:36:55 +08:00
@Jackyxiaoc #16 还有个问题不知道你想没想过,每个用户访问 cdn 的效率都是不太一样的,cdn 每个节点也有质量好坏的时候,你怎么解决这个问题?打比方 cloudflare,国外访问快的一批,国内成渣,如果按你排分系统来使用的话,你怎么判断区分用户 ip 的来源和匹配这个 ip 最快的 cdn 供应商
Jackyxiaoc
2019-11-15 12:46:01 +08:00
@wunonglin 这个问题是想过的。网站引用的地址是 abc.com/vant@2.1.8/lib/vant.min.js ——unpkg.com/vant@2.1.8/lib/vant.min.js

我是可以拿到访问这个地址的用户的 ip 的,能区分出国内和国外就好。后台根据一个规则去匹配。当然这个是不能实时判断每个用户的网络情况选最好的 cdn 的,那样做监控的成本太高了。目前这套方案只能保证可用 100%,速度不至于太差。像 www.v2ex.com/t/536934 这种情况出现的时候,不需要满世界改引用。
wunonglin
2019-11-15 12:49:13 +08:00
@Jackyxiaoc #16

我做个假设,0-10 分,10 分最好,0 分最差
[a.com: 10, b.com: 9, ...]

返回 a.com ,用户 A 使用了 a.com ,用户的网络是长城,访问 a.com 质量很差,结论:用户 A 觉得评分不准
返回 a.com ,用户 B 使用了 a.com ,用户的网络是电信,访问 a.com 质量很快,结论:用户 B 觉得评分 ok
返回 a.com ,用户 C 使用了 a.com ,用户的网络是电信,但是 a.com 分配给用户 C 的 ip 拥挤,访问 a.com 质量很差,结论:用户 C 觉得评分不准
等等


如果遇到上面问题的话,你的评分系统如何处理这个状况?假设不能处理的话为什么不直接用 a.com
jin5354
2019-11-15 12:51:15 +08:00
为什么要用 cdn 方式引入前端库。。?
难道不是自己把库打入自己的 bundle 么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX