如何在云平台上创建一个云主机上安装虚拟机机

比特客户端
您的位置:
详解大数据
详解大数据
详解大数据
详解大数据
虚拟化如何在云计算中提供优势
  虚拟机管理程序是一种商品,那么我们该何去何从?
  物理计算机是公有云和私有云的中坚力量,使能够优化硬件利用率、增强安全性、支持多租户等。
  早期的虚拟化方法主要基于模拟CPU,例如在基于PowerPC的上的,使用户能够运行DOS和Windows。不仅需要模拟CPU,而且还要模拟硬件环境中的其他组件,包括图形适配器、硬盘、网络适配器、内存和接口。
  在90年代末期时,在虚拟化技术中有了重大突破,他们推出的技术可以让大部分代码直接在CPU上执行,而不需要被转译或模拟。
  在VMware之前,运行在相同硬件的两个或两个以上的会互扰,因为他们会争夺资源并试图执行特权指令。VMware智能地拦截这些类型的指令,动态地重写代码,并新的转译用于重复使用和快速执行。
  总之,这些技术比以前的模拟器运行地更快,帮助定义了我们现在所知道的x86虚拟化,包括旧的“管理程序”概念,这是让IT创建和运行虚拟机的平台。
  关键变化
  多年来,VMware及其专利统治着虚拟化领域。在端,VMware的ESX在裸机上运行,它成为领先的第一类(或本机)管理程序。在客户端,VMware Workstation在现有桌面操作系统内运行,它是第二类(或托管)管理程序。
  虚拟化技术不只是针对开发人员或跨平台软件使用的技术,虚拟化是一个强大的技术,它通过将服务器放在可替代的虚拟化容器中,提高效率和可管理性。
  多年来,涌现出一些有趣的开源项目,包括Xen和QEMU(快速模拟器)。这些都不像VMware那么快速和灵活,但它们为我们指明了发展道路,并且奠定了基础。
  大约在2005年,和公司开发了新的扩展到x86架构,为特权指令提供了硬件辅助。AMD和英特尔公司分别将其称之为AMD-V和VT-x,这些扩展改变了格局,最终将服务器虚拟化带到更多供应商。不久后,Xen利用这些新的扩展创建了硬件虚拟机(HVM),这种虚拟机使用QEMU的设备模拟,以及来自VT-x和AMD-V扩展的硬件辅助来支持专有操作系统,例如Windows。
  一家名为Qumranet的公司也开始将虚拟化基础设施增加到内核,被称为基于内核的虚拟机(KVM),并开始使用QEMU设施来托管虚拟机。微软最终也加入了这个领域,在2008年推出了。
  一个新的行业诞生
  当虚拟化最终变得“自由”,或者至少不需要昂贵的许可费就可以访问,我们开始看到新用例的出现。具体来说,亚马逊开始使用Xen平台来出租其多余的计算能力给第三方客户。通过其API,他们拉开了弹性革命的序幕,这意味着应用程序自身可以自我配置资源来满足你工作负载。
  现在,开源虚拟机管理程序已经日趋成熟,并且在云计算中普及。除了VMware之外,企业开始尝试使用KVM或Xen管理程序的架构。这些尝试并不是关于控制成本,更多地是关于利用云计算的弹性本质,以及这些开源替代品正在构建的标准。
  未来:高性能弹性基础设施
  通过虚拟机管理程序的商品化,创新现在正专注于私有/公共云硬件架构以及围绕它们的软件生态系统:存储架构、软件定义网络、智能化和自主编排,以及应用程序API。
  传统服务器已经慢慢让位给弹性的自定义云程序,这些程序才是计算的未来,虽然在一段时间内这两者会共存。
  展望未来,IT部门对虚拟化商品化作出的反应可以分为以下几类:
  现状:改变是很难的,一些企业会习惯于他们已经使用多年的解决。这意味着,他们需要面对已经20到25年之久的存储和管理架构。这还意味着继续支付管理程序许可费用,锁定在专门针对传统应用程序的虚拟化平台,并且无法支持企业内部的弹性云计算应用程序。
  公共云:这移除了管理你自己的基础设施的负担。然而,公共云可能不是运行传统服务器应用程序的最佳位置,因为这些程序需要专门的资源和增强的安全性。此外,虽然公共云资源最初具有成本效益,但扩展规模的成本会让内部资本投资看起来更具吸引力。
  云框架:这包括工具包选项,例如OpenStack,这是针对云计算的优秀的开源框架。Rackspace等公司让它可以扩展。然而,很少有IT公司能够真正构建和管理OpenStack部署。
  超级融合基础设施:Nimboxx等公司正在提供交钥匙解决方案,这些方案提供与框架和工作流程相同的弹性云优势,以在单一化设备中支持传统应用程序。这些允许公司从小规模开始,并逐渐向外扩展。它们还可以作为传统应用程序和弹性程序之间的桥梁。
  当考虑超级融合基础设施解决方案时,企业必须弄清楚“堆栈所有者”和“堆栈依赖者”之间的重要区别。堆栈依赖者是指,在虚拟机中运行以及位于另一个供应商的管理程序之上的解决方案。堆栈所有者是指,在裸机运行并自己构建整个堆栈的供应商。
  下面是这些差异带来的影响:
  许可费用:堆栈所有者使用主要云服务提供商相同的开源管理程序(KVM或者Xen),企业无需支付昂贵的软件许可费用。而堆栈依赖者通常为多个管理程序提供支持,而对开源版本只有有限的支持。
  性能:堆栈所有者在裸机上运行,让他们能够对存储和计算的硬件资源进行直接控制。堆栈依赖者在虚拟机中运行,这意味着每个I/O操作遵循低效率路径。堆栈依赖者宣称从三节点急群众有16000 IOPS,而堆栈所有者可以从单个节点提供18万 IOPS。
  简单性:堆栈所有者从单一窗格管理整个终端到终端基础设施,在私有企业内部解决方案中提供公共云的体验。而堆栈依赖者减轻了一些存储管理复杂性,但总体而言,系统和虚拟机管理仍然需要从多个界面的多个应用程序进行管理。
  安全性:堆栈所有者对硬件的各个方面有着直接控制权,并可以支持静态数据加密等技术。堆栈依赖者缺乏这种控制,因为它们运行在虚拟机内。其设计中的固有因素是在堆栈启动前需要其他东西,例如管理程序,这阻碍了它们包含数据集敏感部分的能力。
  软件定义:堆栈所有者拥有一切,这意味着软件定义任何事物都是可能的,包括实时自我学习系统,可以根据需求提高或减少资源,以及重新分配工作负载。堆栈依赖者只是拥有存储池。
  真正的突破在于,让这些复杂的技术可供企业使用,以及小型企业。下一代类似VMware的公司将会是在简单的、易于部署、易于扩展和高性能产品中提供真正弹性私有云的优势,同时支持传统工作负载的供应商
[ 责任编辑:jj ]
为更好推动开放架构发展,打造开…
甲骨文的云战略已经完成第一阶段…
软件信息化周刊
比特软件信息化周刊提供以数据库、操作系统和管理软件为重点的全面软件信息化产业热点、应用方案推荐、实用技巧分享等。以最新的软件资讯,最新的软件技巧,最新的软件与服务业内动态来为IT用户找到软捷径。
商务办公周刊
比特商务周刊是一个及行业资讯、深度分析、企业导购等为一体的综合性周刊。其中,与中国计量科学研究院合力打造的比特实验室可以为商业用户提供最权威的采购指南。是企业用户不可缺少的智选周刊!
比特网络周刊向企业网管员以及网络技术和产品使用者提供关于网络产业动态、技术热点、组网、建网、网络管理、网络运维等最新技术和实用技巧,帮助网管答疑解惑,成为网管好帮手。
服务器周刊
比特服务器周刊作为比特网的重点频道之一,主要关注x86服务器,RISC架构服务器以及高性能计算机行业的产品及发展动态。通过最独到的编辑观点和业界动态分析,让您第一时间了解服务器行业的趋势。
比特存储周刊长期以来,为读者提供企业存储领域高质量的原创内容,及时、全面的资讯、技术、方案以及案例文章,力求成为业界领先的存储媒体。比特存储周刊始终致力于用户的企业信息化建设、存储业务、数据保护与容灾构建以及数据管理部署等方面服务。
比特安全周刊通过专业的信息安全内容建设,为企业级用户打造最具商业价值的信息沟通平台,并为安全厂商提供多层面、多维度的媒体宣传手段。与其他同类网站信息安全内容相比,比特安全周刊运作模式更加独立,对信息安全界的动态新闻更新更快。
新闻中心热点推荐
新闻中心以独特视角精选一周内最具影响力的行业重大事件或圈内精彩故事,为企业级用户打造重点突出,可读性强,商业价值高的信息共享平台;同时为互联网、IT业界及通信厂商提供一条精准快捷,渗透力强,覆盖面广的媒体传播途径。
云计算周刊
比特云计算周刊关注云计算产业热点技术应用与趋势发展,全方位报道云计算领域最新动态。为用户与企业架设起沟通交流平台。包括IaaS、PaaS、SaaS各种不同的服务类型以及相关的安全与管理内容介绍。
CIO俱乐部周刊
比特CIO俱乐部周刊以大量高端CIO沙龙或专题研讨会以及对明星CIO的深入采访为依托,汇聚中国500强CIO的集体智慧。旨为中国杰出的CIO提供一个良好的互融互通 、促进交流的平台,并持续提供丰富的资讯和服务,探讨信息化建设,推动中国信息化发展引领CIO未来职业发展。
IT专家新闻邮件长期以来,以定向、分众、整合的商业模式,为企业IT专业人士以及IT系统采购决策者提供高质量的原创内容,包括IT新闻、评论、专家答疑、技巧和白皮书。此外,IT专家网还为读者提供包括咨询、社区、论坛、线下会议、读者沙龙等多种服务。
X周刊是一份IT人的技术娱乐周刊,给用户实时传递I最新T资讯、IT段子、技术技巧、畅销书籍,同时用户还能参与我们推荐的互动游戏,给广大的IT技术人士忙碌工作之余带来轻松休闲一刻。
微信扫一扫
关注Chinabyte您的位置:
如何在云平台虚拟机上运行Java计算密集型任务
日 01:40:41 | 作者:佚名 | 来源:中云
摘要:通过Windows Azure,你可以使用一个虚拟机来处理计算密集型任务。本文将为您介绍在创建完成后,如何运行计算密集型应用程序?
通过,你可以使用一个来处理计算密集型任务。前面介绍了如何创建执行/监视计算密集型任务的Java应用程序,现在给您讲解一下如何在虚拟机上运行Java计算密集型任务。
如何运行Java应用程序
运行计算密集型应用程序,首先要创建队列,然后解决Traveling Saleseman Problem,它会将当前的最佳路径添加到服务总线队列。当计算密集型应用程序正在运行(或运行后),运行客户端,从服务总线的队列显示结果。
如何运行计算密集型应用程序
1. 登陆到虚拟机上。
2. 创建一个你将在其中运行应用程序的文件夹。例如:c:\TSP。
3. 复制TSPSolver.jar到c:\TSP.
4. 创建一个包含以下内容的名为c:\TSP\cities.txt的文档:
City_1, 1002.81, -1841.35
City_2, -953.55, -229.6
City_3, -1363.11, -1027.72
City_4, -1884.47, -1616.16
City_5, 1603.08, -1030.03
City_6, -8.58
City_7, 578.8, -12.87
City_8, .79
City_9, 293.36, -1820.01
City_10, 37.28
City_11, -1271.41, -1670.5
City_12, 5.35
City_13, 9.98
City_14, 9.75
City_15, 230.77, 231.58
City_16, -822.63, -544.68
City_17, -817.54, -81.92
City_18, 303.99, -1823.43
City_19, 239.95, 1007.91
City_20, -0.39
City_21, -116.11, 1933.01
City_22, 382.64, 835.09
City_23, -580.28, 1040.04
City_24, 205.55, -264.23
City_25, -238.81, -576.48
City_26, -1722.9, -909.65
City_27, 445.22, 1427.28
City_28, 513.17, 1828.72
City_29, 1750.68, -1668.1
City_30, 1705.09, -309.35
City_31, -167.34, 1003.76
City_32, -1162.85, -1674.33
City_33, 1.04
City_34, 23.3
City_35, 18.04, 1857.11
City_36, 47.75
City_37, -167.44, -336.39
City_38, 115.4, 0.2
City_39, -66.96, 917.73
City_40, 915.96, 474.1
City_41, 140.03, 725.22
City_42, -08.88
City_43, -567.51, 1253.83
City_44, 0.92
City_45, -233.38, 909.93
City_46, -40.76
City_47, 405.81, 421.84
City_48, 363.68, 768.21
City_49, -120.3, -463.13
City_50, 588.51, 679.33
1. 在命令提示符下,将目录更改到c:\TSP。
2. 确保JRE的bin文件夹在PATH环境变量中。
3. 在你运行运行TSP求解排列之前,你需要创建服务总线队列。运行下面的命令来创建服务总线队列:
java -jar TSPSolver.jar createqueue
现在,创建队列,你可以运行TSP求解排列。
如何运行客户端监控应用程序
1. 登录到你将运行客户端应用程序的计算机。该计算机并不一定是运行TSPSolver应用程序的同一台机器,虽然它也可以。
2. 创建一个你将在其中运行应用程序的文件夹。例如:c:\TSP。
3. 复制TSPClient.jar到c:\TSP。
4. 确保JRE的bin文件夹在PATH环境变量中。
5. 在命令提示符下,将目录更改到c:\TSP。
6. 运行下面的命令:
java -jar TSPClient.jar
(可选)通过在命令行中的参数指定检查队列之间的睡眠分钟数。默认检查队列的睡眠周期是3分钟,如果你想为睡眠时间间隔使用不同的值,例如一分钟,运行以下命令:
java -jar TSPClient.jar 1
客户端将一直运行,直到它看到一个“完整”的队列消息。注意,如果你没有在运行客户端的情况下运行多个事件的求解器,你可能需要多次运行客户端来完全清空队列。或者,你可以删除队列,然后再重新创建。删除队列,请运行以下TSPSolver(不是TSPClient)命令:
java -jar TSPSolver.jar deletequeue
求解器将运行,直到它检查完所有路线。
如何停止Java应用程序
对于求解器和客户端应用程序,如果你想在正常完成前结束,你可以按Ctrl+ C组合键退出。
[责任编辑:行云之路 ]
正在加载...
我也说几句
汇编一周来国内外网络和IT行业发生的焦点新闻,精挑细选,第一时间推送独家采写的深度报道和热点专题,深入挖掘新闻事件背后的故事,剖析新闻事件的来龙去脉,让读者准确把握业界的发展态势。
汇集存储频道每周精华内容,让您在最短的时间内,以最便捷的方式获取权威的购买指南,专家博客,皆汇聚在此。
定期为您带来深入权威的网络,交换机,路由器,无线,通信领域信息服务,涵盖产品,技术,新闻,应用案例,评测,购买指南,专栏,技巧等多个方面的信息。与企业网络相关的一切,尽在网络通信邮件,您怎可错过?
新一代数据中心建设管理最新信息快递――聚焦新一代绿色数据中心的设计、建设、运营和管理,汇集业界专家与用户的最精粹观点,展示国内外数据中心经典案例!
定期为您带来安全领域权威专业的产品,技术,新闻,应用案例,评测,购买指南等信息,保护您在网络畅游之时不受病毒的威胁,企业运行之际减少安全的风险。一份邮件在手,一份安全在心!
深入、专业关注云计算相关的技术与实践,范围覆盖私有云建设、公有云服务运营、开源云平台发展、重要云服务商动态等领域,面向企业CIO和IT经理提供深度原创报道,以及云计算、云服务领域最新的市场资讯。
汇集软件频道每周精华内容,让您在最短的时间内,以最便捷的方式获取权威的企业软件新闻,SOA,SaaS,BI,ERP,开源技术,产品,技巧等全方面的实用资讯。还犹豫什么,这就开始体验一下吧!
深入、专业关注大数据相关的技术与实践,提供Hadoop、NoSQL等领域的最新技术资讯,定期发布由业界专家撰写的大数据专栏文章,面向企业CIO、IT经理、DBA提供深度原创报道,以及大数据领域的最新市场资讯。
汇集服务器频道每周精华内容,让您在最短的时间内,以最便捷的方式获取权威的服务器虚拟化,刀片服务器,操作系统,大型机,服务器芯片信息,最新最全的服务器技巧,购买指南,专家博客,皆汇聚在此。
网界网网络学院频道,内容涵盖移动互联,技术开发,Web前端,安全,网络通信,云计算,数据中心,存储,服务器,软件等内容。
订阅过的用户,全部取消选择,可取消订阅
热点排行周月
网络世界移动客户端网界网微信订阅号 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
一种云平台中优化的虚拟机部署机制
下载积分:880
内容提示:一种云平台中优化的虚拟机部署机制
文档格式:PDF|
浏览次数:9|
上传日期: 04:45:16|
文档星级:
该用户还上传了这些文档
一种云平台中优化的虚拟机部署机制
官方公共微信查看:1170|回复:5
虚拟云中的虚拟机如企业级的VMWARE云平台,能分配超过一个物理配置的虚拟机吗
比如用云平台中的服务器,每个机器2颗6核CPU , 那我能创建6个CPU(36核的)虚拟机吗?相当于3个物理机。
望指点1,2谢谢
这种超量分配的方式可以,但是你记得一点,单个vm最最多只能用到一个host的cpu和mem的容量,任何的vm都不能利用跨host的容量
引用:原帖由 爱喝可乐的小白 于
23:15 发表
这种超量分配的方式可以,但是你记得一点,单个vm最最多只能用到一个host的cpu和mem的容量,任何的vm都不能利用跨host的容量 非常感谢, 那超量分配有什么意思呢?
引用:原帖由 owenhappy 于
06:21 发表
非常感谢, 那超量分配有什么意思呢? 我打比方说,你的实际的pCPU也就是物理的cpu是6核心,12core(HT之后),那么你也给3个vm12核(比方全部用掉),那就是3个vm去共享了这全部的cpu啦,没什么特别的,如果这个时候有一个vm极度占用全部的cpu的应用,那么结果可想而知,如果大家都没有很占用,也用的很ok的,明白了不???当然实际上不会去那样分配,因为不合理,但是如果里面的应用会在某些时候不定期的需要一些大量的cpu,也是可以这么做的。
另外切记一点,底层的虚拟化主机它也是一个VM,它也需要分配或者说保留一定的core给它!!!比如xenserver需要4个core,你要从总的vCPU pool里面计算掉这个容量去给host,当你用厂商的总体的容量计算公式的时候,别忘记这点,没家厂商都有最优化的计算公式的
樓豬想玩超瘦。
这样的虚拟化已经失去实用意义了吧
我对虚拟化的理解是,因为硬件配置远超实际应用需求,为追究效用最大化,所以虚拟化,但虚拟化的前提是所有虚拟应用的资源占用峰值不能超过物理资源才算有实际意义如何在云平台虚拟机上运行Java计算密集型任务
发表于 16:48|
来源DZone|
作者Eric Gregory
摘要:通过Windows Azure,你可以使用一个虚拟机来处理计算密集型任务,本文将带你了解如何创建一个可运行计算密集型的Java应用程序,并可以被另一个Java应用程序所监视的虚拟机。你将学到如何远程登录到你的虚拟机、如何在你的虚拟机上安装一个JRE或JDK、如何创建一个服务总线命名空间等方法。
通过Windows Azure,你可以使用一个虚拟机来处理计算密集型任务,例如,一个虚拟机可以处理任务,并交付结果给客户机或移动应用程序。本文将让你了解如何创建一个可运行计算密集型的Java应用程序,并可以被另一个Java应用程序所监视的虚拟机。
本教程假定你知道如何创建Java控制台应用程序、导入库到你的Java应用程序及生成一个Java存档(JAR)。假设没有Windows Azure的相关知识。
你将学到:
如何创建一个虚拟机
如何远程登录到你的虚拟机
如何在你的虚拟机上安装一个JRE或JDK
如何创建一个服务总线命名空间
如何创建一个执行计算密集型任务的Java应用程序
如何创建一个监视计算密集型任务进展情况的Java应用程序
如何运行Java应用程序
如何停止Java应用程序
本教程将使用Traveling Salesman Problem作为计算密集型任务。下面是在Java应用程序中运行计算密集型任务的例子:
以下是一个Java应用程序监控计算密集型任务的例子:
要完成本教程,你需要一个已启用 Windows Azure 虚拟机功能的 Windows Azure 帐户。你可以创建一个免费的试用帐号,在短短的几分钟内启用预览功能。
创建一个虚拟机
2. 单击新建按钮。
3. 单击&虚拟机&。
4. 单击快速创建。
5. 在创建虚拟机界面,为DNS 名称输入一个值。
6. 在图片下拉列表中,选择一个图像,如Windows Server 2008 R2 SP1。
7. 在&新密码&框中输入密码,并在确认框中重新输入密码。请记住这个密码,你将使用它来远程登录虚拟机。
8. 从位置下拉列表中,为你的虚拟机选择数据中心位置。例如美国西部。
9. 单击&创建虚拟机&,你的虚拟机将被创建。你可以通过管理网站上的虚拟机部分来监视状态。
远程登录你的虚拟机
2. 单击&虚拟机&。
3. 单击要登录的虚拟机名称。
4. 单击&连接&。
5. 当系统提示输入密码时,请使用你创建虚拟机时设置的密码。
在虚拟机上安装一个JRE或JDK
在你的虚拟机上运行Java应用程序,你需要安装一个Java Runtime Environment(JRE)。为了本教程,我们将安装一个Java开发工具包(JDK)到你的虚拟机,并且使用JDK的JRE。当然,你也可以选择只安装JRE。
在本教程中,将从Oracle网站安装一个JDK。
1. 登录到虚拟机上。
2. 在你的浏览器中打开。
3. 点击下载按钮来下载你想要的JDK。在本教程中使用Java SE 6更新32 JDK的下载按钮。
4. 接受许可协议。
5. 点击下载适用于Windows x64(64位)的可执行文件。
6. 按照提,并根据自身需要把JDK安装到你的虚拟机中。
需要注意的是,服务总线功能要求GTE CyberTrust Global Root证书作为你JRE的cacerts 存储的一部分进行安装。此证书会自动包含在本教程中所用的 JRE。如果您的 JRE cacerts 存储区中没有此证书,它可以从上复制证书内容进行安装,内容为一个.cer文件,并通过密钥工具将其添加到cacerts 存储。
如何创建一个服务总线命名空间
要在Windows Azure开始使用服务总线队列,您必须首先创建一个服务命名空间。一个服务命名空间提供了一个范围容器处理你的应用程序中的服务总线资源。
创建一个服务命名空间:
1. 登录(这与Windows Azure预览管理入口不同)。
2. 在左侧的导航栏中,单击服务总线、访问控制和缓存。
3. 单击服务总线按钮,然后单击新建按钮。
4. 在创建一个新的服务命名空间的对话框中,输入一个名称空间,然后以确保它是唯一的,点击检查可用性按钮。
5. 在确保名称空间的名字是可用的之后,选择你的命名空间被托管的国家或地区,但后单击创建命名空间按钮。
你创建的命名空间,将出现在管理入口,需要一段时间来激活。等到被激活时,然后再进行下一个步骤。
获取默认的命名空间的管理凭据
为了执行管理操作,比如在心的命名空间创建一个队列,你需要获得命名空间的管理凭据。
1. 在左侧的导航栏中,单击服务总线按钮,以显示列表中可用的命名空间:
2. 从显示的列表中选择刚刚创建的命名空间:
3. 右侧会列出新的命名空间的属性:
4. 默认密钥是隐藏的。点击查看按钮以显示安全证书:
5. 记下默认的发行者和默认密钥,你将使用该信息对命名空间执行操作。
如何创建一个执行计算密集型任务的Java应用程序
1. 在你的开发机器(并不一定是你所创建的虚拟机)上,为Java下载。
2. 在本小节的末尾创建一个Java控制台应用程序使用的示例代码。在本教程中,我们将使用TSPSolver.java作为java文件的名字。修改your_service_bus_namespace、 your_service_bus_owner、 以及 your_service_bus_key 等占位符,分别使用您的服务总线命名空间、 默认发行人和默认密钥值。
3. 编码后,导出应用程序到一个可运行的Java归档(JAR),并把所需的库到打包已生成的JAR。在本教程中,我们将使用TSPSolver.jar作为生成的JAR名称。
//&TSPSolver.java &&import&com.microsoft.windowsazure.services.core.C &import&com.microsoft.windowsazure.services.core.ServiceE &import&com.microsoft.windowsazure.services.serviceBus.*; &import&com.microsoft.windowsazure.services.serviceBus.models.*; &import&java.io.*; &import&java.text.DateF &import&java.text.SimpleDateF &import&java.util.ArrayL &import&java.util.D &import&java.util.L &&public&class&TSPSolver&{ &&&&&&//&&Value&specifying&how&often&to&provide&an&update&to&the&console. &&&&&private&static&long&loopCheck&=&;&& &&&&&&private&static&long&nTimes&=&0,&nLoops=0; &&&&&&private&static&double[][]& &&&&&private&static&String[]&cityN &&&&&private&static&int[]&bestO &&&&&private&static&double&minD &&&&&private&static&ServiceBusContract& &&&&&&private&static&void&buildDistances(String&fileLocation,&int&numCities)&throws&Exception{ &&&&&&&&&try{ &&&&&&&&&&&&&BufferedReader&file&=&new&BufferedReader(new&InputStreamReader(new&DataInputStream(new&FileInputStream(new&File(fileLocation))))); &&&&&&&&&&&&&double[][]&cityLocs&=&new&double[numCities][2]; &&&&&&&&&&&&&for&(int&i&=&0;&i;&i++){ &&&&&&&&&&&&&&&&&String[]&line&=&file.readLine().split(&,&&); &&&&&&&&&&&&&&&&&cityNames[i]&=&line[0]; &&&&&&&&&&&&&&&&&cityLocs[i][0]&=&Double.parseDouble(line[1]); &&&&&&&&&&&&&&&&&cityLocs[i][1]&=&Double.parseDouble(line[2]);&&&&&&&&&&&&&&& &&&&&&&&&&&&&} &&&&&&&&&&&&&for&(int&i&=&0;&i;&i++){ &&&&&&&&&&&&&&&&&for&(int&j&=&i;&j;&j++){ &&&&&&&&&&&&&&&&&&&&&distances[i][j]&=&Math.hypot(Math.abs(cityLocs[i][0]&-&cityLocs[j][0]),&Math.abs(cityLocs[i][1]&-&cityLocs[j][1])); &&&&&&&&&&&&&&&&&&&&&distances[j][i]&=&distances[i][j]; &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&} &&&&&&&&&}&catch&(Exception&e){ &&&&&&&&&&&&&throw&e; &&&&&&&&&} &&&&&} &&&&&&private&static&void&permutation(List&startCities,&double&distSoFar,&List&restCities)&throws&Exception&{ &&&&&&&&&&try &&&&&&&&&{ &&&&&&&&&&&&&nTimes++; &&&&&&&&&&&&&if&(nTimes&==&loopCheck) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&nLoops++; &&&&&&&&&&&&&&&&&nTimes&=&0; &&&&&&&&&&&&&&&&&DateFormat&dateFormat&=&new&SimpleDateFormat(&MM/dd/yyyy&HH:mm:ss&); &&&&&&&&&&&&&&&&&Date&date&=&new&Date(); &&&&&&&&&&&&&&&&&System.out.print(&Current&time&is&&&+&dateFormat.format(date)&+&&.&&); &&&&&&&&&&&&&&&&&System.out.println(&&&Completed&&&+&nLoops&+&&&iterations&of&size&of&&&+&loopCheck&+&&.&); &&&&&&&&&&&&&} &&&&&&&&&&&&&&if&((restCities.size()&==&1)&&&&((minDistance&==&-1)&||&(distSoFar&+&distances[restCities.get(0)][startCities.get(0)]&+&distances[restCities.get(0)][startCities.get(startCities.size()-1)]&&))){ &&&&&&&&&&&&&&&&&startCities.add(restCities.get(0)); &&&&&&&&&&&&&&&&&newBestDistance(startCities,&distSoFar&+&distances[restCities.get(0)][startCities.get(0)]&+&distances[restCities.get(0)][startCities.get(startCities.size()-2)]); &&&&&&&&&&&&&&&&&startCities.remove(startCities.size()-1); &&&&&&&&&&&&&} &&&&&&&&&&&&&else{ &&&&&&&&&&&&&&&&&for&(int&i=0;&i();&i++){ &&&&&&&&&&&&&&&&&&&&&startCities.add(restCities.get(0)); &&&&&&&&&&&&&&&&&&&&&restCities.remove(0); &&&&&&&&&&&&&&&&&&&&&permutation(startCities,&distSoFar&+&distances[startCities.get(startCities.size()-1)][startCities.get(startCities.size()-2)],restCities); &&&&&&&&&&&&&&&&&&&&&restCities.add(startCities.get(startCities.size()-1)); &&&&&&&&&&&&&&&&&&&&&startCities.remove(startCities.size()-1); &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&} &&&&&&&&&} &&&&&&&&&catch&(Exception&e) &&&&&&&&&{ &&&&&&&&&&&&&throw&e; &&&&&&&&&} &&&&&} &&&&&&private&static&void&newBestDistance(List&cities,&double&distance)&throws&ServiceException,&Exception&{ &&&&&&&&&try& &&&&&&&&&{ &&&&&&&&&&&&&minDistance&=&distance; &&&&&&&&&&&&&String&cityList&=&&Shortest&distance&is&&+minDistance+&,&with&route:&&; &&&&&&&&&&&&&for&(int&i&=&0;&i;&i++){ &&&&&&&&&&&&&&&&&bestOrder[i]&=&cities.get(i); &&&&&&&&&&&&&&&&&cityList&+=&cityNames[bestOrder[i]]; &&&&&&&&&&&&&&&&&if&(i&!=&bestOrder.length&-1) &&&&&&&&&&&&&&&&&&&&&cityList&+=&&,&&; &&&&&&&&&&&&&} &&&&&&&&&&&&&System.out.println(cityList); &&&&&&&&&&&&&service.sendQueueMessage(&TSPQueue&,&new&BrokeredMessage(cityList)); &&&&&&&&&}& &&&&&&&&&catch&(ServiceException&se)& &&&&&&&&&{ &&&&&&&&&&&&&throw& &&&&&&&&&} &&&&&&&&&catch&(Exception&e)& &&&&&&&&&{ &&&&&&&&&&&&&throw&e; &&&&&&&&&} &&&&&} &&&&&&public&static&void&main(String&args[]){ &&&&&&&&&&try&{ &&&&&&&&&&&&&&Configuration&config&=&ServiceBusConfiguration.configureWithWrapAuthentication( &&&&&&&&&&&&&&&&&&&&&&your_service_bus_namespace&,&&your_service_bus_owner&,&&your_service_bus_key&); &&&&&&&&&&&&&&service&=&ServiceBusService.create(config); &&&&&&&&&&&&&&int&numCities&=&10;&&//&Use&as&the&default,&if&no&value&is&specified&at&command&line.& &&&&&&&&&&&&&if&(args.length&!=&0)& &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&if&(args[0].toLowerCase().compareTo(&createqueue&)==0) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&//&No&processing&to&occur&other&than&creating&the&queue. &&&&&&&&&&&&&&&&&&&&&QueueInfo&queueInfo&=&new&QueueInfo(&TSPQueue&); &&&&&&&&&&&&&&&&&&&&&&service.createQueue(queueInfo); &&&&&&&&&&&&&&&&&&&&&&System.out.println(&Queue&named&TSPQueue&was&created.&); &&&&&&&&&&&&&&&&&&&&&&System.exit(0); &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&if&(args[0].toLowerCase().compareTo(&deletequeue&)==0) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&//&No&processing&to&occur&other&than&deleting&the&queue. &&&&&&&&&&&&&&&&&&&&&service.deleteQueue(&TSPQueue&); &&&&&&&&&&&&&&&&&&&&&&System.out.println(&Queue&named&TSPQueue&was&deleted.&); &&&&&&&&&&&&&&&&&&&&&&System.exit(0); &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&//&Neither&creating&or&deleting&a&queue. &&&&&&&&&&&&&&&&&//&Assume&the&value&passed&in&is&the&number&of&cities&to&solve. &&&&&&&&&&&&&&&&&numCities&=&Integer.valueOf(args[0]);&& &&&&&&&&&&&&&} &&&&&&&&&&&&&&System.out.println(&Running&for&&&+&numCities&+&&&cities.&); &&&&&&&&&&&&&&List&startCities&=&new&ArrayList(); &&&&&&&&&&&&&List&restCities&=&new&ArrayList(); &&&&&&&&&&&&&startCities.add(0); &&&&&&&&&&&&&for(int&i&=&1;&i;&i++) &&&&&&&&&&&&&&&&&restCities.add(i); &&&&&&&&&&&&&distances&=&new&double[numCities][numCities]; &&&&&&&&&&&&&cityNames&=&new&String[numCities]; &&&&&&&&&&&&&buildDistances(&c:\\TSP\\cities.txt&,&numCities); &&&&&&&&&&&&&minDistance&=&-1; &&&&&&&&&&&&&bestOrder&=&new&int[numCities]; &&&&&&&&&&&&&permutation(startCities,&0,&restCities); &&&&&&&&&&&&&System.out.println(&Final&solution&found!&); &&&&&&&&&&&&&service.sendQueueMessage(&TSPQueue&,&new&BrokeredMessage(&Complete&)); &&&&&&&&&}& &&&&&&&&&catch&(ServiceException&se)& &&&&&&&&&{ &&&&&&&&&&&&&System.out.println(se.getMessage()); &&&&&&&&&&&&&se.printStackTrace(); &&&&&&&&&&&&&System.exit(-1); &&&&&&&&&}&&&&&&&& &&&&&&&&&catch&(Exception&e)& &&&&&&&&&{ &&&&&&&&&&&&&System.out.println(e.getMessage()); &&&&&&&&&&&&&e.printStackTrace(); &&&&&&&&&&&&&System.exit(-1); &&&&&&&&&} &&&&&} &&}&
如何创建一个监视计算密集型任务进展情况的Java应用程序
1. 在你的开发机器上,创建一个Java控制台应用程序,使用的示例代码在本小节的末尾。在本教程中,我们将使用TSPClient.java作为Java文件名。和之前一样,分别使用你的服务总线命名空间、 默认发行人和默认密钥值,修改your_service_bus_namespace、 your_service_bus_owner、 以及 your_service_bus_key 等占位符。
2. 导出应用程序到一个可执行的JAR,并打包所需的库到生成的JAR。在本教程中,我们将使用TSPClient.jar生成的JAR名。
//&TSPClient.java &&import&java.util.D &import&java.text.DateF &import&java.text.SimpleDateF &import&com.microsoft.windowsazure.services.serviceBus.*; &import&com.microsoft.windowsazure.services.serviceBus.models.*; &import&com.microsoft.windowsazure.services.core.*; &&public&class&TSPClient& &{ &&&&&&public&static&void&main(String[]&args)& &&&&&{ &&&&&&&&&&&&&try &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&DateFormat&dateFormat&=&new&SimpleDateFormat(&MM/dd/yyyy&HH:mm:ss&); &&&&&&&&&&&&&&&&&Date&date&=&new&Date(); &&&&&&&&&&&&&&&&&System.out.println(&Starting&at&&&+&dateFormat.format(date)&+&&.&); &&&&&&&&&&&&&&&&&&String&namespace&=&&your_service_bus_namespace&; &&&&&&&&&&&&&&&&&String&issuer&=&&your_service_bus_owner&; &&&&&&&&&&&&&&&&&String&key&=&&your_service_bus_key&; &&&&&&&&&&&&&&&&&&Configuration& &&&&&&&&&&&&&&&&&config&=&ServiceBusConfiguration.configureWithWrapAuthentication( &&&&&&&&&&&&&&&&&&&&&&&&&namespace,&issuer,&key); &&&&&&&&&&&&&&&&&&ServiceBusContract&service&=&ServiceBusService.create(config); &&&&&&&&&&&&&&&&&&BrokeredMessage& &&&&&&&&&&&&&&&&&&int&waitMinutes&=&3;&&//&Use&as&the&default,&if&no&value&is&specified&at&command&line.& &&&&&&&&&&&&&&&&&if&(args.length&!=&0)& &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&waitMinutes&=&Integer.valueOf(args[0]);&& &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&String&waitS &&&&&&&&&&&&&&&&&&waitString&=&(waitMinutes&==&1)&?&&minute.&&:&waitMinutes&+&&&minutes.&;& &&&&&&&&&&&&&&&&&&//&This&queue&must&have&previously&been&created. &&&&&&&&&&&&&&&&&service.getQueue(&TSPQueue&); &&&&&&&&&&&&&&&&&&int&numR &&&&&&&&&&&&&&&&&&String&s&=&null; &&&&&&&&&&&&&&&&&&while&(true) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&ReceiveQueueMessageResult&resultQM&=&service.receiveQueueMessage(&TSPQueue&); &&&&&&&&&&&&&&&&&&&&&message&=&resultQM.getValue(); &&&&&&&&&&&&&&&&&&&&&&if&(null&!=&message&&&&null&!=&message.getMessageId()) &&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&//&Display&the&queue&message. &&&&&&&&&&&&&&&&&&&&&&&&&byte[]&b&=&new&byte[200]; &&&&&&&&&&&&&&&&&&&&&&&&&&System.out.print(&From&queue:&&); &&&&&&&&&&&&&&&&&&&&&&&&&&s&=&null; &&&&&&&&&&&&&&&&&&&&&&&&&numRead&=&message.getBody().read(b); &&&&&&&&&&&&&&&&&&&&&&&&&while&(-1&!=&numRead) &&&&&&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&s&=&new&String(b); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&ss&=&s.trim(); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.print(s); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&numRead&=&message.getBody().read(b); &&&&&&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&&&&&&&&System.out.println(); &&&&&&&&&&&&&&&&&&&&&&&&&if&(s.compareTo(&Complete&)&==&0) &&&&&&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&No&more&processing&to&occur. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&date&=&new&Date(); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&System.out.println(&Finished&at&&&+&dateFormat.format(date)&+&&.&); &&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&&&&else &&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&//&The&queue&is&empty. &&&&&&&&&&&&&&&&&&&&&&&&&System.out.println(&Queue&is&empty.&Sleeping&for&another&&&+&waitString); &&&&&&&&&&&&&&&&&&&&&&&&&Thread.sleep(60000&*&waitMinutes); &&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&}& &&&&&&&&&&} &&&&&&&&&catch&(ServiceException&se) &&&&&&&&&{ &&&&&&&&&&&&&System.out.println(se.getMessage()); &&&&&&&&&&&&&se.printStackTrace(); &&&&&&&&&&&&&System.exit(-1); &&&&&&&&&} &&&&&&&&&catch&(Exception&e) &&&&&&&&&{ &&&&&&&&&&&&&System.out.println(e.getMessage()); &&&&&&&&&&&&&e.printStackTrace(); &&&&&&&&&&&&&System.exit(-1); &&&&&&&&&} &&&&&&} &&}&
如何运行Java应用程序
运行计算密集型应用程序,首先要创建队列,然后解决Traveling Saleseman Problem,它会将当前的最佳路径添加到服务总线队列。当计算密集型应用程序正在运行(或运行后),运行客户端,从服务总线的队列显示结果。
如何运行计算密集型应用程序
1. 登陆到虚拟机上。
2. 创建一个你将在其中运行应用程序的文件夹。例如:c:\TSP。
3. 复制TSPSolver.jar到c:\TSP.
4. 创建一个包含以下内容的名为c:\TSP\cities.txt的文档:
City_1,&1002.81,&-1841.35 &City_2,&-953.55,&-229.6 &City_3,&-1363.11,&-1027.72 &City_4,&-1884.47,&-1616.16 &City_5,&1603.08,&-1030.03 &City_6,&-8.58 &City_7,&578.8,&-12.87 &City_8,&.79 &City_9,&293.36,&-1820.01 &City_10,&37.28 &City_11,&-1271.41,&-1670.5 &City_12,&5.35 &City_13,&9.98 &City_14,&9.75 &City_15,&230.77,&231.58 &City_16,&-822.63,&-544.68 &City_17,&-817.54,&-81.92 &City_18,&303.99,&-1823.43 &City_19,&239.95,&1007.91 &City_20,&-0.39 &City_21,&-116.11,&1933.01 &City_22,&382.64,&835.09 &City_23,&-580.28,&1040.04 &City_24,&205.55,&-264.23 &City_25,&-238.81,&-576.48 &City_26,&-1722.9,&-909.65 &City_27,&445.22,&1427.28 &City_28,&513.17,&1828.72 &City_29,&1750.68,&-1668.1 &City_30,&1705.09,&-309.35 &City_31,&-167.34,&1003.76 &City_32,&-1162.85,&-1674.33 &City_33,&1.04 &City_34,&23.3 &City_35,&18.04,&1857.11 &City_36,&47.75 &City_37,&-167.44,&-336.39 &City_38,&115.4,&0.2 &City_39,&-66.96,&917.73 &City_40,&915.96,&474.1 &City_41,&140.03,&725.22 &City_42,&-08.88 &City_43,&-567.51,&1253.83 &City_44,&0.92 &City_45,&-233.38,&909.93 &City_46,&-40.76 &City_47,&405.81,&421.84 &City_48,&363.68,&768.21 &City_49,&-120.3,&-463.13 &City_50,&588.51,&679.33&
1. 在命令提示符下,将目录更改到c:\TSP。
2. 确保JRE的bin文件夹在PATH环境变量中。
3. 在你运行运行TSP求解排列之前,你需要创建服务总线队列。运行下面的命令来创建服务总线队列:
java&-jar&TSPSolver.jar&createqueue&
现在,创建队列,你可以运行TSP求解排列。
如何运行客户端监控应用程序
1. 登录到你将运行客户端应用程序的计算机。该计算机并不一定是运行TSPSolver应用程序的同一台机器,虽然它也可以。
2. 创建一个你将在其中运行应用程序的文件夹。例如:c:\TSP。
3. 复制TSPClient.jar到c:\TSP。
4. 确保JRE的bin文件夹在PATH环境变量中。
5. 在命令提示符下,将目录更改到c:\TSP。
6. 运行下面的命令:
java&-jar&TSPClient.jar&
(可选)通过在命令行中的参数指定检查队列之间的睡眠分钟数。默认检查队列的睡眠周期是3分钟,如果你想为睡眠时间间隔使用不同的值,例如一分钟,运行以下命令:
java&-jar&TSPClient.jar&1&
客户端将一直运行,直到它看到一个&完整&的队列消息。注意,如果你没有在运行客户端的情况下运行多个事件的求解器,你可能需要多次运行客户端来完全清空队列。或者,你可以删除队列,然后再重新创建。删除队列,请运行以下TSPSolver(不是TSPClient)命令:
java&-jar&TSPSolver.jar&deletequeue&
求解器将运行,直到它检查完所有路线。
如何停止Java应用程序
对于求解器和客户端应用程序,如果你想在正常完成前结束,你可以按Ctrl+ C组合键退出。(编译/王旭东)
本文来自:
推荐阅读相关主题:
网友评论有(0)
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章}

我要回帖

更多关于 云平台 虚拟机 性能 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信