软件架构设计(五)——Web架构设计

WEB的介绍 1.模型-视图-控制器(MVC)模式MVC模式是Web应用分层的一种常见模式,它将Web应用分为模型、视图和控制器三个层次。模型层负责处理业务逻辑和数据交互,视图层负责展示用户界面,控制器层负责接收用户的请求并调用模型层和视图层进行处理。通过MVC模式,我们可以将业务逻辑和数据交互与用户界面分离,提高了系统的可维护性和可扩展性。2.微服务架构微服务架构是一种将Web应用拆分为多个小型服务的架构方式。每个服务都是独立的、可独立部署和升级的模块,它们之间通过API进行通信。 阅读详情

目录

一、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就把已经存在页面返回给用户。

        但是随着技术发展,静态页面满足不了需求,需要根据请求决定给你哪个具体的页面布局。这就是动态页面。动态页面可能包含了运算业务,而应用服务器就进行业务逻辑的处理。比如优快云文章浏览,页面不是一成不变的,在浏览文章内容的页面中,会根据请求内容返回具体的博主信息,返回具体的文章内容,以及推荐内容等。

常见的Web应用服务器包含:Apache、IIS、Tomcat、JBOSS、WebSphere、WebLogic、Jetty等

六、响应式Web设计

        有经验的Web开发人员知道,在做成网页后,页面布局在电脑上看是好的,但是在平板、手机上看可能是乱的。或者用谷歌浏览器浏览布局是好的,在其他浏览器上看是乱的。

        响应式Web设计的理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的布局。因此可以采用流式布局和弹性化设计的方式,使用相对单位,百分比而非具体数值的方式对页面进行排版。对于图片、页面板块等,根据分辨率进行同比的缩放。

七、中台

        中台有多种,常听说的有业务中台,数据中台等 "xx中台“。中台是将企业核心能力以共享的服务形式沉淀。形成”大中台,小前台“的组织和业务机制。业务中台,就是将核心业务进行沉淀,然后共享,并对外开放。数据中台,就是将核心数据进行沉淀,然后共享,并对外开放。

        比如银行系统的交易数据,市场利率/汇率数据,客户数据等,都是银行各个子系统都是可以共用的。比如阿里的支付系统、交易系统、商品中心对于淘宝、天猫,其业务也是可以共用的。中台是可供企业快速低成本的进行业务创新的企业架构。

项目中软件架构过程 1、什么是软件架构 1、1 分2种: 1>、组成派:软件架构 = 组件+ 交互(接口,模块与模块之间交互); 2>、决策派:软件架构= 重要决策(决定重要的需求); 两者互相铺成; 1.12软件架构和子系统、框架之间的关系: 1>、复杂性是层次话; 2>、好的架构必 阅读详情

相关推荐

什么是软件架构?软件架构如何演进?

系统架构(System Architecture) 是描述单个或多个系统整体结构的设计蓝图,定义了系统的组件划分、部署策略、交互方式以及非功能性需求(性能、可用性、可扩展性...)。系统架构通过集群实现资源聚合与高可用,借助分布式提升容错与扩展性,并依托弹性机制动态适应变化。其核心目标是通过结构化设计实现系统功能的高效运行、资源的灵活调度以及对外部环境变化的动态适应能力。

weixin_40841143的博客 1802

Web架构设计

上一篇说到了、常见的一些Web攻击方式以及一些防御手段。这一篇就说说怎么整合上一篇提到的防御手段来构建一套相对完全不管来说的安全一点的架构。这里我们只针对安全方面做设计、像是权限模型、登录这些就使用通用的RBAC模型来做权限的底层设计。我们专注与上层的认证、鉴权实现模块就好了。 这里最外面一层就使用nginx来做入口,当然有钱的并且有一定规模的肯定是上F5这些硬件负载均衡的。并且我们的静态资源(前端代码)也可以放在这里。前端资源因为是静态的、可以添加一些静态资源的监控、防止资源被篡改(给你的首

胡汉三 2149

软件架构设计(十四) Web架构设计(一)

而我们的服务器其实通常是放在一个机房的,也就是固定在某个区域, 而用户在离这个区域很远时访问的距离就会比较远, 速度相对较慢, 此时就会有CDN技术, 会将内容分发到不同的CDN站点, 作为镜像站点, 当请求到来时指向离用户最近的CDN站点, 从而提升访问效率, 如果本地CDN没有, 才会从真正的服务器资源.当分库分表之后仍然没法满足业务需求时,此时我们就需要考虑到缓存技术了,要尽量减少直接对数据库的查询,而将查询结果缓存下来,让下次访问时直接命中缓存,从而减少数据库的查询压力。

qq_35267557的博客 412

系统架构设计高级技能 · Web架构设计

Spring是一个轻量级的企业级应用开发框架, 于2004年由Rod Johnson发布了1.0版本, 经过多年的更新迭代, 已经逐渐成为Java开源世界的第一框架, Spring框架号称Java EE应用的一站式解决方案, 与各个优秀的MVC框架如Spring MVC、Struts 2、JSF等可以无缝整合, 与各个OR M框架如Hibernate、My Bat is、JPA等也可以无缝衔接,其他各种技术也因为Spring的存在而被很容易地整合进项目开发之中, 如Red is整合、Log4J整合等等。

很多时候犯错都是在不知情的情况下发生的 1170

软件架构设计(十六) Web架构设计(三)

上一节我们了解到了,应用集成之后,压力集中在了数据库,而数据库缓解压力的方式有提升数据库本身性能和减少操作数据库的IO操作从而提升效率。提升数据库本身主要有数据库主从复制,做读写分离提升效率。还有一种就是按照业务进行数据库和表的拆分(垂直分库,水平分表),也就是我们的分库分表操作。减少数据库的IO操作,因为数据库的数据通常是放在磁盘上,所以读写操作数据库需要进行大量的I/O操作。而减少操作就是使用缓存技术,将查询的数据缓存起来,下次查询之后直接从缓存查询,不再走数据库,从而大大的提升了查询的性能。

qq_35267557的博客 420

【架构】软件架构设计的方法和工具

核心要点:利用架构视图(逻辑视图、进程视图、物理视图、开发视图和部署视图)来全面理解和表达软件架构。运用这些方法和工具,可以有效地指导软件架构的设计,确保构建出的系统既符合业务需求又具备良好的技术架构。- 应用:帮助不同干系人理解系统的不同方面,确保架构的各个层面都得到充分的考虑。- 应用:适用于复杂业务系统的建模,可以提高开发团队对业务的理解,并促进沟通。- 应用:加快设计过程,通过应用经过验证的模式来提高系统的可维护性和可靠性。- 描述:图形桌面应用程序,用于对业务、IT和软件系统进行建模。

wjianwei666的专栏 906

四 软件架构风格、质量属性、Web架构设计

架构风格、质量属性、架构评估、构件和中间件、WEB架构设计

eternal_tc的博客 1746

EBSD数据转ABAQUS的inp文件实操指南

晶体塑性有限元模拟中,如何将材料微观组织表征数据转化为可计算的有限元模型,是连接实验与仿真的关键环节。EBSD技术能够获取材料表面的晶体取向、晶粒形貌和晶界分布信息,但这类数据需要经过格式解析、欧拉角转换、网格生成等步骤,才能被ABAQUS等有限元软件读取。通过将扫描点坐标映射为节点、按像素邻域生成单元,并将Bunge约定欧拉角变换为局部坐标系方向余弦,用户可以准确构建包含真实微观结构的inp文件模型。这一流程广泛应用于金属材料形变、织构演化及应力集中分析等研究场景,有效提升仿真结果与实验的一致性。围绕数据

weixin_42509513的博客 308

简洁架构设计:如何设计一个合理的软件架构?

一个好的软件架构可以大大提高项目的易读性、可维护性、可扩展性。本文来介绍下,如何设计一个好的软件架构。

分享 Go、云原生、AI Infra 相关技术 1254

Delta-Sigma调制(DSM)技术

前言 数字信号处理和通信系统的性能很大程度上受到了模拟信号到数字信号转换接口——ADC的精度和分辨率的限制。而传统的线性脉冲编码调制(PCM)ADC受到了制造工艺的限制,无法达到很高的分辨率。但基于Delta-Sigma调制技术的ADC可以在现有工艺下实现高分辨率(大于16位),同时由于结构简单,所以易于实现。低成本高性能使得Delta-Sigma调制技术得到了广泛的应用。 Delta-Sigma型ADC的结构原理图如下图所示: 它最大的优势在于仅用1位ADC进行数据转换,同时其模拟电路部分结构简单不需要

阿星的博客 2万+

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程。从运动学建模入手,对比了基于距离与基于位置偏差的两种控制策略,并重点阐述了高精度轨迹跟踪的控制器设计、Simulink仿真搭建及PID参数整定方法,为移动机器人运动控制提供了完整的仿真实践指南。

weixin_29169505的博客 311

软件架构设计之七:软件架构设计

一、本章要点 1)信息系统综合知识。包括软件架构的概念、软件架构的风格、特定领域软件架构、基于架构的软件开发方法、软件架构评估、软件产品线;设计模式的概念、设计模式的组成、模式和软件架构、设计模式分类、设计模式的实现。 2)系统架构设计案例分析。包括软件架构技术、XML技术、基于架构的软件开发过程、架构模型(风格)、特定领域软件架构、基于架构的软件开发方法、架构评估、软件产品线、系统演化、设计

波粒二象性的专栏 5377

基于FSL的DTI数据预处理流程

最近在学习处理DTI数据,总结了一份应用FSL做DTI数据预处理的流程与大家交流交流。如果有错误的地方欢迎大家指正!        我用的数据是Philips的数据,如果是GE或者西门子的数据可能会有所不同。   原始数据:包括3DT1数据和高分辨率DTI数据,均是dicom格式。 工具:MRICRON和FSL,所有的命令均在Linux的终端中运行。   1.格式转换:将后缀名为dcm

zaza_zaza的博客 2万+

详谈软件架构设计(四)之构件与中间件技术以及Web架构设计

题外话:本篇文章讲的是软件架构设计中的最后一章节,构件与中间件技术以及Web架构设计等内容。 一:构件与中间件技术 1、构建的定义: 定义1:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖。软件构件可以被独立地部署并由第三方任意地组装。 定义2:构件是某系统中有价值的、几乎独立的并可替换的一个部分,它在良好定义的体系结构语境内满足某清晰的功能。 ......

华星详谈的博客 4597

ISO 15118-3协议栈开发避坑指南:从EvseSlac状态机设计看电动汽车充电握手难题

本文深入剖析了ISO 15118-3协议栈开发中的核心挑战,特别是SLAC握手流程的实现难点。以Everest项目的EvseSlac状态机为例,详细解读了从状态机设计、多厂商PLC芯片兼容性处理,到严苛的时序与超时控制等关键工程实践,为开发者提供了一套超越协议文档的、可直接落地的避坑指南和软件实现方案。

jump7的博客 265

Claude Code 任务编排 头脑风暴与 疯狂拷问:Superpowers vs Grill-me 硬核对比与工程落地

Superpowers和Grill-me是AI编程中的互补工具:Superpowers提供工程化开发流程(从需求梳理到代码审查),确保规范执行;Grill-me通过持续追问帮助厘清需求,避免方向偏差。两者结合形成"构思-拷问-执行"工作流,前者负责方案生成与落地,后者专注需求审查。根据场景选择:个人项目可用Grill-me快速澄清需求,企业项目推荐Superpowers全流程,复杂开发则建议组合使用。它们分别解决"如何落地"和"是否对齐"的问题,共

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 322

Java软件架构设计

开始的架构设计也是最难的,需要调研同类产品的情况以及技术特征,了解当前世界上对这种产品所能提供的理论支持和技术平台支持,再结合自己项目的特点(需要透彻的系统分析),才能逐步形成自己项目的架构蓝图。  比如要开发网站引擎系统,就从Yahoo的个人主页生成工具 到虚拟主机商提供的网站自动生成系统,以及IBM Webphere Portal的特点和局限 从而从架构设计角度定立自己产品的位置。  

leagle 9734

泛微OA集成阿里云短信(E9保姆教程)

泛微OA集成阿里云短信(E9保姆教程)

技术分享 515

【架构】浅谈软件架构设计

软件架构基础知识,以及微服务架构浅谈

wnm23的专栏 1831

【反蒸馏实战 00】AI抢不走的工作:一份针对30个“高危”职位的“反取代”实战手册(反蒸馏计划启动)

AI时代职场生存指南:30个技术岗位的“反蒸馏”实战策略 随着AI技术快速发展,职场正面临前所未有的结构性重构。本系列专栏聚焦30个技术岗位,深入分析AI对各职位的影响路径,并提供系统性的"反蒸馏"策略。通过5层分析框架(AI冲击现状、核心价值解构、AI天花板、能力升级路径、人机协作模式),帮助从业者识别可替代任务与核心价值,建立不可替代的专业优势。内容涵盖IT开发、数据分析、产品管理等技术领域,为职场人提供从“被AI替代”到“与AI协同”的转型路线图,守护职业价值。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1644

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

对软件架构设计的一些总结和理解

1. 软件架构设计的What & Why ● 啥是软件架构(Software Architecture)? 软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。 软件架构设计就是从宏观上说明一套软件系统的组成与特性...

cooldragon的专栏 14万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【软考---系统架构设计师】软件架构

本文主要是针对软考软件架构章节自己所做的大概笔记

gaoqiandr的博客 3367

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

深入探索软件架构设计

软件架构设计是软件开发过程中的关键步骤,它决定了系统的可扩展性、可维护性和性能等重要特性。本文全面探讨了软件架构设计中的质量属性、架构风格、架构评估方法以及几种常见的架构模式,包括MVC、J2EE、SOA、ESB、DSSA和ABSD。通过深入分析和比较,旨在为软件工程师提供一套全面的架构设计指南。关键词:软件架构设计、质量属性、架构风格、架构评估、MVC、J2EE、SOA、ESB、DSSA、ABSD。

AI 爪客,专注 AI 智能体与 Skill 研发落地,斩获腾讯云、讯飞、小米等多场 AI 赛事奖项,分享 Agent 实战干货与工程化经验。 1367

程序员必须要知道的软件架构设计理论

简单来说,架构设计就是一个体现软件系统如何实现的草图,它描述了构成系统的抽象组件,以及各个组件之间是如何进行通信的,这些组件在实现过程中可以被细化为实际的接口、类或者对象。在《软件架构简介》中,David Garlan认为软件架构设计需要考虑如下问题:“除算法和数据结构之外,设计并确定系统整体结构。结构问题包括总体组织结构、全局控制结构、通信、同步和数据访问的协议等;设计元素的功能分配、物理分布;设计元素的组成;定标与性能要求;备选设计选择等。

程序员高级码农的博客 1771

如何做好架构设计

我在这重新定义架构(见仁见智):软件架构指软件系统顶层结构设计。架构是经过系统性地思考,权衡利弊之后在现有资源约束下的最合理决策,最终明确的系统骨架:包括子系统、模块、组件,以及他们之间协作关系、约束规范、指导原则,并由它来指导系统各方面的设计和指导团队中的每个人思想层面上的一致。

顺其自然~专栏 1448

什么是软件架构?常用的软件架构

软件架构所指的就是说相应的系列性的抽象模式,可以为设计大型软件系统的各个方面提供相应的指导。从本质上来看,软件架构是属于一种系统草图。在软件架构所描述的对象就是直接的进行系统抽象组件构成。连接系统的各个组件之间就是做到把组件之间所存在的通讯比较明确与相对细致的实施描述。处于相应的系统实现环节,那么就会使得细化这些抽象组件成为现实的组件,比如可以是具体的某个类或者是对象。从面向对象领域进行分析,那么各个组件之前实施的连接实现往往是接口。...

qq_41854911的博客 1万+
上一篇: 软件架构设计(四)——构件与中间件
下一篇: 软件架构设计(六)——负载均衡、缓存技术、Redis
superSmart_Dong
博客等级 码龄10年 678粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值