ASP的介绍``

ASP的介绍``,第1张

1 动角蝰(一种小毒蛇)[C]
asp2
ASP过时了!!
KK: []
DJ: []
诗=aspen
ASP是Active Server Page的缩写,意为“活动服务器网页”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文件的格式是asp,现在常用于各种动态网站中。 ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。 与HTML相比,ASP网页具有以下特点:
(1)利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;
(2)ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;
(3)服务器上的ASP解释程序会在服务器端制定ASP程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;
(4)ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;
(5)ASP可以使用服务器端ActiveX组建来执行各种各样的任务,例如存取数据库、发现哦那个Email或访问文件系统等。
(6)由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可放置ASP程序代码被窃取。
ASP的工作原理:
当在Web站点中融入ASP功能后,将发生以下事情:
1、用户向浏览器地址栏输入网址,默认页面的扩展名是asp。
2、浏览器向服务器发出请求。
3、服务器引擎开始运行ASP程序。
4、ASP文件按照从上到下的顺序开始处理,执行脚本命令,执行HTML页面内容。
5、页面信息发送到浏览器。
ASP的运行环境
asp需要运行在PWS或IIS下。PWS或IIS服务在windows98或windows2000的光盘上附带着,可以通过“添加/删除程序”中的“添加/删除windows组件”来安装。
一般asp需与access数据库或SQL Server数据库结合使用,编出功能强大的程序。
能够运行ASP的web服务器软件
Windows2000默认安装的是IIS50(internet information server),而windows xp默认安装的是IIS51,windows 2003默认安装的IIS60。
PWS(personal web server)运行在windows98环境下的简单个人网页服务器。
ASP的意涵与特性
ASP( Application Service Provider,应用软体租赁服务提供者 )即是指「透过网路以租赁方式提供应用软体服务的业者」,即是指业者以应用软体为主体,透过网路一对多地传递服务,这种以服务为主的交易模式促使企业可藉由租赁的方式,以更符合成本效益的方式拥有软体的使用权,并且亦能因为业者集中式的管理而大幅降低企业维护的成本
基本上,ASP即具有「软体服务化,服务网路化」,「资讯委外服务与网路结合」与「产品通路化,通路产品化」等三大特性,其甚至可以被视为是ISP(Internet Service Provider)与ITS(Information Technology Service)的结合
ASP的英文是Application Service Provider,中文的标准翻译就是“应用服务提
供商”,是指为商业或者个人客户提供管理应用解决方案的公司或者企业。最近
ASP被媒体炒做十分火热,不是IT行业的人面对一堆技术名词专业术语很难弄清楚
ASP的内容,本文试图用浅显的语言来为广大的读者揭开ASP神秘的面纱,对于IT
行业的大热门ASP领域有一些基本的认识。
1 ASP是什么东西?
简单地讲,ASP就是为客户提供服务的服务商,它和会计事物所、婚姻介绍所没有
什么本质方面的区别。不同的是ASP主要是通过INTERNET(国际互联网络)作为主
要工作和业务工具,采用一对多的方式,向企业、公司提供标准化的应用软件以
及相关的技术咨询、管理租赁的服务,ASP的概念最早是1998年由美国人提出来的
。目前被全球各大IT厂商看好并被认为是可以推动网络经济发展的,有稳固基础
的第三种网络商业模式。
和传统的外包服务(Outsourcing)相比,ASP的主要区别在于:ASP是一对多的经
营模式,提供的服务有兼容性和可协调性,并且ASP的收费方式一般是按月收费。
业界认为:ASP一般有这样一些“成员”:电信运营商、传统IT服务厂商、互联网
络接入服务商(ISP)、独立软件供应商(ISV)、系统集成商和单纯的ASP公司。
根据流行的观点,ASP有如下五个核心内涵:
a ASP着重应用为中心,提供对于应用方面的访问和管理。
b ASP服务可以为用户提供没有在服务器、人员、系统和系统授权等前期资源投
入情况下就可以在“定制”的全新应用系统环境进行访问的服务,如ISP,而这样
的服务一般按月份ASP收取服务费。
c ASP采用集中管理的方式---ASP一般都有一个管理中心,所有的客户通过INTE
RNET来进行远程访问,获得技术支持和咨询服务。
d 一对多的服务,也就是讲,ASP提供的是标准化的产品包,产品都是最低程度
的自定义或者没有实现客户定制化,对于行业用户来讲已经达到实用方便的标准

e 按照合同交付,在ASP客户的眼中,ASP是一家根据客户协议内容提供相关服务
,保证应用服务系统服务可以得到确实履行的机构。
2 ASP为什么会火?
从大的方面来讲,困扰国内企业生存、发展的核心问题是管理问题。随着互联网
络的普及和应用的深入,企业用户可以随时随地直接租用ASP的服务器和软件系统
来进行自己的业务管理,这样做的好处在于;第一,企业可以节省大笔用于IT建
设方面的资金,大幅度降低企业管理信息化的成本。第二,ASP的用户可以采用各
种方式获得应用和服务,软件类服务产品完全可以通过网络在非常短的时间内组
成一个完善的、高效的、先进的企业管理系统,迅速获得企业一体化的运营管理
方案。
网络经济发展突飞猛进,电子商务一日千里,网络和网站从门户到内容、从注意
力到垂直性,目前逐渐转向热衷ASP也是一个主要的原因。
笔者资料中,国内最早对ASP触电的是网友“飞鸟”,在1998年6月自发组织了研
究、交流和探讨ASP技术的“飞鸟之家”,现在已经发展成为chinaaspcom,成为
国内最早的ASP应用技术服务提供商网站。上海的互易网络有限公司结合国内实际
情况,推出了为国内企业服务的ASP平台互易网,向企业提供以电子商务为核心的
,企业内、外部网络设施和应用的远程构架和托管服务,创造虚拟企业门户(EP
)直接将ASP应用到商业增殖环节中去。
此外,ISP也全面转向ASP的怀抱,成为ISP进一步发展的产物。软件商对于ASP更
是情有独钟。业界最新的消息是,中国第三电信“网通”已经制定ASP发展战略,
国内最大的管理咨询公司“汉普”将把旗下八个子公司定位在企业内部资源计划
管理(ERP)领域的ASP中,北京“联成互动”瞄准客户关系管理(CRM)领域的A
SP,北京“数码方舟”定位在网络办公的ASP,HP正在和中国建设银行讨论共建金
融领域的ASP。
ASP正在IT经济大潮中显山露水,其发展前景不可估量。
3 ASP的发展阶段和面临的问题
以网络服务商、软件厂商和ISP为主力的各种IT角色,正在根据自己的优势条件出
发对ASP领域进行多种方面的尝试。就目前阶段来讲,ASP提供的服务不计其数五
花八门,没有标准化和量化的概念,硬件厂商向ASP的“土壤”和势力方向靠拢,
软件厂商和ISP则直接参与到ASP业务的第一线。
笔者估计,经过一段时间的试探和发展,ASP将向服务集成方面发展,产品和服务
初步的标准化将很快建立起来,接着进入到市场细化和标准制定、ASP产品成熟时
期,ASP的稳步增长,最终将成为IT行业商务模式的核心!
目前在ASP发展的道路上,主要面临的问题是观念的转变方面:用租赁代替购买,
服务集成代替产品经销商、服务经济代替产品经济等等。具体到实际方面来讲,
安全和服务的质量是ASP和客户共同关心的头等大事,要实现ASP提出的“租赁高
科技”的口号,ASP任重而道远!
ASP常用内置函数
1,日期/时间函数
这些函数包括对“年”、“月”、“日”、“时”、“分”、“秒”、“星期”等的显示。
(1)Now函数:根据计算机系统设定的日期和时间,返回当前的日期和时间值。使用方法now();
(2)Date函数:只返回当前计算机系统设定的日期值。使用方法:date();
(3)Time函数:只返回当前计算机系统设定的时间值。使用方法:time();
(4)Year函数:返回一个代表某年的整数。使用方法:year(date),其中date参数是任意的可以代表日期的参数,比如“year(date())”就表示是从“date()”得出的日期中提取其中“年”的整数。
另外,还可以这样应用:“year(#5 20,2006#)”表示提取“2006年5月20日”中“年”的整数值。关于“5 20,2006”,也可使用“5-20-2006”、“5/20/2006”等形式表现,即“某月某日”和“某年”的组合。同时注意使用“#”进行包括以表示日期值。
(5)Month函数:返回1到12之间的整数值,表示一年中某月。使用方法:month(date)。关于参数date的说明和year函数相同。但要注意日期的正确性,比如“#13-31-2006#”,根本就没有“13”月,肯定是错误的了。
(6)Day函数:返回1到31之间的整数值,表示一个月中的某天。使用方法:day(date)。关于参数date的说明和year函数相同。同样要注意日期的正确性,比如“#2-30-2006#”其中对“2”月定义的“30”日这天就是错误的。
(7)Hour函数:返回0到23之间的整数值,表示一天中的某个小时。使用方法:hour(time)。其中参数time是任意的可代表时间的表达式。比如“hour(time())”就表示是从“time()”得出的时间中提取其中“小时”的整数。同样,参数time还可以这样应用“hour(#11:45:50#)”表示从“11”时“45”分“50”秒中提取当前小时数。当然,定义的时间要符合时间的规范。
(8)Minute函数:返回0到59之间的整数值,表示一小时中的某分钟。使用方法:minute(time)。time参数的说明和hour函数相同。
(9)Second函数:返回0到59之间的整数值,表示一分钟中的某秒。使用方法:second(time)。time参数的说明和hour函数相同。
(10)Weekday函数:返回一个星期中某天的整数。使用方法:weekday(date)。关于参数date的说明和year函数相同。该函数返回值为“1”到“7”,分别代表“星期日”、“星期一”……“星期六”。比如当返回值是“4”时就表示“星期三”。
(11)WeekDayName函数:返回一个星期中具体某天的字符串。相对weekday函数而言即翻译出“星期几”,使用方法:weekdayname(weekday)。参数weekday即星期中具体某天的数值。比如“weekdayname(weekday(date()))”就表示当前是“星期几”。因为“date()”表示的是当前的时间,而“weekday(date())”就表示的是一星期中具体某天的整数。
当然weekdayname函数最终显示的字符串内容还与当前 *** 作系统语系有关,比如中文 *** 作系统将显示“星期一”这类的中文字符,而英文 *** 作系统则显示为“Mon”(Monday简写)。
此外,在VBScript中还有一些关于时间间隔的计算函数:
(1)DateAdd函数:返回指定时间间隔的日期、时间。可以计算出相隔多少年、或相隔几个月、又或相隔几个小时等的新日期、时间。使用方法:dateadd(interval, number, date)。
其中参数interval表示需要添加的时间间隔单位。其是以字符串的形式表达的,比如“yyyy”表示年,“q”表示季度,“m”表示月份,“d”表示天数,“ww”表示周数,“h”表示小时数,“n”表示分钟数,“s”表示秒数。
而参数number则表示添加的时间间隔数。其是以数值的形式表达的,可以为负值。参数date则要求是日期、时间的正确格式。
比如dateadd("d",100,"2006-5-20")就表示2006年5月20号以后的100天的日期值:2006-8-28。再比如dateadd("h",-12,"2005-5-20 10:00:00")就表示2005年5月20号上午10点前的12小时的日期时间:2005-5-19 22:00:00。
(2)DateDiff函数:返回两个日期时间之间的间隔。可计算出两个日期相隔的年代、小时数等。使用方法:datediff(interval,date1,date2)。
参数interval和dateadd函数中的interval参数内容描述相同,date1和date2参数分别就是相互比较的两个日期时间。另外,当date1的日期时间值大于date2时,将显示为负值。
比如DateDiff("yyyy","1982-7-18",date)表示某人的出生到现在已经多少年了。又比如DateDiff("d","1982-7-18","2062-7-18")则计算了80年过了多少天:29220。
2,字符串处理函数
在脚本的功能处理中,通常需要对一些字符串进行一些修饰性处理。比如过滤掉字符串中的敏感字眼以符合最终显示的要求;又比如一段较长的字符串,需要提取开头的几个字符时。
(1)Asc函数:返回字符串中第一个字母对应的ANSI字符代码。使用方法:asc(string)。其中string参数表示字符串。
(2)Chr函数:返回指定了ANSI 字符代码对应的字符。使用方法:chr(chrcode)。参数chrcode是相关的标识数字。该函数的功能和asc函数形成对应。
比如:asc(“a”)表示小写字母“a”的ANSI 字符“97”;同样chr(97)表示的就是“小写字母a”。另外chr(chrcode)中参数chrcode值为0到31的数字时,表示不可打印的ASCII码。比如“chr(10)”表示换行符,“chr(13)”表示回车符等,这常用于输入和显示格式的转换中。
(3)Len函数:返回字符串内字符的数目(字节数)。使用方法:len(string)。比如len(“love”)的值就是4。
(4)LCase函数:返回所有字符串的小写形式。使用方法:lcase(string)。比如lcase(“CNBruce”)返回为“cnbruce”。
(5)UCase函数:返回所有字符串的大写形式。与lcase函数形成对应。同样,ucase(“CNBruce”)返回为“CNBRUCE”。
(6)Trim函数、LTrim函数和RTrim函数:分别返回前导和后续不带空格、前导不带空格或后续不带空格的字符串内容。比如:
trim(“ cnbruce ”)返回为“cnbruce”,前导和后续都不带空格;
ltrim(“ cnbruce ”)返回为“cnbruce ”,前导不带空格;
rtrim(“ cnbruce ”)返回为“ cnbruce”,后续不带空格;
该函数常用于注册信息中,比如确保注册用户名前或后的空格。
(7)Left函数:返回从字符串的左边算起的指定数目的字符。使用方法:left(string,length)。比如left(“brousce”,5)返回为“brous”,即前五位字符。
(8)Right函数:返回从字符串的左边算起的指定数目的字符。使用方法:right(string,length)。比如right(“brousce”,4)返回为“usce”,即后四位字符。
(9)instr函数:返回某字符串在另一字符串中第一次出现的位置。比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以 instr(my_string,"A110B121C119D1861")
(10)Mid函数:从字符串中返回指定数目的字符。比如现在的“110”则应该是从字符串“A110B121C119D1861”的第2位取得3个单位的值:mid("A110B121C119D1861",2,3)
(11)Replace函数:在字符串中查找、替代指定的字符串。replace(strtobesearched,strsearchfor,strreplacewith)其中strtobesearched是字符串,strsearchfor是被查找的子字符串,strreplacewith是用来替代的子字符串。比如 replace(rscon,"<","<") 则表示将rscon中所有“<”的字符替换为“<”
3,类型转换函数
Cbool(string) 转换为布尔值
Cbyte(string) 转换为字节类型的值
Ccur(string) 转换为货币类值
Cdate(string) 转换为日前类型的值
Cdbl(string) 转换为双精度值
Cint(string) 转换为整数值
Clng(string) 转换为长整型的值
Csng(string) 转换为单精度的值
Cstr(var) 转换为字符串值
Str(var) 数值转换为字符串
Val(string) 字符串转换为数值
4,运算函数
Abs(nmb) 返回数子的绝对值
Atn(nmb) 返回一个数的反正切
Cos(nmb) 返回一个角度的余炫值
Exp(nmb) 返回自然指数的次方值
Int(nmb) 返回数字的整形(进位)部份
Fix(nmb) 返回数字的整形(舍去)部份
Formatpercent(表达式) 返回百分比
Hex(nmb) 返回数据的16进制数
Log(nmb) 返回自然对数
Oct(nmb) 返回数字的8进制数
Rnd 返回大于“0”而小于“1”的随机数,但此前需 randomize 声明产生随机种子
Sgn(nmb) 判断一个数字的正负号
Sin(nmb) 返回角度的正铉值
Sqr(nmb) 返回数字的二次方根
Tan(nmb) 返回一个数的正切值
5,其他函数
IsArray(var) 判断一个变量是否是数组
IsDate(var) 判断一个变量是否是日期
IsNull(var) 判断一个变量是否为空
IsNumeric(var) 判断表达式是否包含数值
IsObject(var) 判断一个变量是否是对象
TypeName(var) 返回变量的数据类型
Array(list) 返回数组
Split(liststr) 从一个列表字符串中返回一个一维数组
LBound(arrayP 返回数组的最小索引
Ubound(array) 返回数组的最大索引
CreateObject(class) 创建一个对象
GetObject(pathfilename) 得到文件对象

转载表面上看,是一套基于B/S方式实现的分布式管理系统,但其实背后的架构是基于C/S完成的。你以为他是一只鞋吗?其实他是一个吹风机。作为界面化的系统,浏览器框架是不可或缺的,但更加重要的东西在Socket上面。

一、需要解决中央控制端到各节点服务器之间的通信。

这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的 *** 作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。

二、跨语言的socket通信

为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用phppuppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的 *** 作,而python只是个 *** 作代理人的角色而已。

所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了, *** 作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/rece论文,不解释。perl也是 *** 作系统原生带的,但是perl的可维护性太差了,还是算了吧。

所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的 *** 作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。

三、代理端执行结果的获取

无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。

还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。

还有代理端最重要的一点,就是python的版本兼容性。centos5用python24,centos6用python26,ubuntu基本默认都是27。所以一定要最大限度的保证语言的跨版本兼容性,要是每个 *** 作系统和每一个版本我都写一个代理,我一个人就累死了。

四、浏览器端的model,view,controller

这里面你要封装好所有的通信协议,以及需要在节点上面执行的脚本。发送文件的 *** 作和数据库 *** 作也要在model里面完成。

如果对tcl/tk很熟,也可以写基于 *** 作系统界面方式的管理,不用浏览器就是了。

view对我来说是最痛苦的事,都是现学的jQuery怎么用,前端的工作太可怕了。关于这方面,没有太多可描述的,html和js带给我的只有痛苦的回忆,万恶的undefined。

五、跨 *** 作系统的安装文件封装。

要适应不同的 *** 作系统也是个很麻烦的事情,需要用agent提前获知 *** 作系统的发行分支,版本号。然后去找到对应的安装文件去执行。你不能保证一个分布式系统的集群中所有的节点都可以访问internet,更多的情况是这些节点都存在在一个安全的内网中。只有个别几个节点是可以访问外网的。所以,我势必要把所有的安装文件以及他们的依赖尽可能集中起来。我不确定安装 *** 作系统的lzo,yum或者apt-get会去下什么鬼东西,甚至无论是yum还是apt-get,里面都没有hadoop-lzo的库文件。所以,最好的办法是自己编译打包rpm和deb包。直接安装就好了,别去找repo下载什么。

这就是第五步工作,把需要的依赖的东西自己编译打包成rpm和deb。

deb包很好解决,但是rpm就没那么好办了,需要学习rpm的编译文件如何编写,这块是挺麻烦的,但是这玩意用好了还是挺不错的。现在我自制的安装包里面就已经包含了自己编译的lzo和snappy两种压缩库,以及hadoop-gpl-packaging的rpm和deb。下一个发布的easyhadoop将直接支持centos5,6,suse,以及ubuntu/debian的系统上安装hadoop。已经自带了lzo和snappy以及lzop和snzip。

六、把这些所有东西,整合到一个系统里面。

关联这些所有事情间的联系,整合到一个浏览器界面里面去。写一个分布式的管理脚本不难,写一个界面也不难,但是也许是我的水平不行,这两件事结合起来让他们协同工作还是有点难度的。对我来说,写界面的工作可能更难一点。

Cloudera可能是十来个人在写Manager的东西,ambari也是放到github和apachesvn上面,apache基金会的各种committer在写。easyhadoop没他们功能那么强大,一年来只有我一个人设计架构,功能,各种语言的编码,测试,发布。Fortheloveofgod,WhathaveIdone(英文部分请站在山顶仰天长啸)T_T。从前台到后台,到hadoop和生态系统以及他们的依赖软件的单独patch、编译打包。(系统yum或者apt-get的包不如自己打的好使。)

从时间上来看,全球第一款开源的hadoop部署管理系统应该还是属于ambari,2011年8月开始写的,2012年9月底进入apache的incubator。我是大概2012年8月开始写的easyhadoop,全球第一没赶上,估计国内第一个开源的hadoop管理系统还是可以排上的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10739252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存