软件架构设计(五)——Web架构设计
一、J2EE 分布式多层应用程序(1).EJB(2).J2EE的核心组成如下:二、Web架构设计(1).单台机器到数据库与Web服务器分离(2).应用服务器集群(3).数据库读写分离化三、CDN(内容分发网络)四、XML与JSON五、Web应用服务器六、响应式Web设计七、中台
目录
一、J2EE 分布式多层应用程序
(1).EJB
EJB对应了模型中的MVC的Model层。EJB容器中包含了各种可以完成职能的版块,这些板块称之为Bean。主要有三种Bean:
- 会话Bean:描述了与客户端的一个短暂的会话,存储与用户交互的数据
- 实体Bean:持久化数据,O/R映射。存储需要存储的数据。
- 消息驱动Bean:会话Bean+JMS,客户把消息发送给JMS目的地,然后,JMS提供者和EJB容器协作,把消息发送给消息驱动Bean,支持异步消息
(2).J2EE的核心组成如下:
名称 | 作用 | |
容器 | Applet Container | |
Application Container | ||
Web Container | ||
EJB Container | ||
组件 | Applet | |
Application | ||
JSP/Serverlet | ||
EJB | ||
服务 | HTTP(超文本传输协议) | |
RMI-IIOP(Remote Method Invocation ober the Internet inter-ORB Protocol) | 远程方法调用,融合了JAVA RMI 和CORBA在使用Application或Web端访问EJB端组件时调用 | |
JAVA IDL(Java Interface Definition Language) | Java接口定义语言,主要用于访问外部的CORBA服务 | |
JTA( Java Transcation API) | 用于进行事物处理操作的API | |
JDBC (Java DataBase Connectivity) | 为数据库操作提供的一组API | |
JMS (Java Message Service) | 用于发送点对点消息的服务 | |
JavaMail | 用于发送邮件 | |
JAF(Java Activation Framework) | 用于封装传递的邮件数据 | |
JNDI (Java Naming and Directory Interface) | ||
JAXP(Java API for XML Parisng) | 专门用于XML解析操作的API | |
ICA (J2EE Connector Architecture ) | JAVA 连接器架构 | |
JASS(Java Authenticati on and Authorization Service) | ||
JSF(Java Server Faces) | ||
JSTL(JSP Standar Tag Library) | ||
SAAJ(SOAP with Attachments API for JAVA) | ||
JAXR(Java API for XML Registries) |
二、Web架构设计
当今的技术纷繁复杂,从不同维度上看,有许多较为典型的技术(如下图)。
(1).单台机器到数据库与Web服务器分离
在项目初期,由于系统小,业务量不高。许多功能都放在一台机器上完成。例如把Web应用,和数据库都放在一起。甚至放在个人电脑上运行。
但是,随着业务量增大,web请求数量增多,后台数据库查询压力也增大,单台机器无法支撑全部业务时,除了给机器纵向增大配置外,一个长久的方法就是数据库与应用分离。两者放在不同的机器上,这样应用和数据库就不会相互竞争CPU和内存资源。
(2).应用服务器集群
又随着业务量增大,web请求数量增多,影响业务的瓶颈可能不是在数据库服务器,而是在应用服务器。此时可以机器纵向扩容,也可以横向扩容。所谓纵向扩容就是给机器增大配置,而横向扩容就是增加机器数量。但是单台机器再好,也总有上限。因此随着业务量增大横向扩容就避免不了了。
横向扩容就需要思考些问题。在保证业务功能的同时,怎么样避免一台机器业务量巨大而另一台服务器业务空闲造成资源利用不均匀呢?并且如何保证有状态服务的信息同步呢?实际上,可以利用负载均衡技术和缓存技术实现。
所谓无状态服务,就是请求之间不相互依赖,它们之间相互独立。每次请求都包含了所需的全部信息,要么都不再这个请求中。
有状态服务请求之间可能有依赖关系。比如淘宝的购物车与选购商品。每次发出选购商品的都会将信息保存到Session中,如果再发出的请求发生在不同的服务器上,那么Session会丢失意味着先前选的购物车信息可能就会丢失。
(3).数据库读写分离化
随着应用服务器不断扩容,可能数据库服务器就会产生瓶颈。为了提高I/O效率,将数据库分为主库和从库。主库专门用于写数据,不接受读操作,并自动将数据同步到从库中。而从库专门用于读数据。做到数据库读写分离,分担数据库服务器的压力。
与此同时,为了提高IO效率,同时减少数据库服务器的压力,可以利用缓存技术。思想就是读内存要比要比读外存来的快。比如在代码实现上,可以将时常访问但是基本不修改的数据放入全局变量中。在构件上比较成熟的有Memcached,Redis等。
三、CDN(内容分发网络)
Content Delivery Network,基本思路时尽可能避开互联网上有可能影响数据传输的速度和稳定的瓶颈和环节,使内容传输得更快更稳定。通俗点讲,就是把你想要的内容直接推送到你家门口,而你就不需要到源站点去查询信息,直接到就近站点查询就可以。比如时事热点,地区热点等。
四、XML与JSON
扩展标记语言(Extensible Markup Language),用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。类似于:<标签名>[内容]</标签名> 形式,内容中可能还可以包含标签。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。
XML有统一的标准,容易与外部系统进行远程交互,允许文件格式复杂。交互系统的双方需要约定好xml文件中标签的业务含义,因此有时解析xml是一项繁杂的工作,对于系统来说也是费资源的。并且各个系统双方的解析XML方式不一致,方法难以复用,除非所有系统共同约定好一套标准。
Json数据格式简单,易于读写,也易于解析。同时大大简化了服务器端和客户端的代码开发量,更易于维护。而且Json格式都是压缩的,占用带宽小。但是没有XML那么通用性。
五、Web应用服务器
Web应用服务器可以细分为: Web服务器,应用服务器两种。
Web服务器的职能较为单一,就是把浏览器发过来的Request请求,返回Html页面。在早期建设一个网站,没有动态内容,只有静态页面。那我们就需要将页面发布到IIS。当用户去访问地址时,IIS就把已经存在页面返回给用户。
但是随着技术发展,静态页面满足不了需求,需要根据请求决定给你哪个具体的页面布局。这就是动态页面。动态页面可能包含了运算业务,而应用服务器就进行业务逻辑的处理。比如CSDN文章浏览,页面不是一成不变的,在浏览文章内容的页面中,会根据请求内容返回具体的博主信息,返回具体的文章内容,以及推荐内容等。
常见的Web应用服务器包含:Apache、IIS、Tomcat、JBOSS、WebSphere、WebLogic、Jetty等
六、响应式Web设计
有经验的Web开发人员知道,在做成网页后,页面布局在电脑上看是好的,但是在平板、手机上看可能是乱的。或者用谷歌浏览器浏览布局是好的,在其他浏览器上看是乱的。
响应式Web设计的理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。因此可以采用流式布局和弹性化设计的方式,使用相对单位,百分比而非具体数值的方式对页面进行排版。对于图片、页面板块等,根据分辨率进行同比的缩放。
七、中台
中台有多种,常听说的有业务中台,数据中台等 "xx中台“。中台是将企业核心能力以共享的服务形式沉淀。形成”大中台,小前台“的组织和业务机制。业务中台,就是将核心业务进行沉淀,然后共享,并对外开放。数据中台,就是将核心数据进行沉淀,然后共享,并对外开放。
比如银行系统的交易数据,市场利率/汇率数据,客户数据等,都是银行各个子系统都是可以共用的。比如阿里的支付系统、交易系统、商品中心对于淘宝、天猫,其业务也是可以共用的。中台是可供企业快速低成本的进行业务创新的企业架构。
更多推荐
所有评论(0)