网络应用程序架构的演进

自从有了计算机,就有了计算机应用程序,而应用程序随着计算机和网络的发展,也不断演进,近距离观察和研究网络应用程序架构的演进历史,然后针对自己所做项目的现状,采用适合的架构,是所有架构师以及程序员的必修课。

下面我们来看,网络应用程序的演进过程:

nT/M架构:终端/主机架构,最早的计算机成本较高,在个人电脑还没有出现之前,所有使用计算机的人,大家共享一个大型的主机,每个人都有一个主机的账号,虽然大型主机从计算机的组成结构上来看,与个人电脑结构区别不大,但那时除了主机管理员以外,个人用户不会直接面对主机,直接面对的只是终端显示器和键盘(那时还没有鼠标),由于终端只处理键盘输入和显示输出,终端本身并不具备计算、处理和存储能力,因此,T/M架构,所有的程序都保存和运行在主机中;

nC/S架构:客户端/服务器架构,随着个人电脑的出现,个人电脑除了比大型主机计算处理能力弱以外,已经具备了完备的输入、输出、计算、处理、存储的能力,因此,一个计算机应用程序完全可以脱离大型主机,在个人电脑上运行,出于安全以及数据一致性的考虑,数据依然需要保存在大型主机的数据库中,C/S架构随之出现;这是的C/S架构还是两层架构,客户端程序不仅包括了完整的业务处理逻辑,也包括了数据库访问引擎,是典型的“胖客户端”模式。这种架构的缺点是显而易见的,由于当时客户端自动下载更新技术还不成熟,因此,每发行一个客户端,都需要上门安装,而客户端有更新,则需要上门更新所有的客户端,造成更新维护工作量巨大;另外,由于客户端集成了数据库访问引擎,天然地,数据库服务器的用户名和密码也被保存在客户端中,很容易用网络拦截工具进行破解,这样的架构,安全性较低。

nB/S架构:浏览器/服务器架构,这种应用程序架构是随着浏览器的出现而出现的,伴随着互联网的普及,B/S架构如雨后春笋般地火爆流行开来,B/S架构彻底解决了C/S架构存在的上述两个缺点,无需在安装客户端软件,只需要浏览器,能够联网访问服务器即可,所有的业务逻辑处理都由服务器完成,是典型的“瘦客户端”模式。但这种架构也有两个致命的缺点,那就是客户端响应慢,用户体验差;所有的业务逻辑由服务器处理,服务器的压力山大,一旦客户端并发数量达到一定的程度,经常会造成服务器宕机或无响应的现象。

nC/A/S架构:多层客户端/服务器架构,由于C/S架构存在的上述两个缺点,C/S架构本身也在演进。虽然B/S架构随着互联网普及而流行开来,但客观来讲,客户端程序依然具有B/S架构所不具备的天然的优势,如程序响应速度快,用户体验好,灵活控制本地资源,可以多任务多线程处理复杂业务逻辑等,多层客户端/服务器架构的出现,并且结合客户端自动下载更新技术,彻底解决了C/S架构存在的上述两个缺点,当今客户端程序普遍采用多层架构来实现,而采用多层客户端/服务器架构的应用程序也越来越迸发了蓬勃的生机和活力,越来越被程序员和用户所重视和接受。

n胖客户端B/S架构:B/S架构一经出现,所有采用B/S架构编程的架构师和程序员就已经意识到需要改善用户体验,最直接的方法就是采用脚本语言,因此,能够被浏览器支持的,在本地执行的脚本语言的功能越来越丰富和完善,除了必须在服务器端执行的业务逻辑,如安全认证等,大多的业务逻辑都通过脚本语言在本地执行,仅仅在需要请求数据时再向服务器发出数据访问请求。这样的程序架构设计,大大改善了用户体验,而随着计算机硬件处理能力的提高,对于大多的不需要复杂运算的应用程序,脚本语言的运行速度对于用户来讲,已经感觉不出来与本地程序运行速度的明显差异,这是典型的“胖客户端B/S架构”,这种架构已经逐渐成为B/S网络应用程序的标准架构。

n本地B/S架构:胖客户端B/S架构,虽然已经改善了用户体验,但每次在打开应用程序时,还是需要访问服务器,从服务器下载网页,虽然有本地下载缓存技术,但如果遇到网络条件不好,仍然会影响用户体验,仍然会出现白屏或404的现象,为了彻底改善用户体验,使得用户体验可以达到C/S的效果,因此,有了本地B/S架构,应用程序只是在第一次运行时,从服务器端把网页下载到本地,然后应用程序在启动运行时,直接从本地载入页面运行,这种架构除了程序是在浏览器中运行的以外,已经类似于本地的客户端程序,使得客户体验获得了极大的提高。

n混合架构:采用C/S与B/S混合编程方式,实现特定的应用需求的模式,如今,很多大型的客户端软件,都采用混合架构,其应用程序主体采用原生的多层C/S架构实现,并且内嵌浏览器,支持本地或远程的B/S应用,因为在同一个应用程序中既包括C/S程序,也包括B/S程序,所以称为混合架构。

nM/C架构:移动端/云端架构,严格意义上来讲,M/C架构不属于程序架构,它是属于系统架构的,从编程实现的角度来看,它既可以采用多层C/S架构实现,也可以用本地B/S架构实现。

n小程序架构:严格意义上来讲,小程序架构也是一种本地B/S架构。我们都知道,B/S架构的所有客户端的源码,都需要下载到本地,这样对于源程序就几乎是没有保护的,虽然现在也有源码的混淆技术,可以把源码打乱,使其不具备可读性,但依然不能彻底解决问题,另外,解释执行的程序运行还是较慢。小程序的出现解决了这两个问题,小程序是一种半编译的二进制伪代码,当下载到本地时,可以被虚拟机加载执行,其执行效率比B/S的解释程序要高,同时,由于其本身是二进制代码,在一定程度上保护了程序源码。

可以说,不管是C/S架构,还是B/S架构,都越来越重视用户体验,也都在学习各自的优势,取长补短。从架构的演进发展来看,C/S程序如今也可以采用HTTP/HTTPS协议进行网络通讯,B/S架构如今也支持了WEB SOCKET技术,可以用来进行高效的,有状态的网络通讯;两者除了运行环境不同以外,C/S架构的运行环境是操作系统,B/S的运行环境是浏览器,两者的架构模型越来越像,两者都在向“胖客户端”的方向发展。

不管是程序员,还是架构师,都需要了解程序架构的演进,并熟悉这些架构中采用的具体技术实现方法,在具体的项目中,选择合适的技术架构实现应用程序的逻辑,来满足用户的需求。

另外,不管是B/S,还是C/S,都没有优劣之分,只是应用于具体项目所采用的技术手段是否合适而已,不管采用哪种架构,都可以实现用户需求,但不同的架构应用于具体的业务场景时,要想达到相同的用户体验难易程度还是有所区别;不少网上的初级程序员还在争论哪种架构更好,这完全没有必要,当你成长为高级程序员的时候,你就不会再去争论这些毫无价值的话题了,也不会再对不同的架构以及不同的实现方式有所偏见了。

架构的演进,只代表了流行的趋势,它解决不了程序员的水平,不管你采用哪种架构,你的水平决定了一切。。。

切记,用最简单的技术,花最小的代价,解决用户的实际问题,才是编程之道。。。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180904B1ZB5R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券