软件架构设计的变革及演进

架构变革及演进

     IT技术发展的历史,就是架构不断发展和演进的历史,新架构不断带来新的生产力,进而推动IT时代的变革浪潮。

     架构和技术,这对CP有点类似厨师和厨具的关系,好的厨师能够恰当运用不同的厨具做出色香味俱佳的菜肴;好的架构也能将不同技术有机组合,通过合适的通信机制,构建功能完备的计算系统。为什么是计算系统呢?因为IT的本质就是远古以来人类孜孜不断追求的计算,从结绳记事到算盘,从齿轮计算器到现代电子计算器,在IT发展过程中也是人们不断追求计算能力和性能的过程。

      在机电技术、电子管技术、半导体晶体管技术、集成电路技术、大规模集成电路技术先后出现时,都有力的推动了计算机及其架构的发展。

     

       1937年可判断问题及图灵机模型的提出,带来了架构设计中的简单原则,也为非生物首次赋予了计算能力。而这正是凯文·凯利在《失控》里说“人造无机物表现得越来越像生命体”的主要依据,这也是很多科学家对AI进化产生担心的起源。

       1945年冯·诺依曼提出了存储程序(数据和指令混在一起,统一编址)的架构设计,即我们耳熟能详的“冯·诺依曼”体系架构,该架构由五部分组成,即输入、输

出设备,中央控制单元(CPU)、存储器以及连接CPU和存储的总线。这种简单的架构设计模式在当代依旧流行,如Intel及ARM的芯片架构。

      但正所谓“成也萧何败萧何”,程序指令和数据共用总线,带来了“冯·诺依曼瓶颈”——计算机并行能力差,数据处理速度慢。

      而现代的CPU还有一种架构设计模式,即哈佛架构,(数据和指令分开),当代的中央处理器和微控制器大都采用此类设计。虽然哈佛架构下计算效率高,但架构复杂,应用场景较为局限,这也是基于冯·诺依曼设计的X86在市场份额中拔得头筹的重要因素。

       对比“冯·诺依曼”体系架构和哈佛架构,不难看出,简单、完备、通用、兼容/开放、可拓展的架构更有前景和竞争力,因此这五个原则也一直影响了后续架构的设计规范。

       可以说图灵机模型奠定了现代计算机的理论基础,冯·诺依曼架构主导了70多年来计算机的发展,即大中型机时代、以PC为主的客户端/服务端(Client/Server)时代、互联网时代、云计算、大数据时代、互联网+时代。具体表现如下所述。

         大中型机时代充分发挥单机的能力及其垂直扩展的能力。为了更好地提升资源利用率,虚拟化技术大行其道。而虚拟化其实就是我们现在云计算的起源。

        随着信息化时代的到来,大型机无论从成本、开放性和扩展性方面都不能满足日益多元化、大众化的信息处理的需求。于是,20世纪70年代网络技术在UNIX操作

系统和C语言的加持下,在开放、互联的理念催动下应运而生。现在我们熟悉的以太网技术、TCP/IP技术、OSI开放网络七层架构就诞生在这个时期。

        20世纪80年代,个人对计算的需求及局域网的发展引领着PC机时代的到来,客户端/服务端(Client/Server,CS)分布式架构产生。远程程序调用(RPC)、分布式计算环境(DCE)、普通对象请求代理(CORBA)也都是分布式框架下的产物。分布式架构改变能节省了成本,提高效率,提升了个人PC带来的便捷计算的体验。

        20世纪90年代,互联网普及老百姓。CS架构逐渐向BS架构(Browser-Server,浏览器-服务端)转变,这一时期,架构设计更关注开放性和可移植性。于是,具备高移植性的高级编程语言Java诞生了。

      在21世纪,应用越来越多,IT架构开始强调组件的专业化和分工协作。架构原则“Separation of Concerns”(SOC,对不同的问题要用不同的组件

分开处理)被提倡并推广,具备该原则的“Model—View—Controller”(MVC)的三级架构开始流行,同期的著名架构还有Roy Fielding在博士论文中提出的REST架构(表示性状态传输,资源用URI表示),该架构目前在超媒体(超链接)中广泛应用。REST架构极具扩展性,兼具简单性、兼容性和扩展性现已超越SOAP模式,成为互联网的主流架构。

        在这20多年的架构发展背后,是分布式理论的发展。分布式理论主要解决CAP问题,即一致性(Consistency,常见的ACID就是一致性的体现)、可用性(Availability)和分区容错性(Partition Tolerance)。

这个原则也是任何一个分布式系统的设计都要根据应用场景的不同而要做出取舍,三取其二。特别是互联网时代,一般的应用都对可用性和分区容错性有很高要求。

大部分互联网应用需要满足BASE(Basic Available,基本可用;S表示Soft State,软状态;E代表Eventual consistent,最终一致)要求。

       随着谷歌GFS、MapReduce和BigTable的3篇论文的发表,海量数据下全新的分布式存储、分布式并行计算和分布式数据库的架构设计浮出水面,掀开了大数据时代的帷幕,云计算、大数据时代从此到来。

       其中,MapReduce框架极大的扩展了冯·诺依曼架构,将集群的并行编程简答化、将并行处理计算能力发扬光大。当然MapReduce不是一个人在战斗,MapReduce依赖了具有大规模扩展性、分布式容错特性的文件系统BigTable,而BigTable是基于大规模的分布式文件系统GFS而生的。

         这里插一句,虽然云计算一词是谷歌提出并推广,但它并不是凭空出现的,也是有历史沿革的。它最早的祖先可以追溯到公用计算(Utility Computing)的概念。

公用计算(Utility Computing)在20世纪60年代美国科学家约翰·麦卡锡(John McCarthy)提出,值得一提的是人工智能(Artificial Intelligence)概念也是他首发提出。

     在云计算时代,我们基于容错、并行调度程序将大量、廉价、标准的服务器组成资源池,把资源池的IT能力(具体包括计算能力、网络能力、存储能力、应用能力)转化成服务,以弹性按需的方式对外提供。因此云计算时代的架构设计依旧是中心化的,而且更考虑经济成本因素。而经济性对传统的架构设计模式带来了很大的冲击力,这也是云服务愈发普及的原因之一。

       这个过程中其实有一个有意义的思考,为什么云计算会出现在21世纪,而不是更早?这个人类的信息化有一定的关系,简单来说大数据的出现是人类几十年的社会信息化、数字化的产物,特别是从模拟信号向成数字信号转变的过程中,数字化进程被加速。

        现在,不仅业务和管理信息化、数字化,人与人交流、物与物的交流(物联网时代)都在数字化,而谷歌的业务就承载了这些数字化。随着大数据的出现,我们呼唤更大的计算处理能力,呼唤对应的IT架构的发展。Google的3篇论文实际上就是在这种时代和业务背景下产生。

        而大数据与行业的深度融合,就带来了互联网+时代(2015年开始),其实质是企业的数字化转型。

       在互联网+时代,传统行业采用“互联网思维”来创新业务模式,利用互联网和大数据技术,通过线下、线上的紧密结合,为客户提供更好价值的服务和产品。于是互联网+金融、互联网+制造、互联网+教育、互联网+金融、互联网+交通、互联网+能源等各类词汇喷涌而出。

      在国内,就是我们常见的P2P公司像雨后春笋般兴起,犹如昙花一般转瞬即逝。

而在国外,互联网+金融更单纯一些,国外称之为Fintech,即金融科技。常见的金融科技的形态有包括P2P借贷、众筹、移动支付、虚拟货币、客户行为大数据分析等。

      在这个过程中,去中心化的架构设计模式开始出现。这种设计模式最早在亚马逊的Dynamo架构中出现,而随后中本聪的比特币架构设计将去中心化推向了技术风口浪尖。

       比特币完全无中心化的分布式架构可以在公网环境下通过合适的经济模型(挖矿激励)和共识算法形成信任,规避了传统中心化分布式架构在中心节点的致命弱点,也顺带解决了信任建立和维护及信息防伪的问题。金融元素的引入使得DDOS攻击成功的可能性极大降低,因此,这也带来了架构设计的另一种思想——金融属性的结合。区块链技术从此被认为是下一代互联网颠覆性技术。

        目前看来,互联网+时代,互联网技术和行业业务越融合,对信任的建立、维护以及安全的渴望越高,因此未来互联网+与区块链的结合恐怕是不可避免的。那区

块链架构的独特之处有哪些呢?除了耳熟能详的去中心化,还有公正性和透明性、防伪&防篡改&匿名性&安全性、全网共识机制、数据可追溯、合约自动执行、数据全网分布式最终一致性保证。