C/S结构的两层模型、三层模型及多层模型

1)两层结构

C/S结构中有传统的两层结构和新型的三层结构之分。二层结构最早在20世纪80年代后期引入业界的,它为多用户系统提供了前所未有的双向交流感和灵活性,革命性的改变了传统的应用设计和系统实现方式,很快便在各种类型的软件系统设计与开发中获得了广泛应用。两层结构的处理流程可表示为:

两层网络计算模式=多Client+单/多Data Server+动态计算

两层结构的应用软件模型可表示为:

用户界面

应用逻辑jt.gif
SQL语言
数据库服务器

客户机

 服务器

在这种模式中,服务器只负责各种数据的处理和维护,为各个客户机应用程序管理数据;客户机包含文档处理软件、决策支持工具、数据查询等应用逻辑程序,通过网络使用SQL语言发送、请求和分析从服务器接收的数据。这是一种“胖客户机(Fat Client)”、“瘦服务器(Thin Server)”的网络结构模式。目前众多的基于Internat/Internet网络农业专家软件均属这种结构。

随着C/S结构应用范围的不断扩大和计算机网络技术的发展,这种结构带来的问题如系统的可靠性有所降低、缺乏灵活性、资源浪费严重以及维护费用较高等等日益明显,网络计算模式逐渐从两层模式扩展到N展模式,并且结合动态计算,解决了这一问题。

2)三层结构

目前最流行的多层模式是三层结构,其处理流程可表示为:

三层网络计算模式=多浏览器+单Web服务器+多数据服务器+动态计算

三层结构的应用软件模型可表示为:

用户界面
自定义协议jt.gif
应用逻辑SQL语言jt.gif数据库
客户机 应用服务器 数据库服务器

在三层结构中,应用逻辑程序己从客户机上分离出来,不但作为一个应用服务器,而且又成为一个浏览的Web服务器。这是一种“瘦客户机(Thin Client)”网络结构模式,客户端只存在界面显示程序,只需在服务器端随机增加应用服务,即可满足系统的需要,可以用较少的资源建立起具有很强伸缩性的系统,这也是当前Internet上最先进的技术之一。

(3)多层结构

多层结构的应用程序把业务逻辑独立出来,组成一层或多层。形成客户层界面、中间业务处理层(可由多层组成)和后端数据服务层,应用系统开发模式变为:

1)客户端人机界面的开发。开发大大简化,只注重人机界面的设计,不必关心业务逻辑和数据库的访问,可以是瘦客户机。

2)中间业务逻辑层。提供客户端程序调用的业务逻辑规则,以完成其业务操作,业务逻辑改变时,客户端界面可以不作变化。

3)数据库服务层。提供对数据库进行各种操作的方法,被中间业务逻辑层调用完成业务逻辑。

多层结构中,层次的划分不是物理上的划分,而是结构逻辑上的划分,按应用目标划分。如果客户端要求响应速度很快,业务组件的体积较小,业务组件可以放在客户端;如果业务组件包含大量对数据库的操作,可以配置在数据库服务器上,以减少网络负载,提高运算速度;如果业务组件可供大多数客户机程序访问,则可以使用业务组件构成一个应用服务器,供大家访问。

多层结构的优点是:(1)可伸缩性好。可按应用要求部署逻辑层次,适应于本地网和广域网。(2)网络效率高。经过合理的布局,通过网络的传输数据量大大减少,提高了网络效率。(3)可管理性强。系统客户层基本实现“零维护”,主要管理工作集中在应用逻辑层,业务逻辑的修改对客户层没有影响。(4)可重用性好。按可提供的服务构筑应用,每种服务可以被不同的应用重用。由于采用面向对象的组件构成,进一步增加了系统的可重用性。(5)安全性较好。

采用多层结构的也存在一些困难:(1)初始开发周期延长。按组件方式开发,多层结构比传统C/S结构需要做的工作量多。(2)开发的复杂性增加。除了考虑应用核心业务以外,开发人员还应考虑应用程序的性能、安全性、伸缩性、可靠性和可恢复能力。要求开发人员对系统有更深层次的了解。(3)、对系统的设计、规划要求更高。对系统结构的设计、根据业务规划合理划分组件,以及服务的布局,将是设计人员考虑的重点。

本文部分资料摘自王宝金的文章

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8816263/viewspace-1006692/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8816263/viewspace-1006692/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个基于多层神经网络的二分类python代码,用于分类声音信号,可以保存模型文件,并且时刻输出权重: ``` import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout from keras.callbacks import ModelCheckpoint # 加载数据集 X_train = np.load('X_train.npy') y_train = np.load('y_train.npy') X_test = np.load('X_test.npy') y_test = np.load('y_test.npy') # 创建模型 model = Sequential() model.add(Dense(512, input_dim=X_train.shape[1], activation='relu')) model.add(Dropout(0.2)) model.add(Dense(256, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(1, activation='sigmoid')) # 编译模型 model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # 输出权重 model.summary() # 设置保存模型的回调函数 checkpoint = ModelCheckpoint(filepath='model.h5', monitor='val_accuracy', save_best_only=True) # 训练模型 model.fit(X_train, y_train, epochs=50, batch_size=64, validation_data=(X_test, y_test), callbacks=[checkpoint]) # 评估模型 loss, accuracy = model.evaluate(X_test, y_test) print('Test loss:', loss) print('Test accuracy:', accuracy) ``` 解释: 1. 导入必要的库:numpy、Keras中的Sequential、Dense、Dropout以及ModelCheckpoint。 2. 加载数据集:X_train、y_train、X_test和y_test。 3. 创建模型:使用Sequential创建一个多层神经网络模型,包含三个Dense层和两个Dropout层。 4. 编译模型:使用二元交叉熵作为损失函数,Adam作为优化器,同时监控模型的准确率。 5. 输出权重:使用summary方法输出模型结构以及权重信息。 6. 设置保存模型的回调函数:使用ModelCheckpoint回调函数,在验证集上监控模型的准确率,在每个epoch结束后保存最好的模型。 7. 训练模型:使用fit方法训练模型,进行50个epochs的训练,每次训练使用64个样本。 8. 评估模型:使用evaluate方法评估模型在测试集上的表现,输出测试集上的损失函数和准确率。 9. 最后,模型会被保存到当前工作目录下的model.h5文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值