几种常见的软件架构
软件采用什么样的架构取决去具体某个软件的需求、用途、特性、使用用户等很多方面,没有十分完美的架构也没有最合适的架构,常见的两种模式是CS和BS模式,还有分布式和非分布式,分布式需要指明是业务逻辑分布、数据库分布、还是都分布等,不同层次的分布有不同的解决方案,在这里一般分布式结构通常指的是基于BS的模式,通过看下面这张图我们会更直观、明白一些。
首先,看上面两种模式系统有什么区别,从图上看主要区别是BS增加了一个Web Server,但是增加了这个服务器却给软件带来了非常方便的好处,如下几点:
1.从客户体验来说BS系统每次在维护和升级的时候都不需要从新写在和安装,甚至都不需要让用户知道软件已经更新,而不像我们平时用的安卓手机中的软件那样,每次更新都要求从新下载软件再安装,每次我都流量都不够用更不要说去下载软件了,很多实用手机的人也都很讨厌频繁的软件安装,从这点上来看BS是优于CS的一大亮点,易维护、易升级。
2.真正的做到了一处部署,多处可以直接访问的好处,假如有几千台电脑只需要将服务器部署在一台电脑上别的电脑就可以通过浏览器访问,省去了安装部署的麻烦事,倘若是CS模式,每一台计算机都需要安装软件系统以及数据库驱动等支撑软件,如果我想要更换数据库那么在每一台电脑上的数据库驱动都需要更新,又是一个麻烦事,CS模式不能够应对各种变化,应变能力差。
图中黄色部分表示中间件,随着应用的逐渐复杂为了让开发人员更多的关注于业务逻辑,而不是一些非业务逻辑东西,如公共服务、事务控制、安全访问,以及中间件服务器等每个模块都需要用到的基础服务,很多Web 服务器厂商开始写自己的中间件产品,完成诸如类似的功能,这么多公司每个公司都实现自己的中间件,问题也随之出现每个公司自己写的中间件模块不能同其他公司的中间件模块进行交互,没有一个统一的标准。
这个时候很多公司也有自己的标准,但是sun公司也写了一套标准并得到了其他公司的认可,因此大家都同意遵循sun公司这套标准使得自己公司的产品都向着sun发布的标准看齐,对其标准进行实现。
J2EE即是sun公司推出解决更为复杂应用程序开发,也可以叫做企业级开发程序的一套中间件规范,自己并作为实现即jboss服务器中间件,该中间件实现了J2EE的全部规范,同时Oracle 推出Web logic,IBM web sphere,等很多服务器产品,这种服务器可以为程序开发提供好多服务,包括分布式部署、负载均衡等技术支持。
目前的一个服务器一般包括Web Container和EJB Container两个容器,分为由这两个容器提供服务能力,我们开发的JSP、servlet、EJB组件等可以部署到任何一台实现J2EE规范的服务器或者容器中运行,这也是遵循规范的好处只好实现的一样的规范,可以轻松的实现程序移植,让我们来看一张表示一个服务器都可以提供哪些服务的架构图:
从上面这张图可以看出一个容器都实现了哪些规范,这里我有点疑问的是为什么Web container也实现了那么多规范?从图中可以看出似乎和EJB容器实现的功能类似,我觉的是这两个容器主要区别是侧重点不同Web当前侧重界面么实现了servlet、jsp等规范,ejb容器呢主要负载业务逻辑,然后它们都可以实现分布式例如Web容器可以集成第三方东西扩充自己的功能,再说这都是开源的东西可以自己开发新功能加入进去开源的好处就在这里。
如下为支持分布式的架构图,web容器可以和ejb容器部署在一台电脑上也可以部署在不同的电脑上,远程电脑通过RMI调用EJB方法实现分布式调用。但是rmi是面向java的一个通信协议,怎么样实现异构系统之间的调用呢,如果有另一个.NET系统怎么集成到一起?为了实现系统整合和集成我们引入了ESB总线,将发布后的Web 服务连接到总线上,别的程序就可以通过总线进行调用了,此时可以将EJB接口发布称Web Service方法,可以跨平台跨系统调用方法很好的解决了异构系统的交互问题,再来看一个改造后的架构图。
加入企业服务总线后的图如下
一个可扩展、易维护、易开发、灵活、可靠、稳定的架构是软件能够开发和运行的保障,一些复杂系统架构也是在这基础之上扩展了一些细节,一个合理的架构设计还需要考虑很多实际的因素,一个好的架构是适应变化和需求的。