『后台公论』卷首:何谓后台?
我们整天说着前端,客户端,后台。到底什么才是后台?
曾经和某网友聊天:
你已添加了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的缺点才得以焕发新生?这样的问题没有答案。“是耶非耶,化为飞蝶”。唯一可以肯定的是,后台技术在润物无声中不停的发展,进步。