小女巫 发表于 2015-1-18 11:20:54

ASP.NET教程之新人会商一:事件和两阶段提交仓酷云

实不相瞒,net网页编程是我见过的执行效率最低的程序设计语言,前不久在CSDN论坛上有个评测,计算9999的阶乘,同样的循环算法,net网页编程的耗时是.NET的5倍。

[*]1事件的ACID
事件是包管数据库从一个分歧性的形态永世地酿成别的一个分歧性形态的基本,个中,ACID是事件的基础特征。
A是Atomicity,原子性。一个事件常常触及到很多的子操纵,原子性则包管这些子操纵要末都做,要末都不做,而不至于呈现事件的部分操纵乐成,而别的一部分操纵没有乐成。假如事件在实行的过程当中产生毛病,那末数据库将回滚到事件产生之前的形态。好比银行的转账服务,这个事件的终极了局必定是:某个账户的余额增添了x,而别的一个账户的余额削减了x,大概两个账户的余额未产生变更。而不会呈现其他情形。
C是Consistency,分歧性。分歧性是指事件产生前和产生今后,都不会损坏数据库的束缚干系,包管了数据库元素的准确性、无效性和完全性。这类束缚干系能够是数据库外部的束缚,好比数据库元素的值必需在必定的局限内,也能够是使用带来的束缚,好比转账今后银行账户的余额不克不及为正数。
I是Isolation,断绝性。一个事件的操纵在未提交之前,是不会被并行产生的其他事件会见到的。也就是说,数据库操纵不会看到某个事件的两头操纵了局,好比转账过程当中,用户是不克不及查询到一个账户余额削减了,而别的一个账户余额未产生变更的情形。
D是Durability,耐久性。事件完成今后,它对数据库的影响是永世性的,即便在数据库体系产生宕机大概其他妨碍的情形下,这类影响也会失掉坚持。


[*]2两阶段提交
在散布式体系中,事件常常包括有多个介入者的举动,单个介入者上的举动是可以包管原子性的,而多个介入者之间原子性的包管则必要经由过程两阶段提交来完成,两阶段提交是散布式事件完成的关头。
很分明,两阶段提交包管了散布式事件的原子性,这些子事件要末都做,要末都不做。而数据库的分歧性是由数据库的完全性束缚完成的,耐久性则是经由过程commit日记来完成的,不是由两阶段提交来包管的。至于两阶段提交怎样包管断绝性,能够参考Large-scaleIncrementalProcessingUsingDistributedTransactionsandNotifications中两阶段提交的详细完成。
两阶段提交的历程触及到和谐者和介入者。和谐者能够看作成事件的倡议者,同时也是事件的一个介入者。关于一个散布式事件来讲,一个事件是触及到多个介入者的。详细的两阶段提交的历程以下:
第一阶段:
起首,和谐者在本身节点的日记中写进一条的日记纪录,然后一切介入者发送动静prepareT,扣问这些介入者(包含本身),是不是可以提交这个事件;
介入者在承受到这个prepareT动静今后,会依据本身的情形,举行事件的预处置,假如介入者可以提交该事件,则会将日记写进磁盘,并前往给和谐者一个readyT信息,同时本身进进预提交形态形态;假如不克不及提交该事件,则纪录日记,并前往一个notcommitT信息给和谐者,同时打消在本身上所做的数据库改;
介入者可以推延发送呼应的工夫,但终极仍是必要发送的。
第二阶段:
和谐者会搜集一切介入者的定见,假如收到介入者发来的notcommitT信息,则标识着该事件不克不及提交,和谐者会将AbortT纪录到日记中,并向一切介入者发送一个AbortT信息,让一切介入者打消在本身上一切的预操纵;
假如和谐者收到一切介入者发来prepareT信息,那末和谐者会将CommitT日记写进磁盘,并向一切介入者发送一个CommitT信息,提交该事件。若和谐者迟迟未收到某个介入者发来的信息,则以为该介入者发送了一个VOTE_ABORT信息,从而作废该事件的实行。
介入者吸收到和谐者发来的AbortT信息今后,介入者会停止提交,并将AbortT纪录到日记中;假如介入者收到的是CommitT信息,则会将事件举行提交,并写进纪录
一样平常情形下,两阶段提交机制都能较好的运转,当在事件举行过程当中,有介入者宕机时,他重启今后,能够经由过程扣问其他介入者大概和谐者,从而晓得这个事件究竟提交了没有。固然,这统统的条件都是各个介入者在举行每步操纵时,城市事前写进日记。
独一一个两阶段提交不克不及办理的窘境是:当和谐者在收回commitT动静后宕机了,而独一收到这条命令的一个介入者也宕机了,这个时分这个事件就处于一个未知的形态,没有人晓得这个事件究竟是提交了仍是未提交,从而必要数据库办理员的参与,避免数据库进进一个纷歧致的形态。固然,假如有一个条件是:一切节点大概收集的非常终极城市恢复,那末这个成绩就不存在了,和谐者和介入者终极会重启,其他节点也终极也会收到commitT的信息。


[*]3日记
数据库日记包管了事件实行的原子性和耐久性,日记范例能够分为redolog,undolog,undo/redolog。关于这几种日记情势的详细先容,能够参照:
http://nosql-wiki.org/foswiki/bin/view/Main/TransactonLog
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。

乐观 发表于 2015-1-20 20:52:09

比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。

再见西城 发表于 2015-1-22 16:59:59

通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。

飘飘悠悠 发表于 2015-1-25 15:14:41

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

飘灵儿 发表于 2015-1-25 23:01:44

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

灵魂腐蚀 发表于 2015-2-2 11:15:34

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

变相怪杰 发表于 2015-2-2 22:16:44

由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。

分手快乐 发表于 2015-2-8 12:27:06

目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.

冷月葬花魂 发表于 2015-2-14 17:37:29

当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。

再现理想 发表于 2015-3-4 09:15:05

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。

柔情似水 发表于 2015-3-11 18:08:11

那么,ASP.Net有哪些改进呢?

透明 发表于 2015-3-19 05:54:54

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

仓酷云 发表于 2015-3-27 08:31:22

如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
页: [1]
查看完整版本: ASP.NET教程之新人会商一:事件和两阶段提交仓酷云