乐趣区

『后台公论』卷首:何谓后台?

我们整天说着前端,客户端,后台。到底什么才是后台?
曾经和某网友聊天:
你已添加了 XXX,现在可以开始聊天了。
我:你好 XXX:你也好我:你是做什么的呀?XXX:我在酒吧上班,做前台的。我:哦哦,那咱俩差不多,我做后台的。前台后台
前台(前端)后台,在英语中即:Front-End,Back-End。广义上的前端包括客户端(PC、Android、IOS 等),后台即通常意义上的 Server。没错,就是在互联网诞生之初即存在的 C / S 架构。服务的提供方成为 Server,一般是一个偏中心化的服务集群。客户端 Client 为用户接入服务的控制重点。C/ S 架构有明显的主次之分,这与后来产生各类种子(BT、电驴)下载技术的 P2P 对等网络相对应。在 P2P 网络中不区分 C 或 S,每个节点既是 C 也是 S,这便是对等(Peer)网络。
言归正传,后台一词描述的还是 Server 这一概念,不过由于网络规模的增大,数据量的攀升,Server 的后台架构也变得越来越复杂,分层越来越多,早已不是简单 Server 一词能够囊括的了。本专栏文章始于 C ++ 后台架构,却又不仅限于此,会穿插对比各语言的通信模型以及语言无关的各类概念。
这里的后台开发指的就是 Linux 上的 C ++ 编程。首先澄清一点,很多人(比如我以前)对后台开发的误解,通常人们说前端后台,后台就马上联想到 web 后台,java、php 和各种 web 框架横飞的既视感。所以大学的时候,当我看到腾讯招聘后台工程师,技能要求是 C ++ 也满是狐疑。
白马非马
其实 web 后台属于后台,但后台却不只有 web 后台。两者应该是包含与被包含的关系。提到后台,通信是永远的主题。通常我们谈到 Python 的 Django,PHP 的 Think PHP、Yii 框架所涉及到的开发知识,都是聚焦于展现和逻辑。而屏蔽了底层通信的细节,这是框架之利。但也削弱了开发者对于后台达到一切尽在掌握的一些可能性。
从网络协议的角度分析,web 后台聚焦的是 HTTP。web 后台可以看作是一个后台架构中最靠前的东西,它解析了 HTTP 请求,然后层层转发给了后面整个分布式系统的许多组件,并调用他们的服务。这一层可被称之为“接入层”,C++ 语言进行接入层的实现,一般就是通过 CGI 了,CGI 这被教科书都写进历史的技术,相信很多人都不齿为用。但其实不管是 Java 的 Servlet,C# 的 WCF,或是 Python 的 WSGI,Ruby 的 Rack 多多少少都是受 CGI 影响而演化而来。行远自迩,学习了解 CGI,并不是浪费时间。
除了 HTTP,企业内部主机之间绝大部分是自定义协议,而这些协议多半是在 TCP 或 UDP 之上实现应用层协议。这个层面上来说 C ++ 后台关注的是 socket 编程,由于 C ++ 本身并没有官方的 Socket 通信的库,其实这里使用的一般也就是 Linux C 语言的网络编程。C 和 C ++ 各自的拥趸们,争与不争,它们就在那里。
天下大同
编程语言很重要,一门语言通常意味着的是一个技术栈,比如 C ++ 的技术架构的后台和 Java 的后台,相信绝不仅仅是语言的不同,各种组件以及编程的模式都差别很大。但其实时代发展到如今,编程语言之间的差异性却又不那么重要了。在当代规模的大型网络的架构中,绝不仅仅是通过某门语言自身的特效就能解决性能瓶颈的,对于架构的演进,逐渐趋于大同。
与前端技术的百花齐放不同,后端技术相对落寞,甚至不乏炒冷饭的嫌疑。在 Web Service 逐渐式微之后,各式 RPC 又被炒了起来。在豪情万丈的 CORBA 在新世纪由于 J2EE 的出现而逐渐雪藏多年之后,Facebook 推出的 RPC 框架 Thrift 与 CORBA 相比又是何其相似。当然,炒冷饭本身不是目的,不管黑猫白猫,能抓老鼠的就是好猫。旧技术在不停推陈出新后确实能焕发出新的生命力。
时光荏苒,新概念层出不穷。不管是偏向于 Web 层的概念 Restful API 还是相对繁重的分布式概念 SOA,都在趋向于接口的解耦和服务化,通过组合不同服务即可快速搭建出新业务。回想起 WS(Web Service),让人唏嘘。理论上讲 WS 属于 SOA,但最终走向衰落。到底是 WS 生不逢时,还是新时代服务化的概念在因为弥补了 WS 的缺点才得以焕发新生?这样的问题没有答案。“是耶非耶,化为飞蝶”。唯一可以肯定的是,后台技术在润物无声中不停的发展,进步。

退出移动版