编者按:本文来自微信公众号“将门创投”(ID:thejiangmen),来源:hackernoon,编译:Tom R,36氪经授权发布。
我们每天打开手机和网页,淘宝、百度、微信还有很多app和网站,都能看到精彩纷呈的用户界面。但很少有人知道他们的背后,是被称作后端的技术在进行支撑,包括网络、数据库、响应等等很多方面的内容。
如果你哪天听到了一堆如API、数据库、Json的词语中已经云里雾里了...那就和我们一起来了解下服务器端的相关知识,看看手机的后面到底藏着何方神圣...
当你用手机点开一个APP,是不是每次用APP都感觉很爽的样子啊?其实我们把app称作是前端,它的主要功能之一是提供流畅舒适的用户体验,但是要实现真正的功能,一个app是不够的。
让我们一起来做个试验,比如就拿即时通信app来说吧,你给我的手机发了一条信息但是我关机了,发完后你关上手机我打开手机却发现能收到你的信息。这不仅仅是app能够做到的,在你我手机之间一定还有其他的东西在默默的奉献着。
这就是后端,服务器!
简单来说,服务器就是一台一只联网并运行着服务程序(支持各种app、网页、API)的电脑。
服务器有两大功能:
存储数据
促进(便捷)通信
那么刚刚的例子里,你的app其实是将信息发送给了服务器,服务器发现我的手机没有开机(不在线)就将信息暂存(也许是永久)下来。当服务器监测到我的手机打开app上线的时候,就会将这段时间的信息都发到我的app上来,这样就不会漏接信息啦。
可以说服务器是app的温暖港湾。
当需要数据或者信息的时候,app都会通过互联网向服务器发起请求;当一个用户通过app希望联系到另一个用户的时候,服务器就在中间起到了牵线搭桥,方便通信的作用。
所以你觉得蒙圈的服务器、后端和API其实都可以理解成相似相近的东西。
服务器的首要职责是存储数据。没有数据几乎就没有其所支撑的一切功能和服务了。
存储的数据包括像音视频、照片、文档一类的文件,也包括用户的信息和使用数据等。服务器一般利用结构化的方式存储数据,以便app可以方便的进行读写;
让我们来看看上面两个图,服务器的数据存储很像一系列的电子表格。例如需要存储用户的信息,和登录的认证信息以便运行登录和授权。想象一下我们的外卖app,服务器中需要存储每一个美食商家的相关信息就像上图中一样,用户就可以在前端按照不同的分类策略来浏览所需的商家(按价格、远近排序等等)。
同时,服务器还需要存储信息之间的相关性,例如用户是否喜欢某一家餐馆的某一道菜品,或者某一用户喜欢的所有餐馆,以及同类型的餐馆或美食。这样就可以针对性的为用户推荐相似的美食了。
有了这些信息后,app就可以回答很多用户的问题,使得公司可以更加了解用户、更好的服务客户:
有多少人喜欢这家餐厅呢?
这位用户喜欢哪一类的餐厅?
用户A和用户B都喜欢那种餐厅呢?
所有的这些都被存储在数据库(database)中。虽然数据库有各种各样不同的类型,但是他们都具有以的共通特征:
存储信息
存储信息间的关系
可以响应不同的信息问询(这就可以方便客户提交每一种不同信息请求的响应)
每一种数据库类型都有自己的优缺点,但是如果别人告和你讲“SQL”、“MongoDB”,“CouchDB”,“Redis”这些词,那么他都是在说数据,只要把握上面的三点就不会尬聊了。
Stackoverflow统计的各类数据库使用情况
https://www.eversql.com/most-popular-databases-in-2017-according-to-stackoverflow-survey/
https://insights.stackoverflow.com/survey/2017
服务器另一个重要的作用是与app以及其他服务器间进行高效的通信。app在工作时需要与服务器进行频繁的通信。
例如你要搜索附近好吃的餐馆,你的搜索信息就会由app提交至服务器,服务器检索数据库内的相关信息后响应app的请求,将相关的信息返回给app,这样你就能看到搜索到的餐厅了。
如果是个其他的用户发送信息的话,你的app会将信息提交到服务器,服务器根据用户ID判断信息需要分发的地址,随后将信息发到你朋友的app上,app弹出消息提醒用户(当然,如果不在线的话服务器会对信息进行保存,随后发出)
服务器为app提供了一个可以调用的接口——API,其中封装了各种app需要的功能和服务。
通信的本质是数据的传输,在服务器的范畴主要使用两种主要的格式,XML和JSON,如下图所示:
其中的“<>”、“{}[]”符号是引导计算机进行有效读取的标志。
虽然看起来这样的格式觉得有点懵,但是对于计算机来说确十分便捷。需要记住,服务器、手机都是一台台计算机。手机上app处理用户输入的文字、声音、图像,随后会输出图像、声音等信息。手机上的app主要用于用户交互,输入输出都十分人性化,不需要我们自己去读取上面难懂的格式。但计算机并不知道人类在说什么,所以需要将信息转换成特定的格式,让计算机之间可以互相理解并高效地通信,这就是上面这些格式的作用。
和手机app一样,服务器也需要app才能够运转。不同的是服务器使用的是服务器端的框架,主要有Ruby on Rails,PHP,ASP.NET,Java以及Node.js等流行的框架为服务器构建响应的程序和应用。
构建应用后一般会有一个接口来调用这些应用,这一接口便是API(Application Program Interface应用程序接口)。手机上的app在运行过程中会不断的调用各种API来完成任务。
让我们来完整的看一下app是如何工作的。
我们首先需要明白API是app调用程序的接口,数据库存储了所有的信息,服务器应用则是调度、处理所有请求、信息、响应的中枢。服务器应用通过API监听app传来的请求并进行响应,同时回传数据库中的检索信息已经处理结果。
当你登录时,app会将你的登录信息通过API传到服务器,服务器应用就会与数据库中的信息进行比对。随后根据比对结果通过API向app回传相应的信息(登录成功、登录失败:用户错误、用户不存在等等),这时你就会在手机上看到相应的变化了。
刚刚我们说过服务器也是一台电脑,那么就是需要什么样的电脑呢?很多人提到服务器便会想到成千上万的机房、黑乎乎的机柜、严热的空气,以及荧光闪烁的指示灯。
很多大公司有自己的服务器机房,向Facebook和Google曾经(现在也是)在世界各地构建了许多个自己地机房安放服务器。由于需要向全球亿万人提供服务,需要强大的数据中心的服务器。搭建自己的服务器的成本更低、提供的用户体验更好。
但是如今开发者们拥有了新的选择,云服务的性能不断提升价格也日益低廉。例如亚马逊AWS,微软的Azure以及Digital Ocean还有很多其他云服务商都提供所谓的虚拟服务器。
开发者无需购买任何的硬件,就可以通过这些服务商提供的服务器来运行自己的应用,你需要做的就是提交自己的服务器应用,设置相应的参数即可(当然还需要交费呐)。
最近还出现了叫做一些后端即服务(BaaS)提供商,开发者不需要写复杂的服务器应用就可以轻松部署自己的后端了。
是不是所有的app都需要后端?
大多数app是的。需要服务器存储数据为用户提供更好的服务(公司也会收集用户数据啥的)。但确实有一些app可以不需要后端。有一个简单的方法来判断:
断开所有网络连接后,如果app的功能还能正常使用的话说明它是可以不用后端的(比如说手机里的相机,记事本等等)。
看到这里,你应该对事情的来龙去脉比较清楚了吧,下次再遇到搞后端的朋友就可以开心的聊天啦~~
最后附上一幅服务器(后端)的简图再回味一下。