
并行查询其优势就是可以通过多个线程来处理查询作业 从而提高查询的效率 SQL Server数据库为具有多个CPU的数据库服务器提供并行查询的功能 以优化查询作业的性能 也就是说 只要数据库服务器有多个CPU 则数据库系统就可以使用多个 *** 作系统进程并行执行查询 *** 作 来加速完成查询作业
一 并行查询三步走
并行查询作业在数据库中 主要经过三个步骤
首先 数据库会判断是否需要进行并行查询 在数据库中有一个查询优化器 会对SQL语句进行优化 然后数据库才会去执行查询语句 而这个查询器在对SQL语句进行查询优化时 其中一个动作就是判断是否需要对SQL语句进行查询优化 也就是说 并不是所有的SQL查询语句都可以从并行查询中获取收益 如果查询优化器认为查询语句可以从并行查询中获取收益的话 则就会将交换运算符插入到查询执行计划中 为并行查询做准备 故哪些语句需要采用并行查询 哪些不需要 这不用数据库管理员关心 数据库查询优化器会帮管理员作出这个决定 数据库管理员需要清楚的是 在哪些情况下 数据库SQL优化器会认为不宜采用并行查询 通常情况下 只要满足以下条件的任何一个 则就不会执行并行查询 一是对于特定的查询 查询优化器认为串行查询执行计划要快于任何可能的并行执行计划;二是查询的串行执行成本并不高 不需要进行并行查询;三是查询中包含无法并行运行的标量运算符或者关系运算符 若从数据库管理员的角度讲 第三个条件对我们具有最大的影响 当数据库预计未来可能利用并行查询来提高数据库性能时 则在数据库设计时 就需要注意避免使用那些无法在并行查询功能中使用的运算符 因为某些关系运算符或者逻辑运算符可能会要求查询计划一定要在串行模式中进行 或者部分需要在串行模式下进行 如此的话 查询优化器就不会利用并行查询功能来提高查询语句的性能 这是数据库管理员在数据库设计时必须要考虑到的一个细节问题
其次 确定并行的进程数 当查询优化器在查询语句中插入交叉运算符之后 数据库就会执行并行查询 并行查询在执行计划时可以使用多个线程 此时 就又遇到了一个问题 数据库会把这个查询作业分成几个进程 *** 作呢此时 数据库管理员就需要知道上什么叫做并行度 其实 在处理并行查询的时候 数据需要知道最大可使用的进程与实际使用的进程 而最大可使用的进程就叫做并行度 这个并行度的值是在服务器级别中进行设置 也可以通过系统存储过程来进行修改 但是 最大可使用进程数不一定等于实际是用进程数 实际是用进程数是数据库在查询计划执行时初始化的时候确定的 也就是说 这不用数据库管理员去额外的设定 数据库系统会自动根据计划的复杂程度来确定合理的进程数目 当然其实际采用的进程数不能够超过并行度 即最大可以使用的进程数
最后执行查询 当以上内容确定好之后 数据库就会执行具体的查询语句 在这一步中 需要注意一个问题 数据库管理员还可以在查询语句中指定MAXDOP查询提示来修改这个进度值 也就是说 如果某个查询作业数据库管理员认为可能会耗时比较久 就可以为这个查询作业设置比较大的进度值 当利用MAXDOP查询提示设置这个并行进度值之后 它会覆盖预先设置的默认值 从而实现针对单个查询语句设置额外的进度值 以提高某些特殊查询作业的性能
二 并行查询中需要注意的内容
注意点一 需要注意硬件方面的限制
并行查询是数据库提高查询性能的一个有力举措 不过其往往受到比较大的约束 如上面提高的一些基于成本考虑之外 还有一些硬性的限制 如通常情况下 只有在数据库服务器有多个微处理器(CPU )的情况下数据库才会考虑执行并行查询 也就是受 只有具有多个CPU的计算机才能够使用并行查询 这是一个硬性的限制条件 另外在查询计划执行过程中 数据库还会判断当时是否有足够多的线程可以使用 每个查询 *** 作都要求一定的线程数才能够执行;而且执行并行计划比执行串行计划需要更多的线程 所需要的线程数也会随着并行度的提高而提高 如果在并行计划执行的时候 当时数据库服务器没有足够的线程让并行计划使用的话 数据库引擎就会自动减少并行度 甚至会放弃并行查询而改为串行计划 所以说 数据库是否能够执行并行查询 要受到其硬件的限制 为此 如果企业真的需要通过并行查询来提高数据库性能的话 则管理员就需要根据情况来调整硬件配置
注意点二 不建议对所有查询都使用并行查询
通常情况下 笔者认为最好只对大型表的连接查询 大量数据的聚合 *** 作 大型结果集的重复排序等等 *** 作才应用并行查询的功能 如果在这些 *** 作上执行并行查询的话 那么其改善数据库性能的效果是非常明显的 相反 如果对于简单查询执行并行查询的话 可能执行并行查询所需要的额外协调工作会大于其潜在的性能提升 所以 数据库管理员在确定是否需要执行并行查询功能的话 需要慎重 笔者的建议是 在数据库服务器级别上 最好不要设置并行查询 即把并行度设置为 或者一个比较小的值 然后对于一些特殊的查询 *** 作 利用MAXDOP查询提示来设置最大的可使用进程数 如此的话 可能会更加的合理 如果有时候数据库管理员不知道是否需要采用并行查询功能的话 则可以通过数据库自带的统计功能进行判断 为了区别并行查询计划到底有没有从并行查询中受益 数据库引擎可以将执行查询的估计开销与并行查询的开销阀值进行比较 并行计划只有对需时较长的查询通常更加有益;因为其性能优势将抵消初始化 同步和终止并行计划所需的额外时间开销
注意点三 数据库会根据查询所涉及到的行数来判断是否要并行查询
上面谈到 最好对大型表的连接查询 大量数据的聚合 *** 作 大型结果集的重复排序等等 *** 作才应用并行查询的功能 因为只有如此 并行查询带来的收益才会超过其付出的代价 但是 并不是说连接查询 聚合 *** 作 排序等作业都适合采用并行查询 当数据库在考虑并行查询计划的时候 查询优化器还会去确定所涉及到的行数 如果所涉及到的行数台少 则将不会考虑执行并行查询计划 而会采用串行方式执行查询语句 如此的话 可以避免因为启动 分发 协调的开销大大超过并行执行作业所带来的收益 这本来是一个不错的设计 但是也会给数据库管理员带来一定的麻烦 如现在数据库管理员想要测试并行查询到底可以在多大程度上影响查询 *** 作 就有点麻烦 因为其有数据量的限制 如果数据库管理员需要进行这个测试 还不得不先在数据库系统中导入足够多的数据才行 这就限制了数据库管理员的测试 *** 作 不过话说回来 这个机制仍然是不错的 因为数据库管理员不用去考虑 当数据库规模到多大的时候采用并行查询
注意点四 同一个 *** 作在不同时候会采用不同的进程数
lishixinzhi/Article/program/SQLServer/201311/22469
服务器也称伺服器,是提供计算服务的设备,其构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
服务器是互联网平台开展业务使用最多的设备,它是互联网的关键组成部分。那么到底什么是服务器呢 下面咱们来说一说。
详细内容 01服务器也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。在网络环境下,根据服务器提供的服务类型不同,分为文件服务器,数据库服务器,应用程序服务器,WEB服务器等。
02 按照体系架构来区分,服务器主要分为两类:
一、非x86服务器
非x86服务器:包括大型机、小型机和UNIX服务器,它们是使用RISC(精简指令集)或EPIC(并行指令代码)处理器,并且主要采用UNIX和其它专用 *** 作系统的服务器,精简指令集处理器主要有IBM公司的POWER和PowerPC处理器,SUN与富士通公司合作研发的SPARC处理器、EPIC处理器主要是Intel研发的安腾处理器等。这种服务器价格昂贵,体系封闭,但是稳定性好,性能强,主要用在金融、电信等大型企业的核心系统中。
二、x86服务器
x86服务器:又称CISC(复杂指令集)架构服务器,即通常所讲的PC服务器,它是基于PC机体系结构,使用Intel或其它兼容x86指令集的处理器芯片和Windows *** 作系统的服务器。价格便宜、兼容性好、稳定性较差、安全性不算太高,主要用在中小企业和非关键业务中。
按应用层次划分
按应用层次划分通常也称为“按服务器档次划分”或 “按网络规模”分,是服务器最为普遍的一种划分方法,它主要根据服务器在网络中应用的层次(或服务器的档次来)来划分的。要注意的是这里所指的服务器档次并不是按服务器CPU主频高低来划分,而是依据整个服务器的综合性能,特别是所采用的一些服务器专用技术来衡量的。按这种划分方法,服务器可分为:入门级服务器、工作组级服务器、部门级服务器、企业级服务器。
一、入门级服务器
这类服务器是最基础的一类服务器,也是最低档的服务器。随着PC技术的日益提高,许多入门级服务器与PC机的配置差不多,所以也有部分人认为入门级服务器与“PC服务器”等同。这类服务器所包含的服务器特性并不是很多,通常只具备以下几方面特性:
1、有一些基本硬件的冗余,如硬盘、电源、风扇等,但不是必须的;
2、通常采用SCSI接口硬盘,也有采用SATA串行接口的;
3、部分部件支持热插拔,如硬盘和内存等,这些也不是必须的;
4、通常只有一个CPU,但不是绝对;
5、内存容量最大支持16GB。
这类服务器主要采用Windows或者NetWare网络 *** 作系统,可以充分满足办公室型的中小型网络用户的文件共享、数据处理、Internet接入及简单数据库应用的需求。这种服务器与一般的PC机很相似,有很多小型公司干脆就用一台高性能的品牌PC机作为服务器,所以这种服务器无论在性能上,还是价格上都与一台高性能PC品牌机相差无几。
入门级服务器所连的终端比较有限(通常为20台左右),况且在稳定性、可扩展性以及容错冗余性能较差,仅适用于没有大型数据库数据交换、日常工作网络流量不大,无需长期不间断开机的小型企业。不过要说明的一点就是目前有的比较大型的服务器开发、生产厂商在后面我们要讲的企业级服务器中也划分出几个档次,其中最低档的一个企业级服务器档次就是称之为"入门级企业级服务器",这里所讲的入门级并不是与我们上面所讲的"入门级"具有相同的含义,不过这种划分的还是比较少。还有一点就是,这种服务器一般采用Intel的专用服务器CPU芯片,是基于Intel架构(俗称"IA结构")的,当然这并不是一种硬性的标准规定,而是由于服务器的应用层次需要和价位的限制。
二、工作组服务器
工作组服务器是一个比入门级高一个层次的服务器,但仍属于低档服务器之类。从这个名字也可以看出,它只能连接一个工作组(50台左右)那么多用户,网络规模较小,服务器的稳定性也不像下面我们要讲的企业级服务器那样高的应用环境,当然在其它性能方面的要求也相应要低一些。工作组服务器具有以下几方面的主要特点:
1、通常仅支持单或双CPU结构的应用服务器(但也不是绝对的,特别是SUN的工作组服务器就有能支持多达4个处理器的工作组服务器,当然这类型的服务器价格方面也就有些不同了)。
2、可支持大容量的ECC内存和增强服务器管理功能的SM总线。
3、功能较全面、可管理性强,且易于维护。
4、采用Intel服务器CPU和Windows/NetWare网络 *** 作系统,但也有一部分是采用UNIX系列 *** 作系统的。
5、可以满足中小型网络用户的数据处理、文件共享、Internet接入及简单数据库应用的需求。
工作组服务器较入门级服务器来说性能有所提高,功能有所增强,有一定的可扩展性,但容错和冗余性能仍不完善、也不能满足大型数据库系统的应用,但价格也比前者贵许多,一般相当于2~3台高性能的PC品牌机总价。
三、部门级服务器
这类服务器是属于中档服务器之列,一般都是支持双CPU以上的对称处理器结构,具备比较完全的硬件配置,如磁盘阵列、存储托架等。部门级服务器的最大特点就是,除了具有工作组服务器全部服务器特点外,还集成了大量的监测及管理电路,具有全面的服务器管理能力,可监测如温度、电压、风扇、机箱等状态参数,结合标准服务器管理软件,使管理人员及时了解服务器的工作状况。同时,大多数部门级服务器具有优良的系统扩展性,能够满足用户在业务量迅速增大时能够及时在线升级系统,充分保护了用户的投资。它是企业网络中分散的各基层数据采集单位与最高层的数据中心保持顺利连通的必要环节,一般为中型企业的首选,也可用于金融、邮电等行业。
部门级服务器一般采用IBM、SUN和HP各自开发的CPU芯片,这类芯片一般是RISC结构,所采用的 *** 作系统一般是UNIX系列 *** 作系统,LINUX也在部门级服务器中得到了广泛应用。
部门级服务器可连接100个左右的计算机用户、适用于对处理速度和系统可靠性高一些的中小型企业网络,其硬件配置相对较高,其可靠性比工作组级服务器要高一些,当然其价格也较高(通常为5台左右高性能PC机价格总和)。由于这类服务器需要安装比较多的部件,所以机箱通常较大,采用机柜式的。
四、企业级服务器
企业级服务器是属于高档服务器行列,正因如此,能生产这种服务器的企业也不是很多,但同样因没有行业标准硬件规定企业级服务器需达到什么水平,所以也看到了许多本不具备开发、生产企业级服务器水平的企业声称自己有了企业级服务器。企业级服务器最起码是采用4个以上CPU的对称处理器结构,有的高达几十个。
另外一般还具有独立的双PCI通道和内存扩展板设计,具有高内存带宽、大容量热插拔硬盘和热插拔电源、超强的数据处理能力和群集性能等。这种企业级服务器的机箱就更大了,一般为机柜式的,有的还由几个机柜来组成,像大型机一样。企业级服务器产品除了具有部门级服务器全部服务器特性外,最大的特点就是它还具有高度的容错能力、优良的扩展性能、故障预报警功能、在线诊断和RAM、PCI、CPU等具有热插拔性能。有的企业级服务器还引入了大型计算机的许多优良特性。这类服务器所采用的芯片也都是几大服务器开发、生产厂商自己开发的独有CPU芯片,所采用的 *** 作系统一般也是UNIX(Solaris)或LINUX。
企业级服务器适合运行在需要处理大量数据、高处理速度和对可靠性要求极高的金融、证券、交通、邮电、通信或大型企业。企业级服务器用于联网计算机在数百台以上、对处理速度和数据安全要求非常高的大型网络。企业级服务器的硬件配置最高,系统可靠性也最强。
服务器中配置固态硬盘已经是一个普遍的选择,特别是如果只有很小比例的服务器存在性能问题的话尤其如此。固态硬盘可以帮助用户解决服务器性能的瓶颈。固态硬盘也可以让高速存储更加的接近处理器并将共享存储网络这个潜在的瓶颈剔除掉。目前有三种固态硬盘的形式作为达标:即硬盘驱动型SSD,SSD DIMM和PCIs SSD。
5、典型服务器应用
办公OA服务器
ERP服务器
WEB服务器
数据库服务器
财务服务器
邮件服务器
打印服务器
集群服务器
无盘办公系统
无盘网吧服务器
无盘教学系统
视频监控服务器
流媒体服务器
VOD视频点播服务器
网络下载
SP服务
网络教学服务器
IDC-主机出租
IDC-虚拟空间
IDC-网游
IDC-主机托管
游戏服务器
高性能计算(HPC)
桌面超算
论坛服务器
import javaioBufferedReader;import javaioIOException;import javaioInputStreamReader;import javaioPrintWriter;import javanetServerSocket;import javanetSocket;import javatextSimpleDateFormat;import javautilArrayList;import javautilDate;import javautilList; / 4用socket通讯写出多个客户端和一个服务器端的通讯, 要求客户发送数据后能够回显相同的数据(回显功能)(实用TCP方式)。 /public class Test4Server { // 主入口 public static void main(String[] args) throws IOException { scoketServer(); } // 开启的tcp8888监听端口 public static void scoketServer() throws IOException { ServerSocket server = new ServerSocket(8888); while (true) { // 未连通前线程阻塞,连通后开启一个socket通道线程后继续监听8888端口 Socket socket = serveraccept(); Systemoutprintln(socketgetInetAddress()getHostAddress() + "连接进入"); new SocketThread(socket)start(); } } } // 一个服务器端口中监听多个客服端通道线程class SocketThread extends Thread {// 所有通道写入流的集合 private static List<PrintWriter> list =new ArrayList<PrintWriter>(); private BufferedReader bufferedReader; private PrintWriter printWriter; public SocketThread(Socket socket) throws IOException { thisbufferedReader = new BufferedReader(new InputStreamReader(socket getInputStream())); thisprintWriter = new PrintWriter(socketgetOutputStream()); listadd(printWriter); } @Override public void run() { String string = null; while (true) { try { // 服务器在通道中读到的信息回显给客服端 string = bufferedReaderreadLine(); Systemoutprintln("客服端信息:" + string); for(PrintWriter printWriter:list ){ printWriterwrite("服务器回显:" + string + "\r\n"); printWriterflush(); } } catch (IOException e) { } } }}数据库服务器是电脑应用系统软件类;
服务器是计算机程序或设备的实例(本质可以说是一种计算机),用于处理请求并通过Internet或本地网络将数据传送到另一台计算机。服务器是用于管理网络资源。数据库服务器是什么?数据库服务器是指运行数据库系统的专用服务器,其功能就是为数据库系统的高性能运行提供硬件支持和保障。数据库服务器实际上便是配有一台数据库的Server,应用于互联网或Intranet。一个数据库服务器是指运行在局域网中的一台或多台服务器计算机上的数据库管理系统软件,数据库服务器为客户应用提供服务,这些服务是查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等。数据库软件有很多种大型的数据库软件有Oracle,DB2,Sybase等,中型的有SQL Server,还有通常用于个人网站的MySQL等小型数据库软件。
运行在局域网中的一台/多台计算机和数据库管理系统软件共同构成,数据库服务器为客户应用程序提供数据服务。这些服务包括:查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等
数据库服务器建立在数据库系统基础上,具有数据库系统的特性,且有其独特的—面。其主要特点有:
1、数据库管理功能,包括:系统配置与管理、数据存取与更新管理、数据完整性管理及数据安全性管理;
2、数据库的查询域 *** 纵功能,包括:数据库检索与修改;
3、数据库维护功能,包括:数据导入/导出管理、数据库结构维护、数据恢复功能与性能监测;
4、数据库并行运行。由于在同一时间,访问数据库的用户不止一个,所以数据库服务器必须支持并行运行机制,处理多个事件的同时发生。Dryad:MapReduce之外的新思路 目前各大软件巨头都搭建了自己的分布式平台解决方案,主要包括Dryad,DynamoSDMapReduce等框架。2010年12月21日,微软发布了Dryad的测试版本,成为谷歌MapReduce分布式并行计算平台的竞争对手。Dryad是微软构建云计算基础设施的重要核心技术之一,它可以让开发人员在Windows或者,NET平台上编写大规模的并行应用程序模型,并能够让在单机上编写的程序运行在分布式并行计算平台上。工程师可以利用数据中心的服务器集群对数据进行并行处理,当工程师在 *** 作数千台计算机时,无需关心分布式并行计算系统方面的细节。
DryadgDDryadLINO是微软硅谷研究院创建的研究项目,主要用来提供一个分布式并行计算平台。DryadLINO是分布式计算语言,能够将LINQ编写的程序转变为能够在Dryad上运行的程序,使普通程序员也可以轻易进行大规模的分布式计算。它结合了微软Dryad和LINO两种关键技术,被用于在该平台上构建应用。Dryad构建在Cluster Service(集群服务)和分布式文件系统之上,可以处理任务的创建和管理、资源管理,任务监控和可视化、容错,重新执行和调度等工作。
Dryad同MapReduce样,它不仅仅是种编程模型,同时也是一种高效的任务调度模型。Dryad这种编程模型不仅适用于云计算,在多核和多处理器以及异构机群上同样有良好的性能。在VisualStudio 2010 C++有一套并行计算编程框架,支持常用的协同任务调度和硬件资源(例如CPU和内存等)管理,通过WorkStealing算法可以充分利用细颗粒度并行的优势,来保证空闲的线程依照一定的策略建模,从所有线程队列中“偷取”任务执行,所以能够让任务和数据粒度并行。Dryad与上述并行框架相似,同样可以对计算机和它们的CPU进行调度,不同的是Dryad被设计为伸缩于各种规模的集群计算平台,无论是单台多核计算机还是由多台计算机组成的集群,甚至拥有数千台计算机的数据中心,都能以从任务队列中创建的策略建模来实现分布式并行计算的编程框架。
Dryad系统架构
Dryad系统主要用来构建支持有向无环图(Directed Acycline Graph,DAG)类型数据流的并行程序,然后根据程序的要求进行任务调度,自动完成任务在各个节点上的运行。在Dryad平台上,每个任务或并行计算过程都可以被表示为一个有向无环图,图中的每个节点表示一个要执行的程序,节点之间的边表示数据通道中数据的传输方式,其可能是文件、TCPPipe、共享内存
用Dryad平台时,首先需要在任务管理(JM)节点上建立自己的任务,每一个任务由一些处理过程以及在这些处理过程问的数据传递组成。任务管理器(JM)获取无环图之后,便会在程序的输入通道准备,当有可用机器的时候便对它进行调度。JM从命名服务器(NS)那里获得一个可用的计算机列表,并通过一个维护进程(PD)来调度这个程序。
Dryad的执行过程可以看做是一个二维管道流的处理过程,其中每个节点可以具有多个程序的执行,通过这种算法可以同时处理大规模数据。在每个节点进程(VerticesProcesses)上都有一个处理程序在运行,并且通过数据管道(Channels)的方式在它们之间传送数据。二维的Dryad管道模型定义了一系列的 *** 作,可以用来动态地建立并且改变这个有向无环图。这些 *** 作包括建立新的节点,在节点之间加入边,合并两个图以及对任务的输入和输出进行处理等。
Dryad模型算法应用
DryadLINQ可以根据工程师给出的LINQ查询生成可以在Dryad引擎上执行的分布式策略算法建模(运算规则),并负责任务的自动并行处理及数据传递时所需要的序列化等 *** 作。此外,它还提供了一系列易于使用的高级特性,如强类型数据、Visual Studio集成调试以及丰富的任务优化策略(规则)算法等。这种模型策略开发框架也比较适合采用领域驱动开发设计(DDD)来构建“云”平台应用,并能够较容易地做到自动化分布式计算。
我们经常会遇到网站或系统无法承载大规模用户并发访问的问题,解决该问题的传统方法是使用数据库,通过数据库所提供的访问 *** 作接口来保证处理复杂查询的能力。当访问量增大,单数据库处理不过来时便增加数据库服务器。如果增加了三台服务器,再把用户分成了三类A(学生)、B(老师),C(工程师)。每次访问时先查看用户属于哪一类,然后直接访问存储那类用户数据的数据库,则可将处理能力增加三倍,这时我们已经实现了一个分布式的存储引擎过程。
我们可以通过Dryad分布式平台来解决云存储扩容困难的问题。如果这三台服务器也承载不了更大的数据要求,需要增加到五台服务器,那必须更改分类方法把用户分成五类,然后重新迁移已经存在的数据,这时候就需要非常大的迁移工作,这种方法显然不可取。另外,当群集服务器进行分布式计算时,每个资源节点处理能力可能有所不同(例如采用不同硬件配置的服务器),如果只是简单地把机器直接分布上去,性能高的机器得不到充分利用,性能低的机器处理不过来。
Dryad解决此问题的方法是采用虚节点,把上面的A、B、C三类用户都想象成一个逻辑上的节点。一台真实的物理节点可能会包含一个或者几个虚节点(逻辑节点),看机器的性能而定。我们可以把那任务程序分成Q等份(每一个等份就是一个虚节点),这个Q要远大于我们的资源数。现在假设我们有S个资源,那么每个资源就承担Q/S个等份。当一个资源节点离开系统时,它所负责的等份要重新均分到其他资源节点上;当一个新节点加入时,要从其他的节点1偷取2一定数额的等份。
在这个策略建模算法下,当一个节点离开系统时,虽然需要影响到很多节点,但是迁移的数据总量只是离开那个节点的数据量。同样,~个新节点的加入,迁移的数据总量也只是一个新节点的数据量。之所以有这个效果是因为Q的存在,使得增加和减少节点的时候不需要对已有的数据做重新哈希(D)。这个策略的要求是Q>>s(存储备份上,假设每个数据存储N个备份则要满足Q>>SN)。如果业务快速发展,使得不断地增加主机,从而导致Q不再满足Q>>S,那么这个策略将重新变化。
Dryad算法模型就是一种简化并行计算的编程模型,它向上层用户提供接口,屏蔽了并行计算特别是分布式处理的诸多细节问题,让那些没有多少并行计算经验的开发 人员也可以很方便地开发并行应用,避免了很多重复工作。这也就是Dryad算法模型的价值所在,通过简化编程模型,降低了开发并行应用的入门门槛,并且能大大减轻了工程师在开发大规模数据应用时的负担。
通过上述的论述,我们可以看到Dryad通过一个有向无环图的策略建模算法,提供给用户一个比较清晰的编程框架。在这个编程框架下,用户需要将自己的应用程序表达为有向无环图的形式,节点程序则编写为串行程序的形式,而后用Dryad方法将程序组织起来。用户不需要考虑分布式系统中关于节点的选择,节点与通信的出错处理手段都简单明确,内建在Dryad框架内部,满足了分布式程序的可扩展性、可靠性和对性能的要求。
使用Drvad LINO
通过使用DryadLINQ编程,使工程师编写大型数据并行程序能够轻易地运行在大型计算机集群里。DryadLINO开发的程序是一组顺序的L_NQ代码,它们可以针对数据集做任何无副作用的 *** 作,编译器会自动将其中数据并行的部分翻译成并行执行的计划,并交由底层的Dryad平台完成计算,从而生成每个节点要执行的代码和静态数据,并为所需要传输的数据类型生成序列化代码;
LINQ本身是,NET引入的组编程结构,它用于像 *** 作数据库中的表一样来 *** 作内存中的数据集合。DryadLINQ提供的是一种通用的开发/运行支持,而不包含任何与实际业务,算法相关的逻辑,Dryad和DryadLINQ都提供有API。DryadLINQ使用和LINQ相同的编程模型,并扩展了少量 *** 作符和数据类型以适用于数据并行的分布式计算。并从两方面扩展了以前的计算模型(SQL,MapReduce,Dryad等)它是基于,NET强类型对象的,表达力更强的数据模型和支持通用的命令式和声明式编程(混合编程),从而延续了LINQ代码即数据(treat codeas data)的特性。
DryadLINQ使用动态的代码生成器,将DryadLINQ表达式编译成,NET字节码。这些编译后的字节码会根据调度执行的需要,被传输到执行它的机器上去。字节码中包含两类代码完成某个子表达式计算的代码和完成输入输出序列化的代码。这种表达式并不会被立刻计算,而是等到需要其结果的时候才进行计算。DryadLINQ设计的核心是在分布式执行层采用了一种完全函数式的,声明式的表述,用于表达数据并行计算中的计算。这种设计使得我们可以对计算进行复杂的重写和优化,类似于传统的并行数据库。从而解决了传统分布式数据库SQL语句功能受限与类型系统受限问题,以及MapReduce模型中的计算模型受限和没有系统级的自动优化等问题。
在Dryad编程模式中,应用程序的大规模数据处理被分解为多个步骤,并构成有向无环图形式的任务组织,由执行引擎去执行。这两种模式都提供了简单明了的编程方式,使得工程师能够很好地驾驭云计算处理平台,对大规模数据进行处理。Dryad的编程方式可适应的应用也更加广泛,通过DryadLINQ所提供的高级语言接口,使工程师可以快速进行大规模的分布式计算应用程序的编写。
Dryad技术的应用
云计算最重要的概念之~就是可伸缩性,实现它的关键是虚拟化。通过虚拟化可以在一台共享计算机上聚集多个 *** 作系统和应用程序,以便更好地利用服务器。当一个服务器负载超荷时,可以将其中一个 *** 作系统的一个实例(以及它的应用程序)迁移到一个新的,相对闲置的服务器上。虚拟化(Virtualization)是云计算的基石,企业实现私有云的第一步就是服务器基础架构进行虚拟化。基础设施虚拟化之后。接下来就是要将现有应用迁移到虚拟环境中。
Dryad结合Hyper-V(Windows Server 2008的一个关键组成部分)虚拟化技术。可以实现TB级别数据的在线迁移。中小型企业也可以针对企业内部小型集群服务器进行分布式应用系统编程,以及制定私有云开发与应用解决方案等设计。Windows Azure是微软的公有云解决方案,但是目前要大规模应用还为时过早。使用现有Windows第三方产品实现私有云,花费成本却很大。然而Dryad技术给我们带来了不错的折中选择,当我们基于Windows Server台运行应用系统或者网站时,便可以基于Dryad分布式架构来开发与设计实现。当公有云时机成熟和各种条件完备时,系统可以很轻易地升级到公有云,企业而无需花费太多成本。
写在最后
云计算可以看成是网络计算与虚拟化技术的结合,利用网络的分布式计算能力将各种IT资源筑成一个资源池,然后结合成熟的存储虚拟化和服务虚拟化技术,让用户实时透明地监控和调配资源。Dryad是实现构建微软云计算基础设施的重要核心技术之一,其具有诸多优点,如DryadLINQ具有声明式编程并将 *** 作的对象封装为,NET类数据,方便数据 *** 作,自动并行化、VisualStudio IDE和,NET类库集成,自动序列化和任务图的优化(静态和动态(主要通过DryadAPI实现)),对J0in进行了优化,得到了比BigTable+MapReduee更快的Join速率和更易用的数据 *** 作方式等。
不过,Dryad和DryadLINQ也同样具有局限性。其一,它更适用于批处理任务,而不适用于需要快速响应的任务;这个数据模型更适用于处理流式访问,而不是随机访问。其二,DryadLINQ使用的是,NET的LINO查询语言模型,针对运行Windows HPC Server的计算机集群设计,而目前高性能计算市场被Einux所占领。此外,和MapReduce的应用时间和实践相比,Dryad的可靠性还明显不足,据了解除了微软AdCenter中的数据分析和Trident项目之外,其它应用Dryad的地方还很少。不过总的来看,Dryad平台在将来仍具有很广泛的发展前景,尤其对NET开发人员来说是―次很重要的技术革新机遇。
名词解释
任务管理器(Job Manager,JM):每个Job的执行被一个Job Manager控制,该组件负责实例化这个Job的工作图,在计算机群上调度节点的执行;监控各个节点的执行情况并收集一些信息,通过重新执行来提供容错:根据用户配置的策略动态地调整工作图。
计算机群(Cluster):用于执行工作图中的节点。
命名服务器(Name Server,Ns):负责维护cluster中各个机器的信息。
维护进程(PDaemon,PD):进程监管与调度工作。在双机热备应用中,根据两台服务器的工作方式不同可以有三种工作模式,即:主从、互备、并行。下面分别予以简单介绍:主从模式即目前通常所说的active/standby方式,active服务器处于工作状态,而standby服务器处于监控准备状态,服务器数据包括数据库数据,同时写入两台服务器或共享数据的磁盘阵列存储系统,保证数据的即时同步。当active服务器出现故障的时候,通过软件诊测或手工方式将standby机器激活,保证应用在短时间内完全恢复正常。
双机互备模式,这种方式对服务器的性能要求比较高,配置相对要更好。
并行模式也叫双工模式,—般用于网络大规模应用,如Oracle数据库的RAC(Orade RealApplication Cluster),两台服务器均为活动的,同时提供相同的服务,保证整体的性能,也实现了负载均衡和互为备份,需要利用磁盘阵列存储技术。
这三种模式中,主从模式是中小规模网络最常用的双机热备技术,下面具体介绍该模式的技术实现方式。
数据信息是当今社会进步、发展的关键。面对日益庞大的计算机网络,用户的要求是网络能够可靠、高速、稳定地运行。当前大部分网络服务都是采用中心服务器的模式,服务器的高可靠性、高可用性是网络安全运行的关键,一旦服务器出现故障,所提供的服务就会被中断,影响正常工作,并可能丢失关键数据,从而造成严重后果。如何在故障情况下尽快恢复使用并保证数据的安全,已经成为一个日渐突出的问题。服务器双机热备份技术正是解决由软硬件故障引起可靠性降低的有效措施,该技术较为成熟,成本相对较低,具有安装维护简单、稳定可靠、监测直观等优点,在网络保障中获得了广泛的应用。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)