近些年互联网技术发展相当快,JS已经升级到ES10,各种前端框架层出不穷,然而我的技术理念还停留在2014年左右……
简单看了下,个人理解不一定正确。CDN已不再是传统的反向代理,而是在CDN服务器上直接运行Serverless代码。
【过去的模式】
中国访客>CDN中国节点>服务器0(程序+数据库+文件)
美国访客>CDN美国节点>服务器0(程序+数据库+文件)
【未来的模式】
中国访客>ServerlessCDN中国节点(程序)>服务器A(数据库)+服务器B1(中国文件分发节点)
美国访客>ServerlessCDN美国节点(程序)>服务器A(数据库)+服务器B2(美国文件分发节点)
有些Serverless可以走不同数据库,但这样只适合读取,写入的话还是要放入同一个数据库才靠谱。
但是我对这个新模式还是有些质疑的,除了上面说的同步性,整个网络系统的复杂度也有所提升。
抛开这两点不论,Serverless模式实际效率提升能有多少?
网站基本构成就是程序、数据和文件。文件的话,多地分发和CDN缓存本身效果就差不多,不放入讨论范畴。
Serverless把程序放在前端,效率肯定比服务器执行再反代要高得多,这点应该加分。但问题就来了,Serverless支持的语言一般都是Node.js、Go这些,我却只会PHP[em_24]。如果自己组建CDN,不同地区访问不同服务器,每台都部署相同的PHP程序,原理相同,可以替代。
涉及到的另一个重要问题是数据库,动态程序都是要数据库支持的,如上所述写入都要进入同一个数据库。多个前端服务器写入同一个数据库,效率就和CDN没啥差别了,而且还可能出现连接失败。程序和数据库放在同一台主机时,效率是就会好很多。
但对于时效性不强的应用,如果在数据库读取上进行缓存,隔一段时间更新一次各地数据,那么性能就会高很多了。但要考虑到高时效性,数据源必须要统一,那这点相比传统的网站模式就没有优势了。