雷索纳斯数据站-从构思到失败

雷索纳斯数据站-从构思到失败

其实之前已经实现过用next.js写的,但是性能很差,也看了看“科伦巴商会”的实现,可能用的是vercel KV吧,没仔细看,总之那个网站体验是很流畅的

就想着写写后端和学学AWS,正好这也是我一直的愿望了,一直在写next.js有点没意思

这篇文章将作为我将往bilibili发的视频《雷索纳斯,AWS,Terraform,k8s,微服务漫谈 - 基础篇》的原稿


这是一个和雷索纳斯没什么关系的视频,但是我接触AWS云服务的契机就是雷索纳斯,同时我也想蹭点流量,就在标题里面加上了。

这是一个为不懂云服务,AWS,Terraform,kubernetes的人准备的简明介绍。看完此视频,你可能会对这一串英文字母和网络有更深刻的理解。

但我也只是初探门道,说是介绍,可能还是想总结一下自己的经验,然后和大家讨论讨论。


首先,我们要有一台服务器。


首先让我们来看一下网络基础,这对理解本视频非常重要。

你可能已经知道,当你请求(request)一个网站,例如kud.me时,一种叫做DNS的神奇服务会把网址(域名)转换成一串数字,也就是ip地址。你的请求最终会被送到这个ip地址所对应的服务器上。

这句话就已经包含了太多信息了,整个网络大体上就是这样的,那么问题来了,谁掌握着ip地址和服务器?咱们可没有这种东西吧?

答案是:域名,服务器等一系列的“网络基础设施”,正是由AWS这样的云服务商提供的。如果我们愿意交钱,就可以从AWS这样的云服务商上面购买域名和服务器,自己搭建网站。国内比较有名的应该是阿里云。

让我们再对刚才的那段话提几个问题。

一:我能不能参与DNS这一个环节? 很明显,只有域名(domain)的所有者才能对自己的域名进行DNS的设定,我拥有这kud.me这个域名,所以可以设置让kud.me以及api.kud.me都指向bilibili.com,只要这样

二:DNS服务由谁来提供? DNS服务由DNS服务商提供,AWS里面和域名以及DNS有关的服务叫做Route 53,这个名字有一个很具有程序员意味的意义在里面。感兴趣的可以查查看。

说回正题,DNS是将域名转化成ip地址,这全世界数以亿计的域名和ip地址的对应关系,自然不是存在我们的电脑上的。所以,DNS服务其实是我们向专门的DNS服务器发出请求,让DNS服务器告诉我们向访问的域名背后的ip地址是什么。

我们伟大的AWS当然也提供DNS服务,伟大的AWS是有DNS服务器的。虽然我的域名kud.me的提供商当然也有自己的DNS服务器,但是我也可以不用它自带的转而用AWS Route 53的服务,就是要交钱罢了。

第二个问题:一定是ip地址对应的服务器给我发送响应(response)吗? 看似如此,实则不然。ip地址对应的服务器A,很大几率上只是一个“出入口”,请求抵达服务器后,可能会被转发给A所在的内网的其他服务器B上,由B生成响应后发送给A,再由A返回给你。

你可能要问为什么不直接发送给B,然后B直接响应。第一个原因是因为外部ip地址具有有限性,我们不可能给每一个服务器都配置一个可以访问的外部ip地址。

第二个原因,打个比方来说,我们可以把拥有外部ip地址的服务器当作门,可以从十扇门进出以及只能从一扇门进出,后者更利于管理。想一想这两种场景如果有多扇门:

  • 假如说有很多坏人想进来,我们可能要给每一个门都装一个门禁,这是非常繁琐的。
  • 假如说多扇门后面所提供的服务是一样的,那么可能会出现某一扇门涌入很多用户,而其他门没什么人的情况。

如果只有一扇门,那么就可以安装统一的门禁,至于第二个问题,也可以先让用户进来然后再把它们平均扔到每一个服务器上。

可能扯的有点远了,让我们回过头来看AWS。

AWS当然提供所谓的服务器,称为EC2实例(instances),

虽然很想直接切入主题,但是先让我来说一下背景故事。

我在几周前做了一个十分简陋的雷索纳斯的一个查价查路线的网站,整个网站无论前端还是后端都是用Next.js写的,数据库用的是免费的Supabase。

做完之后我发现,整个网站的响应时间非常慢,大概有5s的等待才能将主页加载。这是完全不可接受的,问题出在哪里呢?我个人认为问题出在客户端-服务器-数据库之间的延迟,尤其是服务器-数据库之间的延迟。