我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>人物访谈

方裕:GIS技术发展重要方向----网格GIS

文章来源:新浪科技  各位下午好,我今天下午报告的题目是网格GIS。网格计算技术的名字比较新,实际上由来已久。20世纪的60年代的时候已经进入了第三代计算机,这个时候就有这样一种梦想,能不能把计算机连起来变成一个超级计算机,变成一个大的计算环境,可以共享计算资源。那个时候只是仅仅说说而已,因为网络技术没有发展到这个程度。当时局域网还不太成熟,所以仅仅是一些想法。到70年代、80年代的时候局域网的技术已经基本成熟了,所以这个时候就正式提出“分布式计算”,分布式计算在美国当时也花了上百万美元开始研究,开始研究的这个公司 作者: 发布时间:2009年11月19日 点击数: 字号:

来源:新浪科技

  各位下午好,我今天下午报告的题目是网格GIS。网格计算技术的名字比较新,实际上由来已久。20世纪的60年代的时候已经进入了第三代计算机,这个时候就有这样一种梦想,能不能把计算机连起来变成一个超级计算机,变成一个大的计算环境,可以共享计算资源。那个时候只是仅仅说说而已,因为网络技术没有发展到这个程度。当时局域网还不太成熟,所以仅仅是一些想法。到70年代、80年代的时候局域网的技术已经基本成熟了,所以这个时候就正式提出“分布式计算”,分布式计算在美国当时也花了上百万美元开始研究,开始研究的这个公司后来倒闭了。

  当时第一个实验系统叫MEDUSA,是用了12台PDP器,当然那个时候由于种种原因特别是技术上的原因,包括系统软件方面的原因,最后这个项目以失败告终。但是给人们留下了很多思考的问题,也就是说它的教训为后人积淀了很多避免类似错误发生的基础。分布式计算那个时候失败以后沉寂了一段时间,80年代以后也没有再提分布式计算,那个时候网络技术与局域网技术已经非常成熟了,当然也提出了CSCW就是所谓的协同工作技术,但没有大的项目出现,没有花大力气研究,而只是在理论上进行探讨。进入20世纪90年代IT技术方面主要是两大进展,第一大进展是面向对象的技术日趋成熟,而且进入了使用阶段,像BS结构取代了CS结构。到了90年代中期提出了网格计算,又重新拾起原来的分布式计算。应该这么说,60年代起对分布式计算的技术目标定的过高,所以一直存在着许多问题。那么,在90年代以后开始对目标做一些小小的修正,特别是一些无法实现的目标做了修正。比方说我们并不想把许许多多的东西都塞到里头去,比方说在大的计算机集群,很多很多计算机连在一起的环境中不一定要做编辑、不一定要做修改,这个东西也是可以理解的。因为边际修改的东西在单机上就可以实现,何必在这个上面做。而在这上面做主要是解决如何共享资源,这个资源包括计算资源和数据资源,计算资源当然是以硬件为主的。网格计算在90年代又掀起高潮,尽管到目前为止还是在受限的条件下投入使用,但仍然在进一步的发展中。所以最近又出现了所谓的云技术、所谓的云计算。说句老实话,凡是同样一个内容的东西老在变名字说明什么呢?说明它还不够完善或者说还不够完备,还存在问题。换名字大概就是这样,否则完全成熟了,像“计算机”就没有再听说叫另外的名字。


  在国外首先提出网格计算的时候就是希望这个机器用了网格就像我们的电一样,一拉开关灯就亮了,至于电网里面的这个电是哪儿供应的,我相信像深圳也不止由一个电厂供应,是不是大亚湾也进行了供应,这个我并不知道。我并不关心电是哪个电厂发的,当然在系统内部要结算还是需要的,作为用户根本不需要。也就是说我可以去任何一个地方,只要是连了电网的,任何一个结点上的资源都可以用,想用我们就可以用。大家都知道Grid,像中国电网就叫China Grid。

  网格计算的实质是三个共享:一是实现计算资源的高度共享;二是实现数据资源的高度共享;三是实现服务的高度共享。换句话说就是借助于互联网将有限个参与的同构或异构计算机系统整合,形成一个巨大的虚拟计算平台,如同一个计算机一样。

  网格技术最关键的一条就是协调广域范围内的资源。而网格计算的基本原理就是说在任何一个结点上都可以使用到网格内的任何资源,不管这个资源生存在哪个结点上。当然,在网格基本技术研究方面比较典型的就是所谓的层次模型,这个我也不再细讲。

  按照应用可以分为计算网格、数据网格和服务网格。相关的工作在美国、在欧洲及其他国家都做的很多,美国有NTG、DTF,国防部也有GIG,GIG主要是空间数据的共享。欧洲也有,像欧洲的数据网格,英国有英国的国家网格等等。这是一些地方典型网格的资料介绍。这是一张列表,我们国家也有,十一五建设网格。还有中国的教育科研网格。

  P2P就是对等计算是广域分布式计算的新趋势,基本的思路我刚才已经讲过了,在一个结点上可以使用任意一个加入这个系统结点的资源。也试图用不同的计算系统统一到Grid上来。网格计算的核心技术就是对等计算技术,包括资源管理技术、计算任务调度技术、负载平衡技术、容错技术等等,同时要求信息隐蔽和数据抽象,还包括一些安全方面的比如数据方面的完整性、一致性问题。

  关于地理信息系统也很快的说一下,地理信息系统是一类获取、处理、分析、表示并在不同系统、不同地点和不同用户之间传输空间数据的计算机应用系统。这个定义本身包含了在不同的机器之间如何共享资源的问题。地理信息系统从学科分界的角度来说,任何一个学科都一样,包含三个层次:理论方法、技术工具、应用和服务。作为GIS层次应该在一层次和二层次范畴,重点在第二层次,当然有一部分是在第一层次。这是GIS平台的三层架构,包括基础平台、行业应用开发平台以及应用系统和应用软件。实际上网格计算应该属于最底层的技术。

  网格计算对我们来说就是地理信息系统,实际上在应用中要求是非常迫切的,也就是说无论在广域的范围内的应用以及行业范围内的一些应用,都希望使用网格技术、使用网格地理信息系统,尤其GIS更是这样,因为它需要的数据非常多,大量的应用涉及到的数据非常多,而这些数据又不可能完全集中在一台或数台机器上。特别是在我们国家更是有很多数据,比如各省的数据由省里来维护、更新,往往是放在本地的。但是他们的使用却是很多地方都用得到,所以先把数据完全统起来,从管理的角度比较困难一些。对于网格GIS来说,它的目标跟网格计算是一样的。换句话说网格GIS的总体目标是建立一个分布式的地理信息系统软件平台,这个软件平台由若干台计算机所组成,互联网环境下可以跨地域、跨平台、协同工作的GIS集群系统。可以实现用户能够使用第四代语言自行组织和定制地理信息和地理空间数据的计算服务,为空间数据的网格计算提供系统级软件支持。最后当然是实现共享,实现计算资源和计算能力的共享。

  它的主要技术指标:首先是面向空间实体及其关系的数据组织与存储,怎么存,怎么反应出来,不光是存,而且要反应出来,让其他的结点所了解、所知道,这是第一个问题。第二是如何支持多个空间数据库,一个应用可能涉及到很多空间数据库,我们这里也不妨把它叫做空间数据库集群,如何运用多个空间数据库来完成一件计算任务,完成一个应用;第三是支持组成这个系统的各个计算机之间的协同计算,换句话说一个计算任务完全可以分布在若干个计算结点上。第四是计算完了经过整理向用户提交计算结果,而用户本身并不关心提交的任务在哪些结点上运行。另外是要提供一种让用户提交计算任务的手段,这就是所谓的面向问题的空间查询语言,然后利用这个空间查询语言可以开发查询的程序,然后提交,最后提交结果。这里面可能还有一些新型的空间数据模型和新型的空间数据关系和空间的算式。

  它的运行架构说起来简单也非常简单,这张图很形象的说明,我们把这些叫做服务器(见图),实际上叫做网格计算结点,通过互联网联系起来。联系起来以后用户可以通过互联网连到某一台结点上,这时候利用门户技术,实际上中间也可以再加一台机器,这台机器叫门户机,门户机进行提交,当然这个门户机完全可以不在分布式结点上,在网格结点上就合一了。就像售票一样,火车售票处离开了火车站就是个门户,如果北京站下面就有一个售票处,那就是北京站的售票,实际上是一样的,这个售票处就是门户的概念,我这里为了画的方便把门户省掉了。这个没关系,门户就是个二转手。

  具体来说,要解决一个计算任务或者要完成一个计算任务,在网格里的计算任务分哪几步呢?首先第一步是用户用第四代语言在本机上起草任务解决方案,也就是编制所谓的计算任务程序,我们叫做空间查询语言以及结合常规的计算语言编辑它的任务书,然后向计算结点提交或者说通过门户向计算结点提交,这是第一步。第二步,协同的计算结点或网格结点,网格结点接到计算任务以后对计算任务进行解意,形成了操作原语(包括操作对象、操作体)在内所组成的完整系列。网格结点接到任务以后就对它进行解意,形成操作序列。形成操作序列以后第三步是网格结点根据全局目录对操作系列进行拆分,确保每一个操作原语的执行地点,这样就形成了分布方案。形成分布方案就要向相关的计算结点发送操作原理,这样发起了一次分布式的或者网格计算事务。第四步,有关网格结点接到了操作任务以后就启动分布式计算系统,然后分别进行计算,当然这里面如果有必要可以进行二次分布,比方说在空间信息计算里有时候有二位运算,单位运算好办,送过去的数据肯定有,没有就不会分了,可能还有二次运算,有时候可能会出现这种情况。二次运算的两个操作对象分别在不同的机器上,可能把这个结点交给另外一个结点,这叫做数据迁移了,我们叫做二次运算,类似的情况是这样。当计算任务完成以后接到分任务的结点就回送计算结果,如果有必要的话发起一个同步任务,相当于数据库里所谓的二次提交技术。另外如果有进行修改的话,计算过程中有进行修改的话还要发起数据同步,因为要保证主副器,这种情况我们尽量避免出现,因为有的时候会出现不确定性问题。为什么呢?普通计算问题不大,特别是修改,如果说一个数据在这个网格系统里有多个,单机上我们完全可以遵循语音,任何一次修改以后的结果立刻被大家所感受到,在单机上可以,在网络系统上会出现这样的问题,完全有可能在同一个时间分别在两个结点上对主本、副本或两个副本同时进行修改,这时候就会出现数据的不一致性问题,所以这个尽量慎用。

  各个结点都已经完成计算任务以后,向发起结点回送计算结果以后,那么就由发起这次分布式事务的结点进行汇总和整理。完成以后就是极速分布式事务就是所谓的二次提交,然后向用户返回计算结果。用户接到计算结果以后本次任务就结束了。

  从这个流程看,实际上当一个用户提交了网格计算任务以后,他并不知道你这个任务到底涉及到多少个结点,到底涉及到多少个结点进行计算,这个是一样的。对用户来说我只需要得到正确的结果就可以。这里头有一些关键技术,首先一个关键技术是计算任务的组织,计算任务的组织实际上就涉及到网格空间计算语言的审计,我们把它叫做面向问题的计算任务描述语言以及它的(解译)机制。如何设计出一套语言来,这套语言可以用来描述一个大的计算任务,然后又怎么能够对这个任务进行解译变成若干个操作步,这是第一个比较大的关键技术。第二个大的关键技术,已经描述成了若干个操作步所组成的序列,如何根据系统当时的资源情况进行分布,分布到不同的结点上,也就是说要为这些计算原语寻找执行地点,而且要经常优化,因为完全可能出现具备这个计算能力的若干个结点,你怎么来开,开哪个?第三个关键问题就是实现计算,这里面包括了面向对象的数据组织、存储与操纵,第三点原则上和单机上的任务相仿,只不过这里头会出现计算过程中出现问题的时候做二次补偿的问题,我做不了了再把它传给另一个有能力进行计算任务的结点。另外一点要保证地理空间数据的完整性和一致性,在可能的情况下还要实现系统的负载平衡和容错,负载平衡也比较困难,但还可以做到一些,容错实现很困难,这个要求很高,目前也没有很好的办法。

  首先设计一个面向问题的时空查询语言,我们叫做STCQL。这个查询语言的目标就是提供计算任务的组织工具和任务解译机制,这里面包括这样一些内容,计算任务的组织工具部署在客户端上,这是没有问题的,客户端书写他的计算任务。而任务解析解译机制是部署在网格结点上,包括提供了词法检查、语法检查、目标代真(生成计算原语的序列及其分布方案),配合计算任务分布引擎发出去。这个语言的使用方法既可以单独使用,也可以嵌入程序设计语言使用。它的特点是引入了一系列新的空间,引入了一些新的数据类型,包括时空数据类型和“场” 数据类型。另外定义了关系监测、关系计算、关系合成和几何体之间运算等四大类的空间关系算子以及他们的组合算子,然后定义一些空间的函数,时间的函数和时空结合的函数,包括他们的实现。还要定义一些“长”数据进行计算进行的解析和数据。

  STCQL的数据类型包括时空复合体类型、空间体类型、时间体类型、空间尺度类写、时间尺度类型、“场”类型,他们的对象实例可以通过按照一定规格排列的字符串来表示,也可以通过时空函数或聚集函数来生成。实际上计算任务经过解译以后就生成了这么一个计算方案,这个计算方案是由并行语句所组成的,也就是说这些语句是可以分布到别的机器上去,并行语句本身又有若干个并行线索所组成,实际上它是两个并行。一个并行是并行语句的并行,并行语句可以分布在不同的结点上。第二是当一个并行语句分布到了一个网格结点上,那么它又可以采用多道程序技术形成了并行线索,也就是说在同一台机器上进行计算。换句话说,同一个并行语句中的一个线索是在一台机上进行的。

  这是一个控制流序列的例子(见图),在这里就不细讲了,是我们测试的例子。另外是STCQL的空间关系谓词和空间函数也不惜说了,总共扩充了11类时间关系谓词和1类时间关系函数,设计了4类时空关系谓词和13类时空构造函数,还有1类时空运动构造函数和4类具体运动函数,因为时间关系也不多讲例子了,包括平移运动、收缩运动、穿越关系等等。

  刚才已经说到当一个并行结点生成并行方案以后就要进行分布,生成并行方案我们有几个优先,也就是说确定分布到哪里去有几个优先,第一个优先是就地计算,就地计算最优先,在本地能够计算的尽可能在本地计算,因为这样省去了很多网络的开销和其他不确定性因素,自己做最放心。除非自己的计算任务已经非常重了需要分布出去,另外一类是本地没有条件进行计算,也就是说计算时所涉及到的空间资源我本地没有,这时候就要将计算分布到拥有资源的结点上去,所以我们第二优先是资源的分布,也就是说分到具有合适的计算资源结点上。只有第三优先才考虑计算能力或负载平衡,假如说同时可以有两个或三个结点能够计算这个任务,这时候分布就要挑计算负载比较轻的结点作为目的地。而分布的依据,实际上这个系统设计了一个全局目录,全局目录在每个结点上都有一个,当然要对全局目录进行同步,每次计算任务完了以后都要进行同步,因为全局负载目录首先包括加入这个系统的多少个结点,都在什么地方,这是第一步。第二步是要有一个全局的资源目录。第三步是有全局计算资源目录,这也是属于目录的一部分。主要是看它的负载,当前负载是比较简单的,这个负载就是CPU的利用率,CPU利用率越高负载越大。

  这里面还有许多细节问题,其中一个细节问题刚才已经提到了,就是所谓的多目算子,(二目)以上的,这个肯定会出现二次分布。另外是全局目录的一致性问题,如何进行全局目录的同步。第三个问题是分布式数据库事务的组织和嵌套,整个计算任务是一个分布式事务,但分布到每个结点上的任务也是一个事务,按照事务的原子系统,它的事务就是这个子事务正确完成以后就要进行提交,提交就变成永久的了。当然不排除一个计算任务有八个子任务、有八个子事务,一个主事务有八个子事务,八个子事务里有七个子事务都正确完成了,其中一个子事务出了错,要回滚,这时候那七个事务已经提交了,要引入永久的所以要提交二次分布。等整个任务提交以后各个子事务的提交才算完成,否则不能算完成。当然还有空间数据的一致性问题,这个问题实在太麻烦了,实际上这个系统里来了一个干脆的不需编辑,需要编辑就退出系统,编辑完了以后再加入系统,加入系统以后紧接着就是数据同步,同步完了再计算。这里头还会碰到冗余计算的问题,两个或两个以上的结点都具备承担某个子任务能力的时候完全可以进行冗余计算,哪个对算哪个,这里面有个取舍问题,如果都对了取一个,只有一个对就取一个。这是空间数据操作分布执行机制的一个表示(见图),刚才说到了补偿,就是当某一个结点得到计算任务时又没有计算成功,这时候还要进行二次分布,这是所谓的补偿,这个补偿从投影里可以看出来(见图),有个服务的补偿。实际上有很多事情,大量的工作是放在异常处理下,而且异常处理是怎么也处理不全、处理不完。

  从实用角度来说网格结点可以动态的加入与退出,实际上就是系统的基本配置和维护问题,还有系统的容错问题,系统容错问题我们实际上没有做,因为这个太困难了。所谓分布式系统里发现错误主要是两类错:一类是Sail-Silent,发现就停了,这个好半;还有一类叫Byzantine,这个我们现在没管,结点坏了没死,神经错乱,给他的计算任务他貌似认真的给你做完,然后把结果传过来,根本就不对。这类情况很复杂,首先谁有权判断哪个是神经错乱,这个要引入表决机制,少数服从多数,可以做,但极大的影响系统资源,所以我们没有做这个。

  还有一个比较关键的问题是全局目录的同步,全局目录是网格系统中最重要的配置目录,一个资源的配置目录,需要不断地在系统中对全局目录进行同步,同步的时刻就包括这么几个:一是某一个结点加入或退出了,这时候进行同步;二是当一个结点故障,这个可以归到上面,故障就退出了;三是当数据库发生变化的时候需要同步;四是计算负荷变化的时候也需要进行同步,因为计算资源目录总的来说比较小,这个同步比较简单。

  从实现的角度来说我们充分利用Open Source提供的有利条件,加以有选择地使用改造。核心处理技术是自行研发的,包括:面向问题的时空复合查询语言、空间数据计算的分布和实现机制、数据一致性维护机制、新型数据模型与存储、操纵机制等。从实现技术的考虑我们采用了基于语义的迭代式操作原语序列解译机制,基于分级优先的原语执行分布机制。这个机制得到了国家863项目的支持,列了一个重点项目,我们和中国地大(武)教授那边密切合作,现在武教授正在进行软件开发,部分已经实现,特别是在分布计算主体正在实现,包括查询语言等等东西,预计明年年底之前能够完成。而且目前同样的分布式成果开始做,同样一个大的项目里有一个示范应用在进行实验,这是一个比较好的应用环境,好多数据是被计算结点所有的。好,我的演讲就到这里,谢谢。

 

  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料