对很多人来说,云计算最大的特点就是“按需付费”。
这种模式对很多用户来说真的太友好了。用户不再需要投入很多的成本在维护上,且还可以便捷进行网络访问,进入可配置的网络、服务器、存储、应用软件、服务计算等资源共享池。
云计算除了“按需付费”这个特点外,还有以下四个特点~~
(1) 虚拟化用户不需要担心应用运行的具体位置,只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
(2) 高可靠性“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
(3) 通用性云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。
(4) 高可扩展性“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
最后,云计算也不是没有缺点,它也潜在危险性。
当涉及到云计算时,信息安全是大家重点关注的问题。通过远程云的基础架构,这个过程会有泄露敏感且机密的私人数据和信息的风险。
其次,云计算对提供的程序有一定依赖, 行业内称“供应商锁定”,这种一旦被供应商锁定后,用户就很难(有时甚至是不可能)从供应商那里进行迁移。 就算用户下定决心要迁移,把大量数据从旧提供者传输到新提供者,这个过程真的痛苦且麻烦。
分布式架构的演进
系统架构演化历程-初始阶段架构
初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP
特征:
应用程序、数据库、文件等所有的资源都在一台服务器上。
描述:
通常服务器 *** 作系统使用Linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用MySQL,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。
系统架构演化历程-应用服务和数据服务分离
好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver
特征:
应用程序、数据库、文件分别部署在独立的资源上。
描述:
数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。
系统架构演化历程-使用缓存改善性能
特征:
数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。
描述:
系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。
缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。
系统架构演化历程-使用应用服务器集群
在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢
特征:
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。
描述:
使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,提升系统的并发处理能力,使得服务器的负载压力不再成为整个系统的瓶颈。
系统架构演化历程-数据库读写分离
享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些 *** 作的部分数据库连接的资源竞争非常激烈,导致了系统变慢
特征:
多台服务器通过负载均衡同时向外部提供服务,解决单台服务器处理能力和存储空间上限的问题。
描述:
使用集群是系统解决高并发、海量数据问题的常用手段。通过向集群中追加资源,使得服务器的负载压力不在成为整个系统的瓶颈。
系统架构演化历程-反向代理和CDN加速
特征:
采用CDN和反向代理加快系统的 访问速度。
描述:
为了应付复杂的网络环境和不同地区用户的访问,通过CDN和反向代理加快用户访问的速度,同时减轻后端服务器的负载压力。CDN与反向代理的基本原理都是缓存。
系统架构演化历程-分布式文件系统和分布式数据库
随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作
特征:
数据库采用分布式数据库,文件系统采用分布式文件系统。
描述:
任何强大的单一服务器都满足不了大型系统持续增长的业务需求,数据库读写分离随着业务的发展最终也将无法满足需求,需要使用分布式数据库及分布式文件系统来支撑。
分布式数据库是系统数据库拆分的最后方法,只有在单表数据规模非常庞大的时候才使用,更常用的数据库拆分手段是业务分库,将不同的业务数据库部署在不同的物理服务器上。
系统架构演化历程-使用NoSQL和搜索引擎
特征:
系统引入NoSQL数据库及搜索引擎。
描述:
随着业务越来越复杂,对数据存储和检索的需求也越来越复杂,系统需要采用一些非关系型数据库如NoSQL和分数据库查询技术如搜索引擎。应用服务器通过统一数据访问模块访问各种数据,减轻应用程序管理诸多数据源的麻烦。
系统架构演化历程-业务拆分
特征:
系统上按照业务进行拆分改造,应用服务器按照业务区分进行分别部署。
描述:
为了应对日益复杂的业务场景,通常使用分而治之的手段将整个系统业务分成不同的产品线,应用之间通过超链接建立关系,也可以通过消息队列进行数据分发,当然更多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。
纵向拆分:
将一个大应用拆分为多个小应用,如果新业务较为独立,那么就直接将其设计部署为一个独立的Web应用系统
纵向拆分相对较为简单,通过梳理业务,将较少相关的业务剥离即可。
横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务
横向拆分需要识别可复用的业务,设计服务接口,规范服务依赖关系。
系统架构演化历程-分布式服务
特征:
公共的应用模块被提取出来,部署在分布式服务器上供应用服务器调用。
描述:
随着业务越拆越小,应用系统整体复杂程度呈指数级上升,由于所有应用要和所有数据库系统连接,最终导致数据库连接资源不足,拒绝服务。
Q:分布式服务应用会面临哪些问题?
A:
(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
(4) 服务多了,沟通成本也开始上升,调某个服务失败该找谁?服务的参数都有什么约定?
(5) 一个服务有多个业务消费者,如何确保服务质量?
(6) 随着服务的不停升级,总有些意想不到的事发生,比如cache写错了导致内存溢出,故障不可避免,每次核心服务一挂,影响一大片,人心慌慌,如何控制故障的影响面?服务是否可以功能降级?或者资源劣化?
Java分布式应用技术基础
分布式服务下的关键技术:消息队列架构
消息对列通过消息对象分解系统耦合性,不同子系统处理同一个消息
分布式服务下的关键技术:消息队列原理
分布式服务下的关键技术:服务框架架构
服务框架通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用
服务框架是一个点对点模型
服务框架面向同构系统
适合:移动应用、互联网应用、外部系统
分布式服务下的关键技术:服务框架原理
分布式服务下的关键技术:服务总线架构
服务总线同服务框架一样,均是通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务启用
服务总线是一个总线式的模型
服务总线面向同构、异构系统
适合:内部系统
分布式服务下的关键技术:服务总线原理
分布式架构下系统间交互的5种通信模式
request/response模式(同步模式):客户端发起请求一直阻塞到服务端返回请求为止。
Callback(异步模式):客户端发送一个RPC请求给服务器,服务端处理后再发送一个消息给消息发送端提供的callback端点,此类情况非常合适以下场景:A组件发送RPC请求给B,B处理完成后,需要通知A组件做后续处理。
Future模式:客户端发送完请求后,继续做自己的事情,返回一个包含消息结果的Future对象。客户端需要使用返回结果时,使用Future对象的get(),如果此时没有结果返回的话,会一直阻塞到有结果返回为止。
Oneway模式:客户端调用完继续执行,不管接收端是否成功。
Reliable模式:为保证通信可靠,将借助于消息中心来实现消息的可靠送达,请求将做持久化存储,在接收方在线时做送达,并由消息中心保证异常重试。
五种通信模式的实现方式-同步点对点服务模式
五种通信模式的实现方式-异步点对点消息模式1
五种通信模式的实现方式-异步点对点消息模式2
五种通信模式的实现方式-异步广播消息模式
分布式架构下的服务治理
服务治理是服务框架/服务总线的核心功能。所谓服务治理,是指服务的提供方和消费方达成一致的约定,保证服务的高质量。服务治理功能可以解决将某些特定流量引入某一批机器,以及限制某些非法消费者的恶意访问,并在提供者处理量达到一定程度是,拒绝接受新的访问。
基于服务框架Dubbo的服务治理-服务管理
可以知道你的系统,对外提供了多少服务,可以对服务进行升级、降级、停用、权重调整等 *** 作
可以知道你提供的服务,谁在使用,因业务需求,可以对该消费者实施屏蔽、停用等 *** 作
基于服务框架Dubbo的服务治理-服务监控
可以统计服务的每秒请求数、平均响应时间、调用量、峰值时间等,作为服务集群规划、性能调优的参考指标。
基于服务框架Dubbo的服务治理-服务路由
基于服务框架Dubbo的服务治理-服务保护
基于服务总线OSB的服务治理-功能介绍
基于服务总线OSB的服务治理
Q:Dubbo到底是神马?
A:
淘宝开源的高性能和透明化的RPC远程调用服务框架
SOA服务治理方案
Q:Dubbo原理是?
A:
-结束-
1)数据数据的概念十分广泛,它通常是对客观事物的数量、特征、性质的描述。对计算机而言,数据是计算机所能处理的一切数值、字符、图形或其他特定符号的总称,是计算机加工处理的“原料”和它所生产的“产品”(计算的结果)。2)数据元素数据元素是数据的基本单位,也称作结点和记录。在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。3)数据对象数据对象是具有相同性质的数据元素的集合,是数据的子集。 1、 数据结构(Data Structure)
数据结构是指同一数据对象中个数据元素之间存在的关系(相互间存在一种或多种特定关系的数据元素的集合)。
根据数据结构的形式定义,数据结构是一个二元组:
S(Data-Structure)=(D,R)
其中:D是数据元素的有限集,R是D上关系的有限集。
逻辑结构与物理结构
数据之间的相互关系称为逻辑结构。通常分为三类基本结构:
(一)集合:结构中的数据元素除了同属于一种类型外,别无其它关系。
(二)线性结构:结构中的数据元素之间存在一对一的关系。
(三)非线性结构:
树型结构——结构中的数据元素之间存在一对多的关系。
图状结构或网状结构——结构中的数据元素之间存在多对多的关系。
数据结构在计算机中的表示称为数据的物理结构,又称为存储结构。
(一般我们将数据的逻辑结构称为是数据结构,)
存储结构可分为:顺序存储与链式存储。
顺序存储结构——借助元素在存储器中的相对位置来表示数据元素间的逻辑关系;
链式存储结构——借助指示元素存储地址的指针表示数据元素间的逻辑关系。
数据的逻辑结构与存储结构密切相关。
212 线性表
1)线性表定义
线性表(Linear List) :由n(n≧)个数据元素(结点)a1,a2, …an组成的有限序列。其中数据元素的个数n定义为表的长度。当n=0时称为空表,常常将非空的线性表(n>0)记作:
L = (a1,a2,…an)
这里的数据元素ai(1≦i≦n)只是一个抽象的符号,其具体含义在不同的情况下可以不同。
2)线性表特点
线性表的逻辑结构有以下特点:
在数据元素的非空有限集中
Ø 存在唯一的一个被称作“第一个”的数据元素
Ø 存在唯一的一个被称作“最后一个”的数据元素
Ø 除第一个外,集合中的每个数据元素均只有一个前驱
Ø 除最后一个外,集合中的每个数据元素均只有一个后继
3)线性表的基本运算
线性表的主要运算有:
插入:在两个确定元素之间插入一个新元素;
删除:删除线性表中的某个元素;
查找:按某种要求查找线性表中的一个元素,需要时还可以进行更新;
排序:按给定要求对表中元素重新排序;
还有初始化、求长度等。
在不同问题的线性表中,需要进行的运算也不相同,实际应用中还可能涉及建立线性表、修改表中元素数值(编辑)等运算,但是基本上可以由上述四种运算组成。
4)顺序存储线性表
(1)顺序存储结构
把线性表的数据元素,按顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表,也称为向量式存储结构。
假设线性表的每个元素需占用个存储单元,且线性表在内存中的首地址为,则线性表中第个数据元素的存储地址为:
则线性表中第个数据元素的存储位置和第个数据元素的存储位置之间满足下列关系:
这种存储结构只要知道数据元素序号,就很容易找到第个数据元素。它的主要特点有:一、各数据元素存储地址上相邻;二、无论序号为何值,找到第个元素的时间相同。
这种存储结构在高级语言中可以用一维数组的形式实现。
(2)顺序存储结构的优缺点
优点
Ø 逻辑相邻,物理相邻;
Ø 可随机存取任一元素;
Ø 存储空间使用紧凑。
缺点
Ø 插入、删除 *** 作需要移动大量的元素;
Ø 预先分配空间需按最大空间分配,利用不充分;
Ø 表容量难以扩充。
5)线性链表
特点:
Ø 用一组任意的存储单元存储线性表的数据元素;
Ø 利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素;
Ø 每个数据元素,除存储本身信息外,还需存储其直接后继的信息。
数据元素由两部分组成:
Ø 数据域:存放元素本身信息;
Ø 指针域:指示直接后继的存储地址。
线性链表一般在第一个结点之前附加一个头结点:
213 栈与队
栈和队是两种特殊的线性表,它们的运算规则较一般线性表由更多的约束和限制,因此称作限定性数据结构。
1)栈的结构和运算
(1)栈的定义
栈(Stack)是限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom)。当表中没有元素时称为空栈。
假设栈,则称为栈底元素,为栈顶元素。栈中元素按的次序进栈,的顺序退栈,退栈的第一个元素应为栈顶元素。换句话说,栈的修改是按后进先出的原则进行的。因此,栈称为后进先出表(LIFO,last in first out)。
栈的存储结构也有顺序与链式两种,称为顺序栈与链栈。
(2)顺序栈
由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。
栈的顺序存储结构简称为顺序栈,它是运算受限的线性表。因此,可用数组来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈 *** 作而变化的,故需用一个整型变量top来指示栈顶位置。如果用m来表示栈的最大容量,则top=0表示栈空,此时出栈,则下溢(underflow);top=m表示栈满,此时入栈,则上溢(overflow)。
(3)栈的应用
表达式求值
表达式求值步骤:首先在OS栈中放入表达式结束符“;”,
l 若为 *** 作数,将其压入NS栈;
l 若为运算符,比较当前OS栈的栈顶元素:
ü 若当前运算符的优先数大于OS栈顶的运算符,则将当前运算符压入OS栈;
ü 若当前运算符的优先数不大于OS栈顶运算符,则从NS栈中d出两个 *** 作数x,y,再从OS中d出一个运算符,,并将结果T送入NS栈。
ü 若当前运算符为“;”,且OS栈顶也为“;”,则表示表达式处理结束,此时,NS栈顶元素即为此表达式值。
过程嵌套和递归调用
过程嵌套调用如图所示:
当调用子过程时,必须把断点的信息及地址保存起来,当子过程执行完毕,返回时,取用这些信息,找到返回地址,从此断点继续执行。当程序中出现多重嵌套调用时,必须开辟一个栈,将各层断点信息依次入栈,当各层子过程返回时,又以相反的次序从栈顶取出。
递归调用
函数直接或间接地调用自身叫递归调用,这主要时用递归工作栈来实现的。下面举一个简单的例子来说明递归调用。
例 一段递归调用的C语言程序如下:
void print(int w)
{
int I;
if (w!=0)
{
print (w-1);
for (I=1; I<=w; ++I)
printf(“%3d,”,w);
printf(“/n”);
}
}
在这段程序中,递归调用的执行过程如图所示:
2) 队的结构和运算
(1)队的定义
队是限定只能在表的一端进行插入,在表的另一端进行删除的线性表。
队尾(rear)——允许插入的一端
队头(front)——允许删除的一端
队的特点是:先进先出(FIFO)
(2)顺序队
存在问题:
设数组维数为M,则:
当front=-1,rear=M-1时,再有元素入队发生溢出——真溢出
l当front¹-1,rear=M-1时,再有元素入队发生溢出——假溢出
解决方案:
l 队首固定,每次出队剩余元素向下移动——浪费时间
l 循环队列
Ø 基本思想:把队列设想成环形,让sq[0]接在sq[M-1]之后,若rear+1==M,则令rear=0;
Ø 实现:利用“模”运算
入队: rear=(rear+1)%M; sq[rear]=x;
出队: front=(front+1)%M; x=sq[front];
Ø 队满、队空判定条件
front=rear
解决方案:
n 另外设一个标志以区别队空、队满
n 少用一个元素空间:
队空:front==rear
队满:(rear+1)%M==front
214 数组
1)数组的定义
(1)定义
数组可以看成是一种特殊的线性表,即线性表中数据元素本身也是一个线性表。用线性表的一般表示形式定义二维数组为:
其中,K由个结点组成:
R由以下两种关系组成:
(2)数组特点
l 数组结构固定
l 数据元素同构
(3)数组运算
数组一旦被定义,它的维数和数据元素的个数就已经固定,不能插入和删除,所以数组运算只有:
l 给定一组下标,存取相应的数据元素
l 给定一组下标,修改数据元素的值
2)数组的顺序存储结构
由于计算机的内存结构是一维的,因此用一维内存来表示多维数组,就必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放在存储器中。
又由于对数组一般不做插入和删除 *** 作,也就是说,数组一旦建立,结构中的元素个数和元素间的关系就不再发生变化。因此,一般都是采用顺序存储的方法来表示数组。
根据不同的存放形式,可以分为按行优先和按列优先顺序存放。
(1)按行优先顺序存放
按行优先顺序存放,对二维数组来说就是按行进行切分,如图所示:
假设每个数据元素只占一个单元地址,则元素的存放地址可以通过以下关系式计算:
(2)按列优先顺序存放
如果数组按列切分,就得到按列优先顺序存放方式。如图所示:
元素的存放地址可以通过以下关系式计算:
215 树与二叉树
1)树的定义及其存储结构
(1)树的定义和术语
定义:树(Tree)是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:
(1)有且仅有一个特定的称为根(Root)的结点;
(2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,T3…Tm,其中每个子集又是一棵树,并称其为子树(Subtree)。
基本术语:
l 结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支;
l 结点的度(degree)——结点拥有的子树数;
l 叶子(leaf)——度为0的结点;
l 孩子(child)——结点子树的根称为该结点的孩子;
l 双亲(parents)——孩子结点的上层结点叫该结点的双亲;
l 兄弟(sibling)——同一双亲的孩子;
l 树的度——一棵树中最大的结点度数;
l 结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层……;
l 深度(depth)——树中结点的最大层次数;
l 森林(forest)——m(m>=0)棵互不相交的树的集合;
(2)树的存储结构
树的存储结构有多种形式,这里只讨论链式存储结构。因为树是多分支非线性表,因此采用多重链表结构,即每个结点设有多个指针域,其中每个指针指向一棵子树的根结点。对于每一个结点的结构类型有两种形式:结点异构型、结点同构型。
结点异构型,是根据每个结点的子树数设置相应的指针域,由于每个结点的度数不同,则同一棵树中,结点形式也不同。这种结构形式虽然能节省存储空间,但运算不方便。
结点同构型,是每个结点的指针域个数均为树的度数。这种形式运算方便,但会使链表中出现很多空链域,浪费空间。
当树的度数k=2时,空链域的比例最低,这就是要介绍的二叉树。
2)二叉树及其性质
二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多 *** 作算法简单,而任何树都可以与二叉树 相互转换,这样就解决了树的存储结构及其运算中存在的复杂性。
(1)二叉树定义及其存储结构
定义:二叉树是由n(n>=0)个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。
这也是一个递归定义。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。
二叉树结点的子树要区分左子树和右子树,即使只有一棵子树也要进行区分,说明它是左子树,还是右子树。这是二叉树与树的最主要的差别。
图2-8 二叉树
存储结构:通常用具有两个指针域的链表作为二叉树的存储结构,其中,每个结点由数据域(data)、左指针域(L child)和右指针域(R child)组成,如图所示:
图2-9 二叉链表
这就是二叉链表,还有三叉链表就是在这一基础上增加一个双亲结点指针。
(2)二叉树的基本性质
(1) 在二叉树的第层上,至多有个结点。
(2) 深度为h的二叉树中,至多含有个结点。
(3) 对任意一棵二叉树,若有个子结点,个度为2的结点,则必有。
(3)几种特殊形式的二叉树
l 满二叉树
一棵深度为h且有2h-1个结点的二叉树称为满二叉树。
l 完全二叉树
如果深度为h、有n个结点的二叉树中的结点能够与深度为h的顺序编号的满二叉树从1到n标号的结点相对应,则该树称为完全二叉树。
完全二叉树的特点是:
所有的叶结点都出现在第h层或h-1层。
错任一结点,如果其右子树的最大层次为1,则其左子树的最大层次为1或l+1。
满二叉树是完全二叉树的特例。
(1) 平衡二叉树
所有结点的平衡因子为-1、0、1。
(4)一般树转换为二叉树
为了使一般树也能象二叉树一样用二叉树链表表示,必须找出树与二叉树之间的对应关系。将一般树转换为二叉树的方法为:
(1) 在兄弟结点之间加一连线;
(2) 对每个结点,除了与它的第一个孩子保持联系外,去除与其它孩子的联系;
(3) 以树根为轴心将整棵树顺时针旋转45度。
任何一棵树转换为二叉树,其根结点的右子树必为空。
3)二叉树的遍历
遍历——按一定规律走遍树的各个结点,每一结点仅被访问一次,即找一个完整而有规律的走法,以得到树中所有结点的一个线性排列。
常用方法
先序遍历(DLR):先访问根结点,然后分别先序遍历左子树、右子树
中序遍历(LDR):先中序遍历左子树,然后访问根结点,最后中序遍历右子树
后序遍历(LRD):先后序遍历左、右子树,然后访问根结点
22 工程手册的数据处理
基本要求:
(1)熟悉工程手册的数据处理方法;(2)掌握数表的程序化方法;(3)了解线图的程序化方法;(4)掌握最小二乘法拟合方法及其应用;(4)能用高级程序设计语言(如C语言)编写前述相应数据处理方法的基本程序并上机通过。
教学内容:
(1)数表的程序化;(2)线图的程序化;(3)建立经验公式的方法。
重点与难点:
重点:(1)查表程序设计;(2)一元函数的插值;(3)最小二乘法拟合。
难点:(1)抛物线插值中结点的选取;(2)插值程序设计及上机调试;(3)最小二乘法拟合程序设计及上机调试。
学时安排:
讲课4学时,课外上机练习不少于2学时。
在机械设计过程中,往往需要从有关的工程手册或设计规范中查找各种设计数据(资料)。这些数据在手册或规范中一般是以数表和线图的形式存放(记录)的。在进行机械CAD时,首先要把这些数表、线图形式的数据计算机化,即把它们存入计算机外、内存储器中,并设计相应的自动检索程序。
从总体上说,这些设计资料的计算机处理有以下三种方法:
(1)程序化:在应用程序内部对这些数表和线图进行处理,包括数组法和拟合公式法。
(2)数据文件法:将数表或线图中得数据编成一个独立的数据文件,存入外存,供设计解题时调用。高级程序设计语言本身一般均具备相应的数据文件处理功能。
(3)数据库法:将数表或线图中的数据暗数据库中的规定进行文件结构化,即建成数据库。
本章重点讨论程序化方法,补充介绍有关数据文件法的基本内容,数据库存储方法在后面第5章中介绍。
221 数表的程序化
l 数表的形式:
从函数角度看有:
单变量表:eg T3-1~T3-3
双变量表:eg T3-4~T3-5 单值表:eg T3-3~T3-6
多变量表:eg T3-6 多值表:eg T3-1~T3-2
无变量表:eg 齿轮标准模数(m)系列值。
l 数表数据的形成(来源)及处理原则:
(1)有些本来就有精确的计算公式,为了便于手工设计使用,才制成表格供设计时查用(如各种数学用表)——力求找到原来的理论计算公式或经验公式→编入应用程序。(最简单的方法)。
(2)对大多数数表而言,或本来就无法表达成公式,或一时难以找到原来公式——程序化处理。
l 数表程序化方法:
1) 数组法:适于只需要用数表中所列数据(离散点、型值点或结点数据),
2) 插值法(拟合公式法):对于需要用到数表中各离散点中间的数据。
1)数组法实例
本教材共介绍了六个实例,这里选取二个重点介绍,其余四个自己分析。
例1 平键和键槽的剖面尺寸,见图2-10和表2-1(摘引自GB/T 1095-1979)
它是单变量多值表。查表时,设计计算出的轴径dgiven→D(范围) →b,h,t,t1。可使用一维数组,D的范围可用其上限表示。变量及数组的定义:
int i;
float dgiven,b,h,t,t1;
float D[12]={100,120,…,850};
float kb[12]=…
float kt[12]=…
图2-10 平键和键槽的剖面图
表2-1 平键和键槽的尺寸表
图2-11平键和键槽的剖面尺寸查询流程
尺寸查取流程图见图2-11。
要求:用C(Turbo C or Visual C++等均可)语言编程实现该数表数据存储及查询。
例2 齿轮传动工况系数KA,见表2-2。
表2-2 齿轮传动工况系数KA
图2-12 齿轮传动工况系数KA查询流程
根据原动机机、工作机的工况→KA,使用二维数组:KK[i][j],i=0~2:表示原动机工况,j=0~2:表示工作机工况。
变量及数组定义:
float KA;
int i,j;
float;
KK[3][3]={{10,125,175},{125,15,20},{15,175,225}};
查表程序流程图见图2-12。
要求:用C(Turbo C or Visual C++等均可)语言编程实现该数表数据存储及查询。
例3 说明:多变量单值表
① P1值需用三维数组NN(4,4,14),可以将P1值→数据文件→NN数组。
② 降维处理:三维→二个二维。
2) 一元函数的插值
设有一用数据表格给出的列表函数y=f(x),如下表2-3:
表2-3 列表函数y=f(x)
表中只有几个离散点(或型值点、结点)的数据,当自变量为结点间的中间值时,就要用到插值法求取其函数值。
基本思想:在插值点附近选取几个合适的结点,过这些点构造一个简单函数g(x),在此小段上用g(x)代替原来函数f(x),这样插值点的函数值就用g(x)的值来代替,如图2-13。
图2-13 一元函数插值
插值的实质问题:如何构造一个既简单又具有足够精度的函数f(x)。
插值方法类型:线性插值、抛物线插值。
(1)线性插值
方法步骤:(1)选xi,xi+1,满足xi<x< xi+1;(2)过(xi,yi)及(xi+1,yi+1)两点构造直线g(x)→f(x)。
误差问题:存在误差,当自变量间隔较小,而插值精度不要很高时,可以满足要求。
x(n),y(n)——一维数值,n——结点数。C语言下标从0开始。xgiven,ygiven——已知的x 插入值及求出的函数值。
图2-14 线性插值流程
(2)抛物线插值
在f(x)上选取三点(xi-1,yi-1),(xi,yi),(xi+1,yi+1),构造抛物线g(x)→f(x)。比线性插值精度好。
关键问题:根据插值点x选取合适的三个点。选取方法归纳为(“靠近原则”):
设插值点为x,且xi-1<x≤xi,i=3,4,…,n-1,
(1)若|x-xi-1|≤|x-xi|,即x靠近xi-1点或居于xi-1与 xi之中点,则选xi-2,xi-1,xi三个点,上式中i=i-1;
(2)若|x-xi-1|>|x-xi|,即x靠近xi点,则选xi-1,xi,xi+1三个点,上式中i=I;
(3)若x1≤x≤x2,即x靠近表头,则选x1,x2,x3三个点,上式中i=2;
(4)若x n-1≤x≤xn,即x靠近表尾,则选xn-2,xn-1,xn三个点,上式中i=n-1。
程序流程图见下图2-15。
图2-15 抛物线插值流程
要求:将线性插值与抛物线插值统一编程。
3)二元函数的插值
有二元列表函数f(xi,yi),i=1,2,…,n,如下表2-4。
表2-4 二元列表函数
插值几何意义:在3D空间中选定几个点,通过这些点构造一块曲面g(x,y),用它近似地表示在这区间内原有的曲面f (x,y),从而得到插值后的函数值Zk=g(xk,yk) , 如图2-15所示。
插值方式类型,在一元函数插值方法的基础上延伸,有以下几种:
(1)直线-直线插值
最最基本、最简单、精度最低。
如图所示,g(x,y)形成:以AB、CD为导线,作//yoz平面的直母线(EF)直线的运动→柱状面。
插值步骤:
图2-15 二元函数插值
图2-16 抛物线插值流程
(a)根据k点的(xk,yk)→周围四点a,b,c,d,满足xa=xc,xb=xd,ya=yb,yc=yd,xa<xk<xb,ya<yk<yb;
(b)A,B,C,D,过A,B用线性插值→E,过C,D用线性插值→F;
(c)过E,F用线性插值→K点。
(2)抛物线-直线插值
将导线AB、CD→抛物线ABE,CDF。插值步骤:
(1)据k点的(xk,yk)→a,b,c,d+e,f;
(2)据a,b,c,d,e,f→A,B,C,D,E,F,过A,B,E 用抛物线插值→U点,过C,D,F用抛物线插值→V点;
(3)U,V用线性插值→K点。
(3)抛物线-抛物线插值
(1)据k点的(xk,yk)→a,b,c,d+e,f+r,s,t;
(2)据a,b,c,d, e,f,r,s,t→A,B,C,D,E,F,R,S,T,
过A,B,E用抛物线插值→U点,过C,D,F用抛物线插值→V点,过R,S,T用抛物线插值→W点;
(3) 过U,V,W用抛物线插值→K点。
上述三种插值方法统一的程序流程图见P44图3-10,三种方法由变量II控制。
要求:读懂该流程图,有余力的学生编程上机。
222 数表的公式拟合
工程实际中常需要用一定的数学方法将一系列测试数据或统计数据拟合成近似的经验公式——曲线拟合。
插值法的实质是在几何上用严格通过各结点的曲线或曲面来近似代替列表函数曲线或曲面。但通过试(实)验所得的数据离散性很大,误差比较大,因此,插值法建立的公式必然保留了所有误差,此外,要构造这样的函数的复杂度或难度比较大。有鉴于此,采用构造近似曲线、曲面,此曲线、曲面并不严格通过所有结点,而是尽可能反映所给数据的趋势,这种利用所给数据建立拟合或近似曲线或曲面经验公式的过程称为曲线、曲面拟合或公式拟合。
本节介绍最常用最基本的单变量曲线拟合方法——最小二乘法。(其他常用的还有Bezier法、三次参数样条法、B样条法等)。
1)最小二乘法拟合的基本思想
根据离散点的大致分布规律,先确定拟合函数的类型,如多项式函数、指数函数、对数函数等,计算出各数据点横坐标处的函数值与纵坐标之间的偏差的平方,求其和并使之为最小值,从而解出函数的待定系数。
已知由线图或实验所得m个点的值为:(x1,y1),(x1,y1),……,(xm,ym),设拟合函数公式为:y=f(x),则每一结点处的偏差为: (i=1,2,…,m),偏差的平方和为:
求 min 函数f(x)的待定系数→ f(x)
拟合函数的类型,常选取初等函数,如对数函数、指数函数、代数多项式等。一般是根据数据曲线形态判断所采用的函数类型。最常用的是代数多项式拟合。本节只讨论在选定函数类型的情况下如何确定各系数值的问题。
2)最小二乘法的(代数)多项式拟合
设拟合公式为: (n次多项式)
已知m个点的值(x1,y1),(x1,y1),……,(xm,ym),且m>>n,结点偏差的平方和为:
为使 j=0,1,2,…,n
其中:(k=1,2,…,2m+1)
这是一个关于的n+1个线性方程组,求解该方程组→→f(x)
常用二次三项式拟合公式:
例1 介绍
程序流程图,见P44图3-13
要求:看懂该流程图,该流程图中采用了高斯消去法解联立方法(详见334节),有余力的学生编程上机。
云计算特点如下:\x0d\(1) 超大规模\x0d\“云”具有相当的规模,Google云计算已经拥有100多万台服务器, Amazon、IBM、微软、Yahoo等的“云”均拥有几十万台服务器。企业私有云一般拥有数百上千台服务器。“云”能赋予用户前所未有的计算能力。\x0d\(2) 虚拟化\x0d\云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。\x0d\(3) 高可靠性\x0d\“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。\x0d\(4) 通用性\x0d\云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。\x0d\(5) 高可扩展性\x0d\“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。\x0d\(6) 按需服务\x0d\“云”是一个庞大的资源池,你按需购买;云可以像自来水,电,煤气那样计费。\x0d\(7) 极其廉价\x0d\由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势,经常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。\x0d\云计算可以彻底改变人们未来的生活,但同时也要重视环境问题,这样才能真正为人类进步做贡献,而不是简单的技术提升。\x0d\(8) 潜在的危险性\x0d\云计算服务除了提供计算服务外,还必然提供了存储服务。但是云计算服务当前垄断在私人机构(企业)手中,而他们仅仅能够提供商业信用。对于政府机构、商业机构(特别像银行这样持有敏感数据的商业机构)对于选择云计算服务应保持足够的警惕。一旦商业用户大规模使用私人机构提供的云计算服务,无论其技术优势有多强,都不可避免地让这些私人机构以“数据(信息)”的重要性挟制整个社会。对于信息社会而言,“信息”是至关重要的。另一方面,云计算中的数据对于数据所有者以外的其他用户云计算用户是保密的,但是对于提供云计算的商业机构而言确实毫无秘密可言。所有这些潜在的危险,是商业机构和政府机构选择云计算服务、特别是国外机构提供的云计算服务时,不得不考虑的一个重要的前提。
(一)体系结构
浙江省农业地质环境信息系统的体系统结构拟采用客户机/服务器(Client/Server)模式。虽然浏览器和服务器(Browser/Server)模式具有系统容易集成、维护工作量少、易于升级、可基于Internet的远程访问特点,且最近几年随着网络速度提高得到快速应用,但B/S模式在评价模块开发和三维数据传输方面,尤其在空间分析方面的实现上仍难以解决,故仍选用技术上比较成熟也是占主流的C/S模式。AGEIS采用C/S模式的优势主要表现在以下几点。
1)可采用空间数据引擎技术,为任何支持的客户应用提供空间数据服务。ArcSDE是ESRI公司提供的空间数据库引擎,是地理信息系统通向关系数据库管理系统(RD67BMS)的关口(Gateway)。ArcSDE基于客户机/服务器环境运行,而且其提供了真正的客户机/服务器计算环境,通过TCP/IP横跨任何同构或异构网络,利用SQL引擎执行空间数据的搜索,将满足空间和属性搜索条件的数据通过异步缓冲机制发回到客户端,用户能利用基于GIS的人机交互界面查询获取农业地质环境的空间或属性信息,也能较好地解决并发 *** 作问题。相对于应用客户端直接访问后台空间数据库的2层结构的C/S体系而言,引入引擎层的应用体系使得数据提供者和数据应用者能够专心于各自专业领域的开发应用,也使系统的GIS功能应用与后台数据访问实现分离,从而降低了系统的复杂度,也使得空间数据库的数据能够被充分地利用和共享。
2)有利于充分利用服务器的资源,实现数据一体化管理。客户端和服务器端将应用的处理要求分开,同时又共同实现其处理要求,服务器通过SDE和SQLServer为多个客户端应用程序管理数据,而客户端程序发送、请求和分析从服务器接收的数据,应用服务器运行数据负荷较轻。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,具有强大的数据 *** 纵和事务处理能力,以及严密的数据安全性和完整性约束特点。
3)C/S模式是一种开放式的结构,系统的扩充十分简便。只在服务器端配有ArcSDE空间数据引擎、RDBMS的SQL引擎及数据库存储管理系统,而不必在每个客户端配置空间数据库管理系统,客户端只安装AGEIS的应用程序。客户端和服务器部件(组件和应用程序)分别运行的模式,这对于硬件和软件的变化有极大的适应性和灵活性,易于对系统进行扩充和缩小,提高性价比。
(二)网络拓扑结构
系统的网络环境采用星形拓扑结构(修文群等,1999),如浙江省地质调查院的三级网络(图3-2),服务器端安装相应的数据库系统和空间数据引擎,浙江省农业地质环境数据库物理上存储在服务器中,客户端安装AGEIS系统即可。
图3-2网络拓扑结构示意图
以上就是关于云计算特点是什么全部的内容,包括:云计算特点是什么、如何用java 建立一个分布式系统、C++或Basic编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)