「AI开发小程序教程」五、服务器的那点事
上篇开发的小程序,数据是存储在手机本地的,用户更换手机或者重新安装微信之类的操作,都会丢失原来的数据。怎么解决这个问题呢?那就是把数据存到云端(服务器)。
当然,服务器不是小程序必须的,如果你的小程序根本不涉及用户数据的存储,比如:
- 只是展示一些静态数据或者有限的数据(如吃饭推荐)
- 通过其他服务查询一些数据展示给用户(比如天气查询)
- 提供一些计算工具实时计算(如贷款计算器、天数计算器、亲戚计算器等)
- 随机生成类(如生成学生计算题)
但一旦涉及到用户自己的数据存储,你就需要考虑是否要给用户完美的体验了,比如:
- 日记、记账、纪念日记录等
- 在线商城、论坛、资讯
- 还有很多很多,其实我们常用的大部分应用都是需要服务器的,微信也是
所以这篇,我们先来聊聊服务器的那点事,看看你之前觉得神奇的东西,是不是纸老虎。看完本文,你可以达到大多数普通程序员的认知水平。
什么是「云」&「服务器」
你一定听说过「云」这个字,云端存储、云上贵州、阿里云、百度云、腾讯云、华为云等等。
“云计算”最早诞生于1996年,并在2006年由谷歌正式推向大众视野。
这个云可不是天上的那个云,听起来好像数据上天了一样,其实不是,数据有可能只是在传输的时候上天了(5G之类的无线传输),最终还是存储在了地球上某处的一台服务器上。
啥是服务器?你可以简单地认为是一台电脑。
为啥用服务器?
其实,你家里的电脑,如果一直开着并接入到互联网中,也可以是一个服务器。你可以在电脑上开放一个服务给互联网上的其他人用,估计互联网早期就是这样。
但现在,我们一般是用专业的服务器来做这件事。通常,很多服务器放置在一个屋子里(又称机房),需要耗费很多电(要24小时不断电)、产生很多热(需要开空调)、产生很多噪音(所以一般不会在居民区),但是它的本质,就是电脑。
怎么获得服务器?
在阿里云之类的各种云没像现在这么被人熟知时,就是向有大型机房的服务器商租一个服务器。
如今你可以选择阿里云、腾讯云等大厂提供的云服务器(或者使用更低成本的轻量服务器)。
你甚至可以租用一个容器:一个大楼(电脑)中的一个小房间,来运行你的服务程序。
在AI场景下,你还可以租用算力(显卡、GPU)。
与服务器怎么交流?
我们日常常用的与服务器交互的架构有两种:
- B/S架构:即浏览器(Browser) - 服务器(Server),当你在电脑或手机的浏览器中浏览网站时,就是这种方式。多年前,智能手机还没有兴起的时候,都是用这种方式上网的。
- C/S架构:即客户端(Client) - 服务器(Server),手机里安装的那些APP,都是客户端。随着智能手机的发展,现在我们依赖手机远远多于电脑了。
不过有时候,B/S和C/S可以使用同一种交流技术,比如HTTP,就是浏览网页时用的。微信小程序往往是通过这种方式来从你的服务器上获取数据。
我们以浏览百度为例,来看一下,当你在浏览器里输入www.baidu.com 之后,按下回车键之后,发生了什么?
首先百度网站就在那里,你访问或者不访问,他都在那里,我们先看百度做了什么:
IP地址
首先,百度有台电脑(服务器),上面放了百度的网页。这台电脑联网了,他有一个IP地址(就是他在互联网上的地址/门牌号),你可以通过这个地址找到他。
所以互联网上的每一台电脑都需要有个地址,这个地址由32位长度的,每位都是由二进制的0或1组成。我们常见的IP地址的表示192.168.1.1、111.63.65.247之类的,其实是每8个为一组,分为了4组,换算过来的。所以能表示的地址有限,大约42亿个地址,并且大部分都是美国的,因为互联网是人家发明的,分给中国的其实都没多少。更何况随着手机之类的设备变多,这些地址肯定是不够用的。所以后来又出了一个IPv6的新版,新版的地址非常多,可以给地球上每一粒沙子一个地址。目前,这两种地址都在使用。
现在你知道,百度的电脑可以通过这个数字找到。但是问题来了,要是跟以前的电话本一样记录这些地址,在访问百度时,查一下本,看看地址是啥;访问腾讯时,又要查一查腾讯的地址是啥,不太现实。况且一开始我们也得知道这个地址,百度一个个告诉大家吗?要是地址换了,又怎么办?所以,我们自己记地址是绝对不行的。
域名
这个时候,域名(domain name)出现了,域名其实是专门的服务商来提供的地址薄服务的,.com是一个服务商,.cn是中国的服务商,.net也是一个服务商,还有些不常见的.xyz、.club等等,但他们都是顶级域名服务商,他们提供的服务是把XXX.com这样的昵称,查一下地址,然后给你。
百度说,用户记不住我们的地址啊,我们找.com购买一个好记的昵称吧,就用「众里寻她千百度」baidu 作为我们的昵称吧,所以最终就是baidu.com,然后告诉服务商,如果有人问baidu.com的地址是啥,你就把我们电脑的地址给他。然后我们告诉用户我们的昵称就好了,他们记得住昵称。
域名服务器
所以电脑是怎么知道要问谁要呢?
- 一般来说,电脑(或路由器)上会配置一个DNS(Domain Name System)服务器地址,如8.8.8.8,电脑需要查地址的时候,先找他。
- 他如果不知道,就会去找根服务器。他自己早就记了根服务器的地址。
- 根服务器会告诉他.com顶级域名服务器的地址,他记下来,再去找.com服务器。
- .com服务器告诉他,你去找一个叫baidu.com的权威服务器,他记下来,再去找baidu.com权威服务器。
- baidu.com权威服务器告诉他,地址是111.63.65.247,他记下来,并且告诉我们的电脑。
这个一层一层查找的过程,叫做DNS解析。
你可以看到,询问这个过程要经过好多服务器,速度很慢。难道每一次访问baidu.com都需要这样吗?当然不是,8.8.8.8问了一次之后,已经知道了,他记下来了,在一定的时间内,他会直接说:知道。这种叫做缓存。
除此之外,电脑上可能运行了多个服务,怎么知道用户需要的是哪个服务呢?这里实际上有个端口的概念。端口是个数字,相当于一个有编号的门。
当访问http://www.baidu.com时,实际上使用了默认的80,即http://www.baidu.com:80。
当访问https://www.baidu.com时,实际上使用了默认的443,即http://www.baidu.com:443。
浏览器为了使用的方便,不需要我们手动加上80和443,http默认就是80,https默认就是443。
而门(端口)的背后,有一个人(程序)那里等着接待来客。
现在我们是服务器
所以,小程序在需要后端存储用户数据时,我们要提前做的
- 买一个服务器,服务器自然有一个IP
- 买一个域名,比如向.com买一个域名比如 abc.com,并告诉如果有人问 app(自己定).abc.com ,就告诉他IP,这个过程叫域名解析
- 在服务器上运行一个程序,这个程序看着80号端口有没有数据过来
会在后续文章中详细讲解怎么操作。
省略的部分
当然,从我们的电脑到百度的服务器,中间还要有路由器、光猫、网线、复杂的网络、各种服务器,最终才能到百度的服务器。这里也很复杂,不过你可以不关心这些,总之就是数据从网线或者信号塔传输了很久,走过了很多路由器和服务器,最终到了百度服务器就行了。
