分布式软件体系结构风格(C/S,B/S)
分布式软件体系结构风格
1、 三层C/S结构
2、 三层B/S结构
三层C/S结构(3-Tier C/S Architecture)
§第1层:用户界面GUI—表示层——客户机
§第2层:业务逻辑—功能层——应用server
§第3层:数据库—数据层——数据库server
基本组件:
–数据库server
• 存放数据的数据库、负责数据处理的业务逻辑;
–应用server
• 业务逻辑:对数据进行处理;
–客户机应用程序
• GUI:用户界面
§连接件:经由网络的调用-返回机制或隐式调用机制
–客户机ßà应用server:客户机向应用server发送请求,并接收返回结果。
–应用serverßà数据server:应用server向数据server发送请求,并接收返回结果。
表示层:
§应用的用户接口部分,担负着用户与应用之间的对话功能。
§检查用户从键盘等输入的数据,显示应用输出的数据;检查的内容也仅仅限于数据的形式和取值的范围。不包含有关业务本身的处理逻辑。
§为使用户能直观地进行操作,通常使用图形用户界面GUI 。操作简单、易学易用;
§在变更时。仅仅须要改写显示控制和数据检查程序,而不影响其它层。
§不包括或包括一部分业务逻辑。
功能层:
§应用系统的主体。包含大部分业务处理逻辑(通常以业务组件的形式存在。如JavaBean/EJB/COM等);比如,在制作订购合同一时候要计算合同金额,依照定好的格式配置数据、打印订购合同。
§从表示层获取用户的输入数据并加以处理。
§处理过程中须要从数据层获取数据或向数据层更新数据;
§处理结果返回给表示层。
§用户检索数据时,要设法将有关检索要求的信息一次性地传送给功能层。而由功能层处理过的检索结果数据也一次性地传送给表示层。
§通常,在功能层中包括有确认用户相应用和数据库存取权限的功能以及记录系统处理日志的功能。
数据层:
§数据库管理系统DMBS,负责管理对数据库数据的读写;
§接受功能层的数据查询请求。运行请求。并将查询结果返回给功能层;
§从功能层接受数据存取请求。并将数据写入数据库,请求的运行结果也要返回给功能层。
§数据库管理系统必须能迅速运行大量数据的更新和检索。如今的主流是关系型数据库管理系统,因此。一般从功能层传送到数据层的要求大都使用SQL语言。
长处:
§在用户数目较多的情况下,三层C/S结构将极大改善性能与灵活性(通常可支持数百并发用户,通过集群可达数万并发用户)。
§同意合理地划分三层结构的功能。使之在逻辑上保持相对独立性。能提高系统和软件的可维护性和可扩展性——UI、BL、DB能够分别加以复用
§同意更灵活有效地选用对应的平台和硬件系统。使
之在处理负荷能力上与处理特性上分别适应于结构清晰的三层; 而且这些平台和各个组成部分能够具有良好的可升级性和开放性。
§应用的各层能够并行开发,能够选择各自最适合的开发平台和开发语言。
§利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而非法的訪问数据层,为严格的安全管理奠定了坚实的基础。
§将遗留系统(旧版本号的系统)移植到三层C/S下将很easy;
缺点:
§三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力非常强,其作为总体来说也达不到所要求的性能。
§设计时必须谨慎考虑三层间的通信方法、通信频度及数据量,这和提高各层的独立性一样是三层C/S结构的关键问题——分层风格的固有缺点。
程序:
(1)server端程序tcpServer.java
import java.io.*;
import java.net.*;
public class tcpServer{
publicstatic final int PORT=8888;
publicstatic void main(String[] args) throws IOException{
//建立ServerSocket
ServerSocket s=new ServerSocket(PORT);
System.out.println("ServerSocket:"+s);
try{
/*程序堵塞,等待连接。即直到有一个客户请求到达,程序方能继续运行*/
Socket ss=s.accept();
System.out.println("Socketaccept:"+ss);
try {
//连接成功,建立对应的I/O数据流
DataInputStream dis=newDataInputStream(ss.getInputStream());
DataOutputStream dos=new DataOutputStream(ss.getOutputStream());
//在循环中。与客户机通信
while(true){
String str=dis.readUTF(); //从客户机中读数据
if(str.equals("end"))break; //当读到end时,程序终止
System.out.println(str);
dos.writeUTF("Echoing:"+str); //向客户机中写数据
}
dos.close();
dis.close();
}finally{
ss.close();
}
}finally{
s.close();
}
}
}
server端执行结果为:
ServerSocket:ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8888]
Socket accept:Socket[addr=/127.0.0.1,port=7312,localport=8888]
測试:0
測试:1
測试:2
測试:3
測试:4
測试:5
(2)客户机端程序tcpClient.java
import java.io.*;
import java.net.*;
public class tcpClient{
public static voidmain(String[] args) throws IOException{
//建立Socket,server在本机的8888port处进行“侦听”
Socket ss=newSocket("127.0.0.1",8888);
System.out.println("Socket:"+ss);
try{
//套接字建立成功,建立I/O流进行通信
DataInputStreamdis=new DataInputStream(ss.getInputStream());
DataOutputStreamdos=new DataOutputStream(ss.getOutputStream());
for(int i=0;i<6;i++){
dos.writeUTF("測试:"+i); //向server发数据
dos.flush(); //刷新输出缓冲区,以便马上发送
System.out.println(dis.readUTF()); //将从server接收的数据输出
}
dos.writeUTF("end"); //向server发送终止标志
dos.flush(); //刷新输出缓冲区,以便马上发送
dos.close();
dis.close();
}finally{
ss.close();
}
}
}
B/S三层架构:
浏览器/server(B/S)是三层C/S风格的一种实现方式
–表现层:浏览器
–逻辑层:• Webserver• 应用server
–数据层:数据库server
基本组件:
–数据库server• 存放数据的数据库、负责数据处理的业务逻辑;
–Webserver/应用server• 业务逻辑:对数据进行处理。• client应用程序以网页形式存放于Webserver上;
–浏览器• 在client上的浏览器中键入对应的网址
连接件:经由网络的调用-返回机制或隐式调用机制
–浏览器ßàWebserver/应用server:浏览器向Webserver/应用server发送请求,并接收返回结果。
–Webserver/应用serverßà数据server: Webserver/应用server向数据server发送请求,并接收返回结果。
长处:
基于B/S体系结构的软件,系统安装、改动和维护全
在server端解决,系统维护成本低:
–client无不论什么业务逻辑,用户在使用系统时,只须要一个浏览器就可执行所有的模块,真正达到了“零client”的功能,非常easy在执行时自己主动升级。
–良好的灵活性和可扩展性:对于环境和应用条件常常变动的情况,仅仅要对业务逻辑层实施对应的改变,就行达到目的。
§ B/S体系结构还提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。
§较好的安全性:在这样的结构中,客户应用程序不能直接訪问数据,应用server不仅可控制哪些数据被改变和被訪问,并且还可控制数据的改变和訪问方式。
§三层模式成为真正意义上的“瘦client”,从而具备了非常高的稳定性、延展性和运行效率。
§三层模式能够将服务集中在一起管理,统一服务于client,从而具备了良好的容错能力和负载平衡能力。
§扩大了组织计算机应用系统功能覆盖范围,能够更加充
分利用网络上的各种资源,同一时候应用程序维护的工作量
也大大降低
– B/S结构出现之前,管理信息系统的功能覆盖范围主要是组
织内部。
– B/S结构“零client”方式使组织的供应商和客户(这些供应商和客户有可能是潜在的,也就是说可能是事先未知的)的计算机方便地成为管理信息系统的client,进而在限定的功能范围内查询组织相关信息。完毕与组织的各种业务往来的数据交换和处理工作。
§ B/S结构的计算机应用系统与Internet的结合也使新近提出的一些新的企业计算机应用(如电子商务。客户关系管理)的实现成为可能。
缺点:
§client浏览器以同步的请求/响应模式交换数据。每请求一次server就要刷新一次页面;
§受HTTP协议“基于文本的数据交换”的限制,在数据查询等响应速度上,要远远低于C/S体系结构。
§数据提交一般以页面为单位,数据的动态交互性不强,不利于在线事务处理(OLTP)应用;
§受限于HTML的表达能力,难以支持复杂GUI(如报表等)。
程序:
前台界面代码:
<%@ Page Language="C#" AutoEventWireup="true"CodeBehind="Default.aspx.cs" Inherits="TestWeb1._Default"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>前台界面</title>
</head>
<body>
<formid="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
server代码:
using System;
usingSystem.Collections;
usingSystem.Configuration;
using System.Data;
using System.Linq;
using System.Web;
usingSystem.Web.Security;
using System.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace TestWeb1
{
public partial class _Default :System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
string strselect = "selectLoginName,UserName from Users";
string strCN =@"server=.\SQLEXPRESS;database=Business;Integrated Security=True";
SqlDataAdapter ad = new SqlDataAdapter(select_str,strCN);
DataSet ds = new DataSet();
ad.Fill(ds, "mytable");
DataTable dt = ds.Tables[0];
string str="<ul>";
foreach (DataRow row in dt.Rows)
{
str+="<li>"+row[0]+"||"+row[1]+"||"+row[2]+"<li>";
}
str += "</ul>";
Response.Write(str);
}
}
}
C/S+B/S混合体系结构:
–混合原则一:“内外有别”的原则
–混合原则二:“查改有别”的原则
§混合原则一:“内外有别”的原则:
–企业内部用户通过局域网直接訪问数据库server
• C/S结构;
• 交互性增强;
• 数据查询与改动的响应速度高;
–企业外部用户通过Internet訪问Webserver/应用server
• B/S结构;
• 用户不直接訪问数据,数据安全。
§ “内外有别”模型的缺点是企业外部用户改动和维护数据时,速度较慢,较繁锁。数据的动态交互性不强
§混合原则二:“查改有别”的原则:
–无论用户处于企业内外什么位置(局域网或Internet),凡是须要对数据进行更新(维护和改动数据)操作的(Add, Delete, Update),都须要使用C/S结构;
–假设仅仅是运行一般的查询与浏览操作(Read/Query),则使用B/S结构。
§ “查改有别”模型体现了B/S体系结构和C/S体系结构的共同长处。
§但由于外部用户能直接通过Internet连接到数据库server,企业数据easy暴露给外部用户,给数据安全造成了一定的威胁。
分布式软件体系结构风格(C/S,B/S)的更多相关文章
- 软件体系结构C2风格
首先C2风格是最常用的一种软件体系结构风格.(下图为一个C2风格的架构图) C2是一种基于构件和消息的架构风格,可用于创建灵活的.可伸缩的软件系统.一个C2构架可以看成是按照一定规则由连接件连接的许多 ...
- EYES组——软件体系结构上机规划
EYES组——软件体系结构上机规划 考勤助手 第九周: 需求分析的详细撰写,并在此基础上探讨与完善,讨论软件的体系结构风格,画出初步的UML类图. 第十周: 选择合适的软件构架风格(3层C/S架构风格 ...
- DSSA特定领域软件体系结构
一.何为DSSA 特定领域软件架构(Domain Specific Software Architecture,DSSA)是一种有效实现特定领域软件重用的手段.简单地说,DSSA就是在一个特定应用领域 ...
- C/S和B/S两种软件体系结构
目前两种流行的软件体系结构就是C/S和B/S体系结构,下面对两种体系结构进行一下总结: 1.C/S(客户端/服务器模式): 客户端和服务器都是独立的计算机,客户端是面向最终用户的应用程序或一些接口设备 ...
- 软件体系结构-分层、代理、MVC、管道与过滤器
什么是软件架构? 程序或计算系统的软件体系结构是系统的一个或多个结构,包括软件元素.这些元素的外部可见属性以及它们之间的关系. ——Software Engineering Institute(SEI ...
- CassandraAppender - distributed logging,分布式软件logback-appender
农历年最后一场scala-meetup听刘颖分享专业软件开发经验,大受启发.突然意识到一直以来都没有完全按照任何标准的开发规范做事.诚然,在做技术调研和学习的过程中不会对规范操作有什么严格要求,一旦技 ...
- 软件工程通用软件体系结构主机终端模式、B/S 、C/S 结构和多层分布式结构
软件系统的体系结构经历了主机终端模式.客户机/服务器(C/S)模式.浏览器/服务器(B/S)和多层分布式结构. 主机/终端结构: 早期计算机系统多是单机系统,多个用户是通过联网终端来访问的,没有网络的 ...
- 软件体系结构经典问题——KWIC的分析和解决
KWIC作为一个早年间在ACM的Paper提出的一个问题,被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典.(From Wiki,FYI,D. L. Parnas uses a KWIC In ...
- <软件体系结构>实验框架选择及其说明
一.框架选择 本次实验,我所采取的框架是SSH框架.那么首先,我想简单的说明一下SSH框架,一方面给自己复习一下知识,另一方面也能使自己在以后看这篇博客的时候不至于太费力. SSH不是一个框架,而是S ...
随机推荐
- JQuery---选择器、DOM节点操作练习
一.练习一 1.需求效果分析: 2.代码示例: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...
- [Windows Server 2012] 更改服务器密码
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★[护卫神·V课堂]是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:更改服务器 ...
- karma+requirejs+angular 测试
http://karma-runner.github.io/0.8/plus/RequireJS.html karma 不是测试框架,只是一个运行测试框架的服务器 karma测试的原理是,将所有的文件 ...
- Digital design之Boolean Algebra
1. 0 and 1 (duality: 0 -- 1, · -- +) X + 0 = X, X · 1 = X X + 1 = 1, X · 0 = 0 2. Idempotent X + X = ...
- 动态设置缩放比例和html字体大小
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- 15Oracle Database 索引
Oracle Database 索引 索引 索引的目的是加快查询速度,就像一本数据的目录一样.建立索引的原则:非常少的DML操作:经常出现在where语句中的字段 2.20.1.建立索引 l 对t_ ...
- 【原】thinkphp修改Redis操作类,支持选择数据库功能及添加其他方法
版本3.2.2(ThinkPHP\Library\Think\Cache\Driver\Redis.class.php), 一:官方默认不支持选择数据库功能及,现就可选择数据库功能进行说明. 1 co ...
- CentOS下安装微软雅黑字体
CentOS下安装微软雅黑字体 微软雅黑下载地址:http://download.csdn.net/detail/u012547633/9796219 1.先从你本机 C:\Windows\Fon ...
- 10JDBC、CURD、XML、XPath
10JDBC.CURD.XML.XPath-2018/07/20 1.JDBC JDBC:java database connectivity JDBC与数据库驱动的关系:接口与实现的关系. JDBC ...
- Pycharm Anaconda 安装dlib
由于采用python3.7安装会出现各种问题,两种解决方法. 1)安装Cmake boost等(不推荐,麻烦且不容易成功). 2)安装Anaconda,创建一个python3.6的环境. 这里使用第二 ...