|
电脑入门配置 如果平时只看看股票、上上网、看电影、玩玩普通的网络游戏,这套配置完全可以胜任。 CPU: INTEL-G1610 ¥260 主板:技嘉B75M-D3V ¥460 内存:金士顿DDR3-1333 4G ¥280 硬盘:西部数据Caviar Blue 500GB ¥320 电源:安钛克VP350P ¥200(备选海韵S12II330W ¥270) 机箱:酷冷毁灭者经典U3版 ¥200 显示器:三年质保的大品牌19寸显示器,16:9或16:10自行选择
网游入门配置 大型3D网络游戏入门配置,需要游戏关闭SSAO、低阴影、中等特效 CPU: INTEL-G2120 ¥410 主板:技嘉B75M-D3V ¥460 内存:金士顿DDR3-1600 4G ¥270 显卡:微星7750-1G ¥620(备选迪兰恒进7750恒金2代 ¥600) 硬盘:西部数据Caviar Blue 500GB ¥320 机箱:酷冷毁灭者经典U3版 ¥200 电源:安钛克VP350 ¥200(备选海韵S12II330W ¥270) 显示器:三年质保的大品牌19寸显示器,16:9或16:10自行选择
网游爽玩配置 基本可以爽玩目前的大型3D网络游戏了,前提是不能双开或多开 CPU: I5-3470 ¥1200(也可选择I5-3470散片+九州风神玄冰400散热) 主板:技嘉B75M-D3V ¥460(拉4倍频备选华擎Z77-PRO4 ¥600) 内存:金士顿DDR3-1600 4GX2 ¥560 显卡:华硕或微星7750-1G ¥620(N卡可考虑650) 硬盘:西部数据Caviar Blue 1TB ¥410 机箱:酷冷毁灭者经典U3版 ¥200 电源:海韵S12II430 ¥310(备选安钛克ECO-400 ¥360) 显示器:三年质保的大品牌22寸显示器,16:9或16:10自行选择
单机入门配置 CPU: I5-3470 ¥1200(也可选择I5-3470散片+九州风神玄冰400散热) 主板:技嘉Z77-DS3H ¥700(不超频选择技嘉B75M-D3H ¥500) 内存:金士顿DDR3-1600 4GX2 ¥560 显卡:华硕或微星7770-1G ¥800(N卡可考虑技嘉650TI ¥1070) 硬盘:西部数据Caviar Blue 1TB ¥410 机箱:恩杰H230 ¥360 电源:海韵S12II430 ¥310(备选安钛克ECO-400 ¥360) 显示器:三年质保的大品牌22、23、24寸显示器,16:9或16:10自行选择
单机爽玩配置 CPU: I5-3570K 散热:九州风神霜塔(备选采融B81) 主板:技嘉Z77X-D3H 内存:金士顿DDR3-1600 4GX2 显卡:华硕或HIS 270X(N卡可考虑华硕760) 硬盘:西部数据Caviar Blue 1TB 机箱:恩杰H2 电源:海韵S12II430(备选安钛克ECO-400需自购显卡6PIN转接线) 显示器:三年质保的大品牌22、23、24寸显示器,16:9或16:10自行选择
高帅富配置 CPU: I5-3570K ¥1610 散热:九州风神霜塔 ¥200(备选采融B81) 主板:技嘉Z77X-UD3H ¥1490 内存:芝奇RipjawsX DDR3-2133 4GX2 ¥570 显卡:华硕或HIS 270X ¥1500(N卡可考虑华硕760 ¥2200) 硬盘:希捷2TB ¥580(SSD自行添加) 机箱:杰恩小幻影或H2 ¥480 电源:海韵S12II520 ¥440(备选安钛克ECO520需自购显卡6PIN转接线 ¥460) 鼠标:Razer炼狱蝰蛇 ¥300(备选罗技G400 ¥230) 键盘:机械键盘自行研究 显示器:Dell-2412M ¥1500
土豪级配置 CPU: I5-3570K ¥1610 散热:九州风神霜塔 ¥200(备选采融B81) 主板:技嘉Z77X-UD3H ¥1490 内存:芝奇RipjawsX DDR3-2133 4GX2 ¥570 显卡:技嘉GTX770 ¥3000(受挖坑影响,A卡中高端普遍无货) 硬盘:希捷2TB ¥580(SSD自行添加) 机箱:银欣FT02 ¥1700 电源:海韵X650 ¥800(备选安钛克TPN550 ¥660) 鼠标:罗技G9X ¥600 键盘:机械键盘自行研究 显示器:Dell-2412M ¥1500
CPU AMD 目前不给力,新装机器建议直接上Intel的CPU。但Intel的4系列CPU(G3220、I3/I5/I7-4XXX)haswell发热量还是比 较大,大家还是买3系列的CPU吧。CPU盒装与散片的差别在于是否是正规质保,原盒是3年质保,而散片大多是店铺质保1年。为什么选I5不选I7: 1. 在所有的大型网游里,建筑和NPC的建模、游戏AI运算、游戏内各种数据计算、游戏插件计算等等这些工作都需要CPU来做,显卡只负责特效部分,但显卡特 效是可以根据实际情况调整的。越是满地NPC、各种建筑、密密麻麻的花花草草、各种飘数字的地方,CPU的压力就越大,CPU的整体性能决定了大型网游里 高负荷场景下的最低帧数水平。 2.对CPU的要求无非就是:同频率的CPU更依赖架构效率也就是核心效能;同架构效率下更依赖CPU主频;大量AI运算需要大容量低延迟高命中率的共享缓存。 奔腾:双核、高频、无睿频、3MB三级共享缓存; i5: 四核、高频、有睿频、6MB三级共享缓存。 对于大型网游,i5相比奔腾多出来的俩物理核心不是最重要的,更重要的是更高CPU主频、睿频以及容量翻倍的三级缓存,在高负荷场景下最低帧数表现会更好。 3.绝大多数的日常程序和游戏并不支持HT,也不能有效支持多核心。日常如果不使用能支持HT超线程软件的话,也不需要选择E3和I7。
主板 低端用B75M-D3V最佳,中端小超频用二线做工一般的Z77即可,中高端用3570K搭配二线做工好的Z77,一线Z77高端直接上一线的Z77。 特别注意:Intel的4系列的CPU和4系列的主板(H81、B85、Z87)目前不支持XP系统,请纯办公或者还想用XP的注意下。
内存 不超频就直接网上商城买金士顿,实体店千万别买金士顿,现在假货连金士顿自己都不能分辨,可选择宇瞻或者金邦。
显卡 N卡低端买650,700-1000买650TI,1000-1500买660,1500-2000买760,高端直接770。切记210、220……630、640等绝对是核显都不如的垃圾,买显卡直接650起。 A卡低端买600元左右买7750,中端买7770或260X,高端买R270X,土豪直接R280X。切记54XX、55XX、64XX、65XX等绝对是核显都不如的垃圾,买显卡直接R260X起。
硬盘 500G和1TB价差很小,最好直接上单碟1TB的,希捷、西数都看脸,随便选吧。SSD只提升文件的读取速度,对帧数基本没影响,请大家自行研究
机箱 机箱是更新换代用得最久的,好的机箱对减少共振、散热风道处理还是比较好的。
电源 如果有条件尽量不要用航嘉、长城之流的电源,首选台系或台系代工的电源。低端电源已被黑翔!(自行百度“红星炸弹之歌”) 推荐安钛克的VP350、ECO400、ECO520、TPN550和海韵的S12系列,注意VP450是坑爹货,BP系列也不再做推荐了,因为和ECO400差价太少。
显示器 为了大家的眼睛,请不要选择20、21.5这几个尺寸的显示器,点距太小了!尺寸看个人喜好:想买16:9的就买23或者27的;想买16:10就买22或24的,再大尺寸就看个人喜欢了。但是一般显示器尺寸越大,标准分辨率就越高,对机器的配置的需求也越高。
光驱 现在光驱对于大部分人来说基本没什么用,如果要的话推荐先锋DVR-221CHV,觉得没必要用到刻录的可以选择先锋232D,当然LG和建兴的都可以。
鼠标 如果对实体店装机送的不喜欢,个人推荐力胜L7(带侧键支持,小手用15、中手用55、大手用95)。往上建议直接蝰蛇和罗技,各有千秋。再往上就是G9X。
键盘 自行选择,当然,土豪的话都会选择机械键盘。
音箱 你是需要一个带Mic的耳机还是一个外置音箱,好明显这看个人需求,音箱的话个人推荐漫步者R101T06。至于其它的本人也不懂,就不要在这里献丑了。
外设 各有所爱,希望大家去实体店体验再决定购买,实体店价格坑爹的话试好手感走网上商城。
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1303_qiuxl_liberty/1303_qiuxl_liberty.html
介绍WebSphere Liberty Profile Server 介绍Liberty 是一款全新的轻量级应用服务器, 具有以下几个方面的特点: - 高 模块化——该功能允许用户根据自己应用程序的需求启用或者禁用相关的 feature(所谓 feature,在这里指的是运行应用程序所需要的各种资源的支持。比如,应用程序用到了 JSP,我们就需要启动 JSP 这个 feature,如果不在需要此 feature,就可以将其禁用。通过这种模块化的控制,我们可以按需启动不同的 feature,包括 JSP, Servlet, JPA 等等,这种控制是实现轻量级应用服务器的基础)。
- 轻量级—— Liberty 采用了多种技术进行瘦身和优化(主要是 OSGi 的应用),与传统的 WAS 相比,极大的减少了运行时的内存消耗。
- 高动态性——由于采用了 OSGi 的架构,程序员在开发的时候,可以动态修改配置文件,应用程序以及服务器的运行时信息,这些修改都是实时生效的,不需要重启服务器。
- 快速——由于采用了高模块化的设计,Liberty 应用服务器会“按需启动”,自身消耗的系统资源很少,对执行任务的反应时间也非常短,例如,一般来说 Liberty 的启动时间小于 5 秒。
- 配置简单——在整个开发过程中,用户只需要和一个配置文件(server.xml)打交道,而且配置的使用也非常灵活。
WebSphere eXtreme Scale 介绍WebSphere eXtreme Scale 以内存网格的方式运行,动态处理、分区、复制和管理数以万计服务器上的应用程序数据和业务逻辑。提供事务完整性和透明的故障恢复功能,从而确保高可用性、 高可靠性和一致的响应时间。它可以监控和管理自己,支持扩大和缩小,可以自动从故障恢复。极大的扩大了应用程序可以支持的用户数量。用更少的时间服务更多 的用户,或者在规定的、可接受的响应时间内为更多的用户提供服务。 回页首 前提- 安装 Oracle 或者 IBM JDK,并配置好环境变量。
- 如果使用 Eclipse,请安装 WebSphere Application Server V8.5 Liberty Profile Developer Tools
回页首 安装配置安装 IBM HTTP 服务器及插件本文将使用 IBM 安装管理器来在测试机 A 中安装 IBM HTTP 服务器以及插件。 - 下载并安装 IBM Installation Manager 1.5.2 或以上版本
- 下载添加安装路径到 IBM 安装管理器
- 选中 IBM HTTP 服务器以及插件
图 1. 安装成功界面安装 LibertyLiberty 支持两种安装方式:运行 JAR 文件、使用安装管理器安装。本文将介绍如何使用运行 JAR 文件安装 Liberty 服务器。在此例中,将会在测试机 A、B 和 C 上安装 Liberty 服务器。 - 下载 wlp-developers-8.5.0.0.jar 文件到本地机器。
- 打开命令行,找到下载的 jar 文件,例如 C:\Liberty。
- 执行 java -jar wlp-developers-8.5.0.0.jar。
- 设定安装路径完成安装。
图 2. Liberty 安装界面安装 WebSphere eXtreme ScaleWebSphere eXtreme Scale 支持两种安装方式:运行 JAR 文件、使用安装管理器安装。本文将介绍如何使用运行 JAR 文件安装 WebSphere eXtreme Scale 插件。在此例中,将会在测试机 A 上安装 WebSphere eXtreme Scale 插件。 - 下载 wxs-wlp_850.jar 文件到本地机器。
- 打开命令行,找到下载的 jar 文件,例如 C:\Liberty。
- 执行 java -jar wlp-developers-8.5.0.0.jar。
- 设定安装路径完成安装。
图 3. WebSphere eXtreme Scale 安装界面创建 Liberty 服务器- 进入 Liberty 安装目录下的 bin 文件夹
- 执行服务器创建命令 server create 服务器名称(例如:Test001)
在本文中将会在测试机 A、B 和 C 上创建三个 Liberty 服务器实例,分别命名为 Test001,Test002 和 Test003. 图 4. Liberty 服务器创建界面在 wlp_home/usr/servers 目录下看到以服务器命名的文件夹则表示创建成功。 图 5. 服务器创建成功界面配置 Liberty 服务器为每个 Liberty 服务器添加两个新功能(在 Liberty 中运行嵌入式 XS 服务器,使用 XS 存储 HTTP 会话)到 server.xml。添加代码如下: 清单 1. Feature 添加示例 <!-- Enable features --> <featureManager> <feature>jsp-2.2</feature> <feature>localConnector-1.0</feature> <feature>eXtremeScale.web-1.0</feature> <feature>eXtremeScale.server-1.0</feature> </featureManager> 更改 server.xml 中 HTTP 默认端口,可以在 Test002 中使用 9080 端口,在 Test003 中使用 9081 端口。因为不同的服务器在不同的测试机上,此处我们使用默认端口 9080 不会产生冲突。添加代码如下: 清单 2. HTTP 端口修改示例 <httpEndpoint host="*" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"> 添加 WXS 配置文件到 Liberty 服务器,并将 Test001 作为 Catalog 服务器。Test002 和 Test003 不需要作为 Catalog 服务器,所以 <xsServer> 标签的 isCatalog 属性设定为“false”。添加代码如下: 清单 3. XS Server 配置示例 <!-- Configuration for XS Server --> <xsServer isCatalog="true" listenerPort="2809" serverName="Server1"/> <!-- Configuration for XS HTTP Session data storage --> <xsWebApp catalogHostPort="localhost:2809" objectGridType="REMOTE" replicationInterval="0" reuseSessionId="true" securityEnabled="true" sessionTableSize="0"/> 在 Test001 服务器目录下创建“grids”文件夹,导入 XML 配置文件 deployment.xml 和 objectgrid.xml deployment.xml 文件代码如下: 清单 4. deployment.xml 示例 <?xml version="1.0" encoding="UTF-8"?> <deploymentPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ibm.com/ws/objectgrid/ deploymentPolicy ../deploymentPolicy.xsd" xmlns="http://ibm.com/ws/objectgrid/deploymentPolicy"> <objectgridDeployment objectgridName="session"> <mapSet name="sessionMapSet" numberOfPartitions="47" minSyncReplicas="0" maxSyncReplicas="0" maxAsyncReplicas="1" developmentMode="false" placementStrategy="FIXED_PARTITIONS"> <map ref="objectgridSessionMetadata"/> <map ref="objectgridSessionAttribute.*"/> <map ref="objectgridSessionTTL.*"/> </mapSet> </objectgridDeployment> </deploymentPolicy> 清单 5. objectgrid.xml 示例 <?xml version="1.0" encoding="UTF-8"?> <objectGridConfig xmlns:xsi="http://www.w3.org/2001/ XMLSchema-instance" xsi:schemaLocation="http://ibm.com/ws/ objectgrid/config ../objectGrid.xsd" xmlns="http://ibm.com/ws/objectgrid/config"> <objectGrids> <objectGrid name="session" txTimeout="30"> <bean id="ObjectGridEventListener" className="com.ibm.ws.xs. sessionmanager.SessionHandleManager"/> <backingMap name="objectgridSessionMetadata" pluginCollectionRef="objectgridSessionMetadata" readOnly="false" lockStrategy="PESSIMISTIC" ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3600" copyMode="COPY_TO_BYTES"/> <backingMap name="objectgridSessionAttribute.*" template="true" readOnly="false" lockStrategy="PESSIMISTIC" ttlEvictorType="NONE" copyMode="COPY_TO_BYTES"/> <backingMap name="objectgridSessionTTL.*" template="true" readOnly="false" lockStrategy="PESSIMISTIC" ttlEvictorType="LAST_ACCESS_TIME" timeToLive="3600" copyMode="COPY_TO_BYTES"/> </objectGrid> </objectGrids> <backingMapPluginCollections> <backingMapPluginCollection id="objectgridSessionMetadata"> <bean id="MapEventListener" className="com.ibm.ws.xs.sessionmanager.MetadataMapListener"/> </backingMapPluginCollection> </backingMapPluginCollections> </objectGridConfig> 在三个 Liberty 服务器中添加 <httpSession> 标签,使 Liberty 的会话管理器使用相同的会话 ID,添加代码如下: 清单 6. httpSession 重用设定示例 <! — Configuration for httpSession resuse --> <httpSession idReuse="true"/> Test002 和 Test003 不需要配置 XS 服务器,将设定 isCatalog 为"false", 同时 Test002 和 Test003 不需要创建“grids”文件夹。 为方便起见,在此我们将 Test001、Test002 和 Test003 导入到 Eclipse(Indigo Service Release 2)。 图 6. Liberty 服务器导入界面创建部署测试程序新建 Web Project,命名为 testApp 在 WebContent 文件夹下创建 index.jsp 文件,文件代码如下: 清单 7. Index.jsp 页面代码示例 <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title> 在 Liberty 集群中共享内存网格数据 </title> </head> <body> <h1> 在 Liberty 集群中共享内存网格数据测试页面 !</h1> <% Integer count; Object obj_Count = session.getAttribute("COUNT"); if (obj_Count != null) { count = (Integer) obj_Count; count = count + 1; } else { count = 1; } session.setAttribute("COUNT", count); %> <h3> 计数器会在每次页面加载时加 1</h3> <h3><font color="#FF0000"> 计数器 = <%=count%></font></h3> <h4><font color="#FF0000"><b> 页面服务器 : <%= System.getProperty("wlp.server.name") %></b></font></h4> <br/> 页面生成时间 = <%=new java.util.Date().toString()%><br/> <br/> </body> </html> 将 testApp 分别部署到 Test002 和 Test003, 图 7. 测试程序部署界面启动 Test001 ,Test002 和 Test003 服务器 可 以使用命令行启停 Liberty 服务器。例如在 Liberty 的安装目录的 bin 文件夹下执行 server start Test001 来启动 Test001 服务器。将测试程序直接拷贝应用程序(例如 war 文件)到 dropins 目录,当 Liberty 启动的时候,就会自动扫描,然后启动文件夹内的应用程序。前提是在启动前要配置好 server.xml 中关于应用程序的相关信息,代码如下: 清单 8. 应用程序部署示例 <application id="testApp" location="testApp.war" name="testApp" type="war"/> 配置 HTTP 服务器为 Test002 和 Test003 生成 plugin-cfg.xml 配置文件。在此使用 JAVA 的 jconsole 生成配置文件 在 JAVA 的安装目录的 bin 文件夹下运行 jconsole。 图 8. Jconsole 启动命令界面图 9. Jconsole 启动界面选择之前创建的 Liberty 服务器,连接 在 MBeans 标签下点击 generateDefaultPluginConfig 方法生成配置文件 . 图 10. 配置文件生成界面合并 Test002 和 Test003 的 plugin-cfg.xml 配置文件。文件代码如下,其中的 IP 分别为测试机 B 和 C 的 IP。 清单 9. plugin-cfg.xml 代码示例 <?xml version="1.0" encoding="UTF-8"?> <!-- This config file was generated by plugin's merge tool v1.0.0.2 on 2012.10.16 at 16:03:42 CST --> <Config ASDisableNagle="false" AcceptAllContent="false" AppServerPortPreference="HostHeader" ChunkedResponse="false" FIPSEnable="false" IISDisableNagle="false" IISPluginPriority="High" IgnoreDNSFailures="false" RefreshInterval="60" ResponseChunkSize="64" SSLConsolidate="false" SSLPKCSDriver="REPLACE" SSLPKCSPassword="REPLACE" TrustedProxyEnable="false" VHostMatchingCompat="false"> <Log LogLevel="Error" Name=".\logs\defaultServer\http_plugin.log"/> <Property Name="ESIEnable" Value="true"/> <Property Name="ESIMaxCacheSize" Value="1024"/> <Property Name="ESIInvalidationMonitor" Value="false"/> <Property Name="ESIEnableToPassCookies" Value="false"/> <Property Name="PluginInstallRoot" Value="."/> <!-- Server Clusters --> <ServerCluster CloneSeparatorChange="false" GetDWLMTable="false" IgnoreAffinityRequests="true" LoadBalance="Round Robin" Name="Shared_2_Cluster_0" PostBufferSize="64" PostSizeLimit="-1" RemoveSpecialHeaders="true" RetryInterval="60"> <Server CloneID="Server3CloneID" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="Server3" ServerIOTimeout="900" WaitForContinue="false"> <Transport Hostname="9.115.75.85" Port="9081" Protocol="http"/> </Server> <Server CloneID="Server2CloneID" ConnectTimeout="0" ExtendedHandshake="false" MaxConnections="-1" Name="Server2" ServerIOTimeout="900" WaitForContinue="false"> <Transport Hostname="9.111.97.74" Port="9081" Protocol="http"/> </Server> <PrimaryServers> <Server Name="Server3"/> <Server Name="Server2"/> </PrimaryServers> </ServerCluster> <!-- Virtual Host Groups --> <VirtualHostGroup Name="/cell/sharedCell_2/vHostGroup/shared_host_0"> <VirtualHost Name="*:443"/> <VirtualHost Name="*:80"/> <VirtualHost Name="*:9080"/> <VirtualHost Name="*:9081"/> </VirtualHostGroup> <!-- URI Groups --> <UriGroup Name="/cell/sharedCell_2/application/ default_host_defaultServer_default_node_Cluster_URIs"> <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/test/*"/> </UriGroup> <!-- Routes --> <Route ServerCluster="Shared_2_Cluster_0" UriGroup="/cell/sharedCell_2/application/ default_host_defaultServer_default_node_Cluster_URIs" VirtualHostGroup="/cell/sharedCell_2/vHostGroup/shared_host_0"/> </Config> 将合并后的 plugin-cfg.xml 配置文件拷贝到 IBM HTTP 服务器上。 下边所示代码到 http.conf 文件使 plugin-cfg.xml 配置文件生效 清单 10. plugin-cfg.xml 生效示例 LoadModule was_ap22_module "path\to\mod_was_ap22_http.dll" WebSpherePluginConfig "path\to\plugin-cfg.xml" 回页首 测试访问测试程序启动 HTTP 服务器以及 Test001、Test002 和 Test003。在测试机 A 上打开浏览器,访问 http://localhost/testApp/ 可以看到 Test002 访问界面或者 Test003 访问界面。这依赖于 HTTP 服务器将请求发送到 Test002 还是 Test003。 图 11. Test002 访问界面图 12. Test003 访问界面以第一次访问 Test002 为例,此时如果 Test002 发生故障停机了(在此手动停掉 Test002),当再次访问 http://localhost/testApp/ 时,HTTP 服务器会将请求发送到 Test003,如图 13 所示。但此时计数器并没有还原,由于两个服务器共享内存网格数据,所以计数器在首次访问 Test003 的时候已经在 Test002 的基础上加了一。 图 13. Test003 计数器增加界面 参考资料
这篇文章主要是参考了http://blog.csdn.net/jiangkai_nju/article/details/7338177这个博客,要看详细的内容可以参考这个博客进行学习研究,但是我觉得在以下的一些基本可以满足我们的文件传输要求了。 scp是linux中功能最强大的文件传输命令,可以实现从本地到远程以及远程到本地的轻松文件传输操作。下面简单的讲解一些关于scp命令的操作,给有用的人一些参考: 首先是本地到远程的操作:操作的格式如下 scp local_file remote_username@remote_ip:remote_folder 或者 scp local_file remote_username@remote_ip:remote_file 或者 scp local_file remote_ip:remote_folder 或者 scp local_file remote_ip:remote_file 第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名; 第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名; * 例子: scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3 scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3 * 复制目录: * 命令格式: scp -r local_folder remote_username@remote_ip:remote_folder 或者 scp -r local_folder remote_ip:remote_folder 第1个指定了用户名,命令执行后需要再输入密码; 第2个没有指定用户名,命令执行后需要输入用户名和密码; * 例子: scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/ scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/ 上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music 2、是实现从远程到本地的文件传输操作: 从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可; 例如: scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3 scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/ 最简单的应用如下 : scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2 [ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 . 可能有用的几个参数 : -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 . -C 使能压缩选项 . -P 选择端口 . 注意 -p 已经被 rcp 使用 . -4 强行使用 IPV4 地址 . -6 强行使用 IPV6 地址 . Linux scp命令的使用方法应该可以满足大家对Linux文件和目录的复制使用了。
websphere liberty 安装 部署 websphere application server liberty 部署 下载地址 http://www.ibm.com/developerworks/cn/downloads/ws/wasdevelopers/ 1.IBM WebSphere Application Server Liberty for Developers was.repo.8550.liberty.developers.ilan.zip (112M) 2.Installation Manager 1.6.2 for Windows 64-bit ---看实际情况下载 agent.installer.win32.win32.x86_64_1.6.2000.20130301_2248.zip (135M) 完成下载后,先安装 IBM Installation Manager,安装后让重启 IBM Installation Manager,点击“存储库”选择 was.repo.8550.liberty.developers.ilan.zip解压后的文件repository.config 然后就开始安装了... 安装好后。 启动websphere liberty : C:\Users\xxx>"C:\Program Files\IBM\WebSphere\Liberty\bin\server.bat" start 正在启动服务器 defaultServer。 服务器 defaultServer 已启动。 App部署和卸载 myserver目录即C:\Program Files\IBM\WebSphere\Liberty\usr\servers\defaultServer\ 部署和卸载行为可以在两个地方发生,一个是server.xml配置文件中,另一个是dropins目录. (1) 在myserver目录下找到server.xml文件并打开,加入”<application id="hello-app" location="hello-app.war" name="hello-app" type="war"/>”即可完成部署,删除这句话即可完成卸载,即便myserver处于运行状态也可以这样操作,因为server.xml是 可以即时更新的,所做的修改能够马上生效。相对于tomcat这是Liberty profile的一个优势,当tomcat的server.xml内容被修改修改时必须重启才能生效。这种部署方式适用于开发阶段。 (2) 直接将war包扔进myserver目录下的dropins文件夹中即可完成部署,删除此war包机完成卸载,这种部署适用于实施阶段。 (3)访问App 在浏览器中键入http://localhost:9080/hello-app/index.jsp,页面显示hello world,说明App部署成功,运行正常。 参考: http://blog.csdn.net/qiaoyupeng/article/details/7226303
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1207_zhuxl_liberty/1207_zhuxl_liberty.html 2012 年 6 月 15 日,IBM 正式发布了 WebSphere Application Server V8.5 版本(简称 WAS V8.5)。WebSphere Liberty Profile Server(简称 Liberty)是 WAS V8.5 中最主要的新特性,它是一个基于 OSGi 内核,高模块化,高动态性的轻量级 WebSphere 应用服务器,其安装极为简单(解压即可)、启动非常快、占用很少的磁盘和内存空间,支持 Web、mobile 和 OSGi 应用的开发,旨在提高开发人员的生产效率。 在本文中,我们将详细介绍什么是 Liberty 以及如何使用 Liberty 快速的开发和部署应用,使读者迅速的掌握这一全新的轻量级应用服务器。 0 评论: 朱 修磊, 软件工程师, IBM 2012 年 7 月 19 日 - 内容
什么是 WebSphere Liberty Profile Server ?Liberty 是一款全新的轻量级应用服务器,它将用户的良好开发体验作为最主要的出发点。其主要特点和内容包括: - 高 模块化——该功能允许用户根据自己应用程序的需求启用或者禁用相关的 feature(所谓 feature,在这里指的是运行应用程序所需要的各种资源的支持。比如,应用程序用到了 JSP,我们就需要启动 JSP 这个 feature,如果不在需要此 feature,就可以将其禁用。通过这种模块化的控制,我们可以按需启动不同的 feature,包括 JSP, Servlet, JPA 等等,这种控制是实现轻量级应用服务器的基础)。
- 轻量级—— Liberty 采用了多种技术进行瘦身和优化(主要是 OSGi 的应用),与传统的 WAS 相比,极大的减少了运行时的内存消耗。
- 高动态性——由于采用了 OSGi 的架构,程序员在开发的时候,可以动态修改配置文件,应用程序以及服务器的运行时信息,这些修改都是实时生效的,不需要重启服务器。
- 快速——由于采用了高模块化的设计,Liberty 应用服务器会“按需启动”,自身消耗的系统资源很少,对执行任务的反应时间也非常短,例如,一般来说 Liberty 的启动时间小于 5 秒。
- 配置简单——在整个开发过程中,用户只需要和一个配置文件(server.xml)打交道,而且配置的使用也非常灵活。
尽 管 Liberty 与传统 WAS 相比只是一个“小块头”,但是在 Web 和 OSGi 应用程序的开发上,Liberty 与传统 WAS 完全保持一致,在 Liberty 上开发的程序,可以直接移植到传统 WAS 上,不需要做任何的改变。相比传统 WAS 的庞大,Liberty 在为用户提供良好的开发体验上遥遥领先。 作为应用服务器,Liberty 支持与多种开发工具的结合: - 支持在 Rational Application Developer 中使用 Liberty,推荐在企业级应用开发中使用这种方式,因为这种方式支持最大范围的编程模型以及 Cloud。
- 支 持在 Eclipse 3.6(Helios) 或者 3.7(Indigo) 中使用 Liberty, 需要从 Eclipse Marketplace 安装 WebSphere Application Server V8.5 Developer Tools for Eclipse 或者 WebSphere Application Server V8.5 Liberty Profile Developer Tools for Eclipse。在 Eclipse 中使用 Liberty 是完全免费的,当然,如果你需要得到 IBM 工程师的支持,则需要支付额外的费用。
同时,Liberty 服务器也支持多种主流的操作系统平台,包括 Windows、Linux、Unix、z/OS 以及 Mac OS 等。Liberty 既可以用在开发环境中,也可以用于产品环境(Mac OS 除外)。Liberty 同时支持 Oracle 和 IBM JDK,支持的最低版本分别是:Oracle Java™ 6 update 26 和 IBM Java 6.0 (J9 2.6) SR 1。 回页首 初探 WebSphere Liberty Profile Server快速安装在 本文中我们主要介绍 Eclipse 与 Liberty 的结合使用,在开始搭建 Liberty 的开发环境前,读者需要自行下载和安装 Oracle 或者 IBM JDK,并配置好环境变量,这是 Liberty 能正常运行的必要条件。如果是以开发为目的,那么使用 Liberty 以及 Liberty 工具是完全免费的,并且没有时间限制。 在线安装 Liberty 开发工具 打开 Eclipse,依次点击 Help > Eclipse MarketPlace,在出现的页面搜索栏里输入 websphere,并点击搜索。 图 1. 安装 Liberty 开发工具在 搜索结果中会看到如上红色方框标注的工具,其中 WebSphere Application Server V8.5 Liberty Profile Developer Tools 是 WebSphere Application Server V8.5 Developer Tools 的子集,对于搭建 Liberty 开发环境,直接安装前者就可以,如果读者还需要将 Eclipse 与传统的 WAS 结合使用,那么就需要安装后一个工具。在本文中,我们直接安装 WebSphere Application Server V8.5 Liberty Profile Developer Tools。在安装过程结束后,需要重启 Eclipse。待 Eclipse 重启后,选择 Servers 视图,右击新建一个服务器,出现如下图所示,则表明 Liberty 开发工具已经成功安装 图 2. 验证 Liberty 开发工具安装成功创建 Liberty 服务器 在安装好 Liberty 开发工具后,我们需要在 Eclipse 中创建 Liberty 服务器,接着图 2 所示,选择 WebSphere Application Server V8.5 Liberty Profile,点击 Next 图 3. 选择 Liberty 的安装位置在 上图中,我们需要指定 Liberty 服务器的安装位置,对于如何下载 Liberty 服务器,有两种选择:1. 访问 wasdev.net 站点,下载 Liberty 的安装文件,Liberty 安装文件只有不到 50M,下载成功后只需要解压该文件到磁盘的任何一个位置即可完成 Liberty 的安装,“解压即安装”,安装 Liberty 就是如此简单。然后,点击 Browser 选择 Liberty 的安装位置,即可继续创建 Liberty 服务器;2. 直击点击上图的 Download or install,安装提示进行操作,只需要几分钟就可以在线下载并安装一个全新的 Liberty 服务器。在这里我们需要指出的是,您也可以选择直接使用 Liberty 服务器,而不是将其与 Eclipse 搭配起来使用,直接解压下载的 Liberty 到任意目录,就可以使用了。点击 Next,因为 Liberty 默认是没有创建服务器的,所以可以得到下图 图 4. 空白的 Liberty 服务器点击 New,创建你的第一个 Liberty 服务器 图 5. 创建 Liberty 服务器为你的 Liberty 任意指定一个名字,点击 Finish 完成创建。在 Servers 视图中,我们将看到创建好的 DemoServer。 图 6. Liberty 服务器概览从上图中我们可以看到 DemoServer 是停止状态,右键 DemoServer,选择 Start 启动 Liberty 服务器,在 Console 视图中检查 log,可以看到 Liberty 已经正常启动。 清单 1. Liberty 启动日志 Launching DemoServer (wlp-1.0.0.20120428-1251/websphere-kernel_1.0.0) on Java HotSpot(TM) Client VM, version 1.7.0_01-b08 (en_US) [AUDIT ] CWWKE0001I: The server DemoServer has been launched. [AUDIT ] CWWKZ0058I: Monitoring dropins for applications. [AUDIT ] CWWKF0011I: The server DemoServer is ready to run a smarter planet. 在上图中,双击 Server Configuration,可以看到如下配置文件(server.xml)。 清单 2. 初始的 server.xml 文件 <server description="new server"> <!-- Enable features --> <featureManager> <feature>jsp-2.2</feature> </featureManager> <httpEndpoint id="defaultHttpEndpoint" host="localhost" httpPort="9080" httpsPort="9443" /> </server> 这个 server.xml 就是 Liberty 服务器中唯一的配置文件,我们在开发过程中对应用程序或者 Liberty 运行时的配置都是在这个文件中完成。在默认情况下,Liberty 已经启用了 JSP 功能,我们可以动态的根据应用的需求为 Liberty 增加各种功能支持,方法如下: 在 server.xml 编辑窗口下方,选择 Design 模式, 图 7. 图形化编辑配置文件选择左侧 Feature Manager,然后选择右侧 Add,出现下图列表,根据需要添加相应的功能支持。 图 8. Features 列表当 然,读者也可以直接手工编辑 server.xml,手动添加需要的 Feature,但是要注意遵循 Liberty 配置文件的编写规范。到此,我们已经成功的安装了 Liberty 服务器,并搭建好了 Liberty 服务器的开发环境。开始我们的例子程序之前,下文首先向读者更深层次的介绍 Liberty 的功能特性。 简化服务器配置在 Liberty 中,和用户打交道的只有一个配置文件 server.xml。关于应用程序或者服务器运行时的所有配置都是在这一个文件中完成的,简化了服务器的配置,也减轻了程序员的负担。我们可以在 Eclipse 中直接编辑该文件,修改内容会实时生效。这个配置文件是可以被导出,也可以被不同的服务器共享。 灵活的服务器配置图 9. 灵活配置对 于配置文件的使用是非常灵活的,例如:如果有很多个 Liberty 都需要用到同一个配置文件,那么可以将该文件单独导出,存放在一个共享的位置,单个的 Liberty 服务器可以利用 <incluse /> 属性导入共享的配置文件;又比如配置文件的内容非常多而且繁杂,我们就可以将其中的内容分别写在不同的配置文件中(称为不同的配置文件片段),同样利用 <include /> 将这些片段文件导入到主配置文件中,运行时会负责去实时的解析这些片段文件。 应用部署在 Liberty 中部署应用也是非常简单的事情,打开你的 Liberty 安装目录 <Liberty_Install_dir>\usr\servers\server_name ,可以看到如下目录结构 : 图 10. 应用部署目录在 上图中 apps 和 dropins 是两个存放安装的应用的文件夹,我们可以通过 Eclipse 部署应用到 Liberty,应用文件将被放在 apps 下面(这个是应用部署的默认目录,也可以通过配置,将应用文件部署到其他任何位置)。我们也可以直接拷贝应用程序(例如 war 文件)到 dropins 目录,当 Liberty 启动的时候,就会自动扫描上面的两个文件夹,然后启动文件夹内的应用程序。当然,启动应用前,要确保已经配置好 server.xml 里的相关信息。 动态加载模块图 11. 动态化加载与 传统 WAS 不同的是,Liberty 并不是一个静态的服务器,它是动态的,可以根据应用程序的需要动态加载相应的模块。这些模块是以“feature”来定义的,比如 JSP, Servlet 等,都是不同的 feature。可以将 feature 看作是一个独立的模块,它由一到多个 OSGi bundle 组成,共同来完成某一个特定的任务。这些 feature 可是随时被添加和移除,而不需要重启服务器,正是得益于这样的动态化设计,Liberty 无论在启动时间还是反应时间上都更胜一筹,为程序员带来了快速的开发体验。 运行时动态更新图 12. 动态更新Liberty 为我们提供了一个可以动态实时更新的运行时,无论你是修改了应用程序,还是修改配置文件都会实时的被 Liberty 检测到,并立即更新运行时到最新状态,无需重启 Liberty 服务器。新的 feature 可以被随时的添加到 server.xml 中,运行时为负责实时启动相应的功能模块,这一切都与程序员来说都是透明的。例如:我们首先启动 Liberty 服务器,然后将一个 JSP 应用放到 dropins 目录里,如果你没有在 server.xml 中启动 JSP 功能,那么该应用就不会被启动。你将会得到一个警告信息,提示你应该首先启用 JSP 功能,然后该应用才会被实时的启动。同样,如果你将 JSP 功能从 server.xml 中移除,该应用也会被立刻停止。 新型的软件部署方式图 13. 集中管理 Liberty 服务器当 我们使用 Liberty 开发完应用程序后,Liberty 为我们提供了一个全新的软件部署方式,我们可以将 Liberty 服务器和应用程序一起打包为 ZIP 文件,然后将这个 ZIP 传输到需要部署软件的服务器上直接解压即可。为了支持适合云端和大规模应用的部署,WebSpere(传统 WAS)还提供了集中管理部署的功能(需要安装 WAS ND 版本),使用该功能可以将我们事先打好的 ZIP 包远程的传输到多个服务器上,在传送完成后,WAS 还会负责解压和安装。另外,WAS 的集中管理功能还提供了远程启动、停止和卸载 Liberty 服务器的功能。 Liberty 之于开发人员对于开发人员来说,Liberty 的出现是一个十分振奋人心的消息。首先,Liberty 作为一个轻量级的应用服务器,和 Eclipse 可以完美的结合,其最重要的特性就是关注程序员的开发体验,包括快速的下载、安装和环境搭建,在开发过程中,实时的应用更新而无需重启服务器,这些都会极 大的提高程序员的开发效率;其次,在开发,测试和部署应用的过程中,Liberty 都极其友好和方便,其与传统 WAS 的完全兼容,也为应用程序的迁移提供了有力的保障。 回页首 与主流 WEB 容器的对比从某种程度上来讲,目前,Liberty 与 Tomcat 处在同一个产品层次上,我们从功能特性、使用体验以及标准支持上对这两个服务器进行了对比,从中,我们可以看出 Liberty 在轻量级服务器中所具有的独特优势: 表 1. Liberty VS Tomcat对比项 | Tomcat | Liberty |
---|
大小 | <30M | <50M | 启动速度 | <5s | <5s | Java EE 标准支持 | JSP 2.2, Servlet 3.0, JSTL 1.2 用户需要添加相关的 jar 包来实现对其它标准的支持 | JSP 2.2, Servlet 3.0, JSF 2.0, JSTL 1.2, JPA 2.0, JDBC 4.0, JAX-RS 1.0, JNDI 1.0, Bean Validation 1.0, SSL 1.0, Security 1.0, Web Security 1.0, JMX 1.0 可动态加载或卸载对应的 feature | OSGi 编程模型 | 否 | 是,支持 Blue Print 1.0, WAB 1.0 | 开发工具 | 支持 Eclipse | 支持 eclipse, IBM Rational Application Developer | 支持的操作系统 | Linux, Windows | Linux, Windows, AIX, Mac, HP-UX, Solaris, iSeries, zSeries | 性能 | 一般 | 与传统 WAS 具有相同的核心代码,性能好 | 应用程序热部署 | 支持 | 支持 | 配置文件 | 多个配置文件,更新后需重启服务器 | 一个配置文件,更新后及时生效,无需重启 | 可移植性 | 您可以利用 IBM Application Migration Toolkit 将 Tomcat 上开发的应用快速移植到 WebSphere 应用服务器。反之,则不然。 | Liberty 和传统 WAS 对编程模型和标准的支持一致。在 Liberty 上开发的应用可以直接运行在传统 WAS 之上 | 文档 | 官方文档涵盖内容有限,但网络上相关内容(包括:blog,技术文章等)广泛。 | http://wasdev.net 上提供下载地址、文档、视频、音频、样本引用等。还有 WAS 的信息中心也有大量文档可供参考阅读。 | 社区 | http://tomcat.apache.org 有 dev 和 user mailing list,没有官方支持,有时回复不够及时。 | http://wasdev.net,可以与开发人员直接交流 | 长期战略优势 | 一般用于开发环境,生产环产能用的比较少。支持的并发度不高,可扩展性不强。 | Liberty 与传统 WAS 共享同一代码,天生具有其高效稳定的特点。开发 - 测试 - 生产切换零代价。可扩展性高,支持多个 server 间的负载均衡和故障恢复。 |
回页首 Demo:使用 Eclipse 和 Liberty 开发 Web 应用通 过上面的介绍,相信大家对 Liberty 已经有了一个大概的认识,接下来我们通过一个 Demo 来向大家展示如何使用 Liberty 和 Eclipse 开发 Web 应用。开始 Demo 之前,请大家根据上文的介绍,搭建自己的 Liberty 开发环境,并安装好 JDK 并且配置好环境变量。 Demo 程序很简单,包含一个 Servlet,实现打印当前时间的功能。步骤如下: - 打开 Eclipse,选择 File > New > Web>Dynamic Web Project
- 设置如下属性值:
- Project name: Demo
- Target runtime: WebSphere Application Server V8.5 Liberty Profile
图 14. 创建动态 Web 工程 - 点击 Next 两次,然后点击 Finish,完成工程的创建。
此时,你可以在左侧的资源导航页面看到刚刚创建完成的 Demo 工程,展开工程就可以看到一些默认创建的资源。 - 右击 Src 目录,选择 New > Class
- 设置如下属性值:
- Package: com.date.demo
- Name: DateProvider
图 15. 创建 java 文件 - 点击 Finish
- 编辑如下代码到 DateProvider.java
清单 3. DateProvider.java package com.date.demo; import java.util.Date; public class DateProvider { public String getDate() { // TODO Auto-generated method stub return new Date().toString(); } } 该文件只包含一个方法,getDate() 用来获得当前时间。 - 右击 Src,选择 New > Servlet
- 设置如下属性值
- Java package: com.date.demo
- Class name: DatePrintServlet
图 16. 创建 Servlet 文件 - 点击 Finish,完成创建。
- 编辑如下内容到 DatePrintServlet.java
清单 4. DatePrintServlet.java package com.date.demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class DatePrintServlet */ @WebServlet("/DatePrintServlet") public class DatePrintServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DatePrintServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub DateProvider dateProvider=new DateProvider(); response.getWriter().println(dateProvider.getDate()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } - 在左侧导航栏选择 DatePrintServlet,点击右键 Run As > Run on Server , 如下图:
图 17. 选择 Liberty 服务器 - 点击 Finish,Liberty 开发工具将会为我们部署上面的 Demo 程序,并启动 Liberty 服务器。从 console 的日志里我们可以看到如下描述:
[AUDIT ] CWWKZ0001I: Application Demo started in 1.235 seconds. 表明 Demo 应用已经成功部署了,同时,在 Eclipse 自带的浏览器里可以看到如下页面信息: 图 18. Demo 运行页面让我们回过头来看看 server.xml 里面的内容: 清单 5. server.xml <server description="new server"> <!-- Enable features --> <featureManager> <feature>jsp-2.2</feature> <feature>localConnector-1.0</feature> </featureManager> <httpEndpoint host="localhost" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/> <applicationMonitor updateTrigger="mbean"/> <application id="Demo" location="Demo.war" name="Demo" type="war"/> </server> 其中: <feature /> 包含了应用程序中所用到的功能包,如果你启用了 jsp-2.2,那么 Liberty 默认支持对 Servlet 3.0。 <httpEndpoint /> 指定了 HTTP 访问的端口,我们可以在这里改变默认的端口。 <applicationMonitor /> 用来配置对应用程序的监控模式,updateTrigger 属性是用来控制动态更新的,通过 Liberty 工具部署应用时 updateTrigger 的值设置为 mbean,当我们直接把应用程序拖进 dropins 时,需要将 updateTrigger 设为 polled,当然,如果我们不需要应用的动态更新功能,可以将这个值设为 disabled. <application /> 用来指定和应用本身相关的属性,id 和 name 是应用的唯一标识,type 指定了应用的类型,location 指定应用所在的位置,默认是在 apps 目录里面,我们可以通过配置修改这个默认设置。 回页首 总结通 过上面的介绍,相信读者已经对 WAS V8.5 最重要的特性 Liberty 有了一个全面的认识,作为新一代轻量级应用服务器,Liberty 采用了和传统 WAS 相同的代码,继承了传统 WAS 的优点,无论在性能上还是在稳定性上都优越于其他同类产品。Liberty 无论是在开发环境中还是在产品环境中,都具有其他产品不可比拟的优势。我们有理由相信,在追求开发效率和软件质量的今天,每一个程序员都会很快的接受这个 WAS 家族的“小块头”。 参考资料 学习获得产品和技术讨论
IBM邀请我们公司试用websphere application server v8.5 liberty profile,因此经理让我下载下来安装,测试一下,正好我正对这个新东西也挺感兴趣的,所以在此把过程记录下来. 一、简介 Liberty profile是WAS V8.5的一个新特性,它代表WAS服务器上的App正常运行必须的一组运行时环境集合,这个环境是可以动态配置的。简单说Liberty profile就是WAS8.5的精简版,具有占用空间少、启动速度快、调试方便、完全支持JavaEE、App无缝移植到WAS8.5等特性,特别适合 开发测试阶段使用。 二、安装,部署 1.前提: 确保计算机上正确安装了JDK1.6或以上版本,Eclipse3.7或以上版本(可选)。 2.安装Liberty profile 将下载得到的Zip包was4d-20111202-0614.zip,解 压到磁盘任意目录下,无误后安装完毕。可以参照根目录下的readme.txt文件,掌握Liberty profile的基本配置管理。在这里假设Liberty profile的安装目录为<install.dir>。 3.创建server实例 Liberty profile继承了WAS的profile特性,即运行时环境可以以实例的形式单独动态配置,实例之间互不影响。因此,进入cmd模式下 cd bin ,然后was4d.bat create myserver,这样就创建了一个名称为myserver的运行时环境实例,其磁盘路径为<install.dir>\usr \servers\myserver,我们开发的App可以部署到myserver目录下的dropins文件夹中运行,供外界访问。 4.安装Liberty profile Eclipse开发插件 在Eclipse Marketplace中键入websphere,在随后的结果列表中找到websphere application server v8.5 liberty profile beta一项,点击install安装,完毕后重启Eclipse。 5.在Eclipse中引用myserver实例 在Eclipse 中的Server视图中右击 New-Server,在弹出框中选择IBM- websphere application server v8.5 liberty profile beta,然后根据提示选择myserver实例即可,无误完毕后会在Server视图中出现websphere application server v8.5 liberty profile beta at localhost 一项,右击websphere application server v8.5 liberty profile beta at localhost选择start,此时Console视图会出现myserver启动日志,“The feature update is complete after …”表示启动成功。 6.开发App 在Eclipse中新建一个简单的Java Web App 命名为hello-app,在其index.jsp页面中输入hello world即可。 7.App部署和卸载 部署和卸载行为可以在两个地方发生,一个是server.xml配置文件中,另一个是dropins目录. (1) 在 myserver目录下找到server.xml文件并打开,加入”<application id="hello-app" location="hello-app.war" name="hello-app" type="war"/>”即可完成部署,删除这句话即可完成卸载,即便myserver处于运行状态也可以这样操作,因为server.xml是 可以即时更新的,所做的修改能够马上生效。相对于tomcat这是Liberty profile的一个优势,当tomcat的server.xml内容被修改修改时必须重启才能生效。这种部署方式适用于开发阶段。 (2) 直接将war包扔进myserver目录下的dropins文件夹中即可完成部署,删除此war包机完成卸载,这种部署适用于实施阶段。 8.访问App 在浏览器中键入http://localhost:9080/hello-app/index.jsp,页面显示hello world,说明App部署成功,运行正常。 三、Liberty,Tomcat6,was比较 Tomcat 和was的比较很简单,一个开源一个商用,开源的Tomcat小巧,灵活适合做开发测试,商用的was它提供了一个平台,你可以基于各种增值功能、使用 Process Server、MQ等等更先进而稳定的架构来构建应用.对于并发,高性能访问的处理能力会更强. 由于Liberty profile 是 was 的简易版本,所以Liberty profile只适合开发相对比较简单的App,而这个App可以无缝移植到WAS上. Tomcat6 与 Liberty profile的比较,红色为各自的优势 Tomcat6 Liberty profile 占用空间 27MB 56MB 启动时间 996ms 1600ms 配置复杂度 较复杂,配置文件较多 很简单,可以无配置文件 Server.xml 即时更新 不支持,需重启生效支持,即时生效 运行环境 多实例 不支持,灵活性较差支持,灵活性较高 Java EE 规范支持 不支持serverlet3.0支持serverlet3.0 支持jpa2.0 支持jpa2.0 不支持EJB 不支持EJB 四、总结 之前开发WAS应用时,如果这个App不依赖于容器,我们通常的做法是在Tomcat中开发测试,在WAS中部署运行,而部署时App的配置文件必定要做相应的修改,比如JNDI。 现在不用了,我们有了Liberty profile----WAS的一组运行时环境,它与Tomcat一样免费,轻巧,快速,灵活,而且开发的应用不做任何修改就能移植到WAS上。 相对于与Tomcat6,Liberty profile支持最新的JavaEE规范,增加了很多功能更加强大,使用非常方便的特性,所以Liberty profile比Tomcat更优秀,即便App不是基于WAS也可以使用Liberty profile进行开发测试。
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1207_zhuxl_liberty/1207_zhuxl_liberty.html 2012 年 6 月 15 日,IBM 正式发布了 WebSphere Application Server V8.5 版本(简称 WAS V8.5)。WebSphere Liberty Profile Server(简称 Liberty)是 WAS V8.5 中最主要的新特性,它是一个基于 OSGi 内核,高模块化,高动态性的轻量级 WebSphere 应用服务器,其安装极为简单(解压即可)、启动非常快、占用很少的磁盘和内存空间,支持 Web、mobile 和 OSGi 应用的开发,旨在提高开发人员的生产效率。 在本文中,我们将详细介绍什么是 Liberty 以及如何使用 Liberty 快速的开发和部署应用,使读者迅速的掌握这一全新的轻量级应用服务器。 0 评论: 朱 修磊, 软件工程师, IBM 2012 年 7 月 19 日 - 内容
什么是 WebSphere Liberty Profile Server ?Liberty 是一款全新的轻量级应用服务器,它将用户的良好开发体验作为最主要的出发点。其主要特点和内容包括: - 高 模块化——该功能允许用户根据自己应用程序的需求启用或者禁用相关的 feature(所谓 feature,在这里指的是运行应用程序所需要的各种资源的支持。比如,应用程序用到了 JSP,我们就需要启动 JSP 这个 feature,如果不在需要此 feature,就可以将其禁用。通过这种模块化的控制,我们可以按需启动不同的 feature,包括 JSP, Servlet, JPA 等等,这种控制是实现轻量级应用服务器的基础)。
- 轻量级—— Liberty 采用了多种技术进行瘦身和优化(主要是 OSGi 的应用),与传统的 WAS 相比,极大的减少了运行时的内存消耗。
- 高动态性——由于采用了 OSGi 的架构,程序员在开发的时候,可以动态修改配置文件,应用程序以及服务器的运行时信息,这些修改都是实时生效的,不需要重启服务器。
- 快速——由于采用了高模块化的设计,Liberty 应用服务器会“按需启动”,自身消耗的系统资源很少,对执行任务的反应时间也非常短,例如,一般来说 Liberty 的启动时间小于 5 秒。
- 配置简单——在整个开发过程中,用户只需要和一个配置文件(server.xml)打交道,而且配置的使用也非常灵活。
尽 管 Liberty 与传统 WAS 相比只是一个“小块头”,但是在 Web 和 OSGi 应用程序的开发上,Liberty 与传统 WAS 完全保持一致,在 Liberty 上开发的程序,可以直接移植到传统 WAS 上,不需要做任何的改变。相比传统 WAS 的庞大,Liberty 在为用户提供良好的开发体验上遥遥领先。 作为应用服务器,Liberty 支持与多种开发工具的结合: - 支持在 Rational Application Developer 中使用 Liberty,推荐在企业级应用开发中使用这种方式,因为这种方式支持最大范围的编程模型以及 Cloud。
- 支 持在 Eclipse 3.6(Helios) 或者 3.7(Indigo) 中使用 Liberty, 需要从 Eclipse Marketplace 安装 WebSphere Application Server V8.5 Developer Tools for Eclipse 或者 WebSphere Application Server V8.5 Liberty Profile Developer Tools for Eclipse。在 Eclipse 中使用 Liberty 是完全免费的,当然,如果你需要得到 IBM 工程师的支持,则需要支付额外的费用。
同时,Liberty 服务器也支持多种主流的操作系统平台,包括 Windows、Linux、Unix、z/OS 以及 Mac OS 等。Liberty 既可以用在开发环境中,也可以用于产品环境(Mac OS 除外)。Liberty 同时支持 Oracle 和 IBM JDK,支持的最低版本分别是:Oracle Java™ 6 update 26 和 IBM Java 6.0 (J9 2.6) SR 1。 回页首 初探 WebSphere Liberty Profile Server快速安装在 本文中我们主要介绍 Eclipse 与 Liberty 的结合使用,在开始搭建 Liberty 的开发环境前,读者需要自行下载和安装 Oracle 或者 IBM JDK,并配置好环境变量,这是 Liberty 能正常运行的必要条件。如果是以开发为目的,那么使用 Liberty 以及 Liberty 工具是完全免费的,并且没有时间限制。 在线安装 Liberty 开发工具 打开 Eclipse,依次点击 Help > Eclipse MarketPlace,在出现的页面搜索栏里输入 websphere,并点击搜索。 图 1. 安装 Liberty 开发工具在 搜索结果中会看到如上红色方框标注的工具,其中 WebSphere Application Server V8.5 Liberty Profile Developer Tools 是 WebSphere Application Server V8.5 Developer Tools 的子集,对于搭建 Liberty 开发环境,直接安装前者就可以,如果读者还需要将 Eclipse 与传统的 WAS 结合使用,那么就需要安装后一个工具。在本文中,我们直接安装 WebSphere Application Server V8.5 Liberty Profile Developer Tools。在安装过程结束后,需要重启 Eclipse。待 Eclipse 重启后,选择 Servers 视图,右击新建一个服务器,出现如下图所示,则表明 Liberty 开发工具已经成功安装 图 2. 验证 Liberty 开发工具安装成功创建 Liberty 服务器 在安装好 Liberty 开发工具后,我们需要在 Eclipse 中创建 Liberty 服务器,接着图 2 所示,选择 WebSphere Application Server V8.5 Liberty Profile,点击 Next 图 3. 选择 Liberty 的安装位置在 上图中,我们需要指定 Liberty 服务器的安装位置,对于如何下载 Liberty 服务器,有两种选择:1. 访问 wasdev.net 站点,下载 Liberty 的安装文件,Liberty 安装文件只有不到 50M,下载成功后只需要解压该文件到磁盘的任何一个位置即可完成 Liberty 的安装,“解压即安装”,安装 Liberty 就是如此简单。然后,点击 Browser 选择 Liberty 的安装位置,即可继续创建 Liberty 服务器;2. 直击点击上图的 Download or install,安装提示进行操作,只需要几分钟就可以在线下载并安装一个全新的 Liberty 服务器。在这里我们需要指出的是,您也可以选择直接使用 Liberty 服务器,而不是将其与 Eclipse 搭配起来使用,直接解压下载的 Liberty 到任意目录,就可以使用了。点击 Next,因为 Liberty 默认是没有创建服务器的,所以可以得到下图 图 4. 空白的 Liberty 服务器点击 New,创建你的第一个 Liberty 服务器 图 5. 创建 Liberty 服务器为你的 Liberty 任意指定一个名字,点击 Finish 完成创建。在 Servers 视图中,我们将看到创建好的 DemoServer。 图 6. Liberty 服务器概览从上图中我们可以看到 DemoServer 是停止状态,右键 DemoServer,选择 Start 启动 Liberty 服务器,在 Console 视图中检查 log,可以看到 Liberty 已经正常启动。 清单 1. Liberty 启动日志 Launching DemoServer (wlp-1.0.0.20120428-1251/websphere-kernel_1.0.0) on Java HotSpot(TM) Client VM, version 1.7.0_01-b08 (en_US) [AUDIT ] CWWKE0001I: The server DemoServer has been launched. [AUDIT ] CWWKZ0058I: Monitoring dropins for applications. [AUDIT ] CWWKF0011I: The server DemoServer is ready to run a smarter planet. 在上图中,双击 Server Configuration,可以看到如下配置文件(server.xml)。 清单 2. 初始的 server.xml 文件 <server description="new server"> <!-- Enable features --> <featureManager> <feature>jsp-2.2</feature> </featureManager> <httpEndpoint id="defaultHttpEndpoint" host="localhost" httpPort="9080" httpsPort="9443" /> </server> 这个 server.xml 就是 Liberty 服务器中唯一的配置文件,我们在开发过程中对应用程序或者 Liberty 运行时的配置都是在这个文件中完成。在默认情况下,Liberty 已经启用了 JSP 功能,我们可以动态的根据应用的需求为 Liberty 增加各种功能支持,方法如下: 在 server.xml 编辑窗口下方,选择 Design 模式, 图 7. 图形化编辑配置文件选择左侧 Feature Manager,然后选择右侧 Add,出现下图列表,根据需要添加相应的功能支持。 图 8. Features 列表当 然,读者也可以直接手工编辑 server.xml,手动添加需要的 Feature,但是要注意遵循 Liberty 配置文件的编写规范。到此,我们已经成功的安装了 Liberty 服务器,并搭建好了 Liberty 服务器的开发环境。开始我们的例子程序之前,下文首先向读者更深层次的介绍 Liberty 的功能特性。 简化服务器配置在 Liberty 中,和用户打交道的只有一个配置文件 server.xml。关于应用程序或者服务器运行时的所有配置都是在这一个文件中完成的,简化了服务器的配置,也减轻了程序员的负担。我们可以在 Eclipse 中直接编辑该文件,修改内容会实时生效。这个配置文件是可以被导出,也可以被不同的服务器共享。 灵活的服务器配置图 9. 灵活配置对 于配置文件的使用是非常灵活的,例如:如果有很多个 Liberty 都需要用到同一个配置文件,那么可以将该文件单独导出,存放在一个共享的位置,单个的 Liberty 服务器可以利用 <incluse /> 属性导入共享的配置文件;又比如配置文件的内容非常多而且繁杂,我们就可以将其中的内容分别写在不同的配置文件中(称为不同的配置文件片段),同样利用 <include /> 将这些片段文件导入到主配置文件中,运行时会负责去实时的解析这些片段文件。 应用部署在 Liberty 中部署应用也是非常简单的事情,打开你的 Liberty 安装目录 <Liberty_Install_dir>\usr\servers\server_name ,可以看到如下目录结构 : 图 10. 应用部署目录在 上图中 apps 和 dropins 是两个存放安装的应用的文件夹,我们可以通过 Eclipse 部署应用到 Liberty,应用文件将被放在 apps 下面(这个是应用部署的默认目录,也可以通过配置,将应用文件部署到其他任何位置)。我们也可以直接拷贝应用程序(例如 war 文件)到 dropins 目录,当 Liberty 启动的时候,就会自动扫描上面的两个文件夹,然后启动文件夹内的应用程序。当然,启动应用前,要确保已经配置好 server.xml 里的相关信息。 动态加载模块图 11. 动态化加载与 传统 WAS 不同的是,Liberty 并不是一个静态的服务器,它是动态的,可以根据应用程序的需要动态加载相应的模块。这些模块是以“feature”来定义的,比如 JSP, Servlet 等,都是不同的 feature。可以将 feature 看作是一个独立的模块,它由一到多个 OSGi bundle 组成,共同来完成某一个特定的任务。这些 feature 可是随时被添加和移除,而不需要重启服务器,正是得益于这样的动态化设计,Liberty 无论在启动时间还是反应时间上都更胜一筹,为程序员带来了快速的开发体验。 运行时动态更新图 12. 动态更新Liberty 为我们提供了一个可以动态实时更新的运行时,无论你是修改了应用程序,还是修改配置文件都会实时的被 Liberty 检测到,并立即更新运行时到最新状态,无需重启 Liberty 服务器。新的 feature 可以被随时的添加到 server.xml 中,运行时为负责实时启动相应的功能模块,这一切都与程序员来说都是透明的。例如:我们首先启动 Liberty 服务器,然后将一个 JSP 应用放到 dropins 目录里,如果你没有在 server.xml 中启动 JSP 功能,那么该应用就不会被启动。你将会得到一个警告信息,提示你应该首先启用 JSP 功能,然后该应用才会被实时的启动。同样,如果你将 JSP 功能从 server.xml 中移除,该应用也会被立刻停止。 新型的软件部署方式图 13. 集中管理 Liberty 服务器当 我们使用 Liberty 开发完应用程序后,Liberty 为我们提供了一个全新的软件部署方式,我们可以将 Liberty 服务器和应用程序一起打包为 ZIP 文件,然后将这个 ZIP 传输到需要部署软件的服务器上直接解压即可。为了支持适合云端和大规模应用的部署,WebSpere(传统 WAS)还提供了集中管理部署的功能(需要安装 WAS ND 版本),使用该功能可以将我们事先打好的 ZIP 包远程的传输到多个服务器上,在传送完成后,WAS 还会负责解压和安装。另外,WAS 的集中管理功能还提供了远程启动、停止和卸载 Liberty 服务器的功能。 Liberty 之于开发人员对于开发人员来说,Liberty 的出现是一个十分振奋人心的消息。首先,Liberty 作为一个轻量级的应用服务器,和 Eclipse 可以完美的结合,其最重要的特性就是关注程序员的开发体验,包括快速的下载、安装和环境搭建,在开发过程中,实时的应用更新而无需重启服务器,这些都会极 大的提高程序员的开发效率;其次,在开发,测试和部署应用的过程中,Liberty 都极其友好和方便,其与传统 WAS 的完全兼容,也为应用程序的迁移提供了有力的保障。 回页首 与主流 WEB 容器的对比从某种程度上来讲,目前,Liberty 与 Tomcat 处在同一个产品层次上,我们从功能特性、使用体验以及标准支持上对这两个服务器进行了对比,从中,我们可以看出 Liberty 在轻量级服务器中所具有的独特优势: 表 1. Liberty VS Tomcat对比项 | Tomcat | Liberty |
---|
大小 | <30M | <50M | 启动速度 | <5s | <5s | Java EE 标准支持 | JSP 2.2, Servlet 3.0, JSTL 1.2 用户需要添加相关的 jar 包来实现对其它标准的支持 | JSP 2.2, Servlet 3.0, JSF 2.0, JSTL 1.2, JPA 2.0, JDBC 4.0, JAX-RS 1.0, JNDI 1.0, Bean Validation 1.0, SSL 1.0, Security 1.0, Web Security 1.0, JMX 1.0 可动态加载或卸载对应的 feature | OSGi 编程模型 | 否 | 是,支持 Blue Print 1.0, WAB 1.0 | 开发工具 | 支持 Eclipse | 支持 eclipse, IBM Rational Application Developer | 支持的操作系统 | Linux, Windows | Linux, Windows, AIX, Mac, HP-UX, Solaris, iSeries, zSeries | 性能 | 一般 | 与传统 WAS 具有相同的核心代码,性能好 | 应用程序热部署 | 支持 | 支持 | 配置文件 | 多个配置文件,更新后需重启服务器 | 一个配置文件,更新后及时生效,无需重启 | 可移植性 | 您可以利用 IBM Application Migration Toolkit 将 Tomcat 上开发的应用快速移植到 WebSphere 应用服务器。反之,则不然。 | Liberty 和传统 WAS 对编程模型和标准的支持一致。在 Liberty 上开发的应用可以直接运行在传统 WAS 之上 | 文档 | 官方文档涵盖内容有限,但网络上相关内容(包括:blog,技术文章等)广泛。 | http://wasdev.net 上提供下载地址、文档、视频、音频、样本引用等。还有 WAS 的信息中心也有大量文档可供参考阅读。 | 社区 | http://tomcat.apache.org 有 dev 和 user mailing list,没有官方支持,有时回复不够及时。 | http://wasdev.net,可以与开发人员直接交流 | 长期战略优势 | 一般用于开发环境,生产环产能用的比较少。支持的并发度不高,可扩展性不强。 | Liberty 与传统 WAS 共享同一代码,天生具有其高效稳定的特点。开发 - 测试 - 生产切换零代价。可扩展性高,支持多个 server 间的负载均衡和故障恢复。 |
回页首 Demo:使用 Eclipse 和 Liberty 开发 Web 应用通 过上面的介绍,相信大家对 Liberty 已经有了一个大概的认识,接下来我们通过一个 Demo 来向大家展示如何使用 Liberty 和 Eclipse 开发 Web 应用。开始 Demo 之前,请大家根据上文的介绍,搭建自己的 Liberty 开发环境,并安装好 JDK 并且配置好环境变量。 Demo 程序很简单,包含一个 Servlet,实现打印当前时间的功能。步骤如下: - 打开 Eclipse,选择 File > New > Web>Dynamic Web Project
- 设置如下属性值:
- Project name: Demo
- Target runtime: WebSphere Application Server V8.5 Liberty Profile
图 14. 创建动态 Web 工程 - 点击 Next 两次,然后点击 Finish,完成工程的创建。
此时,你可以在左侧的资源导航页面看到刚刚创建完成的 Demo 工程,展开工程就可以看到一些默认创建的资源。 - 右击 Src 目录,选择 New > Class
- 设置如下属性值:
- Package: com.date.demo
- Name: DateProvider
图 15. 创建 java 文件 - 点击 Finish
- 编辑如下代码到 DateProvider.java
清单 3. DateProvider.java package com.date.demo; import java.util.Date; public class DateProvider { public String getDate() { // TODO Auto-generated method stub return new Date().toString(); } } 该文件只包含一个方法,getDate() 用来获得当前时间。 - 右击 Src,选择 New > Servlet
- 设置如下属性值
- Java package: com.date.demo
- Class name: DatePrintServlet
图 16. 创建 Servlet 文件 - 点击 Finish,完成创建。
- 编辑如下内容到 DatePrintServlet.java
清单 4. DatePrintServlet.java package com.date.demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class DatePrintServlet */ @WebServlet("/DatePrintServlet") public class DatePrintServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DatePrintServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub DateProvider dateProvider=new DateProvider(); response.getWriter().println(dateProvider.getDate()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } - 在左侧导航栏选择 DatePrintServlet,点击右键 Run As > Run on Server , 如下图:
图 17. 选择 Liberty 服务器 - 点击 Finish,Liberty 开发工具将会为我们部署上面的 Demo 程序,并启动 Liberty 服务器。从 console 的日志里我们可以看到如下描述:
[AUDIT ] CWWKZ0001I: Application Demo started in 1.235 seconds. 表明 Demo 应用已经成功部署了,同时,在 Eclipse 自带的浏览器里可以看到如下页面信息: 图 18. Demo 运行页面让我们回过头来看看 server.xml 里面的内容: 清单 5. server.xml <server description="new server"> <!-- Enable features --> <featureManager> <feature>jsp-2.2</feature> <feature>localConnector-1.0</feature> </featureManager> <httpEndpoint host="localhost" httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/> <applicationMonitor updateTrigger="mbean"/> <application id="Demo" location="Demo.war" name="Demo" type="war"/> </server> 其中: <feature /> 包含了应用程序中所用到的功能包,如果你启用了 jsp-2.2,那么 Liberty 默认支持对 Servlet 3.0。 <httpEndpoint /> 指定了 HTTP 访问的端口,我们可以在这里改变默认的端口。 <applicationMonitor /> 用来配置对应用程序的监控模式,updateTrigger 属性是用来控制动态更新的,通过 Liberty 工具部署应用时 updateTrigger 的值设置为 mbean,当我们直接把应用程序拖进 dropins 时,需要将 updateTrigger 设为 polled,当然,如果我们不需要应用的动态更新功能,可以将这个值设为 disabled. <application /> 用来指定和应用本身相关的属性,id 和 name 是应用的唯一标识,type 指定了应用的类型,location 指定应用所在的位置,默认是在 apps 目录里面,我们可以通过配置修改这个默认设置。 回页首 总结通 过上面的介绍,相信读者已经对 WAS V8.5 最重要的特性 Liberty 有了一个全面的认识,作为新一代轻量级应用服务器,Liberty 采用了和传统 WAS 相同的代码,继承了传统 WAS 的优点,无论在性能上还是在稳定性上都优越于其他同类产品。Liberty 无论是在开发环境中还是在产品环境中,都具有其他产品不可比拟的优势。我们有理由相信,在追求开发效率和软件质量的今天,每一个程序员都会很快的接受这个 WAS 家族的“小块头”。 参考资料 学习获得产品和技术
每逢春运,铁路系统唯一的官方购票网站12306就会成为众矢之的,今年也不例外。今年12306并未出现大面积 崩溃问题,但这并不妨碍它再次被淹没在一片埋怨声中。1月5日,有网友在问答网站“知乎”上提问,如果把12306外包给IBM或者阿里巴巴来做的话,能 不能比现在做得好?我们来看看获得5千余名网友“点赞”的知乎用户王强的解答吧。
官方订票网站12306崩溃时的页面(资料图) 以下是王强的回复(有删节):
12306首秀被骂的狗血喷头后铁道部找来IBM、阿里巴巴等大企业要解决方案,给出的条件是资金管够但是问题得解决。几大企业最后都拒绝了。 12306 开始自己尝试解决问题。他们发现市面上可以买到的成套解决方案都不足以应付春运购票负载,所以只能自己改进已有的数据库以前12306用的是小型机,发现 性能严重不足,遂改用x86系统+linux平台(原平台为HP Superdome小型机,UNIX系统,Sybase ASE数据库)。最后他们的核心系统用了十几个节点(现在应该是17节点)的多路Xeon E7(具体几路待考),每个节点配1TB内存,数据库全部在内存中运行。2013年春运,12306系统峰值负载11万tps,与2012年淘宝双11活 动峰值负载相当,新的系统基本经受住了考验。
补充:以上内容是我在2013年7月得知的信息,彼时没有任何公开来源提到过12306新系 统的技术细节。甚至,当时局外人没人知道12306已经在2012年开始做了技术改造。直到数日之前,铁总首次向媒体公开了技术改造的详情:分布式集群内 存数据技术引领12306技术革命。这篇文章给出的细节,与我之前看到的内容完全一致。由此我可以确信信息来源是此次技术升级的核心人士。
另 外,关于第三方合作对方给出的信息是IBM、Oracle、Sybase全部不能满足要求,主要是这些厂商的方案部署以后,要升级时不能做到不停机灵活扩 展。也就是说,IBM没有做到是他们技术不足“搞不定”。阿里巴巴参与了改造,负责了排队系统。此外,虽然后端经受住了压力,前端却如大家所看到的那样还 是频频卡死。到底卡死的原因是前端水平太低还是访问压力太大,暂时没有可靠的信息供判断。
淘宝的问题是其系统架构是分散度较高的,各个订 单之间关联度不大;而12306每出一张票都要对全线路做数据更新(因为一条线路存在多个站点),因此系统负载相较淘宝来说集中很多,直接搬淘宝的方案也 无法解决问题。淘宝的应用类型决定了阿里巴巴可以通过部署大量的服务器来分散压力,但12306就不行。其实他们的核心系统的硬件成本不过数百万,不是他 们不想采购更多服务器,而是买更多的服务器也没什么用途。最后,在经过软件层面的优化之后,12306的瓶颈其实是核心节点的CPU、内存性能。但是这个 性能的提升不是朝夕的事情,而是受限于摩尔定律,基本上每两年才能翻一倍多些。(这段话是我自己的分析,不过现在12306的后端数据库系统应付现有需求 已经够用了) 补充:关于座位实时复用,我看到的信息明确表明12306出票时,每出一张区间票都要实时调整该线路其他受影响区间段的余票数量,且这是很大的压力来源;另外,对方表示所使用的GemFire数据库与简单的memcache/redis数据缓冲不同,有着本质区别。
然后我说点对铁路系统购票困难现象的看法: 一种商品只要出现供不应求现象,那么结果只有两种:大家排队购买;出现黑市,变相提高商品的流通价格并抑制需求。 12306 这个事情,就是标准的限价商品供不应求之后出现排队与黑市现象的例子。因为供不应求,所以有了黄牛、抢票软件与秒杀。如果供应充足,一个车次直到发车前都 有一两张余票,那么黄牛、抢票就毫无存在价值,旅客也用不着守在电脑前和其他人比拼手速和网速以及电脑性能网络性能了。 现在供应不足的前提 下,12306就算把系统做的性能再高,也只是会加快热门车次票务秒杀的速度而已——而这更会刺激抢票软件,大家为了在更短的时间里成功抢到队列名额就会 不断提升自己的抢票性能。打个比方说就是一个店门前排队,消费者为了增加买到商品的概率去雇人代排,每个消费者都雇了好多人,造成店门口的通道拥挤不堪。 为了减缓拥堵,商家不断拓宽通道,但每次一拓宽消费者们就会增加雇佣的排队劳力把新增的通道空间占满,形成恶性循环。这样下去,只要还存在供不应求的现 象,这种循环就不会有终止的时候。也就是说,12306的问题主要不是出在网站本身。
12306这个事情,网上有多少网友从一开始就献计 献策了,也有不少网友提供了很不错的建议。但不得不说,很多网友在提建议时完全就是一种居高临下、自以为是的态度,上来就先认定需求简单可以轻松应付,随 便有点经验的工程师就能搞定,12306出问题全怪体制太烂,国企效率低下,一帮人光拿钱不做事,技术水平太低……
淘宝2013年双11 活动,峰值流量是一秒钟完成1.3万笔订单。12306在2014年1月6日全天网络出票400万张。看起来双11流量完爆12306是吧?等等!别忘了 12306这400万张票可不是全天悠悠闲闲平均地卖出去的,而是分成10个时段集中被抢走的。每个时段开始放票后数分钟之内大部分票就已经被抢光了。以 每个时段40万票,峰值持续三分钟估算,高峰期一分钟出票在10万张以上毫不夸张。诚然,一分钟10万订单还比不上淘宝2013双11,但别忘了一年以前 阿里巴巴也只是达到了一分钟15万订单的水平而已(并且在高峰期一样卡爆)。而且一分钟10万出票还满足不了需求的,以旅客购票的热情来看,达到一分钟 50万票都不一定能让所有旅客满意。
淘宝在2012年双11时已经是业界顶尖水平了,其软硬件技术皆为自主研发,既便如此面对一分钟十几 万的订单量都会卡死。请问,觉得12306“需求简单,问题可以轻松解决”的,是不是水平已经高到了阿里巴巴都要请你们去领导整个技术团队的级别呢?是不 是你们的方案可以轻松应付每分钟数十万笔订单,达到全球一流水平了?
淘宝面临的需求是业界从未有过的,所以淘宝的路很艰难。12306面 临的需求是其他人遇到过的么?全世界哪个国家、哪种客运票务系统敢说自己的负载达到12306三分之一的水平?面对空前庞大的压力,诸位“技术高手”只是 凭着自己一点程序员的经验,在电脑前一个人思考上一会儿就给出个“简单、实用、省钱、轻松应付”的解决方案——你们知不知道“自大”这两个字怎么写啊?
还 有一些人,看说IBM没做就一口认定是12306故意排挤IBM,认定IBM解决这问题肯定没压力。好嘛,IBM什么时候做过如此规模的票务系统了?你细 节什么都不知就预设结论了?为啥淘宝当年没选择IBM作为方案提供商而是自主研发?IBM的大数据业务主要集中在金融领域,这不代表它在其他领域就样样精 通好不好?它能拿出的方案无非是Power7小型机平台,Power7在数据库性能上又比Xeon E7强多点?然后Power7系统卖多少钱了解么?后续维护难度多大了解么?把适合银行金融行业的平台放到12306来真的合适么?说起来,不就是因为 “12306”和“IBM”这俩名字放一起,诸位内心里首先就给前者打了负分对后者仰视么?要是把“12306”换成“nasdaq”,那结论就又是一回 事儿了——哦正好nasdaq没用IBM方案,可见nasdaq是排挤IBM内部人赚黑心钱是吧?不过2013年工商银行系统升级故障,应该是和方案提供 商IBM无关的,肯定是国企的体制问题无误!
最后呢?12306还是做到了全球最强的客运票务系统。一贯被认为是因循守旧的国企,在选择 技术方案时放弃沿用多年的小型机/UNIX平台去拥抱业界还是新鲜事物的基于x86/linux的大规模分布内存数据库系统,承受住了堪比2012年淘宝 双11的压力。在这个领域,12306可以自豪地说自己是做的最好的案例。它还在卡,还是偶尔崩溃,页面还是难看,可是这些迟早会改进。这个过程中也还是 会有冷嘲热讽,还是会有所谓的大牛指点江山,但最终解决春运高峰期一天数百万张秒杀售票的,还是12306自己。所以,走自己的路,让别人去说吧。
原文链接:12306 外包给阿里巴巴、IBM 等大企业做是否可行
WebSphere Application Server V8.5 的最重要的新特性是新的 Liberty Profile 以及智能管理。本 FAQ 为您汇集了关于 WAS V8.5 的问题集锦,从智能管理、 Liberty Profile、性能等方面帮助您解答您使用过程中可能遇到的问题。 Liberty 和 tWAS是两个产品吗?目前 tWAS和 Liberty 所支持的功能有什么不同?Liberty 作为 WAS V8.5 发布的一部分,和 tWAS 作为两个单独的介质供用户使用。在功能上 Liberty 是 tWAS 的一个子集。tWAS 是一个完整的 J2EE 服务器,支持 J2EE 规范,而 liberty 目前只支持 Web, OSGi 和 Mobile 应用的开发。 Liberty 是如何提供给用户的?是以插件的形式吗?Liberty 是以一个单独的运行时环境提供给用户的。用户下载 Liberty 的安装介质后解压缩即可作为运行时环境部署应用。同时 Liberty 可以很好的跟开发工具如 Eclipse、RAD 等结合使用,有很好的开发者体验。 Liberty 有哪些优点?- 简单安装(可以通过 IM 进行安装,或者直接下载免安装版本)
- 快速启动
- 灵活的配置(只需要在 server.xml 文件里面进行配置即可)
- 实时更新(采用 OSGi 架构,server 不需重启,更改即可生效)
- 动态加载,Liberty 对所支持的功能特性实施动态加载的机制,即当使用某些特性的时候才将该特性相关的类加载的运行时当中。
Liberty 是否支持文件夹形式的 bundle 应用?Liberty 目前不支持文件夹形式的 bundle 应用,但是支持将 EBA 格式的 OSGi 应用解压安装,应用名称的格式应为 xxx.eba。 Liberty 采用动态加载的方式,那么当新添加特性时,Liberty 服务器是否会重启?当添加新的功能特性时,功能特性动态生效,Liberty 服务器不会被自动重启。 在 Liberty 上开发的应用能直接迁移到 tWAS 上进行使用吗?需要做什么修改吗?用 Liberty 开发的应用可以无缝地迁移到 tWAS 上面,不需要对应用进行修改,只需要在 tWAS 对数据源等应用所需要的资源做相应的设置即可。 Liberty 上部署应用有两种方式,即 Monitored Directory 和 Configuration,两种方式有什么不同?通过 Monitored Directory 的方式,用户只需把应用放在特定目录下面,Liberty 会自动去检查到该应用,然后自动帮助用户进行安装。 而通过 Configuration 的方式,Liberty 不会自动去进行安装,用户需要手动去进行安装,比如通过命令行或者 Eclipse 开发平台。 相比较与 Tomcat,开发者选择 Liberty 的原因将会是什么? Liberty 会带来哪些新体验 ?内容对比项 | Tomcat | Liberty |
---|
Java EE 标准支持 | JSP 2.2, Servlet 3.0, JSTL 1.2 用户需要添加相关的 jar 包来实现对其它标准的支持 | JSP 2.2, Servlet 3.0, JSF 2.0, JSTL 1.2, JPA 2.0, JDBC 4.0, JAX-RS 1.0, JNDI 1.0, Bean Validation 1.0, SSL 1.0, Security 1.0, Web Security 1.0, JMX 1.0 可动态加载或卸载对应的特性包 | OSGi 编程模型支持 | 否 | 是,支持 Blue Print 1.0, WAB 1.0 | 开发工具 | 支持 Eclipse | 支持 Eclipse, IBM Rational Application Developer | 性能 | 一般 | 与传统 WAS 具有相同的核心代码,性能好 | 支持的操作系统 | Linux, Windows | Linux, Windows, AIX, Mac, HP-UX, Solaris, iSeries, zSeries | 配置文件 | 多个配置文件,更新后需重启服务器 | 一个配置文件,更新后及时生效,无需重启 | 可移植性 | 您可以利用 IBM Application Migration Toolkit 将 Tomcat 上开发的应用快速移植到 WebSphere 应用服务器。反之,则不然。 | Liberty 和传统 WAS 对编程模型和标准的支持一致。在 Liberty 上开发的应用可以直接运行在传统 WAS 之上。 | 社区 | http://tomcat.apache.org 有开发人员和用户的邮件列表,没有官方支持,有时回复不够及时。 | http://wasdev.net,可以与开发人员直接交流 | 文档 | 官方文档涵盖内容有限,但网络上相关内容(包括:blog,技术文章等)广泛。 | http://wasdev.net 上提供下载地址、文档、视频、音频、样本引用等。 | 长期战略优势 | 一般用于开发环境,生产环产应用的比较少。 支持的并发度不高,可扩展性不强。 | Liberty 与传统 WAS 共享同一代码,天生具有其高效稳定的特点。开发 - 测试 - 生产切换零代价。 可扩展性高,支持多个 server 间的负载均衡和故障恢复。 | Liberty 高速缓冲可以由 eXtreme Scale 提供吗?可以,Liberty 可以和 eXtreme Scale 进行集成带来高速缓存的特性。 Liberty 支持 IBM iSeries 吗?支持,在 IBM iSeries 上的使用和在其他平台上相同。 用户可以在 Eclipse 中管理 Liberty 吗?比如启动和停止?可以,在 Eclipse 控制台的 Servers 标签中,展开您的 Liberty 下拉列表,会显示出当前部署在该应用服务器上的全部应用,右击某一应用,可以进行相关的启 / 停 / 移除操作,参见截图 但是在运行时环境里面,暂时不支持启动和停止某一个特定的应用。 Liberty 能在 mobile 的设备上做开发(比如 ipad)吗?目前不支持这样做,但是 Liberty 支持在 MAC 系统上进行开发。 Liberty 是如何自动添加所需的功能特性的?在开发环境,即 Eclipse+WDT+Liberty runtime 时,Liberty 可以自动为应用添加所需的特性。此功能是 WDT 来实现的,其会自动扫描应用,判断应用所采用的编程模型,然后为应用添加相应的功能支持。 如果直接使用 Liberty runtime 部署应用,Liberty 是不会自动为应用添加所需的特性的。 Liberty 如何处理不同的应用 /server 的端口冲突?通过在 Liberty 的运行时环境下面的 bootstrap.properties 和 server.xml 两个文件进行相应的配置,该项配置需要重启 Liberty。参考 信息中心进行配置。 除了 Liberty 之外,还有其他产品是基于 OSGi 架构的?Liberty 是完全基于 OSGi 的产品,其在构建中完全遵循了 OSGi 的编程模型规范。在应用服务器领域暂时还没有发现其他的产品也完全采用 OSGi 的编程模型进行构建。 当启用某个 Liberty 的特性时,Liberty 是及时动态的加载属于该特性的 JAR 包,还是在 Liberty 启动的时候就已经加载,只是此时才开始使用?一般来说,根据 bundle 的 Bundle-ActivationPolicy 值来确定是立刻启动 bundle 还是按需启动 bundle(lazy)。但是在 Liberty 中,大多数 bundle 都没有设定这个值,默认的行为就是当 Liberty 启动的时候 bundle 会被立即启动,但是,我们需要说明的是: - liberty 中对于 bundle 的使用采用的 DS 的方式(声明服务),bundle 与 bundle 之间是通过服务的调用来实现的,只有当去主动请求一个服务时,该服务的 bundle 提供者才会被加载,所以,当采用服务的管理模式后,我们并不需要特别在意 bundle 的加载方式。
- 在 liberty 中,只有很少的 bundle 设定了 Bundle-ActivationPolicy 值,此刻,这些 bundle 会根据值的设定选择立刻或者按需启动。
1、 复利会让你富有,但变富得花时间。 巴菲特是了不起,可他像这样当上数一数二的巨富是因为他60多年都是了不起的投资者。 他现在600亿美元的资产净值里,有597亿美元是在过了50岁生日以后得到的。更确切地说,在60岁以后, 巴菲特才拥有其中570亿美元。 他的秘诀就是时间。 大多数人在退休前一二十年才开始未雨绸缪,实际上,尽早开始储蓄是很重要的。 2、 影响回报的一个最大变量是估值,你根本不晓得估值会怎样。 未来的市场回报等于股息率+收益增长+/-市盈率(估值)变化。 股息率目前2%,估计每年收益增长的合理水平是5%,可市盈率就完全是未知数。 市盈率体现人们的预感,谁都没办法知道今后大家怎么看待未来。 如果有人说“我认为大多数人2023年会比现在心情好10%”,大家可能说这人有妄想症。 但如果有人这么预计10年内的市场回报,我们管这人叫分析师。 3、 简单通常比聪明更要紧。 如果有人2003年买了低成本的标普500指数基金,到2012年年底,可以收获97%的回报。 而道琼斯瑞信对冲基金指标的数据显示,那些高端大气的中性股市对冲基金同期平均市值还缩水了4.7%。 投资不像电脑,简单基本的方法可能比那些复杂高端的更有威力。 投资也不是打高尔夫,投机者很有可能用出色的成绩羞辱某些专家、老手。 4、 股市大起大落的几率是100%。 大多数投资者理解股票可以产生更高的长期回报,但代价是波动性更大。 1900年以来,标普500年均回报率约6%,最高和最低的年底收盘价之间平均差距达到23%。 所以,下次要有谁费劲解释为什么市场涨跌几个百分点,那基本上就是在解释为什么春天过了是夏天。 有人还问过老摩根市场今后会怎样,据说他当时回答: 它会波动。 乍听起来,这样的回答是在转移重点,事实上绝非虚言。 5、金融圈大多都是怪人、骗子和推销员。 大多数推销金融产品的人只对你的钱财感兴趣,因为他们可以借此收费。 要做 理想论坛的权威,根本不需要经验、证书甚至常识。 可惜,往往某位权威叫唤得越响亮、越语出惊人,得到的关注就越多,即便这样一来他更有可能出错,也是如此。股
|