浅谈软件架构(一)
这个世界上,被人们创造出来的软件架构大概已经有几百种之多了。当然,它们所处的层次,以及应用范围是不同的。本文讨论的是,工作在协议顶层——即应用层,且是机器间联网工作的软件架构。(由于内容荣杂,本文将分多个期次介绍,请读者关注后续博文)
开篇
行文将讨论的软件架构为以下7类:
1. C/S
2. B/S
3. Cluster (HA)
4. Cloud
5. Distributed
6. APNS-like
7. P2P
一,C/S架构。
这个词汇可谓老生常谈了。自高级语言编程在网络应用中一出现就随之诞生了。本文作者也在别的博文中讨论过,请读者参考另一篇博文《CS架构与多进程多线程》。(此处附图一张)
二,B/S架构。
如今的互联网世界,几乎被B/S架构垄断。诸如博客,社交,电商等等都基于B/S搭建。它存在与世界已经三十多年了,从上世纪九十年代开始流行至今,且应用增长速度长期处于暴增状态。就是如今的手机客户端也大多是B/S的功能复制品或是http协议的封装体。可以这么说,B/S就是人们日常离不开的互联网的核心。
接下来,我们从发展历史,以及应用两个方面来叙虽说B/S的传奇故事。
1.发展历史
众所周知,B/S架构指的是浏览器(Browser)/服务器(Server)的工作模型。
说到B/S的历史,首先要来谈谈浏览器。这要追溯到20世纪80年代,互联网之父TimBerners-Lee早期就重点研究Unix平台的浏览器,当然与今天桌面电脑上的浏览器俨然不是一个概念(因为Unix用于服务器,并不善于桌面效果展示)。但那就是早期的浏览器,由于Unix并非家用电脑操作系统,所以并没有被大众所熟知。后来,网景通讯公司联合创始人MarcAndreessen作为合作开发人开发出了第一款流行的桌面浏览器——Netscape 。该浏览器的1.0版本于1994年12月15日发布。在微软捆绑浏览器IE出现之前,前者曾经占据浏览器市场90%份额。Netscape让桌面浏览器走向了流行,也使人们可以更方便地使用互联网带来的福利了。
如上图所示,B/S工作的模型与C/S类似,只不过客户端运行的不再是具有特定功能的客户端软件,而是功能具有公通性的浏览器。换句话说,只要安装了浏览器,就可以访问任何http网站。对于客户而言,使用起来更为简便。同时,浏览器可以显示文字和图片,更为直观地向用户展示效果,使得使用友好性大大加强。同时阅读的视觉官感也非常良好。
可以说,浏览器的发明,带动了互联网世界的一次革命。
浏览器的优势不言而喻,接下来迎来的就是风起云涌的开发热潮,全世界各类浏览器遍地开花。其中比较有名的有,微软IE,Mozilla火狐(firefox),谷歌Chrome,Iceweasel,手机端的UC-Web等等。随着互联网技术的发展,以及网站架设和主页开发语言的进步,互联网的发展进入了它的黄金时期。
如今,我可以做个大胆的假设:只要用过互联网的人,就用过浏览器,也就享受过B/S的恩惠了。
2.应用
说到应用,B/S的应用可谓不胜枚举。还是举几个生活中的例子。大名鼎鼎的社交网站FaceBook,电商法老亚马逊,全球最大互联网公司——谷歌等等,无一不是靠着B/S架构在运转!再看看我神州大地,百度,阿里巴巴,腾讯,新浪,360,京东,苏宁易购,国美在线,以及各类层出不穷的团购网站。这些企业的一个典型特点是,要使用他们的服务,就得打开浏览器。尽管现在他们都推出了手机客户端,那也只是为了方便购物而做的一个封装,其根本技术基础依然是B/S架构。
可以这么说,要让线上服务变得方便,最优先选的方式便是B/S,因为它有一个打败其他一切的优势——简单易用。
浏览器与HTTP服务端通信采用的使HTTP协议(当然现在有更安全的HTTPS协议),它的下层采用的是TCP协议。因此它是一个可靠的通信协议,只要带宽允许,网络状况良好,就能保证良好的上网体验。
服务端,围绕着HTTP服务器而搭建,接收请求的服务进程就是HTTP服务器,它根据请求作出不同的回应。至于服务端实现的功能,由程序猿使用网页脚本语言编程,程序代码作为脚本方式被HTTP服务器调用。服务器在处理完请求之后将结果代码返送给浏览器,由浏览器解释并显示结果。也就是说,在这个工作模型中,浏览器也承担一定的工作,减轻了服务器的压力。如此一来,也能充分利用计算机资源,用户主机承担一部分工作,服务器主要作出响应回馈用户请求结果。也便于开发的模块化设计,服务器调用脚本,浏览器自行解析结果(按照统一协议标准解析),这样不会因为服务器与客户端的操作系统平台不一致而造成请求结果的二义性。
HTTP服务器软件如今已较为成熟,如Apache,Nginx等,其稳定性与速度都较为优良。
另外,在大用户量高并发应用场景中,单一的服务器已难以满足及时响应。因而会在服务端环境搭建HA和负载均衡。 请读者参阅相关文章进一步了解。
本文待续。其他软件架构的说明请参看后续博文。