6

APP/Web后端架构梳理

 2 years ago
source link: http://kevinnan.org.cn/index.php/archives/687/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一直以来都很疑惑移动端APP是怎么根后端服务进行通信的,也不断产生了以下这些问题:

  • Web后端开发和APP后端开发有什么区别?
  • 后端开发常见的哪些HTTP服务器、Web服务器、应用服务器有什么区别?各自又是怎样协作的?
  • APP前端和后端是怎么进行通信的,后端一定要支持网络并发连接,这需要用到I/O多路复用,需要自己实现吗?
  • 后端框架和后端服务器之间的关系

2、HTTP服务器、Web服务器、应用服务器

狭义上Web服务器只负责处理HTTP协议,用于处理静态页面的内容。而动态内容需要通过WSGI接口交给应用服务器去处理。

Web服务器最常见的是Nginx和Apache。

要理解什么是Web服务器,首先要理解什么是Web。Web可以简单理解为你看到的HTML页面,其中包含了Web的数据元素,而处理这些数据的服务器叫做Web服务器。它处理的信息包括:session、request、response、HTML、JS、CSS等。同时,这些数据都可以用HTTP协议进行处理,因此Web服务器也可以被叫做HTTP服务器。

接下来讨论之前提到的WSGI和应用服务器。

应用服务器处理的是非常规Web页面,它处理动态数据的请求。以Java为例,你自己学习Java SE写的代码只能运行在你的本地环境,但如果你想把代码/项目部署在服务器上供其他人访问,你需要找一个容器来运行你的代码,而这里的容器指的就是应用服务器,Java最常用的应用服务器是Apache开源的Tomcat服务器。当我们将代码部署到Tomcat应用服务器上,用户该怎么访问呢?是直接访问应用服务器吗?不是的,这时候需要用到HTTP服务器(以Nginx为例),Nginx将HTTP请求都收集起来,然后将这些动态请求向对应的应用服务器做转发。 比如Nginx收到了1w个请求,其中有3k个请求要求请求Tomcat上的某个接口,那么Nginx服务器直接将这个请求通过WSGI转发给应用服务器。应用服务器监听的端口收到这个请求之后,把HTTP的数据取出来做处理,最终将处理好的信息发给Nginx,再由Nginx返回给用户。

还有一个问题,用户直接和应用服务器通信不好吗,为什么还要经过一层HTTP服务器?从功能实现上来说是可以的,应用服务器一般也集成了HTTP服务器的功能,但由于在实际的生产环境中还需考虑到负载均衡、cdn加速等问题,我们需要一个HTTP服务器暴露在整个后端的最外层,对接收的请求进行转发。

WSGI(Web服务器网关接口)架起了Nginx这种静态服务器与应用服务器之间桥梁。

3、Web后端开发和APP后端开发区别与联系

首先给出结论:Web后端开发和APP后端开发基本过程上是一样的,只不过二者返回的数据不一样。

浏览器访问Web后端返回的是一个HTML页面,以及少部分json数据。而一般APP后台开发大部分直接传输json格式数据。还有一个不同点在于登录验证和数据加密,一般Web是使用session验证登录状态,而APP则使用token来验证登录状态(token是自己定义一个和用户ID相关的加密字符串,传入后台后从数据库查询用户信息)。如果对数据的安全性要求较高,APP传输数据可能会对数据进行加密,而Web一般没有加密这一步而是使用HTTPS。

4、APP和后端如何进行通信

后端设计API,然后将API的URI提供给客户端,APP构造HTTP请求访问API即可。API的描述方式有很多种,比如REST。

【1】app后台开发入门

【2】关于Nginx+Gunicorn+uwsgi+后端框架到app架构梳理和思考

【3】#凌乱了# python web中web框架、web服务器、http服务器、应用服务器、WSGI容器傻傻分不清楚!

【4】常用 J2EE 应用服务器比较

【5】[译] 作为一个 Python 开发者需要知道的服务器知识


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK