从IT 编辑的角度看软件架构变迁

2021-05-02 12:52孙学瑛
科技创新与应用 2021年12期
关键词:普通用户组件架构

孙学瑛

(电子工业出版社有限公司,北京 100036)

1 软件架构的定义

软件架构在IT 界历来没有一个统一的定义,众说纷纭,国际著名的面向对象分析设计、UML、模式等方面的专家,敏捷开发方法的创始人之一马丁·福勒(Martin Fowler)就曾说过:“很多人都试图给‘架构’下定义,而这些定义本身却很难统一。”因为软件架构有组成派和决策派之分,每个流派对架构均有不同的看法和定义,如:

而本文又需要去探索软件架构变迁,因此从纯技术的角度出发,采用的是IEEE 610.12-1990 软件工程标准词汇中的定义:

架构是以组件、组件之间的关系、组件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理(Principle)。

由此可见,软件架构中“架构”的是一种生态,最终目的是让软件好用,从而让软件更好地为业务服务,因此,本文主要分析的是软件架构在整个业务生态的作用,这里以电子商务为例,这一业务的核心利益点在于成交。而成交这一过程又包括:平台、消费者、产品、物流这4 个要素。在这4 个要素当中又会发生:

买卖,即平台吸引买家购买、卖家入驻。

合作,即平台与买家、商家、物流等外在合作者的合作关系。

服务,即平台要为相关人员提供良好的服务,促成成交。

因此,要实现电子商务,软件架构设计必须考虑如何更有利于让信息流、资金流、物流等得以顺畅。而软件架构又以访问量的逐渐增大或者突然激增而不断演变,接下来就会详细阐述这一演变过程。

2 单体软件架构

21 世纪初期,中国的电子商务刚刚萌芽,此时网站只是简单的ASP“个人网站系统”,四五位技术人员即可实现线上下单,只需要初步实现MVC 架构即可,如图1所示。

普通用户接触的是展现层,即界面。当普通用户在界面上执行一个操作时,业务层在背后就会读取数据,MVC(Model、View、Controller)软件架构就会处理用户操作请求,反馈操作结果到展现层。其中,Model 是核心程序,View 用于展现Model 数据,Controller 则控制着整个操作完成过程的交互。这种将核心程序、展现与控制分离的模式因其易维护、易重用、易管理,再加上有应用非常广泛的MVC 框架(Spring 等)而流行至今。

图1 基本的MVC 架构

随着电子商务日益普及,流量猛增,每日从几单到上千单,再到数万单,平台系统变得越来越复杂,平台架构也会不断演化,从ASP 架构到.NET 架构,.NET 和Java系统并行之后,再到基础Java 的整体系统架构,如图2所示。这种架构更为稳固。

图2 京东首页架构(引自《决战618》)

3 分布式软件架构

随着用户量和订单量的激增,原有架构已无法适应发展需求,因此在整个产业的发展期,软件架构发生了如图3 所示的变化。

由图3 可见,分布式应用架构是将系统“分而治之”以应对亿级乃至更多的流量和请求。分而治之所带来的问题:

如何将原有系统“分”成各个小系统(即微服务)?

如何管理各个小系统?

如何管理各个小系统的交互?

如何拓展系统?

如何保证各个小系统交互的安全性和可靠性?

……

这也是这个阶段架构师所必须面临的问题。

合久必分,分久必合,这一经典名言放在软件架构当中也是适用的。在软件系统发展到要承担海量的用户访问时,拆分是必然的,然后如何拆分能保证系统的可靠性又是一种艺术。微服务是其中一种拆分方法,即面向服务拆分,这是一种对用户极为友好且易理解的方案,每个微服务仅关注于如何很好地完成一个任务,每个任务代表着一个小的业务能力。以电子商务系统为例,我们要增加一种结账支付方式,则只需要修改“结账服务”即可,无须修改其他子系统,因为整体系统采用“微服务”架构,拆分为各个独立运行的子系统。

微服务中的“微”有好有坏,好处在于能快速交付软件,很多子系统可重用,非常适合电子商务这种互联网项目,但是坏处在于维护成本和难度均高,“微”意味着背后需要基础设施的巨量维护支撑。

4 云原生

当云于2006 年出现在国人视野之中发展至今时,软件于大众也如同水电一样使用了,云为软件架构带来的转变,当然就是翻天覆地的。软件架构在云上,享受云厂商提供的各种资源和服务,不再是从零开始开发软件系统,而是基于云厂商的基础设施与软件产品,改造和定制现有软件系统,让开发者更专注于业务本身,带来更多便利。比如,2019 年阿里巴巴双十一的2684 亿元交易全部发生在云上,可见云所能承载的算力可以是海量的;2020年新冠疫情之后,健康宝让大家能顺畅地行走于各地,大数据精准地防疫抗疫,这都得益于云的力量。

目前大多企业的核心应用都在慢慢云化,处于云下和云上的过渡阶段,但是很多新应用运用更适合云上环境的方法来构建和运行,如容器服务和函数计算,如特斯拉公司的Model 系列电动轿车上市后,车辆购买者会发现汽车的功能可以随着时间推移而不断更新升级。这就是云原生的魅力所在,云的趋势势不可挡。

目前云计算有三种分类,分别是:

(1)软件即服务(Software as a Service,SaaS)

SaaS 是一种用户可按需取用软件的模式。用户不必再像以前那样花费大量投资用于硬件、软件、人员,而只需要按最终用户数、使用时间的长短、消耗的网络带宽、存储的数据规模或者数据保存期限等因素支出一定的服务租赁费用,即可享用相应的服务。

(2)平台即服务(Platform as a Service,PaaS)

图3 软件架构的演进

相对SaaS,PaaS 为用户提供的是一个集成平台,而不是某一应用软件,平台可包括数据库、集成开发环境等全部的软件运行环境,用户可以对他们开发出来的应用软件进行部署测试。因为需要具备一定开发能力,所以这些用户需要是程序开发员、软件测试工程师、应用程序部署人员或者应用程序管理员等。用户需要根据处理器消耗、网络带宽消耗、数据库存储规模及使用时间的长短等因素给云服务提供商付费。

(3)基础设施即服务(Infrastructure as a Service,IaaS)

相对前两种,IaaS 为用户提供的是一种基础设施,这主要包括云端的虚拟机、NAS 存储、网络设施及其他能部署和运行任何软件的基础计算资源等所有设施,因此用户可以在上面能够部署和运行任意软件,甚至包括操作系统,也有可能获得对网络组件(例如,防火墙、负载均衡器等)的控制。因此,这些用户一般为系统开发人员、系统管理员或者热衷于掌控基础设施的IT 部经理,他们需要根据虚拟机使用CPU 的小时数、存储的数据规模和时间、消耗的网络带宽,以及申请的公网IP 地址的数量等因素向云服务提供商付费。

从这三种分类,软件即服务(Software as a Service,SaaS)、平台即服务(Platform as a Service,PaaS)、基础设施即服务(Infrastructure as a Service,IaaS)可以得知,云这台超级计算机将自身所有资源归结于服务,将服务的所有权和使用权分离,并将使用权分时分地地出租给用户。

云其实就是一台超级计算机,现在及未来IT 中所有的I(Information)和T(Technology)将全部挪到这台超级计算机中。我们普通用户只需随时随地取用、运营及扩充,IT 技术对普通用户而言将越来越黑盒化、简易化。所以,此时的软件架构将全部归一为使用服务。

5 结束语

由上述简单分析可得出,软件架构在整个业务生态当中起着基础设施的作用,最终是为了业务增长而服务的,因此软件架构随业务而变,而增减、完善组件。因业务而进行的软件架构演讲是所有技术人员孜孜不倦的追求,软件架构与所有利益相关人员,如架构师、开发人员、业务人员等是息息相关的,软件架构在很大程度上架构的是人。未来的架构应该是业务架构、应用架构与数据架构的融合与统一。

猜你喜欢
普通用户组件架构
基于FPGA的RNN硬件加速架构
无人机智能巡检在光伏电站组件诊断中的应用
基于小红书UGC模式的城市形象传播研究
Kistler全新的Kitimer2.0系统组件:使安全气囊和安全带测试更加可靠和高效
功能架构在电子电气架构开发中的应用和实践
一种嵌入式软件组件更新方法的研究与实现
通用(OA)办公自动化系统的组件运用
构建富有活力和效率的社会治理架构
即使是普通用户也需要备一张家庭影院入门攻略:影音调校工具篇1
VoLTE时代智能网架构演进研究