首页> 搜索结果页
"充分利用ASP.NET的三种缓存提高站点性能的注意方法" 检索
共 7 条结果
提高网站速度|如何利用缓存
文章出处:http://hi.baidu.com/%CF%F2%CD%F9%BC%BE%BA%F3%C8%FC/blog/item/0f93cffcb5a12743d7887d63.html最近开始关注速度问题。    ASP.NET提供三种主要形式的缓存:页面级输出缓存、用户控件级输出缓存(或称为片段缓存)和缓存API。输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用这两种缓存就足够了。而缓存API则提供了额外的灵活性(实际上是相当大的灵活性),可用于在应用程序的每一层利用缓存。本文全面介绍了这三种缓存技术在系统各层中的应用。   在ASP.NET提供的许多特性中,缓存支持无疑是我最欣赏的特性,我这样说当然是有充分理由的。相比ASP.NET的所有其他特性,缓存对应用程序的性能具有最大的潜在影响,利用缓存和其他机制,ASP.NET开发人员可以接受使用开销很大的控件(例如,DataGrid)构建站点时的额外开销,而不必担心性能会受到太大的影响。为了在应用程序中最大程度地利用缓存,您应该考虑在所有程序级别上都实现缓存的方法。   Steve的缓存提示   尽早缓存;经常缓存   您应该在应用程序的每一层都实现缓存。向数据层、业务逻辑层、UI或输出层添加缓存支持。内存现在非常便宜-因此,通过以智能的方式在整个应用程序中实现缓存,可以获得很大的性能提高。   缓存可以防止许多过失   缓存是一种无需大量时间和分析就可以获得“足够良好的”性能的方法。这里再次强调,内存现在非常便宜,因此,如果您能通过将输出缓存30秒,而不是花上一整天甚至一周的时间尝试优化代码或数据库就可以获得所需的性能,您肯定会选择缓存解决方案(假设可以接受30秒的旧数据)。缓存正是那些利用20%付出获得80%回报的特性之一,因此,要提高性能,应该首先想到缓存。不过,如果设计很糟糕,最终却有可能带来不良的后果,因此,您当然也应该尽量正确地设计应用程序。但如果您只是需要立即获得足够高的性能,缓存就是您的最佳选择,您可以在以后有时间的时候再重新设计应用程序。   页面级输出缓存   作为最简单的缓存形式,输出缓存只是在内存中保留为响应请求而发送的HTML的副本。其后再有请求时将提供缓存的输出,直到缓存到期,这样,性能有可能得到很大的提高(取决于需要多少开销来创建原始页面输出-发送缓存的输出总是很快,并且比较稳定)。   实现   要实现页面输出缓存,只要将一条OutputCache指令添加到页面即可。   <%@ OutputCache Duration="60" VaryByParam="*" %>   如同其他页面指令一样,该指令应该出现在ASPX页面的顶部,即在任何输出之前。它支持五个属性(或参数),其中两个是必需的。       每个页面都写上这句话有些啰嗦,可以在web.config里配置如下: 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 <caching>2   <outputCacheSettings>3     <outputCacheProfiles>4       <add name="Cache30Seconds" duration="30" 5         varyByParam="none" />6     </outputCacheProfiles>7   </outputCacheSettings>8 </caching>9           在页面中引用代码如下:   Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><%@ OutputCache CacheProfile="Cache30Seconds"%>     Duration 必需属性。页面应该被缓存的时间,以秒为单位。必须是正整数。   Location 指定应该对输出进行缓存的位置。如果要指定该参数,则必须是下列选项之一:Any、Client、Downstream、None、Server或ServerAndClient。   VaryByParam 必需属性。Request中变量的名称,这些变量名应该产生单独的缓存条目。“none”表示没有变动。“*”可用于为每个不同的变量数组创建新的缓存条目。变量之间用“;”进行分隔。   VaryByHeader 基于指定的标头中的变动改变缓存条目。   VaryByCustom 允许在global.asax中指定自定义变动(例如,“Browser”)。   利用必需的Duration和VaryByParam选项的组合可以处理大多数情况。例如,如果您的产品目录允许用户基于categoryID和页变量查看目录页,您可以用参数值为“categoryID;page”的VaryByParam将产品目录缓存一段时间(如果产品不是随时都在改变,一小时还是可以接受的,因此,持续时间是3600秒)。这将为每个种类的每个目录页创建单独的缓存条目。每个条目从其第一个请求算起将维持一个小时。   VaryByHeader和VaryByCustom主要用于根据访问页面的客户端对页面的外观或内容进行自定义。同一个URL可能需要同时为浏览器和移动电话客户端呈现输出,因此,需要针对不同的客户端缓存不同的内容版本。或者,页面有可能已经针对IE进行了优化,针对Netscape或Opera则应取消这种优化功能。后一个例子非常普遍,我们将提供一个说明如何实现此目标的示例:   示例:VaryByCustom用于支持浏览器自定义   为了使每个浏览器都具有单独的缓存条目,VaryByCustom的值可以设置为“browser”。此功能已经内置在缓存模块中,并且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。   <%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"%>  片段缓存,用户控件输出缓存  更多选项       除了上面提到的依赖项,我们还可以指定项的优先级(依次为low、high、NotRemovable,它们是在System.Web.Caching.CacheItemPriority枚举中定义的)以及当缓存中的对象到期时调用的CacheItemRemovedCallback函数。大多数时候,默认的优先级已经足够了-缓存引擎可以正常完成任务并处理缓存的内存管理。CacheItemRemovedCallback选项考虑到一些很有趣的可能性,但实际上它很少使用。不过,为了说明该方法,我将提供它的一个使用示例:   CacheItemRemovedCallback示例 System.Web.Caching.CacheItemRemovedCallback callback = new System.Web.Caching.CacheItemRemovedCallback (OnRemove);Cache.Insert("key",myFile,null,  System.Web.Caching.Cache.NoAbsoluteExpiration,  TimeSpan.Zero,  System.Web.Caching.CacheItemPriority.Default, callback);. . .public static void OnRemove(string key, object cacheItem,  System.Web.Caching.CacheItemRemovedReason reason){ AppendLog("The cached value with key ''" + key + "'' was removed from the cache. Reason: " +  reason.ToString()); }   该示例将使用AppendLog()方法中定义的任何逻辑来记录缓存中的数据到期的原因。通过在从缓存中删除项时记录这些项并记录删除的原因,您可以确定是否在有效地使用缓存或者您是否可能需要增加服务器上的内存。注意,callback是一个静态(在VB中为Shared)方法,建议使用该方法的原因是,如果不使用它,保存回调函数的类的实例将保留在内存中,以支持回调(对static/Shared方法则没有必要)。   该特性有一个潜在的用处-在后台刷新缓存的数据,这样用户永远都不必等待数据被填充,但数据始终保持相对较新的状态。但实际上,此特性并不适用于当前版本的缓存API,因为在从缓存中删除缓存的项之前,不触发或不完成回调。因此,用户将频繁地发出尝试访问缓存值的请求,然后发现缓存值为空,不得不等待缓存值的重新填充。我希望在未来的ASP.NET版本中看到一个附加的回调,可以称为CachedItemExpiredBut   NotRemovedCallback,如果定义了该回调,则必须在删除缓存项之前完成执行。   缓存数据引用模式   每当我们尝试访问缓存中的数据时,都应该考虑到一种情况,那就是数据可能已经不在缓存中了。因此,下面的模式应该普遍适用于您对缓存的数据的访问。在这种情况下,我们假定已缓存的数据是一个数据表。 public DataTable GetCustomers(bool BypassCache){ string cacheKey = "CustomersDataTable"; object cacheItem = Cache[cacheKey] as DataTable; if((BypassCache) || (cacheItem == null)) {  cacheItem = GetCustomersFromDataSource();  Cache.Insert(cacheKey, cacheItem, null,  DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey), TimeSpan.Zero); } return (DataTable)cacheItem;}   关于此模式,有以下几点需要注意:   1) 某些值(例如,cacheKey、cacheItem和缓存持续时间)是一次定义的,并且只定义一次。   2) 可以根据需要跳过缓存-例如,当注册一个新客户并重定向到客户列表后,最好的做法可能就是跳过缓存,用最新数据重新填充缓存,该数据包括新插入的客户。   3) 缓存只能访问一次。这种做法可以提高性能,并确保不会发生NullReferenceExceptions,因为该项在第一次被检查时是存在的,但第二次检查之前就已经到期了。   4) 该模式使用强类型检查。C#中的“as”运算符尝试将对象转换为类型,如果失败或该对象为空,则只返回null(空)。   5) 持续时间存储在配置文件中。在理想的情况下,所有的缓存依赖项(无论是基于文件的,或是基于时间的,还是其他类型的依赖项)都应该存储在配置文件中,这样就可以进行更改并轻松地测量性能。我还建议您指定默认缓存持续时间,而且,如果没有为所使用的cacheKey指定持续时间,就让GetCacheSecondsFromConfig()方法使用该默认持续时间。   与本文相关的代码示例(CachedDemo.msi,参见本书示例光盘)是一个helper类,它将处理上述所有情况,可以只书写一行或两行代码访问缓存的数据。   小结   缓存可以使应用程序的性能得到很大的提高,因此在设计应用程序以及对应用程序进行性能测试时应该予以考虑。应用程序总会或多或少地受益于缓存,当然有些应用程序比其他应用程序更适合使用缓存。对ASP.NET提供的缓存选项的深刻理解是任何ASP.NET开发人员应该掌握的重要技巧。     缓存整个页面通常并不可行,因为页面的某些部分是针对用户定制的。不过,页面的其他部分是整个应用程序共有的。这些部分最适合使用片段缓存和用户控件进行缓存。此外,菜单和其他布局元素,尤其是那些从数据源动态生成的元素,也可以用这种方法进行缓存。   如果需要,可以按以下条件选择需要缓存的控件:   (1)某控件的属性已改变   (2)由页面级输出缓存所支持的任何一种页面或控件状态改变   一旦对某些控件进行了缓存,使用它们的几百个页面就可以共享这些控件,而不再需要为每个页面保留单独的控件缓存版本。   实现   片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx文件)而不是Web窗体(.aspx文件)。除了Location属性,对于OutputCache在Web窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为VaryByControl的OutputCache属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了VaryByControl,可以省略VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以设置参数Shared的值为“true”,该参数将使用户控件的缓存版本供引用该控件的所有页面使用。   示例 <%@ OutputCache Duration="60" VaryByParam="*" %>   该示例将缓存用户控件60秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。 <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="CategoryDropDownList" %>   该示例将缓存用户控件60秒,并且将针对CategoryDrop   DownList控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。 <%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser" Shared="true" %>   最后,该示例将缓存用户控件60秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的ID引用该控件即可)。   缓存API,使用Cache对象   页面级和用户控件级输出缓存的确是一种可以迅速而简便地提高站点性能的方法,但是在ASP.NET中,缓存的真正灵活性和强大功能是通过Cache对象提供的。使用Cache对象,您可以存储任何可序列化的数据对象,基于一个或多个依赖项的组合来控制缓存条目到期的方式。这些依赖项可以包括自从某对象被缓存后经过的时间、自从某对象上次被访问后经过的时间、对文件或文件夹的更改以及对其他缓存对象的更改,在略作处理后还可以包括对数据库中特定表的更改。         在Cache中存储数据   在Cache中存储数据的最简单的方法就是使用一个键为其赋值,就像HashTable或Dictionary对象一样: Cache["key"] = "value";   这种做法将在缓存中存储项,同时不带任何依赖项,因此它不会到期,除非缓存引擎为了给其他缓存数据提供空间而将其删除。要包括特定的缓存依赖项,可使用Add()或Insert()方法。其中每个方法都有几个重载。Add()和Insert()之间的唯一区别是,Add()返回对已缓存对象的引用,而Insert()没有返回值(在C#中为空,在VB中为Sub)。   示例 Cache.Insert("key", myXMLFileData, new System.Web.Caching.CacheDependency(Server.MapPath("users.xml")));   该示例可将文件中的xml数据插入缓存,无需在以后请求时从文件读取。CacheDependency的作用是确保缓存在文件更改后立即到期,以便可以从文件中提取最新数据,重新进行缓存。如果缓存的数据来自若干个文件,还可以指定一个文件名的数组。 Cache.Insert("dependentkey", myDependentData, new System.Web.Caching.CacheDependency(new string[] {}, new string[] {"key"}));   该示例可插入键值为“key”的第二个数据块(取决于是否存在第一个数据块)。如果缓存中不存在名为“key”的键,或者如果与该键相关联的对象已到期或被更新,则“dependentkey”的缓存条目将到期。 Cache.Insert("key", myTimeSensitiveData, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);   绝对到期:此示例将对受时间影响的数据缓存一分钟,一分钟过后,缓存将到期。注意,绝对到期和滚动到期(见下文)不能一起使用。 Cache.Insert("key", myFrequentlyAccessedData, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(1));   动态滚动到期:此示例将缓存一些频繁使用的数据。数据将在缓存中一直保留下去,除非数据未被引用的时间达到了一分钟。注意,动态滚动到期和绝对到期不能一起使用。     作者:Tyler Ning 出处:http://www.cnblogs.com/tylerdonet/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。
文章
Web App开发  ·  存储  ·  缓存  ·  .NET  ·  API
2010-01-08
从 PHP 迁移到 ASP.NET
简介 本文讨论了从PHP(PHP:HypertextPreprocessor4)到ASP.NET的迁移,并对PHP和Microsoft®VisualBasic®.NET的基本语法以及基本功能和体系结构进行了对比。 尽管使用PHP和ASP.NET都可以构建复杂的Web应用程序(例如电子商务站点、Intranet和企业门户),但两者之间却存在若干重要差别。与PHP不同,ASP.NET并不是一种语言或分析器,而是Microsoft.NETFramework中的一组用于构建Web应用程序和XMLWebService的技术。同PHP一样,MicrosoftASP.NET页面在服务器上执行并生成标记(例如HTML、WML或XML),标记将发送给桌面应用程序或移动应用程序。但不同的是,ASP.NET为开发Web页面提供了强大的、面向对象的以及由事件驱动的编程模型,同时仍保留了PHP开发人员所习惯的那种简单性。 ASP.NET应用程序是基于强大的面向对象编程(OOP)模式,而不是基于脚本模式。这样便可以获得更为严谨的OOP功能,例如继承、封装和反射。虽然大多数基本的简单操作可以轻松地从PHP转换到ASP.NET,但要转换更为复杂的应用程序却并不这么简单,这需要仔细的规划和考虑,并采用更符合OOP的方法。 本文假设读者具有PHP方面的经验,并且对编程和软件开发有着基本了解。本文首先从代码方面对两者的基础体系结构的差别进行简单比较,并简要介绍一下OOP开发模型,然后比较两者的功能,最后将使用PHP和ASP.NET开发Web应用程序时的语法和常见任务作以对比。 注意:如果您希望跳过有关迁移的详细信息,而只想尝试ASP.NET的使用,则可以直接跳到建议的后续操作部分。 体系结构对比 阅读完本文后,通过比较语法和语言,您将了解PHP和ASP.NET是很相似的,它们具有类似的功能和语法。但是,从更基本的体系结构层面来讲,PHP与ASP.NET却有着很大差别。PHP基于独立于平台的处理器/引擎,该处理器/引擎用于分析PHP脚本、提供数据库连接、符合Internet协议以及提供大多数Web应用程序平台所常见的众多其他任务。 ASP.NET是基于一系列技术(如CLR)构建的框架,提供了大量以很好的方式组织的类库,这些类库可满足要在Web应用程序中使用的大多数功能的需要。您还可以轻松地创建各种组件,对该框架进行扩展。 虽然PHP也提供了类似的功能(例如PEAR库),但PHP和ASP.NET并非完全相同,因为ASP.NET框架是完全基于OOP模式和OOP概念构建的,而PHP则不然。这种差别在PHP和ASP.NET中类和对象的访问方式方面表现得犹为明显。 PHP和ASP.NET中的面向对象编程 虽然PHP和ASP.NET都为应用程序开发提供了OOP模式,但它们对各种OOP概念(例如封装和多态)的支持却存在差别。例如,PHP仅支持部分封装(例如,支持在类中声明方法和字段)和部分多态(没有重载和抽象)。此外,由于PHP的类中不存在私有(private)、公有(public)或受保护(protected)函数等概念以及重载,因此PHP也不支持这些概念及其访问。OOP纯粹主义者可能会说,ASP.NET以及各种语言也没有完全支持OOP模式中的所有概念,对于使用OOP的大多数语言(如C++和Java)来说,情况确实如此。 这既有积极的一面,也有消极的一面。消极的一面是:对于某些Web开发人员来说,学习ASP.NET要比学习PHP困难些,因为PHP提供的是开发人员创建Web站点时所惯用的脚本模式。但是,使用过OOP语言和/或V的开发人员会发现ASP.NET比较亲切且易于学习。 ASP.NET支持OOP概念的积极的一面是,ASP.NET应用程序的大多数部分都会得到很好的设计,并且能够对内容、逻辑和数据进行清楚的分隔,因而从应用程序生命周期的长远角度看,这通常更容易为其提供支持。此外,由于ASP.NET本身支持企业技术,例如消息队列、事务(请参阅.NETFramework的System.EnterpriseServices类)SNMP和Web服务,因而可以很容易地开发具有高度可缩放性的强大的应用程序。 要大致了解面向对象编程(从VisualBasic的角度)的主要概念,请参阅功能PHPASP.NET编码语言具有旧ASP样式标记的C、C++样式脚本语言。支持某些OOP概念。支持超过25种语言,但最常用的两种语言是VisualBasic.NET和C#。大多数开发人员都选择一种语言,但可以使用用任何其他支持的语言编写的组件。编译的应用程序逻辑可编译并且可以作为可执行程序运行。在动态编译和预编译模式下均支持。全部页面输出缓存本身并不支持。支持,基于一个或多个URL参数、浏览器类型、自定义函数或任意组合来缓存页面的不同版本。部分页面输出缓存本身并不支持。通过使用用户控件提供内置支持。可使用缓存API和复杂的过期规则来缓存数据和其他对象。数据库访问为市场上的大多数数据库以及开放源代码的数据库提供了驱动程序。直接支持OLE-DB和ODBC,本身还包含了MicrosoftSQLServer™和Oracle的驱动程序。数据库输出数据集作为PHP变量返回,并且可以像任何其他变量那样将其输出。以模板化的方式绑定到服务器端控件以简化开发;如果需要,也可以手动循环。外部组件可以调用各种软件包,并且开发人员可以直接修改Zend引擎(因为它是开放源代码的)。负责Zend的编程人员还可以使.NET对象能够从PHP中调用。充分支持本身的C库和COM对象以及用任何与.NET兼容的语言(包括托管C++[ManagedC++])编写的程序集。对CORBA对象或Java类未提供内置支持。XML/XSLT在附加软件包和库中支持为XMLDOM、XSLT、验证和XML文档的轻量级面向流的分析提供了广泛和易于使用的支持。XMLWebService当前正在开发PHP软件包以支持基于ApacheAXIS引擎以及其他引擎的Web服务。当前版本提供了广泛、灵活、符合标准的支持,使得发布和使用Web服务都非常容易。会话状态基于Cookie的会话管理基于Cookie或无Cookie的会话状态(使用单个服务器内存存储、中央状态服务器或数据库后端)。此外,可扩展的体系结构还允许使用自定义的会话状态模块替换内置选项。要启用无Cookie的会话,只需更改配置。内置功能PHP的内置功能涵盖了基于Web的应用程序可能需要执行的许多常见任务。通过某些额外的处理,它还可以访问Java类库。ASP.NET可以直接访问整个.NETFramework类库,这些类库包含了大量功能。正则表达式支持POSIX和Perl兼容的正则表达式语法。支持Perl-5兼容的正则表达式,以及一些其他功能,例如从右向左匹配、预编译表达式、命名组及完全的Unicode支持。此外,还允许用户指定在正则表达式替换操作过程中调用的函数。调试PHP未提供广泛的调试功能,但可以通过各种第三方产品和Zend增强调试和测试功能。包含广泛的跟踪和环境信息,这些信息可包含在页面中或在单独的页面中显示。使用MicrosoftVisualStudio®.NET除了可以调试客户端脚本和SQLServer存储过程外,还可以轻松地在执行页面时对其进行交互式调试。错误处理不支持错误捕获,但提供了各种错误处理功能和日志。支持结构化的异常处理(其中新增了一个“finally”代码块,无论是否发生错误,都将执行该块),支持引发自定义异常,还支持为不同类型的不可恢复错误指定自定义错误页面。图像处理无内置支持,但可以使用第三方组件。包含大量用于创建和处理图像的工具。(请参阅.NETFramework的代码重用用户定义的函数、创建类的功能以及包含文件。用户控件、服务器控件、自定义类以及包含文件。线程PHP具有很好的线程模型。完全支持。不但可以在单独的线程中同时请求多个页面,而且每个页面(如果需要)还可以生成自己的线程以执行同步或异步操作。数据缓存具有有限的数据缓存(仅限于数据本身)。包含大量的缓存API,能够存储几乎任何类型的数据(包括数据库查询结果),并且能够基于时间、使用情况、文件或其他缓存项而过期。还允许在从缓存中删除给定项时调用用户定义的函数。国际化完全支持Unicode。支持Unicode字符串和各种字符编码。日期、数字和货币函数均可区分文化环境,并根据当前文化环境的设置更改输出(而不要求调用其他函数)。支持使用资源文件对应用程序进行动态本地化。SMTP、HTTP、FTP、POP3本身支持各种Internet协议。SMTP支持依赖于IISSMTP服务。能够很好地支持HTTP。.NET不支持FTP和POP3,但是有一些免费的和销售的第三方组件可用来实现此功能。集成开发环境可以使用大量提供了广泛功能的开发工具,价格从零到几百美元不等。Microsoft提供了一个名为VisualStudioDeveloperCenter。 其他工具(包括BorlandC#Builder和MacromediaDreamweaverMX)也支持ASP.NET。 Web服务器支持支持几乎所有Web服务器。支持IIS以及操作系统支持支持几乎所有常用的操作系统,包括MicrosoftWindows®、Mac、OSX、Amiga、Solaris、FreeBSD、Linux以及AIX等。当前支持Windows2000、WindowsXP和WindowsServer2003。语法和常见任务对比 以下各部分比较了PHP和.NET的语法,并介绍了如何完成某些非常常见的编程任务。 注释 PHP允许您使用C、C++和Unixshell样式语法在代码中插入注释,注释指示器中的任何内容都不会被执行。 一般来讲,要在ASP.NET中注释出VisualBasic.Net代码,需要使用<%--打开注释块,并使用--%>关闭注释块。 表2显示了这两种环境中的注释。 表2:服务器端注释 这是被注释出的 文本块 */ <%-- 这是注释 --%>变量 虽然PHP和VisualBasic.NET具有类似的语言构造,但语法却截然不同。由于VisualBasic.NET是基于OOP模型构建的,因而变量的声明要比PHP中变量的声明更严谨(在PHP中声明变量时只需在变量名之前添加一个$符号)。 在VisualBasic.NET中声明变量时,要指定它的变量名和特性。变量的声明语句是Dim关键字。它的位置和内容决定了变量的特性。变量具有级别(例如局部变量和模块变量)、数据类型、生存期以及可访问性。 虽然这种方法最初看上去要比在PHP中指定变量复杂,但实际上它会给开发人员带来方便。ASP.NET致力于帮助开发人员创建可靠的应用程序,而指定数据类型可以使诸如变量清理、调试、异常和错误处理以及代码维护等任务变得更加简单。 表3显示了在两种环境中声明变量的示例。 表3:变量声明 $foo $X $obj Dimhead_countASInteger DimfooAsString DimXasDate DimObjasobject声明数据类型 声明语句中的AS子句用于定义所声明变量的数据类型或对象类型。您可以为变量指定以下任意类型:基本数据类型,例如Boolean、Long或Decimal 复合数据类型,例如数组或结构 VisualBasic或其他应用程序中的对象类型或类,例如Label或TextBox 您可以在一个语句中声明多个相同类型的变量而不必重复数据类型。下面的语句将变量numStudents、numGTA和numProfessors声明为Integer类型: DimnumStudents,numGTA,numProfessorsASInteger'三个变量都是Integer类型。 有关数据类型的详细信息,请参阅Object-OrientedProgramminginVisualBasic。声明生存期 变量的生存期是指变量可供使用的时间段。使用Dim语句声明的局部变量仅在其执行过程中存在。过程终止时,该过程的所有局部变量都将消失,这些变量的值也将丢失。 生存期这个概念很有用,因为它使开发人员在创建应用程序时不必考虑在大型应用程序中出现的许多问题,例如有效的内存管理。通过为变量选择正确的生存期,可以使.NET对未在使用的变量执行清理操作。 有关生存期的详细信息,请参阅Scope。 声明可访问性 .NET支持变量的可访问性,从而使开发人员可以控制哪些代码能够访问特定的变量。例如,如果要为某个公式设置一些常数,并且要确保这些常数不会被它们所在类以外的其他代码更改,则可以使用private按如下所示声明该变量: PrivatemyConstantAsInteger 变量的可访问性由声明语句中使用的一个或多个关键字Dim、Public、Protected、Friend、ProtectedFriend或Private确定。开发过程中通常只使用public和private。 您可以使用上述任意关键字来声明模块、结构、类或实例变量。过程中只允许使用Dim关键字,并且可访问性始终为private。输出 PHP中输出数据的典型方式是使用echo()语言构造。ASP.NET中与此最相似的是Response.Write()方法(或<%=%>构造,它只是Response.Write()的简写形式)。表4显示了向页面写入值的基本语法。 表4:基本输出 $hello="hihowareyou/n"; echo$hello; ? > <% DimHelloAsString="Hihowareyou"&vbcrlf Response.Write(Hello) %> 然而,这些用于向浏览器发送输出的方法主要是为了保持与传统ASP的向后兼容性。ASP.NET提供了新的基于控件且面向事件的模型,您只需在服务器控件上设置属性即可将数据输出到浏览器中。通过这种技术可以将布局与代码清楚地分开,从而简化了维护工作,并且在复杂情况下所需的代码要比PHP少得多。 <scriptlanguage="VB"runat="server">SubPage_Load(senderAsObject,eAsEventArgs)TheDate.Text=DateTime.NowEndSub</script>Thecurrentdateis:<asp:Labelid="TheDate"runat="server"/> 此示例声明了一个名为TheDate的服务器端标签(Label)控件,并在该页面的Load事件中将此标签的Text属性设置为当前的日期和时间。此代码的HTML输出与其他两个版本相同,不同的是Label控件将自身呈现为span标记(其中包含所设置的任何标签文本)。条件处理 IF/ELSE PHP具有若干条件处理表达式,例如for、while、switch和foreach,但最常用的是if/else表达式。VisualBasic.NET有几个非常类似的构造,其语法也很类似。表5对PHP和VisualBasic.NET中的等价条件逻辑进行了比较。 表5:基本条件逻辑 print"aisbiggerthanb"; }elseif($a==$b){ print"aisequaltob"; }else{ print"aissmallerthanb"; } Ifa>b Response.write("aisbigger thanb") ElseIfa=bThen Response.write("aisequalto b") Else Response.write("aissmaller thanb") EndIf切换 切换语句是大多数编程语言的常见语言构造,用于通过多个值对单个表达式进行测试。它常用于替换包含多个elseif/else块的if语句。 图6对PHP的switch语句与VisualBasic的SelectCase语句进行了比较。 表6:switch与selectcase语句的对比 case0: print"iequals0"; break; case1: print"iequals1"; break; case2: print"iequals2"; break; default: print"iisnotequalto0, 1or2"; } SelectCaseNumberi Case0 description="0" response.write("iequals0") Case1 description="1" response.write("iequals1") Case2 description="2" response.write("iequals2") CaseElse description="iisnotequal to0,1or2" response.write("iisnot equalto0,1or2") EndSelect循环 另一个非常常见的控制构造是循环。PHP和.NET都支持若干不同的常见循环类型。 表7:For循环 print$i; } DimsumAsInteger=0 DimcounterAsInteger Forcounter=1To100Step5 sum+=counter Next Fori=1to100 Response.write(i) NextI 在VisualBasic中,这种循环类型被称为For...Next循环,而在PHP中则称为For循环。在此示例中,我们使用了+=运算符作为sum=sum+counter的简写方式。在PHP中,可以使用Break;语句来中断循环。而For...Next循环可以通过ExitFor语句中断。 条件循环 只要某个条件计算为true,条件循环便会持续重复一组指令。表8显示了这两种语言中的基本条件循环示例。 表8:条件循环 while($i<=10): print$i; $i++; endwhile; DimcounteriAsInteger=1 DoWhilecounteri<=10 Response.write(i)counteri+=1 Loop 在VisualBasic中,这种循环类型称为Do...Loop语句,或while循环。PHP也支持Do...While循环,该循环与while循环非常类似,不同之处在于它是在每个循环的结尾而不是开始检查真假表达式。Do...While循环与常规while循环的主要差别是前者会确保运行第一个循环(因为只在该循环的结尾检查真假表达式),而常规的while循环则不一定运行。(因为它在每个循环的开始检查真假表达式,如果它一开始便计算为FALSE,该循环将立即结束执行。) 下面给出了一个PHP中这种情况的示例: $i=0;do{print$i;}while($i>0); 此循环只运行一次,因为在第一次循环后检查真假表达式时,表达式计算为FALSE($i不大于0),所以循环将停止执行。 在VisualBasic.NET中,您可以执行同样的操作:DimcounteriAsInteger=0Doresponse.write(i)counterLoopWhilecounteri>0 但是,VisualBasic.NET支持内置的循环功能,这是PHP所不支持的。该功能将对条件进行计算,直到条件为真时为止。Foreach循环 PHP4(而非PHP3)包含一个foreach构造,它与ASP.NET以及某些其他语言中的构造非常类似。它只是为循环数组提供了一个简单的途径。foreach只适用于数组,如果试图将其用于其他数据类型的变量或未初始化的变量,则会导致错误。VisualBasic.NET中与此等价的循环是ForEach...Next语句。表9显示了在这两种语言中循环数组的示例。 表9:Foreach循环 foreach($aas$v){ print"/$Key[$i]$v/n"; $i++; } foreachvina response.writea(v)(v&vbcrlf) next数组 PHP中的数组的功能与VisualBasic.NET中的数组的功能截然不同。PHP中的数组实际上是关联数组,但是可以像索引或关联数组那样使用。而VisualBasic.NET中的数组是索引数组。VisualBasic.NET不支持关联数组(但您可以自己创建它们,请参阅下面的“集合”)。其他ASP.NET语言支持这些类型的数组,但VisualBasic.NET并不支持,这可能给PHP开发人员提出了一个难题,因为他们并不习惯使用这种更常见的索引数组,并且可能会希望在VisualBasic.NET中创建关联数组模型。表10显示了PHP和VisualBasic.NET中的简单数组示例。 表10:创建数组的示例 NewInteger(2){0,1,2} 与其他变量一样,VisualBasic.NET数组中的变量也是使用Dim语句声明的。变量名后面带有一对或多对括号,表明它是数组而不是标量(包含单个值的变量)。 创建VisualBasic.NET数组时,还必须将其声明为保存特定类型的数据。如果指定的类型是Object(作为.NET中所有对象类型的基础的普通类型),则此数组可以保存任何类型的数据,但是从数组中检索值时,必须将值转换为原来的类型。 VisualBasic.NET数组可以是嵌套的数组,也可以是多维数组。VisualBasic.NET中有许多与PHP相对应的用于处理数组的函数,但有一个例外。由于VisualBasic.NET不支持关联数组,因而不存在用于根据数组的“主键”来访问、索引或执行任何操作的函数。VisualBasic.NET中不存在这样的“主键”。 虽然本文多次提到VisualBasic.NET不支持关联数组,但是可以创建集合来代替数组。集合与关联数组有些相似,可以使用集合来解决某些类似的问题。 在某些情况下,将项目存储在集合中要比存储在数组中更有效。 如果要处理一组小型的动态项目,则可以使用集合。要创建集合,只需如下面的示例代码所示声明并实例化一个Collection: DimmyCollectionAsNewCollection() 然后,您可以使用Add方法向集合中添加成员。在此示例中,我们创建了四个字符串并将它们添加到集合中。您还可以选择添加一个唯一的String值作为集合成员的主键。该值作为Add方法的第二个参数传递给集合。Dimw,x,y,zAsStringw="key1"x="key2"y="key3"z="key4"myCollection.Add(w,"1")myCollection.Add(x,"2")myCollection.Add(y,"3")myCollection.Add(z,"4") 虽然这看起来类似于在PHP中创建关联数组,但集合是一种截然不同的事物,因为它本身就是一个对象。对于转到ASP的PHP开发人员,我们建议在尝试在VisualBasic.NET中创建关联数组模型之前先了解一下Microsoft的PHPVisualBasic.NET<?php $value='somethingfrom somewhere'; setcookie("TestCookie", $value,time()+3600);/* expirein1hour*/ ?> andtoretivethesetcookie <? echo$_COOKIE["TestCookie"]; ?> Dimvalueasstring="somethingfrom somewhere" DimmyCookieAsNewHttpCookie=New HttpCookie("Somethingfrom somewhereTestCookie") DimnowasDateTime=DateTime.Now myCookie.Value=now.ToString()value myCookie.Expires=now.AddHour(1) Response.Cookies.Add(myCookie) 'andtoretrievethesetcookie Response.Write(Request.Cookies["Whatwe setTestCookie"}.Value} 设置和检索Session变量 ASP.NET中的Session变量与PHP中的Session变量非常类似。这两种环境中的Session变量都为确保Web应用程序访问中的一致性提供了相应处理和Cookie操作。 最重要的一个差别是,当从ASP.NET的Session对象中检索值时,该值将作为普通的System.Object类型返回,而这种类型可以保存任何类型的数据。要使用该值,必须先将其重新转换为原来的基本类型。表12显示了一些Session变量的使用示例。 表12:Session变量的使用 session_start(); session_register('today'); $today=getdate(); ?> <?=$today?> Session("Today")=DateTime.Now DimtodayAsDate today=CDate(Session("Today")) Response.Write(today) Response.write(session("Today")) ASP.NET还提供了另一种形式的状态管理,即“应用程序状态”,它与Session变量类似,但只是在应用程序的生存期中保持一致。这使您可以存储各种内容,例如配置信息或数据库连接字符串。这些内容在应用程序运行期间不会发生变化。 有关此主题的详细信息,请参阅《.NETFrameworkDevelopmentGuide》中的.NETFrameworkRegularExpressions。 异常处理 ASP.NET框架通过一种人们所熟悉的语言构造Try/Catch提供了结构化的异常处理,从而能够捕获代码中可能出现的异常。PHP没有提供此功能,但PHP5中将添加它。 下面的示例说明了如何在VisualBasic.NET中进行异常处理: Try'此处是可能导致错误的代码CatcheAsExceptionType'用于处理错误的代码'可选:可在此处放置更多Catch块Finally'始终执行的代码EndTry 要注意的是,Try块可以包含一个或多个Catch块,或包含一个Finally块,也可以同时包含两者。也就是说,如果您知道无法更正错误,但仍需要清除某些对象而不管是否发生错误,则可以使用不包含Catch语句的Try...Finally块。查询数据库 在PHP中,通常可以通过两种常见方法访问数据库:使用数据库的特定扩展名或使用独立于数据库的PEARDB库。 在ASP.NET中,可以通过一组称为ADO.NET的对象来访问数据库,这些对象与PEARDB库的功能基本相同。数据库查询实际上是通过一组连接、命令、参数和数据适配器对象完成的。其中的每个对象都有多个版本,具体情况取决于所访问的数据库的类型。例如,有一组对象用于具有OLE-DB驱动程序的数据库(例如MicrosoftAccess),还有一组对象用于具有ODBC驱动程序而没有OLE-DB驱动程序的数据库。针对Oracle和MicrosoftSQLServer也有专门的数据提供者,它们已经过优化,可以分别为每种特定的数据库提供高性能的访问。某些第三方还提供了其他数据库支持,例如MySQL。本节中的示例将使用SQLServer对象,因为它是ASP.NET最常用的数据库。 System.Data、System.Data.SqlClient和System.Data.oledb是用于在ADO.NET中定义数据库访问的命名空间。要使页面能够访问这些类,您需要将System.Data和 图13显示了在这两种语言中执行查询的示例。在PHP中,我们显示了一个使用PEAR的连接,PEAR不仅是用于连接DB的最常用方法之一,但还是与ADO.NET最为类似的方法。 表13:执行查询 //connect require_once('DB.PHP'); $db=DB::connect ("mysql://mydbvie w:user@localhost/mydb"); if(DB::iserror($db)){ die($db->getMessage()); $sql="select*frommytable"; $q=$db->query($sql); if(DB::iserror($q)){ die($q->getMessage()); } <tr> <td><?=$row[0]?></td> <td><?=$row[1]?></td> <td><?=$row[2]?></td> </tr> <scriptrunat="server"> SubPage_Load(SenderAsObject,EAs EventArgs) DimmyConnectionAsNew SqlConnection("server=(local)/NetSDK; database=mydb;Trusted_Connection =yes") DimmyCommandAsNew SqlDataAdapter("select*from mytable",myConnection) DimdsAsNewDataSet() myCommand.Fill(ds,"myDataset") myDataGrid.DataSource=myDataset myDataGrid.DataBind() EndSub </script> <%---输出结果---%> <formrunat="server"> <asp:DataGridid="myDataGrid" runat="server"/> </form> 在PHP中,查询结果存储在一个称为resultset(结果集)的变量中,而在ADO.NET中,该变量称为Dataset对象。结果集是返回数据的只读视图,而.NETDataset实际上是返回数据在内存中的读写视图,这使.NET开发人员能够轻松地处理从数据源返回的数据。 输出数据时,ASP.NET提供了若干方法,用于向用户或客户端显示数据。第一种方法与PHP类似,即使用SQLDataReader对象遍历结果集以写出我们要通过查询显示的数据。更常用的方法是ASP.NET的数据绑定(PHP中没有与此对应的方法)。通过该方法,开发人员可以构建用户界面并显示可在应用程序中使用和重用的控件,还可以进一步根据数据和逻辑提取显示内容。数据绑定的语法很灵活,您不仅可以绑定到数据源,还可以绑定到简单的属性、集合、表达式,甚至是方法调用返回的结果。 要使用数据绑定,您需要向某个数据识别服务器控件(例如DataGrid)的DataSource属性指定某个数据源(例如查询结果)。您还可以选择为每个列提供一些附加的格式化信息并调用DataBind()方法。服务器控件将负责完成剩余的工作。 例如,在表13中,我们使用了数据绑定语法输出查询结果,如下所示: <%---在页面中加载事件---%>myDataGrid.DataSource=myDatasetmyDataGrid.DataBind()<%---输出结果---%><asp:DataGridid="myDataGrid"runat="server"/> 数据识别服务器控件将提供其他功能,例如支持对显示的数据进行分页或内联编辑。有关详细信息和示例,请参阅DataBindingServerControls。数据缓存和页面缓存 对经常访问的数据进行缓存可以显著缩短站点的响应时间,因为不需要等待数据库查询便可进行页面处理。而缓存由页面请求生成的HTML可以进一步缩短响应时间,因为根本就无需处理缓存的页面。这两种环境均支持上述两种缓存策略,但与PHP相比,ASP.NET提供了更多用于缓存和管理数据的方法,从而使开发人员可以针对自己应用程序的性能需要选择相应的方法和策略。 页面缓存 缓存某个页面请求的HTML输出是减少Web应用程序的负载的一种常用方法。PHP本身不支持页面缓存,但是可以通过编程的方式或下载第三方软件包来执行此操作。通常可以在服务器上通过多种方法执行页面缓存,这些方法可用于缓存编译的代码,直至将页面输出写出到一个单独的文件中(该文件将随代码的更新而更新)。 在ASP.NET中,可以通过低级别的OutputCacheAPI或高级别的@OutputCache指令来执行页面缓存。启用输出缓存后,将在对页面进行第一个GET请求时创建输出缓存条目。后续的GET或HEAD请求将由输出缓存条目支持,直到缓存的请求过期。 输出缓存将检查页面的过期策略和验证策略。如果页面位于输出缓存中并标记了过期策略(指示该页面自缓存时开始60分钟后过期),则60分钟后,该页面将从输出缓存中删除。如果在过期后收到另一个请求,将执行页面代码并再次缓存该页面。这种过期策略称为绝对过期,即页面在某个时间之前有效。 除了对整个页面进行输出缓存外,ASP.NET还提供了一个简单方法,使您可以只缓存页面的特定部分。这种方法称为拆分缓存。您可以使用CachingASP.NETPages。 数据缓存 在PHP中,可以通过多种方法以编程方式将查询结果缓存到环境中,但PHP本身并未提供这种方法。在PHP中,可以创建数据缓存类或系统。对于少量信息,只需使用Session变量和/或Cookie;对于大量或复杂的信息,可以创建您自己的数据缓存类。但问题是,当处理包含很多类型的复杂数据时,这种方法的效率会很低且容易出错,在一定程度上会加大编程的难度。 ASP.NET通过Page.Cache对象提供了一个系统范围的数据缓存方法,可用于数据集(DataSet)、数组、集合、XML对象等。对于需要更复杂功能的应用程序,ASP.NET缓存还支持三种特定类型的缓存:过期、清理以及文件和关键项相关性。 过期类型的缓存使开发人员可以控制缓存项目的过期时间。可以将该时间定义为特定的时间(例如01:00),也可以将其定义为相对于上次使用项目时的时间,例如自上次访问该项目时开始20分钟后过期。过期后的项目将从缓存中删除,以后再试图检索该项目时,将返回空值(除非再次将其插入到缓存中)。 清理类型的缓存会在内存不足时尝试删除不经常使用或不重要的项目。开发人员可以控制清理的执行方式,并且可以在将项目插入到缓存中时向清理程序提供提示,以指示创建该项目的相对系统开销以及为使该项目有效而必须对其进行访问的相对频率。 文件和关键项相关性类型的缓存将基于某个外部文件或另一个缓存项目确定该缓存项目的有效性。如果相关项发生变化,缓存项目将失效并从缓存中删除。例如,假设您有一个较大的需要定期更新并下载给员工的报告,则可以在应用程序中使用此功能。应用程序处理文件和报告中的数据,然后缓存该数据并插入对该数据的来源文件(从该文件读取数据)的相关性。当该文件更新时,数据将从缓存中删除,应用程序可以重新读取它并重新插入更新的数据副本。 ASP.NET数据缓存为编程人员提供了许多不同的方法来管理应用程序并提高应用程序的响应速度和效率。有关详细信息,请参阅PHPVisualBasic.NET$to="test@atnoaddress.com"; $from= "me@nosuchaddress.com"; $subject="hi"; $message="justwantedtosay hi"; mail($to,$subject,$message, $from) DimmyMailAsMailMessage=New MailMessage() myMail.From="me@nosuchaddress.com" myMail.To="test@atnoaddress.com" myMail.Subect="hi" myMail.Body="justwantedtosayhi" SmtpMail.Send(myMail) XML处理和Web服务 在PHP中,为分析和处理XML所提供的内置支持功能非常薄弱。虽然开发人员可以用它来分析和处理XML,但它不支持DOM分析(该分析尽管比PHP的SAX分析器速度慢,但更容易使用)。PHP也不支持根据DTD或XMLSCHEME对XML文档进行本地验证,它也不支持XSL/XSLT以及市场上许多Web应用程序常用的各种其他技术。虽然PHP可以通过很多PHP软件包完成许多与XML相关的任务,但.NET和ASP.NET为处理XML提供了广泛的内置支持。XML是.Net平台的核心技术之一。有关Web服务的详细信息,请参阅 利用.NETFrameworkSDK,您可以使用命令行Web服务描述语言工具(WSDL.exe)生成代理类。要为上述示例创建一个名为HelloWorld.cs的代理类,可以输入: WSDLhttp://someDomain.com/someFolder/HelloWorld.asmx?WSDL 此类与前面创建的类非常相似。它包含一个名为SayHelloWorld的方法,用于返回字符串。将此代理类编译到应用程序中,然后调用此代理类的方法,使该代理类通过HTTP将SOAP请求打包并接收SOAP编码的响应,该响应随后被封装为字符串。 对于客户端,该代码是非常简单的,如以下示例所示:DimmyHelloWorldAsNewHelloWorld()DimsReturnAsString=myHelloWorld.SayHelloWorld() 这就是创建一个简单Web服务的全过程。有关XML的一般信息以及Web服务的特定信息,请参阅
文章
缓存  ·  .NET  ·  PHP  ·  数据库  ·  数据格式
2008-09-14
主流WEB开发语言简单对比
随着时间的飞逝,随着岁月的流失。从世界上第一台计算机ENIAC诞生至今,已经有将近半个世纪了。经过这半个世纪的语言发展,我们所接触的语言基本上都是高级语言了。这篇文章主要对现在比较主流的WEB开发语言,做一个简单的对比。 JAVA 简介: Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。 IDE: Eclipse、Myeclipse、Jbuilder2008、Jdeveloper、Netbeans等,很多! 版本历史: 1995年5月23日,Java语言诞生 1996年1月,第一个JDK-JDK1.0诞生 1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术 1996年9月,约8.3万个网页应用了JAVA技术来制作 1997年2月18日,JDK1.1发布 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录 1998年12月8日,JAVA2企业平台J2EE发布 1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME) 2000年5月8日,JDK1.3发布 2000年5月29日,JDK1.4发布 2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机 2001年9月24日,J2EE1.3发布 2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升 2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME 2006年12月,SUN公司发布JRE6.0 目前JDK7.0已经在研发中,已经有测试版在 https://jdk7.dev.java.net/ 可以下载使用 应用方面: 可以从事JSP网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作。 PHP 简介 PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页。 IDE Eclipse、Komodo、PHP 设计器、PhpED、PHPEdit、Zend Studio等。 版本历史 在1997年,任职于 Technion IIT 公司的两个以色列程序设计师:Zeev Suraski 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础,而 PHP 也在这个时候改称为PHP: Hypertext Preprocessor.[5]。经过几个月测试,开发团队在1997年11月释出了 PHP/FI 2,随后就开始 PHP 3 的开放测试,最后在1998年6月正式释出 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 释出后开始改写 PHP 的核心,这个在1999年释出的剖析器称为 Zend Engine[7],他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。 在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式释出,2004年7月13日则释出了PHP 5,PHP 5则使用了第二代的Zend Engine[5]。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取数据库的延伸函数库)、以及许多效能上的增强。目前PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。 2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode的功能。 应用方面 PHP常见的模板引擎 Smarty Smarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常灵活。 Heyes Template Class 一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。 FastTemplate 一个简单的变量插值模板类,它分析你的模板,把变量的值从HTML代码中分离处理。 ShellPage 一个简单易用的类,可以让你的整个网站布局基于模板文件,修改模板就能改变整个站点。 STP Simple Template Parser 一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者文件系统。 OO Template Class 一个你可以用在自己程序中的面向兑现的模板类。 SimpleTemplate 一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。 bTemplate 短小但是快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。 Savant 一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。 ETS – easy template system 可以使用完全相同数据重组模板的模板系统。 EasyTemplatePHP 适用于你的站点的一个简单但是强大的模板系统。 vlibTemplate 一个快速、全能的模板系统,它包含一个缓存和调试类。 AvanTemplate 多字节安全的模板引擎,占用很少系统资源。它支持变量替换,内容块可以设置显示或隐藏。 Grafx Software’s Fast Template 一个修改版本的Fast Template系统,它包括缓存功能,调试控制台以及沉默去除为赋值块。 TemplatePower 一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/文件包含支持以及显示/隐藏未赋值的变量。 TagTemplate 这个库的功能被设计来使用模板文件,同时允许你从HTML文件检索信息。 htmltmpl: templating engine 一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web应用开发人员。 PHP Class for Parsing Dreamweaver templates 一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模块中。 MiniTemplator (Template Engine) 针对HTML文件的一个紧凑型模板引擎。对于模板变量和块定义它具有简单的语法。其中块可以嵌套。 Layout Solution 简化网站开发和维护。它拥有常用的变量和页面元素使你不需要重复做页面布局工作。 Cached Fast Template 它已经纳入 FastTemplate ,允许你缓存模板文件,甚至可以在分离的块内容上缓存不同的规格。 TinyButStrong 一个支持MySQL, Odbc, Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。 Brian Lozier’s php based template engine 只有2K大小,非常快并且是面向对象设计。 WACT 一个从设计中分离代码的模板引擎。 PHPTAL 一个PHP下面的XML/XHTML模板库。 ASP.NET 简介 ASP.net构架是可以用Microsoft(R)公司最新的产品 Visual Studio.net开发环境进行开发,WYSIWYG(What You See Is What You Get所见即为所得)的编辑。这些仅是ASP.net强大化软件支持的一小部分。 IDE Visual Studio 应用 WEB、应用程   /////////////////////////////// 要说WEB开发的语言,数不胜数,cgi/perl/ruby所代表的脚本语言,php/java/.net所代表的类c语言,asp所代表的basic语言......经过这么多年互联网应用中的大浪淘沙,当前主流的也就属php/java/.net三大阵营了。  为什么是这三种语言处于WEB应用的主流地位?个人认为,它们有一个共性,就是类c语法。应用最广泛的语言就是c和basic,但basic本身不是完全OO的,而类c语言既拥有最广大的应用群体,又是面向对象语言,有basic之长而无basic之短。因此从学习曲线、IDE支持、编码规范等方面,都有着很大的优势。  在php/java/.net这三者中,我看好java在企业级应用、php在WEB应用方面的前景,一方面二者都可以跨平台部署,另一方面比起.net来更轻巧和精简。一个php安装包,加上apache,也就几十兆;java更是只需jdk和appserver即可,加一起也就一二百兆,还可自由选择appserver。相比而言,.net安装包动辙上G,只能部署在windows下面,并且需要.net framework的支持。另一方面又分为vb.net/asp.net/c#.net,不仅分散了资源,也给应用者带来了困惑。  为什么说php比java更合适web应用?一方面web应用要求更丰富的客户体验、更快捷的客户响应,另一方面要求更低的开发门槛和开发成本。在这方面java就显得庞大而臃肿,越来越多的框架更降低了灵活性,纯jsp+bean的模式至今仍有很大的市场也印证了这一点。相比而言,php有两个主要的缺点:一是缺乏IDE支持/无法重构、测试,二是处理不同数据库的语句各不相同,在更换数据库时需要修改大量的代码(到现在为止php仍然无法对mysql使用事务操作)。后者可以通过封装数据库操作来解决,前者暂时还没有好的解决办法。但尽管如此,作为一门快速开发语言,在WEB开发上PHP还是有着相当大的优势的,如果也出现一个类似rails的框架并解决跨数据库的问题,那更是如虎添翼。  补充:现在已经有了php for rails。即cakephp。www.cakephp.org。  以php的用户群来看,如果cakephp确实够优秀,确实是web开发的福音。  再解释一下我不看好asp/ruby的理由:  ■asp:已经被微软自己和市场两方面淘汰。虽然ASP也可以使用javascript作为编程语言,但绝大多数人还是使用basic语言。弱解释的basic语言使它入门虽容易,但仅仅捆绑在IIS下,以及没有一个良好的框架支撑,使得它渐趋势微,在微软的产品线中又被asp.net所代替。  ■ruby:当前一个红得发热的新贵,初初试用了一下,语法更OO,更简洁,应该适合WEB开发。但它的缺点也很明显,第一是缺乏良好的IDE支持,诸如重构/语法检查方面都很弱;第二它比起asp/php/jsp来讲,它更像是一种脚本语言。学习曲线大,语法本身过于取巧,太过灵活   ///// PHP的主要语言开发者之一、Zend公司的创始人之一Andi Gutmans最近在blog中直言不讳地批评了Java语言。他指出,目前Java厂商试图在JVM上提供动态语言实现的路子根本不对,Java已经输掉了Web开发语言的战争,PHP是事实上的标准和胜利者。   Gutmans的这篇文章在技术界引发了强烈争议,很对人对此有不同的意见,我在这里就阐述一下我对PHP和Java两种语言的看法。   我早先曾经在《Perl、PHP、ASP、JSP技术比较》一文中对比过PHP和Java的异同,简而言之,PHP是一种解释执行的脚本语言,语法和C语言类似,易学易用,不懂电脑的非专业人员稍经学习也能使用PHP.而Java要先编译成Class文件,然后在Java虚拟机上执行,Java开发需要熟悉Java语法以及一些核心的架构,从而实现一种可复用的、跨平台的软件,Java比PHP要难学的多。   实际上,从技术架构来说,Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。PHP只能实现简单的分布式两层或三层的架构,而JAVA可以实现多层架构。数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。从数学运算和数据库访问速度来讲,Java的性能也优于PHP.实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择(微软.NET不支持跨平台),但是在于Web网站应用开发来讲,Java却面临着被PHP边缘化的危险,几乎所有的虚拟主机都支持PHP+MySQL,而支持Java的却少之又少,在资源上,网上有不计其数的PHP资源,很多著名的大型网站(例如Facebook、Mediawiki等)都是基于PHP的,而成功的Java网站却寥寥无几,这又是什么原因呢?   Java的理念是“一次编写,到处运行”,Java在应用框架底下的架构是无与伦比的,远胜过其他任何语言,Java的框架利于大型的协同编程开发,系统易维护、可复用性较好。而PHP很容易自学,让热备能快速简洁地编写代码,适合于快速开发,中小型应用系统,开发成本低。在调试、发布上,PHP也较Java简单。   理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,支持PHP的虚拟主机多如牛毛,使得用PHP开发一个网站比用Java开发一个网站要快得多,容易的多。Java所拥有的优点只适合传统的以软件项目为核心的开发模式,而PHP更适合于以客户为核心的SaaS的开发模式,因此,PHP目前在Web网站开发的优势完全是因为Web网站开发的特殊性而导致的,并非编程语言特性所决定。   因此,PHP在Web网站开发语言的战争中已经慢慢将Java抛在了后面,Java要想在Web网站开发上奋起直追,的确应该多听听Andi Gutmans的意见,彻底改变一下思路才行,否则两者的差距只能是越来越远。   另外,虽然在国际上LAMP(Linux+Apache+Mysql+Php)架构已经占领了统治地位,但是在中国国内还有一个怪胎,就是基于微软的Windows Server+IIS+SqlServer+ASP/ASP.NET的架构,从理论上说,微软的这一套架构也能实现不错的性能,只可惜Windows和SqlServer价格不菲,整个架构在性能上比起LAMP不仅没有什么优势,反而还有不少劣势,因此微软的这一套家伙在国际市场上吃不开。而国内使用微软盗版则可以忽略成本,而ASP的易学易用性不逊于PHP,甚至连IT外行都能够使用,因此在国内也有不小的市场。但是随着中国在保护知识产权方面的日趋完善,免费的LAMP依旧是未来的趋势。 摘自http://www.williamlong.info/archives/1314.html   /// ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java script)作为自己的开发语言。  PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(http: //www.php.net)自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。  JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和Java Applet之外,又有新的硕果,就是JSP,Java Server Page。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。  三者都提供在 HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成 Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP 、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的 HTML页面只依赖于Web服务器,而ASP 、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP 、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。  技术特点:  ASP:  1. 使用VBScript 、 JScript等简单易懂的脚本语言,结合HTML代码,即可快速地完成网站的应用程序。  2. 无须compile编译,容易编写,可在服务器端直接执行。  3. 使用普通的文本编辑器,如Windows的记事本,即可进行编辑设计。  4. 与浏览器无关(Browser Independence), 客户端只要使用可执行HTML码的浏览器,即可浏览Active Server Pages所设计的网页内容。Active ServerPages 所使用的脚本语言(VBScript 、 Jscript)均在WEB服务器端执行,客户端的浏览器不需要能够执行这些脚本语言。  5.Active Server Pages能与任何ActiveX scripting语言兼容。除了可使用VB Script或JScript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其它脚本语言,譬如REXX 、Perl 、Tcl等。脚本引擎是处理脚本程序的COM(Component Object Model) 对象。  6. 可使用服务器端的脚本来产生客户端的脚本。  7. ActiveX Server Components(ActiveX 服务器组件 )具有无限可扩充性。可以使用Visual Basic 、Java 、Visual C++ 、COBOL等程序设计语言来编写你所需要的ActiveX Server Component 。  PHP:  1 数据库连接  PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的群组合。你还可以自己编写外围的函数去间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松地修改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。但PHP提供的数据库接口支持彼此不统一,比如对Oracle, MySQL,Sybase的接口,彼此都不一样。这也是PHP的一个弱点。  JSP:  1.将内容的产生和显示进行分离  使用JSP技术,Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终页面。使用JSP标识或者小脚本来产生页面上的动态内容。产生内容的逻辑被封装在标识和JavaBeans群组件中,并且捆绑在小脚本中,所有的脚本在服务器端执行。如果核心逻辑被封装在标识和Beans中,那么其它人,如Web管理人员和页面设计者,能够编辑和使用JSP页面,而不影响内容的产生。在服务器端,JSP引擎解释JSP标识,产生所请求的内容(例如,通过存取JavaBeans群组件,使用JDBC技术存取数据库),并且将结果以HTML(或者XML)页面的形式发送回浏览器。这有助于作者保护自己的代码,而又保证任何基于HTML的Web浏览器的完全可用性。  2.强调可重用的群组件  绝大多数JSP页面依赖于可重用且跨平台的组件(如:JavaBeans或者Enterprise JavaBeans)来执行应用程序所要求的更为复杂的处理。开发人员能够共享和交换执行普通操作的组件,或者使得这些组件为更多的使用者或者用户团体所使用。基于组件的方法加速了总体开发过程,并且使得各种群组织在他们现有的技能和优化结果的开发努力中得到平衡。  3.采用标识简化页面开发  Web页面开发人员不会都是熟悉脚本语言的程序设计人员。JavaServer Page技术封装了许多功能,这些功能是在易用的、与JSP相关的XML标识中进行动态内容产生所需要的。标准的JSP标识能够存取和实例化JavaBeans组件,设定或者检索群组件属性,下载Applet,以及执行用其它方法更难于编码和耗时的功能。通过开发定制化标识库,JSP技术是可以扩展的。今后,第三方开发人员和其它人员可以为常用功能建立自己的标识库。这使得Web页面开发人员能够使用熟悉的工具和如同标识一样的执行特定功能的构件来工作。 JSP技术很容易整合到多种应用体系结构中,以利用现存的工具和技巧,并且扩展到能够支持企业级的分布式应用。作为采用Java技术家族的一部分,以及Java 2EE的一个成员,JSP技术能够支持高度复杂的基于Web的应用。由于JSP页面的内置脚本语言是基于Java程序设计语言的,而且所有的JSP页面都被编译成为Java Servlet,JSP页面就具有Java技术的所有好处,包括健壮的存储管理和安全性。作为Java平台的一部分,JSP拥有Java程序设计语言“一次编写,各处执行”的特点。随着越来越多的供货商将JSP支持加入到他们的产品中,您可以使用自己所选择的服务器和工具,修改工具或服务器并不影响目前的应用。  应用范围:  ASP是Microsoft开发的动态网页语言,也继承了微软产品的一贯传统,只能执行于微软的服务器产品,IIS(Internet Information Server) (windows NT)和PWS(Personal Web Server)(windows 98)上。Unix下也有ChiliSoft的组件来支持ASP,但是ASP本身的功能有限,必须通过ASP+COM的群组合来扩充,Unix下的COM实现起来非常困难。  结论:ASP简单而易于维护,是小型网站应用的最佳选择,通过DCOM和MTS技术,ASP甚至还可以完成中等规模的企业应用。 PHP可在Windows,Unix,Linux的Web服务器上正常执行,还支持IIS,Apache等一般的Web服务器,用户更换平台时,无需变换PHP代码,可即拿即用。  结论:PHP因为结构上的缺陷,使的其只适合编写小型的网站系统。 JSP同PHP类似,几乎可以执行于所有平台。如Win NT,Linux,Unix。在NT下IIS通过一个外加服务器,例如JRUN或者ServletExec,就能支持JSP。知名的Web服务器Apache已经能够支持JSP。由于Apache广泛应用在NT、Unix和Linux上,因此JSP有更广泛的执行平台。虽然现在NT操作系统占了很大的市场份额,但是在服务器方面Unix的优势仍然很大,而新崛起的Linux更是来势不小。从一个平台移植到另外一个平台,JSP和JavaBean甚至不用重新编译,因为Java字节码都是标准的与平台无关的。  结论:对于脚本语言来讲,JSP还是拥有相当大的优势的,虽然其配置和部署相对其他脚本语言来说要复杂一些,但对于跨平台的中大型网站系统来讲,基于JAVA技术的JSP(结合JavaBean和EJB)几乎成为唯一的选择。 性能比较:  有人做过试验,对这三种语言分别做回圈性能测试及存取Oracle数据库测试。在循环性能测试中,JSP只用了令人吃惊的四秒钟就结束了20000*20000的回圈。而ASP、PHP测试的是2000*2000循环(少一个数量级),却分别用了63秒和84秒。(参考PHPLIB)。 数据库测试中,三者分别对 Oracle 8 进行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒,ASP则 需要 73 秒。  前景分析:  目前在国内PHP与ASP应用最为广泛。而JSP由于是一种较新的技术,国内采用的较少。但在国外,JSP已经是比较流行的一种技术,尤其是电子商务类的网站,多采用JSP。采用PHP的网站如新浪网(sina)、中国人(Chinaren)等,但由于PHP本身存在的一些缺点,使得它不适合应用于大型电子商务站点,而更适合一些小型的商业站点。首先,PHP缺乏规模支持。其次,缺乏多层结构支持。对于大负荷站点,解决方法只有一个:分布计算。数据库、应用逻辑层、表示逻辑层彼此分开,而且同层也可以根据流量分开,群组成二维数组。而PHP则缺乏这种支持。还有上面提到过的一点,PHP提供的数据库接口支持不统一,这就使得它不适合运用在电子商务中。  ASP和JSP则没有以上缺陷,ASP可以通过Microsoft Windowsd的COM/DCOM获得ActiveX规模支持,通过DCOM和Transcation Server获得结构支持;JSP可以通过SUN Java的Java Class和EJB获得规模支持,通过EJB/CORBA以及众多厂商的Application Server获得结构支持。三者中,JSP应该是未来发展的趋势。世界上一些大的电子商务解决方案提供商都采用JSP/Servlet。比较出名的如IBM的E-business,它的核心是采用JSP/Servlet的Web Sphere。它们都是通过CGI来提供支持的。但去年10月后它推出了Enfinity,一个采用JSP/Servlet的电子商务Application Server,而且声言不再开发传统软件。  Perl Perl(Practical Extraction and Report Language)是一种很古老的脚本语言。最初的Web应用大多是用Perl编写的,Perl很像C语言,使用非常灵活,对于文件操作和处理具有和C语言一样的方便快捷。 也正是因为Perl的灵活性和“过度”的冗余语法,也因此导致许多Perl程序的代码令人难以阅读和维护,因此使用的人在逐渐减少,并且目前有被Python替代的可能。 另外Perl对于CPU的消耗似乎较高,效率似乎有一些不足。 Perl开发的成功案例: Movable Type — 世界上使用最多的Blog系统之一,功能强大的足以和一个CMS系统相比拟。 Awstats — 非常经典的日志系统,速度极快,功能也非常强大。 结论:Perl在部分应用中能发挥很大优势,但其维护性差使得其普及变得很困难。 .NET .NET的优势:企业信息系统部门可自行编程 .NET是Microsoft贴在现有产品和未来产品上的一个新式行销标签。在Microsoft服务器端产品中,如基于Windows DNA 2000技术的izTalk Server 2000和Application Center 2000,.NET标签将随处可见。然 而,.NET最令人感兴趣的特色却在于它的开发平台、语言和协议。  通过.NET,Microsoft为我们提供了一种全新的开发平台,这个平台将推动以新体系为基础的协同Web应用开发。根据Microsoft的说法,.NET至少将成为一种“对Web编程”的方法。当前,第一版Visual Studio .NET已经出现,由此出发,我们或许可以比较精确地勾画出.NET平台最终的全貌。  :.NET开发工具--Visual Studo.NET的易用性使得它在Java很难实现的“用户企业(信息系统部门)也可编程的系统”上超人一头。笔者认为可能还存在其他这样的领域。当然,尽管.NET的标准语言VB.NET和C#都与Java一样复杂,但是Visual Studo.NET却很好地消除了这种复杂性。  比如,日本兰碧儿(NOEVIR)只靠自己的信息系统部门就完成了Web代理店支援系统的从企划到编程的全部工作。日本一家系统集成商曾表示,此前导入Java系统的用户企业中“选用.NET的信息系统部门就有望自行开发或对系统进行修改”。  笔者认为,由于Java本身较为复杂,且不易学习掌握,因此“用户企业只负责企划,而将编程工作完全委托给集成商的现象非常普遍”。  在COBOL和VB(客户商/服务器)的全盛时期,信息系统部门自己编程、对系统进行部分修改和功能追加是很正常的事情。如果连细小的系统修改都要外包,那么系统的维护成本自然会很高,因此就将失去灵活性。甚至于还有可能削弱信息系统部门的业务能力。说到企划,听起来好听,但如果连大体的情况也不了解,恐怕与开发商交涉都很困难。这也许就是Java的一个“弊端”吧。  此外,“成本比UNIX低”以及“可以充分利用Windows技术资源”等原因也在加速.NET Framework的普及。作为客户端/服务器系统的开发环境,VB的后续语言--.NET中的“Windows Form”最具竞争力。越来越多的系统集成商开始选择这一工具构筑系统。  .NET的劣势:应用成果少、开放性差  反过来说,.NET的劣势则在于在大型系统中的应用成果少、缺乏“开放性”。  对于应用成果来说,今后其数量将会不断增加。据悉,日本Kabu.com证券将在2003年度内利用.NET Framework全面重新构筑该公司目前利用ASP构筑的系统。  在“开放性”方面又将会如何呢?Java普及的主要因素很多,但笔者认为其中最关键的在于“开放性”。由于可各种OS上运行,而且很多开发商还提供了Web应用服务器和开发工具,因此用户可以随意选择。而开发商则通过在功能和性能方面相互竞争来不断提高产品水平。  而.NET Framework怎么样呢?只要想应用于业务系统中,其OS实际上则只能限于Windows。尽管微软已经提供了FreeBSD版.NET Framework,但其目的仅限于学术研究。  今后人们所能期待的是Mono Project。Mono Project是指完全独立于微软、正在开发开放源码版.NET Framework的计划。主导该计划的是一家名为Ximian的Linux企业,这家公司成功地开发了Linux标准桌面环境GNOME,目前已受到业界的广泛关注。  2003年1月该计划还发布了运行Web应用程序ASP.NET的Web服务软件XSP。尽管很多功能仍在开发之中,但目前开发工作进展顺利。目前正面向Linux和Windows进行开发。据Mono Project称,由于该软件依赖于Linux的部分不多,因此能够轻松地向其他UNIX OS移植。  能否形成像Mono一样的开放环境将是.NET普及的关键所在。微软目前已经向业界标准化机构ECMA(欧洲计算机制造商协会)提交了.NET标准,此举表明微软将采用开放标准。但目前尚不清楚此举只是单纯的一种姿态,还是真的要开放.NET。这就要看微软今后是否能够继续公开足够的相关标准和信息了。 可以说,无论是在技术上还是在战略上,Microsoft都对.NET寄予了厚望。当前的DNA 2000技术并未包含新的.NET平台;相反,.NET将是一种全新的技术,有望揉合许多根本性的、深层次的创意。  作为一种全新的平台和技术,.NET带来了许多新的产品,但这些产品和现有技术的兼容性未能获得百分之百的保证。.NET支持27种编程语言,它们将共享一组提供基本服务的类。.NET应用不再直接在裸机上运行,由于看好一种运行在虚拟机CLR(Common Language Runtime)上的称为MSIL的中间语言,Microsoft放弃了Intel x86代码。 .net就远来说可能更有前途,毕竟是microsoft统治时期 就JAVA来说,最近比较热,J2EE等都是市场比较抢手的。 XML  Extensible Markup Language,可扩展标识语言。它是一种由W3C发展,可由网页设计者自行定义标签(TAG)HTML延伸规格,主要目的是让使用者能够设计结构性资料及文件格式,并对资料如何存储,接受与应用提供标准描述方法。简单地说,XML就是一种用来在互联网上创建电子文档的标准。 CGI  Common Gateway Interface,公共网关接口。网页服务器与应用程序之间传递资料的接口规范,CGI程序客用冷和程序语言产生,通常为Perl,使用CGI程序可以读取使用者的输入并产生动态的HTML网页。CGI每次响应一个请求都会建立一个进程(Process),对于服务器来说是一个不校的负担哦。不过,现在的Fast-cgi以及对此有很大的改善,所以就不用怕使用CGI编的论坛会占有你过多的系统资源了. DELPHI Delphi是著名的Borland(现在已和Inprise合并)公司开发的可视化软件开发工具。“真正的程序员用c,聪明的程序员用Delphi”,这句话是对Delphi最经典、最实在的描述。Delphi被称为第四代编程语言,它具有简单、高效、功能强大的特点。和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi则功能更强大、更实用。可以说Delphi同时兼备了VC功能强大和VB简单易学的特点。它一直是程序员至爱的编程工具。 Delphi具有以下的特性:基于窗体和面向对象的方法,高速的编译器,强大的数据库支持,与Windows编程紧密结合,强大而成熟的组件技术。但最重要的还是Object Pascal语言,它才是一切的根本。 Object Pascal语言是在Pascal语言的基础上发展起来的,简单易学。 Delphi提供了各种开发工具,包括集成环境、图像编辑(Image Editor),以及各种开发数据库的应用程序,如DesktopDataBase Expert等。除此之外,还允许用户挂接其它的应用程序开发工具,如Borland公司的资源编辑器(Resourse Workshop)。 在Delphi众多的优势当中,它在数据库方面的特长显得尤为突出:适应于多种数据库结构,从客户机/服务机模式到多层数据结构模式;高效率的数据库管理系统和新一代更先进的数据库引擎;最新的数据分析手段和提供大量的企业组件。 Delphi发展至今,从Delphi1、Delphi2到现在的Delphi5,不断添加和改进各种特性,功能越来越强大。Delphi5添加了对IDE(集成开发环境)的很多改进新特性,扩展了数据库支持(ADO和InterBase数据库),带有Internet支持的MIDAS改进版,TeamSouse版本控制工具,转换功能,框架概念以及很多的新组件与新特性。 JavaScript+Html JavaScript 是一种描述语言,此一语言可以被箝入 HTML 的文件之中。  透过 JavaScript 可以做到回应使用者的需求事件 (如: form 的输入) 而不用任何的网路  来回传输资料,所以当一位使用者输入一项资料时,它不用经过传给伺服端 (server)  处理,再传回来的过程,而直接可以被客户端 (client) 的应用程式所处理。你也可  以想像成有一个可执行程式在你的客端上执行一样!目前已有一些写好的程式在  Internet 上你可以连过去看看,以下有一些计算器的例子,在 Nescape 上。  JavaScript 和 Java 很类似,但到底并不一样! Java 是一种比 JavaScript 更复杂  许多的程式语言,而 JavaScript 则是相当容易了解的语言。JavaScript 创作者  可以不那么注重程式技巧,所以许多 Java 的特性在 Java Script 中并不支援 Javascript的语法基本上与Java一致,但是由于Javascript是一个弱类型的脚本语言,在程序编写的过程中会有一些不同。同时由于Javascript是基于对象的语言,注意不是面向对象的语言,所以它在对对象的支持上有一定缺陷,大家所熟悉的诸如对象继承,多态等面向对象语言所具有的基本特性在Javascript中只能通过一些变通手段来实现(通常比较复杂)。然而,弱类型语言也有其优点,那就是简单性,Javascript中类型转化是非常方便的(弱类型语言在代码中基本上表现为无类型),一个String通过一个简单的加减操作就可以转化为Int(相当于调用了Integer.ParseInt(String)),而且不会抛异常。Javascript作为一种解释性语言,还能使用在编译性语言C/C++、JAVA难以支持的eval语句。由于运行在沙箱中,Javascript运行时有很多的安全性限制。它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互,从而有效地防止数据的丢失。 Ajax是Asynchronous JavaScript and XML的简称,它表现出一个Web开发上的根本转变,那就是,Web上可能做些什么.  Ajax的定义 Ajax不是一个技术,它实际上是几种技术,每种技术都有其独特这处,合在一起就成了一个功能强大的新技术。Ajax包括:  XHTML和CSS  使用文档对象模型(Document Object Model)作动态显示和交互  使用XML和XSLT做数据交互和操作  使用XMLHttpRequest进行异步数据接收  使用JavaScript将它们绑定在一起  Ajax理念的出现,揭开了无刷新更新页面时代的序幕,并有代替传统web开发中采用form(表单)递交方式更新web页面的趋势,可以算是一个里程碑。但Ajax都不是适用于所有地方的,它的适用范围是由它的特性所决定的。它的特性主要有:  1、按需取数据。页面不读取无用的冗余数据,而是在用户操作过程中的某项交互需要某部分数据时才会向服务器发送请求。  2、无刷新更新页面。客户端利用XMLHTTP发送请求得到服务端应答数据,在不重新载入整个页面的情况下用JavaScript操作DOM最终更新页面。 3、预读功能也可以通过Ajax实现,但并不是Ajax的优势所在,它的主要优势还是在交互方面。  Ajax带来的正面效果: 1、减轻服务器的负担。因为Ajax的根本理念是“按需取数据”,所以最大可能在减少了冗余请求和响影对服务器造成的负担。 2、减少用户实际和心理等待时间。 传统的web应用模型工作起来就象这样:大部分界面上的用户动作触发一个连接到Web服务器的HTTP请求。服务器完成一些处理---接收数据,处理计算,再访问其它的数据库系统,最后返回一个HTML页面到客户端。这是一个老套的模式,自采用超文本作为web使用以来,一直都这样用, 但看过《The Elements of User Experience》的读者一定知道,是什么限制了Web界面没有桌面软件那么好用。 这种旧的途径让我们认识到了许多技术,但它不会产生很好的用户体验。当服务器正在处理自己的事情的时候,用户在做什么?没错,等待。每一个动作,用户都要等待。  很明显,如果我们按桌面程序的思维设计Web应用,我们不愿意让用户总是等待。当界面加载后,为什么还要让用户每次再花一半的时间从服务取数据?实际上,为什么老是让用户看到程序去服务器取数据呢?  Ajax如何不同凡响 通过在用户和服务器之间引入一个Ajax引擎,可以消除Web的开始-停止-开始-停止这样的交互过程. 它就像增加了一层机制到程序中,使它响应更灵敏,而它的确做到了这一点。  不像加载一个页面一样,在会话的开始,浏览器加载了一个Ajax引擎---采用JavaScript编写并且通常在一个隐藏frame中。这个引擎负责绘制用户界面以及与服务器端通讯。Ajax引擎允许用异步的方式实现用户与程序的交互--不用等待服务器的通讯。所以用户再不不用打开一个空白窗口,看到等待光标不断的转,等待服务器完成后再响应。 通常要产生一个HTTP请求的用户动作现在通过JavaScript调用Ajax引擎来代替. 任何用户动作的响应不再要求直接传到服务器---例如简单的数据校验,内存中的数据编辑,甚至一些页面导航---引擎自己就可以处理它. 如果引擎需要从服务器取数据来响应用户动作---假设它提交需要处理的数据,载入另外的界面代码,或者接收新的数据---引擎让这些工作异步进行,通常使用XML, 不用再担误用户界面的交互。  谁在使用Ajax 在采用Ajax的开发上面,Google做了巨大的投资。去年Google所有主要的产品都用了这项技术---Orkut, Gmail, 以及最近的beta版的Google Groups, Google Suggest和Google Maps---它们全是Ajax的应用。(要想了解更多这些Ajax实际的技术细节,请看它们的分析文章:Gmail, Google Suggest, Google Maps). 其它的像:Flickr, 采用许多人们喜欢的Ajax特性, 还有Amazon的A9.com搜索引擎也采用类似的技术。  这些项目证明了Ajax不只是学术上的,也有许多真实世界成功应用。这不是什么实验室里的技术。Ajax的应用可大可小,从非常简单的,像单一功能的Google Suggest到非常复杂的Google Maps。 本文转自茄子_2008博客园博客,原文链接:http://www.cnblogs.com/xd502djj/archive/2010/08/08/1795263.html,如需转载请自行联系原作者。
文章
Web App开发  ·  JavaScript  ·  Java  ·  PHP  ·  数据库
2017-09-01
Windows Azure HandBook (2) Azure China提供的服务
 《Windows Azure Platform 系列文章目录》     对于传统的自建数据中心,从底层的Network,Storage,Servers,Virtualization,中间层的OS,Middleware,Runtime,最上层的Application,Data,都需要企业进行管理。这就好比农村自建房。   对于公有云平台,一般分为三种类型: IaaS, PaaS和SaaS。   Microsoft Azure平台属于IaaS和PaaS范畴。     1.  IaaS   对于用户来说,底层的Network, Storage, Server, Virtualization微软Azure都已经准备就绪了。用户只需要把应用部署到Azure IaaS即可,日常只需要管理中间层的OS,Middleware,Runtime和最上层的Application,Data。   Azure支持的操作系统为   -  Windows : Server 2008 R2, Server 2012, Server 2012 R2   -  SQL Server:SQL Server 2008 R2, SQL Server 2012 SP1, SQL Server 2014 RTM  (Web, Standard, Enterprise)   -  Linux:     Ubuntu (12.04 LTS, 12.10, 13.10, 14.04 LTS),     CentOS (6.5),     SUSE (SUSE Linux Enterprise Server 11 SP3)   对于IaaS来说,OS以上部分的管理和维护都需要用户来管理。这样的缺点是:比如说用户现在使用Windows Server 2012 R2,将来微软release了Windows Server 2012 R2 SP1,需要用户进行手动升级。      2.  PaaS   在PaaS里,OS,Middleware,Runtime都是由Microsoft Azure来管理。PaaS强调的是提供平台能力,而不需要关心OS,Middleware,Runtime。即客户只需要告诉Microsoft Azure提供运行Application的能力,无论是.NET的能力,Java的能力,PHP的能力等等。企业可以非常方便的将应用程序部署到Microsoft Azure。 微软提供Azure SDK包含的开发平台:   -  .NET   -   Java   -  PHP   -  Node.js   -  Python   -  Ruby   从迁移难度来说,从IDC机房迁移到Azure PaaS难度要比IaaS大,因为PaaS需要进行一定的代码修改。   我个人的建议是先让用户将本地的应用迁移到Azure的IaaS平台,享受云计算带来的便利性和可靠性;然后在IaaS平稳运行的前提下,将部分应用迁移至PaaS平台。     3.  SaaS   Microsoft Azure不是SaaS平台。   SaaS是提供给用户完整的软件解决方案,开箱即用的。最终用户无需了解该软件解决方案背后是部署在哪家云计算供应商,背后的平台是使用IaaS还是PaaS服务。   微软的Office 365就是非常典型的SaaS服务。类似的像Salesforce.com这样的解决方案也是提供SaaS服务。   对于那些ISV厂商来说,传统交付软件的方式是需要经过以下几步:   -  在客户现场首先部署硬件服务,包括安装服务器,网络,防火墙,电源等   -  安装软件,包括操作系统,数据库软件,运行时软件   -  安装应用软件   可以看到,这样的软件交付流程,其实包括了硬件的交付和软件的交付。对于ISV厂商来说,不仅仅需要维护软件的可用性,而且需要维护底层的硬件服务器。   ISV厂商采用了微软的Microsoft Azure公有云服务之后,可以采用   -  IaaS,将底层的Network, Storage, Server, Virtualization全部交付给Microsoft Azure   -  PaaS,将底层的Network, Storage, Server, Virtualization和中间层的OS,Middleware,Runtime交付给Microsoft Azure   ISV厂商只要专注于软件的开发和升级就可以。其他硬件服务器的运维等等工作,都交付给微软Azure来处理就可以了。   通过这样对应用程序的改造和升级,那些传统的ISV厂商就可以利用微软的公有云服务,提供给自己的客户SaaS的服务。           Microsoft Azure所提供的服务   注意:本篇仅介绍Azure China提供的服务。Azure平台是一个更新的平台,每个月都会有新的feature release,笔者尽最大可能更新文档,但本文不代表Azure 平台提供的最终服务内容。   按照Microsoft Azure的业务价值和典型的业务场景,Microsoft Azure的各个服务组件分类如下:    服务类型 计算服务 数据服务 应用服务 网络 服务详细 l   虚拟机 l   Web Site(预览) l   云服务 l   SQL Database l   存储 l   服务总线 l   Notification Hubs l   Active Directory l   CDN(预览) l   Scheduler l   虚拟网络    注:以上内容会随着Microsoft Azure平台变化而增加,想了解Azure提供的所有服务,请参考www.windowsazure.cn。   基于以上这些服务组件,用户可以灵活的构建自己的IT架构和应用环境。      一. 存储服务   Azure存储服务是云端的文件存储服务,简单理解是用户可以将本地的文件、图片、照片等二进制文件保存在云端的存储服务中。   在传统的IDC数据中心,存储是某个机器名、或者保存在某个服务器的某个磁盘下,或者是某个存储的网络位置。   在Azure存储服务,其实是一个http / https的网络路径,可以进行权限控制。Azure存储服务并不依赖于任何一个IP地址或者是网络路径。      存储服务本身支持99.9%的SLA,它提供三种高可用:   1)本地数据中心的三重冗余 (Local Redundant Storage, LRS)。比如客户可以选择将存储服务在同一个数据中心做三重冗余,比如在上海的数据中心做三重冗余。任意一个保存在上海存储服务的文件,都有一个主备份和一个子备份。      比如客户上传了10 GB电影,其实Azure存储服务在同一个数据中心保存了30GB。但是Azure收费只会收取用户实际上传的10GB费用。   对于LRS,事务在同一个数据中心的三重冗余是同步执行的。     2)跨数据中心的三重冗余 (Geo Redundant Storage, GRS)   细心的用户会发现,微软在国外和国内的数据中心建设都是成对的,比如北京数据中心和上海数据中心。这是因为微软充分考虑了异地冗余的能力。在北京和上海数据中心之间会有专线连接,这个专线是内网数据中心之前数据同步专用的。      比如用户在上海数据中心(主要位置)创建了存储账号,并且开启了跨数据中心同步的能力。当用户往上海数据中心上传10GB电影,该电影文件不仅在上海数据中心做了三重冗余,在北京的数据中心(辅助位置)也会做三重冗余,文件一共做了六重冗余。举个例子,即使上海数据中心因为地震、战争、洪水完全被摧毁了,用户的数据还是安全的保存在北京的数据中心,文件真正做到了万无一失。    对于主要位置的数据中心来说,事务是异步从主要位置发送到辅助位置的。   下表显示了当前的主要位置和辅助位置的信息:    主要位置 辅助位置 中国东部 中国北部 中国北部 中国东部          GRS的RPO 和RTO是多少?   恢复点目标 (RPO):在 GRS 和 RA-GRS中,存储服务将数据从主要位置异步跨地域复制到辅助位置。发生重大区域性灾难,需要进行故障转移时,未进行跨地域冗余复制的最新增量变化可能会丢失。这种潜在数据丢失的分钟数称为 RPO(即数据可以恢复到的时间点)。我们的 RPO通常不会超过 15分钟,不过目前尚无 SLA涉及跨地域冗余复制需要多长时间。      恢复时间目标 (RTO):另一个需要了解的指标是 RTO。这指的是进行故障转移以及执行故障转移后使存储帐户恢复联机所需的时间。进行故障转移所用的时间包括:   (A)调查并确定能否在主要位置恢复数据或是否应该进行故障转移所需要的时间   (B)通过更改 DNS条目实现帐户故障转移的时间   我们非常重视保护您的数据,所以如果有任何恢复数据的可能,我们将暂缓故障转移,并尽量恢复主要位置的数据。将来我们计划提供一个 API,使客户可以在帐户级别触发故障转移,从而使他们能够自己控制 RTO,但目前尚不可用。      3)读取访问地域冗余 (Read Access – Geo Redundant Storage, RA-GRS)   简单的来说,如果用户在上海数据中心(主要位置)创建了存储账号,并且开启了RA-GRS,事务就会异步的复制到北京的数据中心。RA-GRS提供了对复制到北京数据中心(辅助位置)的”只读”访问权,实现对存储账户的更高读取可用性。 这样用户可以指定对于Azure Storage的访问是指向上海数据中心(主要位置,还是北京数据中心(辅助位置),提高读取的高可用性。 启用该功能后,在主要区域无法读取数据时,可使用辅助位置读取更高可用性。该功能为”选择使用”,要求存储账户进行跨地域冗余复制。     举个例子,假设我在上海数据中心(主要位置)创建了Azure Storage,Storage Name为leizhangstorage,并且开启了读取访问地域冗余 (Read Access – Geo Redundant Storage, RA-GRS)。   (A)我就可以通过http://leizhangstorage.blob.core.chinacloudapi.cn 访问主要位置的Azure Storage Account。   (B)然后还可以通过http://leizhangstorage-secondary.blob.core.chinacloudapi.cn 访问次要位置的Azure Storage Account   (C)在发生上海数据中心(主要位置)无法读取数据的时候,可以使用辅助位置的数据读取来提供高可用性。   参考资料: http://blogs.msdn.com/b/windowsazurestorage/archive/2013/12/04/introducing-read-access-geo-replicated-storage-ra-grs-for-windows-azure-storage.aspx http://blog.csdn.net/azurechina/article/details/22749157     Azure存储服务提供三种不同类型的存储服务: Blob, Table, Queue。      1. Blob   Blob就是保存大型二进制对象,比如用来存储文件、图片、文档等二进制格式的文件。   Blob分为两种类型:   (1)Block Blob   这种类型适合存储二进制文件,支持断点续传,可以最大以4M为一个区块单位,单一文件最大可以存储200GB,且区块不会连续存储,可能会在不同的存储服务器分块存放。为了适应文件的上传和下载而专门进行了优化。 Block可以通过2种方式创建。不超过64MB的Block Blobs可以通过调用PutBlob操作进行上传。大于64M的Block Blobs必须分块上传,且每块的大小不能超过4MB。   (2)Page Blob   这类存储优化了随机访问。它会在存储区中划分一个连续的区域供应用程序存放数据,可以用来存放VHD,单一文件最大可以存储1TB。     Blob服务由Blob本身以及其收纳容器(Container)构成,容器可以视为一般本机上的文件夹。   你可以通过REST API来访问Blob   http://<accountname>.blob.core.chinacloudapi.cn/<containername>/<blobname>   accountname表示哪个Azure存储账号下的资源,是全局唯一的。 blob.core.chinacloudapi.cn表示azure china blob存储资源,是固定的。 containername表示容器的名字,可以认为是访问某一文件夹下的资源 blobname表示我要访问的资源名称,你可以认为是一个mp3文件,或者是一个jpg文件。      举例说明:   我保存在leizhangstorage存储账号下,containername为photo,blobname为myphoto.jpg。则这个URL地址为:   http://leizhangstorage.blob.core.chinacloudapi.cn/photo/myphoto.jpg     我保存在leizhangstorage存储账号下,containername为vhd,blobname为myvm.vhd。则这个URL地址为:   http://leizhangstorage.blob.core.chinacloudapi.cn/vhd/myvm.vhd     注意Container的命名规则   -  containername只能是一级目录,没有办法在containername下再设置下一级别containername   -  必须以英文或数字开头,且名称内只能有英文、数字及dash(-)   -  不能以dash(-)开头或结尾,dash(-)不能连续出现   -  所有的英文的字符必须是小写   -  长度为3-63之间     Blob的命名规则   -  除了url的保留字符以外,其他的字符组合都可以使用   -  长度为1-1024个字符   -  尽量避免以dot(.)或者是forward slash(/)结尾。否则会造成Blob Service误判。     2.Table   这里的Azure Storage Table是非关系型数据表,不能与SQL Server的Table相混淆。用户可以近似认为Azure Storage Table是NoSQL。      Azure Table中的每一行记录就是一个Entity,单个Entity的最大容量是1M。 Azure Table中表的所有记录最大容量是200TB,每个Azure Table都必须有Partition Key和Row Key。Azure Table属性最多有255个。 Partition Key的值可以设置记录的物理位置。   在Azure Table中的2条数据,如果Partition Key值相同,则表示这2条数据存储的物理位置是相同的;   如果Partition Key不同,则表示这2条数据可能存储在同一台物理介质上,或者不同的2台物理介质上。如下图:      Table使用的场景,比较适合于日志文件存储,或者是需要非关系型数据库的场景。     3.Queue   Queue,队列,是一种先到先服务(First-Come, First-Serve),或者称为FIFO(先入先出)的存储服务。队列可以是字符串或者是最长64KB的二进制数据。 在Azure PaaS中有一个非常重要的概念叫Web Role/Worker Role。Queue作为Web Role/Worker Role沟通的重要的桥梁。 有关Azure PaaS平台的Web Role/Worker Role的内容,笔者会在接下来一章进行详细的介绍。     存储服务的性能指标   用户在选择使用Azure存储服务之前需要关心的一个方面是它的性能指标,也就是说,该存储服务是否能够满足用户日常的使用需求,同时是否能够满足用户访问峰值的情况。以下是一个存储账号的最大性能指标。   (1)一个存储账号的最大数据存储量是100TB   (2)一个存储账号最大的Transaction是每秒处理5000次(包括Blob,Queue和Table)   (3)一个存储账号最大的带宽是每秒钟传输3GB数据   以上性能指标是当前Microsoft Azure存储服务所能提供的最大性能指标,所以在应用程序运行过程中,用户实际上能获得的性能指标会低于该指标。      Windows Azure使用数据划分来提高数据访问性能和弹性伸缩。所以用户也应该尽量使用数据划分来把数据分散存储到多个服务器上以获得尽可能高的数据访问性能。每个数据划分的最大性能指标如下:   (1)对于单个Blob,每秒钟可以传输60MB数据   (2)对于单个Table Partition Key,每秒钟可以处理500个实体记录   注意,这只是单个Table Partition Key的性能指标,不是单个Azure Table。因此如果一个Azure Table能够有好的Partition设计,可以提高性能。   (3)对于消息队列,每秒钟可以处理500个消息     如果应用程序已经达到单个存储账号的最大性能指标,则可以考虑以下策略来进一步提高性能。   (1)对于Blob,可以考虑使用CDN来将经常访问的数据缓存到离用户最近的Edge Server来减少数据传输的时间。   (2)对于Table,可以考虑设计Partition Key,尽量把数据分散存储到多个地方   (3)对于Queue,可以考虑把多个消息集中到一个消息中或使用多个消息队列     存储服务安全性   Windows Azure存储服务会分配给用户两个访问密钥:主访问密钥和辅助访问密钥。   该访问密钥是256个字节的字符串,用户使用该访问密钥来验证每一个对Windows Azure存储服务的数据访问请求。   它的工作流程如下:   (1)用户首先构建数据访问请求,该数据访问请求可以是读Blob、写Entity到Table中或者使用Queue   (2)用户使用访问密钥通过加密算法对数据访问请求进行数字签名   (3)该数字签名包含在数据访问请求的标头部分(HTML Header),然后数据访问请求发送到Windows Azure存储服务   需要注意的是,我们在申请存储账号时系统生成了两个访问密钥:一个是主访问密钥,另一个是辅访问密钥。两个访问密钥的功能相同都可以访问数据。之所以有两个是为了方便用户切换访问密钥。比如,在通常情况下用户使用主访问密钥,如果一旦主访问密钥被泄露,用户可以把主访问密钥在最短的时间内失效(重新生成一个新的主访问密钥),然后切换到使用辅访问密钥。用户不需要为此修改代码,而只需要更改服务配置文件即可,同时更新服务配置文件也没有宕机时间。此外,另外一种有效的做法是应用程序代码可以先使用主访问密钥来访问数据,如果验证失败,代码自动使用辅访问密钥,这样用户在切换访问密钥时就不会有宕机时间了。   为了进一步提高对Blob数据访问控制的灵活度,Windows Azure数据存储服务还提供了另外一种叫做Shared Access Signature的数据访问控制方式。使用Shared Access Signature,管理员可以为其他用户生成一个临时的数据访问请求,该临时数据访问请求包含有效的数字签名,所以它可以通过数据验证。该临时数据访问请求也包含该用户可以访问哪些数据和操作权限等信息,而且该临时数据访问请求只会在指定时间内有效。这样管理员既可以允许其他用户访问数据,又不会泄露访问密钥。      需要注意的是,我们在申请存储账号时系统生成了两个访问密钥:一个是主访问密钥,另一个是辅访问密钥。两个访问密钥的功能相同都可以访问数据。之所以有两个是为了方便用户切换访问密钥。比如,在通常情况下用户使用主访问密钥,如果一旦主访问密钥被泄露,用户可以把主访问密钥在最短的时间内失效(重新生成一个新的主访问密钥),然后切换到使用辅访问密钥。用户不需要为此修改代码,而只需要更改服务配置文件即可,同时更新服务配置文件也没有宕机时间。此外,另外一种有效的做法是应用程序代码可以先使用主访问密钥来访问数据,如果验证失败,代码自动使用辅访问密钥,这样用户在切换访问密钥时就不会有宕机时间了。 为了进一步提高对Blob数据访问控制的灵活度,Windows Azure数据存储服务还提供了另外一种叫做Shared Access Signature的数据访问控制方式。使用Shared Access Signature,管理员可以为其他用户生成一个临时的数据访问请求,该临时数据访问请求包含有效的数字签名,所以它可以通过数据验证。该临时数据访问请求也包含该用户可以访问哪些数据和操作权限等信息,而且该临时数据访问请求只会在指定时间内有效。这样管理员既可以允许其他用户访问数据,又不会泄露访问密钥。     二.计算服务   计算服务可以近似认为是CPU+RAM的计算能力   Windows Azure提供三种不同的计算服务:Web Site,Cloud Service和Virtual Machine。     1.Web Site   Web Site比较适合轻量级的计算能力。   Web Site的特点在于快速、轻松部署一个高度可扩展的云环境。使用您所选择的语言和开源应用程序,比如WordExpress,FTP,Git或者TFS,并轻松集成Windows Azure的服务,比如SQL数据库,缓存,CDN和存储。   但是Web Site只能提供比较基本的Windows Azure功能,比如Application和Data。但是更加高级的功能,比如Startup Task,Native Code,Virtual Network等功能,它是不支持的。 Azure Web Site提供四种不同的计算模式:   (1)免费(Free)   -  如果在免费(Free)模式下,客户的计算资源是和其他用户共享的,不是独享的。也就是说,Free Web Site的资源是和别的用户共享CPU。   -  一个Azure账户最多只能创建10个类型为Free的Azure Web Site。   -  在Free模式下,一个Azure Web Site最多能使用的存储大小为1GB   -  在Free模式下,Azure Web Site不支持横向扩展功能   -  在Free模式下,Azure Web Site是没有SLA保障的     (2)共享(Shared)   -  如果在共享(Free)模式下,客户的计算资源是和其他用户共享的,不是独享的。也就是说,Shared Web Site的资源是和别的用户共享CPU。   -  一个Azure账户最多只能创建100个类型为Shared的Azure Web Site。   -  在Shared模式下,一个Azure Web Site最多能使用的存储大小为1GB   -  在Shared模式下,Azure Web Site支持横向扩展功能,且横向支持最多6个共享实例   -  在Shared模式下,Azure Web Site是没有SLA保障的     (3)基本(Basic)   -  如果在基本(Basic)模式下,客户的计算资源是独享的   -  Basic模式下,独享的计算资源有三种类型     (A)Small : 1Core/1.75GB RAM     (B)Medium : 2Core/3.5GB RAM     (C)Large: 4Core/7GB RAM   -  一个Azure账户可以创建无限多个类型为Basic的Azure Web Site   -  在Basic模式下,一个Azure Web Site最多能使用的存储大小为10GB   -  在Basic模式下,Azure Web Site支持横向扩展功能,且横向支持最多3个独享的实例   -  在Basic模式下,Azure Web Site支持99.9%的SLA      (4)标准(Standard)   -  如果在标准(Standard)模式下,客户的计算资源是独享的   -  Standard模式下,独享的计算资源有三种类型     (A)Small : 1Core/1.75GB RAM     (B)Medium: 2Core/3.5GB RAM     (C)Large: 4Core/7GB RAM   -  一个Azure账户可以创建无限多个类型为Standard的Azure Web Site   -  在Standard模式下,一个Azure Web Site最多能使用的存储大小为50GB   -  在Standard模式下,Azure Web Site支持横向扩展功能,且横向支持最多10个独享的实例   -  在Standard模式下,Azure Web Site支持99.9%的SLA   有关于Azure WebSite的技术指标,请参考:   http://azure.microsoft.com/en-us/pricing/details/web-sites/        2. Cloud Service   Azure PaaS比较适合新开发部署的应用。   注意Azure PaaS是non-persist VM,也就是非持久化虚拟机。这里的非持久化,意思是azure只对客户开发的代码负责,   Azure Cloud Service从广义角度来说有两种:PaaS Web Role/Worker Role和IaaS的DNS,这里我主要介绍PaaS的Web Role/Worker Role。      Azure PaaS允许开发人员,基于微软提供Azure SDK for .NET,Java,PHP,Node.js,Python,Ruby等,将应用程序部署到Azure PaaS平台。 PaaS的Web Role/Worker Role是非常重要的概念。      通过利用Web Role,开发人员可以利用Web Role来部署HTTP/HTTPS的应用程序,包括ASP.NET, PHP(FastCGI), JSP等或者是基于HTTP的WCF应用程序等的Web应用程序。Web Role直接与外界进行通信。   Worker Role可以简单理解成Windows上的Windows Service服务,它是一个无用户界面的应用程序角色,默默地在后台运行,开发人员可以利用Worker Role来处理不需要用户界面的大量计算逻辑。   Web Role可以通过Queue的方式(也就是Azure Storage Queue),向Worker Role发送一串消息,让Worker Role执行用户自己需要的逻辑。     为什么微软要有Worker Role?它的好处在哪里?在这里我举个例子您就能明白,比如我们有一个信息管理系统,需要上传Excel文档来进行解析和处理,从软件设计的角度来说有2种方法来解决   (1)在ASP.NET应用程序里新建个upload control,在upload control里面写函数:一旦Excel文件上传完毕,则在.cs文件执行对于Excel的处理工作。   但这样会有一个缺点,如果Excel文件里包含的内容非常大的话,需要时间来处理这些内容,所以前台的ASP.NET的页面会停滞或者无响应。虽然我们也可以通过增加progressbar或者loading图片来增强用户的体验,但是从软件设计上来说不是最好的。   (2)前端还是用原来的处理方式,使用upload control。服务器端增加一个Windows Service,时序的查询某一个文件夹,一旦发现前端页面上传了一个Excel文件,则Windows Service执行处理Excel的工作。这样前端的页面会及时的响应并且得到更好的用户体验。   但是这还是有一个缺陷,前端的页面和windows service是一对一的关系,如果附件上传的数量很大的话会出现Windows Service来不及处理的情况。   (3)有了Worker Role,我们可以让一个ASP.NET页面后端有多个Worker Role来进行分布式的计算,是一对多的关系,能够有效的利用云上的计算资源,Worker Role可以处理高负载的数据访问。     采用第三种方法的好处有以下两点:   (1)异步处理,Web Role只响应客户端的HTTP请求,进行快速的响应。而Worker Role在后端处理Web Role发送过来的消息(Queue),两者是松耦合的。   (2)Web Role和Worker Role的关系是多对多的,比如我可以在Web Role的配置中,设置 Instance Count为10。如下图:      而在Worker Role的配置中,设置Instance Count为3      这样的好处在于,前端有10台Azure Cloud Service Web Role Instance响应客户端HTTP的请求,而后端有3个Worker Role Instance来处理复杂的业务逻辑。   这种架构就好比一个餐厅,里面有10个服务员(Web Role)和3个厨师(Worker Role)。 -          服务员(Web Role)只负责招待客人(响应客户端请求),并将客人的点菜信息通过队列消息交给厨房(Queue.AddMessage()) -          厨师(Worker Role)读取点菜信息(Queue.GetMessage),随后负责烧菜做饭(进行后端逻辑),当饭菜准备完毕后,则删除点菜信息。 -          如果前端压力过大(客户端请求过多),则Web Role可以横向扩展 -          如果后端压力过大(后端逻辑处理过多),则Worker Role也可以横向扩展 -          这种松耦合,多对多的关系非常适合企业级应用架构          可以看到,Web Role和Worker Role进行通信的重要途径是经过Azure Storage Queue,了解Queue对于Azure PaaS架构设计非常重要。   相比于下面介绍的IaaS,azure PaaS的好处,总结下来有以下几点:   (1)面向应用,而不是面向IT基础设施。微软作为云计算供应商,让用户将更多的精力放在构建优秀的软件架构上,而不必考虑底层的问题,例如网络、操作系统、虚拟化等IT基础设施上。又比如:PaaS(Platform as a Service)允许云计算供应商能够自动地升级操作系统,安装补丁;而在IaaS云平台上,升级操作系统、安装补丁的操作需要用户手动的去进行配置和升级,及时性、可靠性都不高。采用了PaaS平台后,云计算供应商和软件开发者能够各司其职,将注意力放到自己领域内的问题上。   (2)弹性。Microsoft Azure具有Worker Role和Web Role。Web Role能够响应前端事件,而Worker Role能够响应Web Role发送过来的请求。这样的架构在保证前端快速响应的同时,又使得云计算架构更加弹性。     Azure PaaS平台支持   (1)多种开发语言,包括.NET, Java, PHP, Node.js, Python等   (2)Azure PaaS的虚拟机类型,除了A0以外,都是独享的,支持以下8种虚拟机大小    实例名称 CPU RAM A0 Share 768MB A1 1 Core 1.75GB A2 2 Core 3.5GB A3 4 Core 7GB A4 8 Core 14GB A5 2 Core 14GB A6 4 Core 28GB A7 8 Core 56GB   (3)Azure PaaS还支持虚拟机的动态横向扩展,如10台类型为A7(8Core/56GB)的实例做并行计算处理。     3. Azure Virtual Machine (IaaS)   IaaS (infrastructure as a Service)在云计算分类上,面向于IT基础设施及服务,让用户能够部署和运行自己需要的操作系统、中间件和运行时。对于传统的商业软件来说,迁移到IaaS平台上所花费的时间、精力相比PaaS而言要小很多。IaaS更加适合传统的商业软件。   Azure Virtual Machine虚拟机是以VHD格式进行保存的,并且保存在Azure Storage Blob。因为Azure Storage支持本地冗余、异地冗余、读取访问地域冗余,Azure Virtual Machine从存储的角度来说,已经提供了存储的高可用。   另外,Microsoft Azure支持Hyper-V托管的虚拟机上传至Azure云端进行托管。这样对于那些已经在企业内部实施微软Hyper-V虚拟化技术的企业来说,可以快速将企业内部的Hyper-V虚拟机直接上传至Azure,加快迁移的上线时间。   Azure Virtual Machine支持的类型为:    虚拟机类型 CPU RAM 临时磁盘 外挂磁盘数量 IOPS A0 Share 768MB 20GB 1 500 A1 1 1.75GB 70GB 2 2 * 500 A2 2 3.5GB 135GB 4 4 * 500 A3 4 7GB 285GB 8 8 * 500 A4 8 14GB 605GB 16 16 *500 A5 2 14GB 135GB 4 4 * 500 A6 4 28GB 285GB 8 8 * 500 A7 8 56GB 605GB 16 16 * 500   举例来说,Microsoft Azure单个节点支持的最大计算能力为A7,即8Core/56GB的计算能力。可以外挂16块磁盘,每块磁盘的最大容量为1TB,即外挂16TB的存储。支持的最大的IOPS为16*500=8000   请注意:以上Azure虚拟机CPU和内存是固定搭配的,不可按照用户的想法随意更改。     对于临时磁盘来说,该磁盘容量是与虚拟机类型有关。对于A7类型的虚拟机来说,该临时磁盘容量是605G。   对于Windows操作系统来说,该临时磁盘的盘符为D盘,且该盘符名为(Temporary Storage)。  这块临时磁盘的优势是:它的IOPS非常高,延迟非常低。  但是这块磁盘也有缺点:它不是持久化磁盘,也就是说,如果客户将文件保存在这块磁盘上,会有丢失文件的风险。这块磁盘其实是Azure Virtual Machine虚拟机所在物理机的磁盘,如果Azure Virtual Machine被重置了,或者漂移了,那保存在D盘的文件就会丢失。  我们建议将一些非关键的数据(允许丢失的数据),比如SQL Server的TempDB,临时文件等保存在Temporary Storage里。  http://blogs.msdn.com/b/wats/archive/2013/12/07/understanding-the-temporary-drive-on-windows-azure-virtual-machines.aspx         Azure Virtual Machine支持的虚拟机操作系统为:   -  Windows : Server 2008 R2, Server 2012, Server 2012 R2   -  SQL Server:SQL Server 2008 R2, SQL Server 2012 SP1, SQL Server 2014 RTM  (Web, Standard, Enterprise)   -  Linux :     Ubuntu (12.04 LTS, 12.10, 13.10, 14.04 LTS),     CentOS (6.5),     SUSE (SUSE Linux Enterprise Server 11 SP3)      如何选择Microsoft Azure计算服务   如果我是一个企业级的用户,面对这三种不同的计算能力,我应该选择哪一种服务,将现有的企业应用迁移到Microsoft Azure云计算平台上呢?   从Microsoft Azure提供的三种服务的区别,如下图:      从上图中我们不难发现,在Microsoft Azure服务平台里,Web Site特点是:   (1)在Windows Azure上构建高度可扩展的Web站点。   (2)快速、轻松部署一个高度可扩展的云环境,并且可以从很小的规模开始。   (3)使用您所选择的语言和开源应用程序,比如WordExpress, FTP, Git或者TFS,并轻松集成Microsoft Azure的服务,比如SQL 数据库,缓存,CDN和存储。   (4)Web Site的特点在于快速部署,只能提供比较基本的Windows Azure功能,比如Application和Data。但是更加高级的功能,比如Startup Task,Native Code,Virtual Network等功能,它是不支持的。     Web Site比较适合   (1)现代的Web应用程序。包括客户端脚本,服务器端脚本和数据库的应用程序。并且可以横向扩展。   (2)连续开发。直接从源代码库使用Git或者Team Foundation进行部署。   (3)使用开源应用程序。你可以直接使用开源的应用程序,比如WordPress等。     Cloud Service的特点如下:   (1)在Windows Azure上简历或扩展您的企业应用程序。   (2)利用丰富的PaaS环境,创建高度可用的,可扩展的应用程序和服务。支持高级的多层架构,自动部署和弹性计算。通过Windows Azure PaaS,可以为全世界的客户提供强大的SaaS解决方案。   (3)通过Virtual Network,可以将本地局域网的网络与Windows Azure公有云网络做连接。这样就可以让企业网络享受公有云带来的高度弹性计算和互操作性,同时也保证网络安全。     Cloud Service比较适合   (1)多层的应用程序,每层都可以自我扩展。使用Web Role和Worker Role,Web Role可以响应前端的显示,而将复杂的业务放在后端进行处理。   (2)先进的管理。如果您的应用程序需要管理员权限、远程桌面访问或以提升的权限运行代码,您可以使用Cloud Service。   (3)私有云+公有云。你可以使用Windows Azure Connect与Azure公有云进行点对点的连接,或者使用Azure Virtual Network将企业内网或者私有网络与到公有云相互连接。     Virtual Machine的特点如下:   (1)提供IaaS的服务。不仅仅支持Windows,而且支持Linux操作系统。   (2)轻松地在几分钟内部署和运行Windows Server和Linux虚拟机,迁移运行负载,而且无需改变现有的代码。对于基于Windows OS的应用来说,可以将其部署到Hyper-V里做成VHD文件,然后直接上传到Windows Azure上面进行部署和托管。   (3)支持Virtual Network,将您的局域网企业应用与公有云直接连接,享受云计算带来的便利性。     Virtual Machine的特点如下:   (1)支持Windows或者Linux。你可以将现有的基于Windows或者Linux的应用快速迁移到Windows Azure。   (2)支持更多的服务应用程序。可以在Windows Azure使用SQL Server, MySQL,MongoDB,SharePoint应用程序。   (3)支持将已有应用程序迁移到公有云。你可以将持久化的非关系型数据保存到Windows Azure VHD里。       三.SQL Database (SQL Azure)   请注意,这里的SQL Database不同于传统的SQL Server 2008 R2,SQL Server 2012,SQL Server 2014。   微软在Azure Virtual Machine中提供与传统SQL Server一致的虚拟机服务。请参考Azure Virtual Machine相关内容。     这里介绍的SQL Database,是PaaS的SQL Server服务。在以前的版本称为SQL Azure,后来改名为Windows Azure SQL Database,简称SQL Database。   为了与传统的SQL Server做区分,笔者个人习惯使用老的SQL Azure来称呼Windows Azure SQL Database,请各位读者注意。     一般情况下,如果企业内部需要新建一个数据库服务,需要经历采购硬件、网络布线、安装操作系统、安装驱动程序、安装数据库软件等过程,整个过程显得漫长而繁琐,并且后期需要IT人员来维护数据库服务器。   如果客户订阅了SQL Azure服务的用户,可以方便快速使用SQL Azure服务而不需要采购任何硬件和安装软件。对于用户来说,SQL Azure就像是一个在Internet上已经创建好的SQL Server服务器,由微软托管和运维,并且部署在微软上海和北京的数据中心。用户只要简单的选择离自己物理位置最近的数据中心,就能立刻快速的享受到SQL Azure的服务。   SQL Azure能够提供的服务:   (1)传统SQL Server的功能,如表、视图、函数、存储过程和触发器等。   (2)数据同步:提供数据同步和聚合功能。   (3)管理:为SQL Azure提供自动配置、计量、计费、负载均衡、容错和安全功能。   (4)数据访问:定义访问SQL Azure的不同编程方法,目前SQL Azure支持TDS,包括ADO.NET,Entity Framework,ADO.NET Data Service,ODBC,JDBC和LINQ客户端。     SQL Azure Database与传统SQL Server Database有什么不同? SQL Azure Database提供由微软托管的在云端的高可用性,可扩展性,多租户数据库服务。SQL Azure Database可以实现自主管理,供应与更简便的多数据库部署。开发者不必安装或管理任何软件。对于企业使用者来说,因为没有安装硬件和部署软件的过程,所以也降低了获得Database的时间与成本。 对于开发者来说,可以利用已有的T-SQL开发知识与熟悉的关系数据模式来使用SQL Azure进行开发和管理。SQL Azure Database可以让我们通过使用已有的开发工具,比如Visual Studio, SQL Server Management Studio来进行开发。同时SQL Azure Database还支持Ado.net, ODBC等连接方式,并且支持Entity Framework。   Criteria SQL VM SQL Azure Time to Solution     Migrate Existing Apps Fast Moderate Build New Apps Moderate Fast Cost of Solution     Hardware Administration None None Software Administration (Database & OS) Manual None Machine High Availability Automated (99.9% Uptime SLA at commercial release) N/A Database High Availability With extra VMs and manual setup via AlwaysOn (at commercial release), DBM; DR via log shipping, transactional replication Standard Feature (99.9% DB uptime SLA) Cost Medium Low Scale Model     Scale-Up A7 VM (8 cores, 56GB RAM, up to 16 TB disk space) Not Supported Scale-Out Manual via AlwaysOn read-only secondaries, scalable shared databases, peer-to-peer replication, Distributed Partitioned Views, and data-dependent routing (manual to setup, and applications must be designed for these features) SQL Database Federation (automated at data tier, with applications designed for Federation) Control & Customize     OS and VM Full Control No Control SQL Server Database Compatibility, Customization Full support for SQL Server 2012 box product features including database engine, SSIS, SSAS, SSRS Large subset of SQL Server 2012 features Hybrid     Domain Join and Windows Authentication Yes Not possible Data Synchronization via Azure Data Sync Supported Supported Manageability     Resource Governance & Security Level SQL Instance/VM Logical DB Server Tools Support Existing SQL Server tools such as SSMS, System Center, and SSDT Existing SQL Server tools such as SSMS, System Center, and SSDT Manage at Scale Capabilities Fair Good   SQL Azure Database有哪些新特性?   SQL Azure Database会自动进行三重备份,也就是说SQL Azure Database会自动将其自身复制到同一个数据中心不同物理主机之上,产生一个主备份和2个副备份。这样就提高了SQL Azure的可靠性、可用性、企业级别的安全特性,增加了数据库的安全性。如下图所示:         Data Sync(数据同步)   有些特殊的情况下,可能需要让局域网内的SQL Server数据和云端的Windows Azure数据库保持数据一致,SQL Azure的Data Sync功能能方便的让您本地的SQL Server数据库服务器与云端的SQL Azure数据库进行同步。它提供单向和双向数据同步,从而让数据可以轻松地在 SQL Azure 数据库和内部部署 SQL Server 数据库之间以及在同一数据中心或不同数据中心中的多个 SQL Azure 数据库之间进行共享。     使用SQL Azure Database的好处是什么?   (1)降低了总体拥有成本(TCO)   因为SQL Azure Database是云端的关系型数据库,您无需安装硬件、操作系统和数据库软件等过程,所以不需要IT人员来管理数据库,也不会产生License等费用;并且SQL Azure Database的费用是按创建个数和数据库大小来进行收费的,您在不需要的情况下也可以删除数据库,这样就不会产生任何费用。   (2)提高了可用性   因为SQL Azure Database支持三重备份,所以SQL Azure有99.9%的SLA保障。   (3)多租户   对于独立软件研发商(ISV)来说,他们可以在构建一套Web Site的情况下,使用SQL Azure。把用户的数据和配置放在相同(不同)的数据库(数据表)中进行隔离,那就可以让多个用户(租户)使用同一套系统,而且该租户只能看到自己的数据,不能看到其他租户的数据(也可以通过加密的方式,即使其他租户看到该数据也无法解析)。     在使用SQL Azure Database后开发模式有哪些改变?   本文转自Lei Zhang博客园博客,原文链接:http://www.cnblogs.com/threestone/p/3833397.html,如需转载请自行联系原作者
文章
SQL  ·  存储  ·  数据库  ·  数据中心  ·  Windows  ·  Linux  ·  前端开发  ·  云计算  ·  中间件  ·  PHP
2017-10-11
SEO培训: 《搜索引擎优化知识完全手册》
(SEM:Search Engine Marketing)在网络营销中的举足轻重的作用,决定了搜索引擎优化(SEO:Search Engine Optimazation)在网络营销实战中的重要意义。一个 商业网站以其核心关键词在主流搜索引擎中获得自然排名优先,在今天竞争异常激烈、信息过度膨胀的商业社会,有着非比寻常的价值。因此,国内外网络营销人士都自发展开对以Google 为代表的主流搜索引擎排名规则的研究,并衍生出一个风风火火的搜索引擎优化服务领域,在国内国外都有着广阔的市场。  真正的 SEO 是通过采用易于搜索引擎索引的合理手段,使网站对用户和搜索引擎更友好(Search Engine Friendly),从而更容易被搜索引擎收录及优先排序。搜索引擎优化是一种搜索引擎营销指导思想,而不仅仅是对google 的排名。搜索引擎优化工作贯穿网站策划、建设、维护全过程的每个细节,值得网站设计、开发和推广的每个参与人员了解其职责对于 SEO 效果的意义。  本书中介绍的相关内容理解了搜索引擎优化的真正含义和操作方法,利用规范的方法改善网站在 google 搜索结果中的排名同样是有效的。  如果您从事搜索引擎优化工作或者对此有所关注,对google于2005年3月26日对垃圾SEO 的大规模清洗行动一定不会没有感受吧?本书希望告诉您一个基本事实:成为 google 排名 高手不需要歪门邪道一样可以做到,而且效果更持久!如果您用规范的方法提供搜索引擎优化服务,无论您个人还是您的客户,才会感觉更踏实。   第一部分:域名和主机对 SEO 的影响  域名与主机是网站的基础,商业网站选择域名与主机尤其应注重形象和质量,为网络营销开  展打好坚实基础。同时,选择好域名与主机也是搜索引擎优化开始的第一步。                      域名选择与 SEO  域名与 IP:  每一个网站的域名对应一个 IP 地址,IP 地址是在网络上分配给每台计算机或网络设备的数字标识。域名必须经过域名服务器(DNS)进行解析,转换成数字 IP,才能让计算机理解辨认,如:219.136.248.149   大部分中小企业网站都存放在由一台服务器划分出来的若干虚拟主机上,由多个网站共享一  台服务器和 IP 地址,一些WEB 服务器中有成百上千个域名共享一个 IP 地址的情况。这样对站长来说成本较低,但对网站的搜索引擎排名带来以下潜在风险:   1、共享主机的其他网站如果被搜索引擎惩罚,将或多或少波及你的网站。对此,AltaVista  有如下忠告:“如果同一 IP 下有一个网站作弊,那么我们的搜索引擎会对该 IP 下的所有网站进行惩罚”;不过幸运的是,大部分搜索引擎不会如此武断,如 Google,一般是不会进行这种连带性惩罚的。  2、如果搜索引擎对有些 Spammer 服务器进行了惩罚,其 IP 被认为是 Spam,则连带该 IP 下的所有网站都会受到牵连,使这些网站的排名下降或在搜索引擎中被清除。   工具推荐:  查域名 IP:http://www.123cha.com/ip   IP 反查:http://www.whois.sc/members/reverse-ip.html (查看某 IP 地址下共享哪些域名。免费注册) 二级域名(次域名):  二级域名形式如:yourname.site.com,而不是www.yourname.com。拥有自己的独立域名是  网站对搜索引擎友好的基础。目前有很多网站提供免费空间,如博客(Blog)免费空间, 企  业免费空间, 免费自助建站,电子商务平台等,通常为用户分配一个二级域名,或页面存放  于网站的某一路径下。这都极不利于搜索引擎重视你的网站,二级域名除了用户访问不方便  以外,还主要有以下弊端:   1.如果你所使用二级域名的主域名受到惩罚,那么你的网站也会受到牵连;  2.很多搜索引擎会规定每个域名下的收录数(如:www.seochat.org、english.seochat.org  与 bbs.seochat.org),如果 www.seochat.org 这一域名的收录数上限是 30,而你的网站是  第 31 个,则你的网站被搜索引擎收录的机会就会少至又少了;  3.当域名供应商停止营业,那么你辛苦经营的网站也随着你域名的失去而付诸东流;               4.网站流量排名的时候,你所有的流量都会归功于所依托的顶级域名。  最好为自己的二级域名网站注册一个独立域名,然后做域名转发(免费),目前很多拍卖网  的店铺都适合采用此种方法,对顾客访问和网站管理很有用。   域名中的字符:  取域名的原则除了方便用户访问之外,对搜索引擎而言,涉及到域名中是否包含关键词的问  题。英文网页内容的网站如果在域名中含有关键字,或以复合关键字作域名,都应该用短横  线隔开。如:www.made-in-china.com 而不是 www.madeinchina.com。这是因为搜索引擎通  常会把分隔符“-”当作一个空格来看待,因而能够识别出你的关键词,为网站排名加分(尽  管影响不是很大)。短横线隔开后的关键词组还可以获得更多的词组搜索结果,如  www.madeinchina.com 被认为只有一个词 madeinchina,而 made-in-china 则被看作正常的  made in China 词组。  有些搜索引擎目录对网站在分类目录中的排名顺序是根据域名或网站 title 名称的数字顺  序或字母顺序甚至中文笔画,总体上数字又比字母靠前。Yahoo!中国称,“在同一类目中,  网站是按照拼音顺序来排列的”。Google 则根据其独创的“网页级别”技术“分辨出常用的  重要网站,排放在目录的前面以提升网页搜索的效率”(Google 语)。   此外,域名的后缀选择也有一定讲究。有一种观点认为:在同等情况下,代表非商业性网站  的后缀.org 和.net 有着比.com 更高的排名优势;对中文网站来说,表示中国域的.cn  和.com.cn 又比无地区性的.com 有一定优势。   附 : ICANN   授 权 的 中 国 顶 级 域 名 注 册 商 及 其 授 权 域 名 注 册 范 围  http://www.wm23.com/resource/R02/domain_2004.htm    工具推荐:   www.whois.sc 查询在核心字符下尚可注册的域名                      主机选择与 SEO  主机服务商选择:  主机对网站的搜索引擎排名影响很大。在寻找主机提供商的时候,千万不要只考虑价格因素。  如果你多次向 Google 提交网站,但 Google 却一直没有对其进行索引,则有可能是网站所在的服务器出了问题。因此选择服务器时要特别注意以下几点:   1、避免使用免费主机:由于免费主机里面经常会出现 Spammers、镜像网站、桥页等“搜索引擎垃圾”,很多搜索引擎都不愿意索引免费主机上的网站;同时搜索引擎目录如 Yahoo 也很难收录来自免费主机的商业站点。此外,免费主机的服务很难保证,常常服务器超载,速度奇慢,宕机频繁,甚至关闭服务,这都会直接影响网站排名。  2、选择有信誉的主机提供商:搜索引擎的索引程序定期或不定期地来访问收录的网站。对  经常更新的网站,Google的 Googlebot 漫游器——俗称“蜘蛛”,一般每天都会小幅度地“爬” 一下,一个月进行一次大的索引。如果蜘蛛在索引时出现网页打不开或下载速度缓慢,则放 弃索引。所以你的网站在任何时候都要正常工作,以博取蜘蛛的欢心。这就要求网站存放的 主机系统提供快速、稳定、安全的服务,最好有 24 小时客服支持和维护,保证你的网站快速、可靠、稳定地运行。   主机转移:  如果你想转移网站的主机服务,要在取消原来的服务提供商之前,先找好新的供应商。先在  新的服务商处开个帐号,确保所有的文件都正确无误地传到新服务器上。网站在新服务器上  运行无碍后再联系你的原供应商,告知对方将终止合作,但确保他们不会马上关你的网站。  再联系你的域名注册商(可能是原主机提供商),变更域名服务器(DNS)。域名服务器的功能就是把你的域名解析成计算机能够识别的 IP 地址。把旧的域名服务器改成新的,这个过程到生效时间大概 24-48 小时之内,少数情况下可能要 72 小时。这期间,如果一个搜索引擎刚好来抓你的网页,要么抓到旧的 IP地址上的网站,要么抓到新的域名解析生效后的网站,总之都不会出现网站打不开的空档。   第二部分:搜索引擎优化的核心:关键字策略   根据潜在客户或目标用户在搜索引擎中找到你的网站时输入的语句,产生了关键字  (Keywords)的概念,这不仅是搜索引擎优化的核心,也是整个搜索引擎营销都必须围绕的核心。                       关键字的选择   首先确定你的核心关键字,再围绕核心关键字进行排列组合产生关键词组或短句。对企业、  商家而言,核心关键字就是他们的经营范围,如产品/服务名称、行业定位,以及企业名称  或品牌名称等。总结起来,选择关键字有以下技巧:  1、站在客户的角度考虑  潜在客户在搜索你的产品时将使用什么关键词?这可以从众多资源中获得反馈,包括从你的  客户、供应商、品牌经理和销售人员那里获知其想法。  2、将关键词扩展成一系列词组/短语  毋用单一词汇,而是在单一词汇基础上进行扩展,如:营销→网络营销→网络营销管理。英  文关键词可以采用搜索引擎 overture 的著名工具 Keyword Suggestion Tool 对这些关键词  组进行检测,可查看你的关键词在过去 24 小时内被搜索的频率,最好的关键词是那些没有  被广泛滥用而又很多人搜索的词。中文工具可以通过百度的“相关搜索”和 Google 提供的  KeywordSandbox 工具进行关键词匹配和扩展。   工具推荐:  Google AdWords 关键字工具:查询特定关键词的常见查询及扩展匹配  https://adwords.google.com/select/KeywordSandbox   百度关键字工具:查询特定关键词的常见查询、扩展匹配及查询热度  http://www2.baidu.com/inquire/dsquery.php   3、进行多重排列组合  改变短语中的词序以创建不同的词语组合。使用不常用的组合。组合成一个问句。包含同义  词、替换词、比喻词和常见错拼词。包含所卖产品的商标名和品名。使用其它限定词来创建  更多的两字组合,三字、四字组合。   4、 毋用意义太泛的关键字。  如果你从事包装机械制造,则选择“机械”作为你的核心关键字就无益于吸引到目标客户。  实际上,为了准确找到需要的信息,搜索用户倾向使用具体词汇及组合寻找信息(尤其是二  词组合),而不是使用那些大而泛的概念。此外,使用意义太广的关键字,也意味着你的网  站要跟更多的网站竞争排名,难以胜出。   5、用自己的品牌做关键词  如果是知名企业,则别忘了在关键词中使用你的公司名或产品品牌名称。   6、使用地理位置  地理位置对于服务于地方性的企业尤其重要。如果你的业务范围以本地为主,则在关键词组  合中加上地区名称如“深圳网站建设”。   7、回顾竞争者使用的关键词  查寻竞争者的关键词可让你想到一些你可能漏掉的词组。但不要照抄任何人的关键词,因为  你并不清楚他们如何要使用这些关键词——你得自己想关键词。寻找别人的关键词只是对你  已经选好的关键词进行补充。   8、不用与自己无关的关键字  总是会有人将热门的词汇列入自己的 META 关键字中——尽管这个热门关键字跟自己网站内容毫不相干。甚至有人把竞争对手的品牌也加入到自己的关键字中,这不仅侵权,可能被起诉(国外多起类似案例),并且由于这些所谓“热门”词汇并未在网站内容中出现,因此对排名并无实质帮助,过多的虚假关键词还可能受到处罚降低排名。   9、控制关键词数量  一页中的关键词最多不要超过 3 个为佳,然后所有内容都针对这几个核心关键词展开,才能保证关键词密度合理。搜索引擎也会认为该页主题明确。如果确实有大量关键词需要呈现,  可以分散写在其它页面并针对性优化,让这些页面也具有“门页(entry)”的效果。这也是  为什么首页和内页的关键词往往要有所区分的原因。最典型的情况是拥有不同的产品和服务  的情况下,对每个产品进行单网页优化,而不是罗列在一个首页上。   附:查看竞争对手关键词的方法:在浏览器中打开目标网页→点击“查看”→点击“源文件”  →“<meta name="keywords" content ”后面的文字即该网站关键词                       关键字密度   在确定了自己的关键字之后,需要在网页文本中适当出现这些关键字。关键字在网页中  出现的频次,即关键字密度 (Keyword Density) ,就是在一个页面中,占所有该页面  中总的文字的比例,该指标对搜索引擎的优化起到重要作用。关键字密度一般在 1% 到  7% 较为合适,超过这一标准就有过高或过低之嫌。   切记避免进行关键字堆砌,即一页中关键字的出现不是根据内容的需要而安排,而是为  了讨好搜索引擎人为堆积关键字(Stuffing)。这已经被搜索引擎归入恶意行为  (Spamming), 有遭到惩罚的危险。   工具推荐:  关键字密度检查(英文):频繁出现的关键词及其密度  www.seotoolkit.co.uk/keyword_density_analyser.asp (适用于英文关键词)                        关键字分布  关键字的分布原则堪称:无所不在,有所侧重。  1、网页代码中的 Title,META 标签(关键字 keywords 和描述 description)  如:e 书时空 www.eshunet.com 的代码:              <title> e书时空——电子书公益下载中心</title>   <meta http-equiv="title" content=" e书时空——电子书公益下载中心">   <meta name="classification" content="arts and literature">   <meta name="description" content="电子书下载,公益,电子图书下载,电子书籍,任你一  览无余。">   <meta name="keywords" content="电子书,电子图书,公益,电子书籍,书库,图书,书,书籍,  电子书下载,免费电子书">   2、网页正文最吸引注意力的地方  正文内容必须适当出现关键词,并且“有所侧重”,意指用户阅读习惯形成的阅读优先位置  ——从上到下,从左至右——成为关键词重点分布位置,包括:页面靠顶部、左侧、标题、  正文前 200 字以内。在这些地方出现关键词对排名更有帮助。如 SEO 学习网站  www.seochat.org 的站长独辟蹊径,把一段富含关键词的文本网站介绍置于网站最顶部(这  个地方通常被安排用来放 banner 广告的)。这样做的好处是让用户和蜘蛛都以最快速度了解该网站内容,并且以蜘蛛重视的<b>黑体显示,对其排名作用很大。代码显示如下:  <b><font color=#999999>本站是一个非商业性的网站,旨在为广大的搜索引擎研究者提供  一个学习、交流场所。在这里你可以找到很多有关于搜索引擎优化资料 (seo资料,文章)、  网站优化资料。这些资料可以帮助你将你的网站进行适当的优化以迎合多个搜索引擎的搜索  规则,从而得到较好的排名。</font></b>   3、超链接文本(锚文本)  除了在导航、网站地图、锚文本中有意识使用关键字,还可以人为增加超链接文本。如一个  童装厂商网站可以通过加上以下行业资源:  中国童装网 织里童装网…… 等含有“童装”文字的链接来达到增加超链接文本的目的。这也值得网站在添加友情链接时做参考,即链接对象中最好包含有你的关键字或相关语义的网站。   4、Header 标签  即正文标题<H1><H1/>中的文字。搜索引擎比较重视标题行中的文字。用<b></b>加粗的文字往往也是关键词出现的地方。   5、图片 Alt 属性  搜索引擎不能抓取图片,因此网页制作时在图片属性 Alt 中加入关键字是对搜索引擎友好的好办法,它会认为该图片内容与你的关键字一致,从而有利于排名。  英文网页内容的网站在进行域名选择和网页文件夹命名时,也可以考虑包含关键字(对关键  词组则要用短横线隔开),如 www.made-in-china.com。不过对Google 排名作用非常微小。   第三部分:对搜索引擎友好的网页设计制作 一般的网页设计都由网页设计师完成。设计师设计网站往往仅从美观、创意和易用的角度考  虑,这对于一个期望获得搜索引擎排名优秀的商业网站来说,已经远远不够了,网站策划人  员至少应该为设计师递交一份需求备忘录,提醒在设计中需要配合和注意的环节。                       目录结构和 URL   URL 是统一资源定位,即每个网页的网址、路径。网站文件的目录结构直接体现于 URL。清晰简短的目录结构和规范的命名不仅有利于用户体验和网址传播,更是搜索引擎友好的体 现。   目录层次:  对于一个小型网站来说,一般只有一层子目录,如下:  http://www.yoursite.com/dir1/page.htm  www.yoursite.com 是域名,dir1 是一级目录名,page 是文件名。对搜索引擎而言,这种单  一的目录结构最为理想,即扁平结构(Flat)。  而对规模大一些的网站,往往需要二到三层子目录。象这样:  http://www.yoursite.com/dir1/dir2/dir3/page.htm  搜索引擎还是会去抓取二到三层子目录下的文件,但最好不要超过 3层,如果超过 4 层,象以下这个页面,搜索引擎就很难去搜索它了:  http://www.yoursite.com/dir1/dir2/dir3/dir4/page.htm  当然,以下情况下,即使深入第四层甚至更深层次的页面,也同样能被搜索到:  1、如果该页提供了重要内容,有大量来自其它网站的外部链接(Inbound Links);  2、如果在首页上增加一个该页的链接,可以通过首页直接到达,搜索 Spider 还是可以轻易地找到它;  3、如果有其它网站在顶级页面上链接了该页,其效果就好似你在自己的首页上做了该链接。  此外,图形、脚本、CGI-BIN和 CSS样式表则各自建立专门的目录收入其中,一般不放在根目录下。   目录和文件命名:  根据关键字无所不在的原则,可以在目录名称和文件名称中使用到关键词。但如果是关键词  组,则需要用分隔符分开。我们常用连字符“-”和下划线“_”进行分隔,URL 中还经常出现空格码“%20”。因此,如果以“中国制造”作文件名,就可能出现以下三种分隔形式:    made-in-china.htm    made_in_china.htm     made%20in%20china.htm  但事实上,至少在目前 Google 并不认同“_”为分隔符。对 Google 来说, made-in-china  和 made%20in%20china 都等于 made in china,但made_in_china 就被读成了 madeinchina,  连在一起之后,关键词就失去了意义。  因此,目录和文件名称如果有关键词组,要用连字符“-”而不是下划线“_”进行分隔。  URL 应该越短越好。有人为了单纯增加关键字而额外建多一个带有关键字的子目录,改变目录结构。由于 URL 中含有关键字本身对排名提高帮助并不大,因而这种做法多此一举,也是搜索引擎反感的。   绝对 URL 和相对 URL:   绝 对 URL : 即 网 页 路 径 使 用 包 含 顶 级 域 名 在 内 的 完 整 的 URL 。 如 :www.yoursite.com/page1/index.html 是一个绝对路径,其中/page1/index.html 则为相对  路径,由浏览器自动在该链接前加上www.yoursite.com。  总体上,Google 在排名时并不在意 URL 使用的是相对路径还是绝对路径。   动态 URL:  目前很多网站都有数据库驱动生成的 URL,即动态 URL,往往表现为在 URL 中出现“?”、“=”、  “%”,以及“&”、“$”等字符。动态 URL 极不利于搜索引擎抓取网页,严重影响网站排名,通常是通过技术解决方案将动态 URL 转化成静态的 URL 形式,如:  将 http://www.domain.com/messages.php?id=2&type=5  转化为 http://www.domain.com/messages/2/5/  下文将会专门提到动态 URL 的解决方案。                         导航结构   网站导航是对引导用户访问网站的的栏目、菜单、在线帮助、布局结构等形式的统称。其主  要功能在于引导用户方便地访问网站内容,是评价网站专业度、可用度的重要指标。同时对  搜索引擎也产生诸多提示作用。概括地讲,网站在导航方面应注意以下几点:   1、 主导航醒目清晰  主导航一般体现为一级目录,通过它们用户和蜘蛛程序都可以层层深入访问到网站所有重要  内容。因此主栏目必须在网站首页第一屏的醒目位置体现,并最好采用文本链接而不是图片。   2、 “面包屑型(Breadcrumbs)”路径  所谓“面包屑”是比喻用户通过主导航到目标网页的访问过程中的路径提示,使用户了解所  处网站中的位置而不至于迷失“方向”,并方便回到上级页面和起点。路径中的每个栏目最  好添加链接。如下:时代营销:首页> 网络营销动态> 特别报道   即使没有详细的路径来源,也至少应该在每个子页面提示回首页的链接,包括页面的 LOGO  作链接。   3、首页突出重要内容  除了主栏目,还应该将次级目录中的重要内容以链接的方式在首页或其它子页中多次呈现,  以突出重点。搜索引擎会对这种一站内多次出现的链接给予充分重视,对网页级别  (PageRank)提高有很大帮助,这也是每个网站首页的网页级别一般高于其它页面级别的重要因素,因为每个子页都对首页进行了链接。   4、使用网站地图 网站地图(Site Map)是辅助导航的手段,最初是为用户设计,以方便用户快捷到达目标页。  良好的网站地图设计常常以网站拓扑结构体现复杂的目录关系,具有静态、直观、扁平、简  单的特点。多采用文本链接,不用或少用修饰性图片,以加快页面加载速度。以上特点符合  搜索引擎友好的要求,因此网站地图在 SEO 中也有重要的意义。尤其对于那些采用图片导航和动态技术生成的网页,通过在网站地图中进行文本链接,可在一定程度上弥补蜘蛛程序无法识别图片和动态网页造成的页面不可见的风险。 需要注意,网站地图也要突出重点,尽量给出主干性内容及链接,而不是所有细枝末节。一  页内不适宜放太多链接。Google 明确提出“如果网站地图上的链接超过大约 100 个,则最  好将网站地图拆成多个网页”。   工具推荐:  Xenu:http://home.snafu.de/tilman/xenulink.html 生成网站地图                         框架结构   框架结构,即帧结构(Frame)网页表现为一个页面内的某一块保持固定,其它部分信息可  以通过滚动条上下或左右移动显示,如左边菜单固定,正文信息可移动,或者顶部导航和  LOGO 部分保持固定,其它部分上下或左右移动。我们的邮箱通常都采用框架建构。框架型网页的另一个表现是,深层页面的域名通常不会在 URL 中体现出来,即使进入深层子页面,浏览器显示出来的 URL 仍然是主页的 URL。  框架型网站的优越性体现在页面的整体一致性和更新方便上。尤其对于那些大型网站而言,  框架结构的使用可以使网站的维护变得相对容易。但框架对搜索引擎来说是一个很大的问  题,这是由于大多数搜索引擎都无法识别框架,也没有什么兴趣去抓取框架中的内容。此外,  某些浏览器也不支持框架页面。   如果网页已经使用了框架,或出于某种原因一定要使用框架结构,则必须在代码中使用  “Noframes”标签进行优化,把 Noframe 标签看做是一个普通文本内容的主页。在  <Noframe></Noframe>区域中包含指向 frame 页的链接以及带有关键词的描述文本,同时在  框架以外的区域也出现关键词文本。这样,搜索引擎才能够正确索引到框架内的信息。  还有一个办法是采用 iframe 即内联框架(Inner Frame)技术来避免 Frame带来的不便。所  谓 iframe 也是框架的一种形式,它是相当于在主浏览器窗口中内嵌一个子窗口,内容自动  打开。iframe 可以嵌在网页中的任意部分,也可以随意定义其大小,其代码显示为:  <iframe src=xx width=x height=x scrolling=xx frameborder=x></iframe>”  对搜索引擎来说,iframe 中的文字是可见的,也可以跟踪到其中链接指向的页面,不过与 用户所见不同的是,搜索引擎将 iframe 内容看成单独的一个页面内容,与被内嵌的页面无  关。                         图像优化   一般而言,搜索引擎只识读文本内容,对图像是不可见的。同时,图像文件直接延缓页面加  载时间,如果超过 20 秒网站还不能加载,用户和搜索引擎极有可能离开你的网站。因此,  除非你的网站内容是图片为主,比如游戏站点或者图片至关重要,否则尽量避免使用大图片,  更不要采用纯图像制作网页(SPLASH PAGE)。  网站图片优化的核心有两点:增加搜索引擎可见的文本描述,以及在保持图像质量的情况下  尽量压缩图像的文件大小。   Alt 属性:  每个图像<IMG>标签中都有 ALT 属性,搜索引擎会读取该属性以了解图像的信息。因此,最好在所有插图的 ALT 属性中都有文字描述,并带上该页关键字在其中。   如:www.marketingman.net/wm37.htm 的书籍广告图片代码为:  <img src="images/webmarketing2_cover_200.jpg" width="200" height="259" alt="《网络营销基础与实践》第 2 版(冯英健著,2004)" border="0">   文本说明:  除了 ALT 属性文字,还可以考虑以下方法直接优化图像,使之被搜索到:  1、在图片上方或下方加上包含关键词的描述文本;  2、在代码中增加一个包含关键词段的 heading 标题标签,然后在图片下方增加文字描述。  3、在图片下方或旁边增加如“更多某某”链接,包含关键词。  4、创建一些既吸引用户又吸引搜索引擎的文本内页,先把流量吸引到这些页面,再提供文  本链接指向你的图片页面。   总体上,网页应尽量减少装饰性图片以及大图片。而 Alt属性中的文字对搜索引擎来说,其  重要性比正文内容的文字要低。   Gif 和 JPGE 图像优化:      Alt 属性和文本说明都只是对图像之外的文本环境进行优化,下面简单谈谈对图片本身的优  化处理。对图片文件优化的目的是在尽量不影响图像画面效果的情况下,将其文件大小降到  最低,以加快页面整体下载速度。   网页图片格式主要有 GIF 和 JPGE 两种形式。一般来讲,GIF 适用于线图和企业标识;JPEG  适宜照片元素的格式。主要通过减少 GIF 颜色数量、缩小图片尺寸和降低分辩率来缩小文件,  也可以采用层叠样式表达到优化的目的。PhotoShop 的版本越高越适用于网络图形。此外,  将大图片切割成若干小图片于不同的表格区间内进行拼接,也可以相对加快下载时间。   工具推荐(英文):www.xat.com/internet_technology/download.html (图片优化工具)   FLASH 优化:  由于 FLASH优美的视觉效果和广阔的创意空间,FLASH 技术在网页设计和网络广告中的应用  非常广泛,很多网站首页甚至全部用 FLASH 设计。但 FLASH 网页有一个非常致命的问题,即大部分搜索引擎无法识别 FLASH 中的信息。Google 也只能检索到部分 Flash 文件中的内嵌链接。以下列举一个制造机电设备的企业网站首页的代码,用 FLASH制作,请注意是否可以看见有意义的文本:  <html>  <head>  <title>Welcome</title>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  <style type="text/css">  <!--  body {     margin-left: 0px;     margin-top: 0px;     margin-right: 0px;     margin-bottom: 0px;  }  -->  </style>  <link rel="stylesheet" href="style.txt" type="text/css">  </head>  <body bgcolor="#FFFFFF" text="#000000">  <table border="0" width="100%" height="100%" cellspacing="0" cellpadding="0">   <tr>    <td width="100%" background="images/bg.jpg"><div align="center">     <center>      <table width="777" border="0" align="center" cellpadding="0" cellspacing="0">       <tr>        <td><object             classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29  ,0" width="777" height="455">         <param name="movie" value="index.swf">         <param name="quality" value="high">         <embed               src="index.swf"              quality="high"  pluginspage="http://www.macromedia.com/go/getflashplayer"  type="application/x-shockwave-flash" width="777" height="455"></embed>        </object></td>       </tr>      </table>      <br>      <span class="style2"> 本 页 使 用 FLASH 技 术 , 如 果 无 法 正 常 浏 览 请 下 载 并  <a  href="http://www.macromedia.com/shockwave/download/triggerpages/flash.html">安装插件 </a>或  <a href="asp-bin/big5/?page=1">直接进入 </a><br>  if you are not able to  view the animated  <a  href="http://www.macromedia.com/shockwave/download/triggerpages/flash.html">pleass       install  plug-in </a> first <br><!--网站计数器开始-->  <Script language="JavaScript" src="counter/count.asp"></Script>  <!--网站计数器结束-->      </span>     </center>     </div>  </td>   </tr>  </table>  </body>  </html>  同时再采用模拟蜘蛛程序的工具,测试到搜索引擎对该页抓取结果如下:  Spidered Text (蜘蛛可识别的文本):  Welcome 本页使用 FLASH 技术,如果无法正常浏览请下载并 安装插件 或 直接进入 if you are not able to view the animated pleass install plug-in first   Spidered Links(蜘蛛可识别的链接):  http://www.macromedia.com/shockwave/download/triggerpages/flash.html  asp-bin/big5/?page=1 (下载 FLASH 插件的链接地址)  http://www.macromedia.com/shockwave/download/triggerpages/flash.html   因此可以得出结论是:  蜘蛛程序没有在这个企业网站首页获得任何有意义的文本内容,也没有获得该 Flash 首页中进入“中文版”“英文版”关键性内容的链接。   FLASH 优化可以从以下三个方面来考虑:   1、做一个辅助 HTML 版本:  保留原有 FLASH 版本的同时,还可以设计一个 HTML 格式的版本,这样既可以保持动态美观效果,也可以让搜索引擎通过 HTML 版本的网页来发现网站。   2、将 Flash 内嵌 HTML 文件:  还可以通过改变网页结构进行弥补,即不要将整个网页都设计成 Flash 动画,而是将 Flash  内容嵌入到 HTML 文件中,这样对于用户浏览并不会削弱视觉效果,搜索引擎也可以从 HTML代码中发现一些必要的信息,尤其是进入内容页面的链接。  即使首页全部动用了 FLASH,也应该将进入内页的关键性按钮/链接置于 FLASH 文件之外,以独立纯文本链接的方式呈现。上文案例将“中文版”链接置于 FLASH 文件中,使得蜘蛛程序一无所获,无法抓取到内页信息。   3、 付费登录搜索引擎:  如果 FLASH网站错过了被免费的技术型搜索引擎自动检索的机会,或者搜索结果排名效果不太理想,可以通过付费登录或做搜索引擎关键词广告,同样被用户搜索到。  总体上,商业网站应尽量少用 FLASH,站点间进行广告交换时也要避免采用 FLASH广告为上策。                        表格使用   表格是网页最重要的排版方式。如果某个网页采用了大段的长篇文本,除了可以将一页文本  分成多面,还可以考虑将文本置入不同表格中,这样不仅管理方便,也使得该页加载时每个  表格内容依次加载,这样访问者就可以一边看已下载内容一边等待剩余部分加载,而不是等  待很久之后才一齐加载出来。  表格之内套嵌太多表格也不利于页面加载,因浏览器是先加载完大表格之后再加载内嵌的小  表格,因此内嵌表格会最终降低整页加载速度。                         网页减肥   代码设置不妥不仅延长网页加载时间,也严重影响蜘蛛程序对网页内容的抓取。通过对网页  代码进行清减(俗称“网页减肥”),去掉臃肿杂乱的代码,减小网页文件大小,能够加快网  页加载速度,让蜘蛛快速索引到重要内容。正常情况下一个页面的文件大小在 15K 左右,最好不要超过 50K。网页减肥重点涉及以下几个要点:   CSS 样式  网页制作应通过 CSS(层叠样式表单)来统一定制字体风格,以使代码标准化,避免大量的字体和格式化标签如< h1 >< /h1 >、< font size ×× color ×× >< /font >充斥页面。通 过 css 可以控制任何 HTML 标签的风格。例如<td>,<p>,<body>,<table>,<tr>,<th>等。只要  在HTML的<head>区内的<style type="text/css">和</style>之间指定对应标签的风格如字  体,颜色,大小即可,例如:   <style type="text/css">  <!--  h2 { font-family: "宋体"; font-size: 12pt; color: #333366; background-color:  #FFCCCC; font-weight: bold}  h1 { font-family: "Arial"; font-size: 12pt; color: #993300}  -->  </style>  仅通过以上设置,就把文字的字体、字号、颜色、背景色等统一起来,不用对每段文字单独  进行格式定义,从而减少大量重复性标签。注意把所有 css 文件单独存放在命名为 css 的外部文件中。  通过设置 CSS 样式,也可以提升导航文本的美观度,达到与图片导航同样优美观的效果,这点尤其提醒网页设计师注意,没有必要将导航条用图片呈现。   JavaScript:  正常情况下,网页尽量以<HTML>作为代码的开始端。但采用 JavaScript 技术的网页往往在页面一开始就堆积大量 JAVA 代码,以至 META 及关键字迟迟不能出现,被推至页面底部,对搜索引擎很不友好。有两种方法可以使之得以改善:  1、 将脚本移至页面底部  大部分的 JAVA 代码都可以移到页面结束标签之上,而不影响网站功能。这样就能一开始突出关键词,并加快页面加载时间。   2、 将 JAVA 脚本置入一个.js 扩展名的文件。  包含你的 JavaScript 的.js 文件通常在网站访问者的浏览器中被缓存下来,使得下次访问  速度加快,也使得网站修改和维护起来更加方便。例:一段 JAVA 代码正常情况下显示如下:  <script language=JavaScript>   <!--   此处是你的代码,将它们拷贝到一个.js 文件   //-->   </script>   忽略开始及结束标签,将中间的代码单独保存为扩展名为.js 的文件,如文件名为  “mycode.js”的一个文件,然后将此文件上传到服务器上与该页同样的目录下。最后将上  文列举的完整的 JavaScript 置换为简单的一行:  <script language=JavaScript src=mycode.js></script>   这样,一个“mycode.js”文件就将大段冗长复杂的 JAVA 代码置换了。 工具推荐:  网页减肥工具:http://202.99.237.33/softdown/softdoc/net_opt.htm 去除网页中多余  代码,减小网页。      第四部分:SEO 指导下的技术支持   对搜索引擎最友好(Search Engine Friendly)的网页是静态网页,但大部分内容丰富或互  动型网站都不可避免采用到相关技术语言来实现内容管理和交互功能。SEO 思想指导下的技术支持,主要是对特定代码的优化和对动态网页进行静态处理的措施。                     Title 和 Meta 标签   以.html 或.htm 为扩展名的 HTML文档称为静态网页。Meta 称为元标志,用于网页的<head  >与</head>中。Meta 标签的用处很多,目前几乎所有的搜索引擎机器人都通过自动查找  Meta 值来给网页分类,是籍此判断网页内容的基础。其中最重要的是 description(网站描  述)和 keywords(网站关键词)。另外一个基本的属性是 Title 标签,提示搜索引擎关于本  页的主题。Meta 和 Title 的形式在 html 语言中体现为:  <head>  <title>title 标题</title>  <meta name="keywords" content="网页描述">  <meta name="description" content="关键词">  </head>  尽管Meta本身不足以解决排名问题,但对Meta标签的书写仍然是搜索引擎优化的基础工作。  清晰准确的 Meta 文字与正文内容的关键词相呼应,是排名加分的重要条件之一。  标题(Title):  网页优化可以说是从 Title 开始的。在搜索结果中,每个抓取内容的第一行显示的文字就是  该页的 Title,同样在浏览器中打开一个页面,地址栏上方显示的也是该页的 Title。因此,  Title 可谓一个页面的核心。对 Title 的书写要注意以下问题:  1、title 简短精炼,高度概括,含有关键词,而不是只有一个公司名。但关键词不宜过多,  不要超过 3 个词组。企业网站的 title 通常以公司名+关键词为内容  2、前几个词对搜索引擎最重要,因此关键词位置尽量靠前。  3、最好将 title 组织成符合语法结构和阅读习惯的短句或短语,避免无意义的词组罗列式  title   关键词(Keywords):  Keywords 提示搜索引擎:本网站内容围绕这些词汇展开。因此 keywords 书写的关键是每个词都能在内容中找到相应的匹配才有利于排名。Meta 中的关键词书写技巧见前文的“关键词策略”。   描述(Description):  描述部分用简短的句子告诉搜索引擎和访问者关于本网页的主要内容。用该网站的核心关键  词搜索后得到的搜索结果中,描述往往显示为标题后的几行描述文字。Description 一般被  认为重要性在 title 和 keywords 之后。描述的书写要注意以下问题:   1、 描述中出现关键词,与正文内容相关  2、 同样遵循简短原则,字符数含空格在内不要超过 200 个字符  3、 补充在 title 和 keywords 中未能充分表述的说明  其它 Meta 标签:  为了限制搜索引擎对内容的抓取,可以采用以下几个Robots Meta 标签:  <meta name="Robots" content="all|none|index|noindex|follow|nofollow">   其中:all:文件将被检索,且页面上的链接可以被查询; none:文件将不被检索,且页面  上的链接不可以被查询;index:文件将被检索;follow:页面上的链接可以被查询;noindex:  文件将不被检索,但页面上的链接可以被查询;nofollow:文件将不被检索,页面上的链接  可以被查询。  但并不是所有的搜索引擎都支持 meta 中的robots 标签,但是所有搜索引擎都支持一个功能更强的 robots.txt 的文本文件来达到上述功能(关于 robots.txt 文件应用的介绍,E 书专 家平文胜曾专门撰文详细解说“robots.txt 和Robots META标签”)。其它常用 meta标签还 有:  <META name author> 网站作者  <META name classification> 网站所属目录类别  <META name copyright> 版权声明  <META name generator> 网站用什么软件做的  首页、重要的内页的 title 和 meta 标签最好分别书写,针对栏目主题体现不同的内容。                    动态网页优化   动态网站是指网站内容的更新和维护是通过一个带有数据库后台的软件,即内容管理系统  (CMS)完成。一般采用 ASP,PHP,Cold Fusion,CGI等程序动态生成页面。动态页面在网络空间中实际并不存在,它们的大部分内容通常来自与网站相连的数据库,只有接到用户的请求,在变量区中输入一个值以后才会生成。动态网页扩展名显示为.asp、.php、cfm 或.cgi, 而不是静态网页的.html或者.htm。其 URL 中通常出现“?”、“=”、“%”,以及“&”、“$”等符号。网站使用动态技术的好处,除了增加网站交互功能,还具有容易维护和更新的优点, 因此为许多大中型网站采用。   但大多数搜索引擎的蜘蛛程序都无法解读符号“?”后的字符。这就意味着动态网页很难被  搜索引擎检索到,因而被用户找到的机会也大为降低。因此,建设网站之前首先要端正思想,  即能够采用静态表现的网页尽量不要用动态实现,重要的网页用静态表现。同时使用技术将  动态网页转化成静态网页形式,使 URL 中不再包含“?”“=”等类似的符号。也可以通过对网站进行一些改动,间接增加动态网页的搜索引擎可见度。即坚持“动静结合,以静制动” 的原则。   不同技术的解决方案:  针对不同程序开发的动态网页有着相应的解决方案。以下是作者 Karen 编译的部分内容:  1、CGI/ Perl  如果你在网站中使用的是 CGI 或者 Perl,可用一个脚本拾取环境变量前的所有字符,再将  URL 中剩余的字符赋值给一个变量。这样,你就可以在 URL 中使用该变量了。  不过,对于那些内置了部分 SSI(Server-Side Include:服务器端嵌入)内容的网页,主要  的搜索引擎都能够提供索引支持。那些以.shtml 为后缀名的网页也被解析成 SSI 文件,相  当于通常的.html 文件。但如果这些网页在其 URL 中使用的是 cgi-bin路径,则仍有可能不被搜索引擎索引。   2、ASP  ASP(Active Server Pages: Web 服务器端动态网页开发技术)被用于基于微软的网络服务器  中。使用 ASP 开发的网页,一般后缀名为.asp。只要避免在 URL 中使用符号“?”,大多数搜索引擎都能够支持用 ASP 开发的动态网页。   3、Cold Fusion  如果你使用的是 Cold Fusion,那么你就需要在你的服务器端重新对其进行配置,使其能够  将一个环境变量中的符号“?”用符号“/”代替,并将替换后的数值传给 URL。这样一来,  最后到达浏览器端的就是一个静态的 URL 页。当搜索引擎对该转换后的文件进行检索时,它不会遭遇“?”,因而可继续对整个动态页的索引,从而使你的动态网页对搜索引擎仍然具有可读性。   4、Apache 服务器:  Apache 是最流行的 HTTP服务器软件之一。它有一个叫做 mod_rewrite 的重写模块,即 URL 重写转向功能。该模块能够使你将包含环境变量的 URL 转换为能够为搜索引擎支持的 URL 类型。对于那些发布后无须多少更新的网页内容如新闻,可采用该重写转向功能。   建立静态入口:  在“静动结合,以静制动”的原则指导下,还可以通过对网站做一些修改,尽可能增加动态  网页的搜索引擎可见度。如将动态网页编入静态主页或网站地图的一个链接中,以静态目录  的方式呈现该动页面。或者为动态页面建立一个专门的静态入口页面(gateway/entry),链  接到动态页面,然后将静态入口页面递交给搜索引擎。   对一些重要的、内容相对固定的页面制作为静态网页,如包含有丰富关键词的网站介绍、用  户帮助,以及含有重要页面链接的网站地图等。网站首页尽量全部采用静态形式,并将重要  动态内容以文本链接方式全部呈现,虽然增加了维护工作量,但从 SEO 的角度看是值得的。  也可以考虑为你的重要动态内容创建静态的镜象网站。   付费登录搜索引擎:  当然,对于整个网站都采用与数据库相连的内容管理系统(CMS)发布的动态网站而言,提高搜索引擎可见度的最直接办法就是进行付费登录,直接提交动态网页到搜索引擎目录,或做关键字广告,保证网站被搜索引擎收录。   搜索引擎对动态网站支持的改进  搜索引擎一直在提高自己对于动态页面的支持。到目前为止,GOOGLE、HOTBOT 和百度等开始尝试抓取动态网站页面(甚至包括 URL 带 "?"的页面)。但这些搜索引擎抓取动态页面时为了避免"搜索机器人陷阱"(spider traps,脚本错误,这种错误会让搜索机器人进行无限循环的抓取,无法退出)",都只抓取从静态页面链接过去的动态页面,而从动态页面链出去的动态页面都不再抓取,即不会对动态页面中的链接进行深入访问。   对于直接使用动态的 URL 地址,请注意:   •文件 URL 中不要有 Session Id,同时不要用 ID 作为参数名称(特别是对于 GOOGLE);  如 :《 网 络 营 销 基 础 与 实 践 》 一 书 , 在 当 当 网 的 介 绍 页 面 URL 地 址 是 :  http://www.dangdang.com/product_detail/product_detail.asp?product_id=493698,该  页就无法被读取。                                  •参数越少越好,尽量不要超过 2 个;   •尽量不要在 URL 中使用参数,这样可以增加动态页面被抓取的深度和数量。   附:Google 向网站管理员提供的信息:www.google.com/webmasters/guidelines.html      百度常见站长问题:http://www.baidu.com/search/guide.html#2   第五部分:搜索引擎优化的重点:链接策略   链接是网站的灵魂。用户通过超级链接获得丰富的网站内容,搜索引擎蜘蛛也是沿着一个网  站的页面链接层层跟踪深入,完成对该网站的信息抓取。对搜索引擎尤其是 Google 来说,  决定一个网站排名的关键,是外部有多少高质量的链接指向这个网站。这就是外部链接或反  向链接,也称导入链接(Inbound links 或backlinks)。而从网站引向其它网站的导出链接  以及网站内部页面间的彼此链接也对排名带来或多或少的影响。                    搜索引擎分类目录   搜索引擎目录(Directory)即搜索引擎的人工分类目录。今天,登录分类目录是网站建成  后非常基础、重要的工作,尤其登录几大主要分类目录,其重要性不在于访问者是否通过目  录链接找到你的网站,而主要在于通过这些目录你的网站获得了重要的、高质量的外部链接,  这对于你的网站提高排名具有举足轻重的作用。   目前,对于中文网站来说,最重要的分类目录有以下几个:开放式目录 ODP,Yahoo!,门户搜索引擎目录搜狐、网易、新浪。可以分为免费登录和付费登录两种情况。无论是免费还是付费,都须通过手工输入登录。   免费登录:  最著名最重要的登录是全球最大的开放式目录库 Open Directory Project:www.dmoz.org。  ODP 的宗旨是:建立网上最全面最权威的目录,以及建立一个被公众认为高质量的资源库。  在这一宗旨下,全球志愿编辑员选择高质量内容的网站核准进入分类目录。   由于 Google等重要搜索引擎都采用 ODP 的数据库,是 Google每月一次深度索引的基础,因此向 ODP 提交网页成为每个网站完成后的首要工作。登录 ODP 目录是免费的,但要接受较为严格的人工审核和较长时间的等待,并且最后可能网站登录不成功,还要经历反复提交的过程。   由于 DMOZ 目录在网站排名中举足轻重的作用,使得越来越多良莠不齐的的网站向 DMOZ 提交或违规提交,而志愿加入的人工编辑队伍中出现以权谋私的现象和素质不高的情况,诸多因素使得现在登陆 DMOZ 非常困难,没有一个网站敢保证被 DMOZ收录。因此,要确保登录成功,唯一的办法是小心谨慎地完全遵守 DMOZ 登录条款。以下是必须遵守的提交注意事项:   1、确保网站内容是原创而非转载、镜象或复制   如果你的网站内容只是一些会员制产品/服务信息及链接,或是大量拷贝其它站点内容,那  么你的网站极有可能被 DMOZ 拒绝。即使对已经收录的站点,一旦发现它们是镜象、复制或非原创,DMOZ 也会将其从目录中剔除。所以务必在网站中加入产品或服务的原创介绍信息。   2、不要采用虚假、作弊和夸张的手段  被搜索机器人反感的做法,同样被目录编辑拒之门外。下文将有专门章节讲到什么是搜索引  擎作弊行为。网站说明中任何虚假、夸张的文字都会遭到拒绝。对违法性内容,也是不会收  录的。   3、确保网站外观的良好性   如果网站内容出现大量拼写错误、死链接或“正在建设中”的字样,或者下载缓慢,都会阻  碍编辑对你的网站的收录。此外,对于来自免费主机的网站,被 DMOZ 收录的机会很少。   4、确保网站中包含具体联系信息   一个 DMOZ 编辑称,如果他在网站中找不到实际联系地址或电话号码,他就会认为这个网站不具备可信度。因此,如果你的网站中只有一个 Email 地址作为联系信息,是极不利于收录成功的。   5、确保网站提交到正确的目录   选择合适的分类目录及子目录是网站提交的核心。很多网站登录失败只是由于提交选择的目  录不正确所致。所以在提交网站之前,必须先浏览整个目录,最好也了解一下竞争对手的网  站都放在哪个目录下。确认之后,才在该目录页面右上角点击“提交网页”。   6、记下提交日期、目录名和编辑邮箱   向 ODP 提交完你的网站后,记下提交的日期及目录。如果你提交的那个目录下有编辑员信息,最好把编辑的名字和邮箱也记下来。这些信息,对于你需要询问提交网站的处理状态或再次提交时,非常有用。   7、不要多次重复提交网站  因为编辑是根据网站的提交日期顺序进行处理的,一个目录下往往有很多网站在队列中等候  审批。从提交成功到最后收录,最快也要 2 周时间,最晚的甚至要等到半年以后。因此,你需要耐心等待结果。如果网站非常庞大,且拥有很多不同内容的分支时,你可以尝试将不同内容的网页分别向 DMOZ 下的相应目录进行提交。   一旦 DMOZ 收录了你的网站,那很快就可以被 Google,Lycos,Netscape,AOL, HotBot, DirectHit 等一些大型搜索引擎和门户网站收录。   其它的重要免费目录包括 Yahoo 目录。Yahoo 是最早开始做分类目录的网站,直到今天登录Yahoo 目录也是网站推广的重要环节。Google 把来自 Yahoo 目录的链接作为网站排名的重要分值。   工具推荐:  检查网站是否登录多个重要目录:www.123promotion.co.uk/directory/index.php   付费登录(Paid Inclusion):  英文 Yahoo实行付费登录商业网站政策,国内的门户搜索引擎目录也对商业网站纷纷采用付费登录。付费登录商业模式包括普通登录和固定排名,一般按年付费,网站在付费之后立即登录目录,无须等待和受到其它因素的影响。门户搜索引擎的搜索程序也比较偏重于对自身付费目录数据的抓取。   总体上,付费登录对于商业网站和采用了大量不利于搜索引擎友好的手段建设的网站来说,  还是有必要的。   关于自动登录软件(Submitting Tools):  自从有了 B2B 商务平台和搜索引擎营销以来,就出现了向这些中间平台和搜索引擎提交供求 信息或网站的自动登录软件,并一度在市面上广为流行。搜索引擎自动登录软件的功能是承诺将客户的网站一次性登录到全球 N 个搜索引擎目录,有的甚至保证可以使网站在搜索引擎中的排名获得极大提升。实际上,已经有诸多营销实践者对此类自动登录软件实际效果提出了质疑:   1、真正为网站带来访问量的搜索引擎主要集中于几大主流搜索引擎,其它的小搜索引擎搜  索量极小,即使网站被这些小搜索引擎收录成功,也不能指望通过他们带来什么访问量。   2、 今天的主流搜索引擎目录往往采用付费登录或严格的人工审核,这些目录极其反感由自  动登录软件提交的网站,有的明确提出拒绝自动提交方式。   3、在软件自带的几千个搜索引擎中,软件本身提示登录成功的大概有百分之六七十,是否  真正登录成功,实际操作中很难一个一个去检验。   4、 如果网站有来自其它网站的导入链接,即使不用登录,主流搜索引擎机器人同样会抓取  到你的网页。   5、如果从增加外部导入链接的角度出发,英文网站针对英文搜索引擎的自动提交可以一试,  聊胜于无,但不可对其抱有太大的期望。   总体上,盛行于免费推广时期的自动登录软件在今天各大主流商业推广平台纷纷实施付费政  策的商业模式下,已经越来越丧失价值。                       高质量导入链接   搜索引擎在决定一个网站的排名时,不仅要对网页内容和结构进行分析,还围绕网站的链接  展开分析。对网站排名致关重要的影响因素是获得尽可能多的高质量外部链接,也称导入链  接。网站即使没有向目录提交,但由于其他重要网站上有你的网站链接,一样可以获得搜索  引擎的快速抓取,并为取得好排名加分。   将导入链接纳入排名重要指标的依据在于,搜索引擎认为,如果你的网站富有价值,其它网  站会提及你;对你提及越多,说明价值越大。由此引申出链接广度(Link Popularity)在  搜索引擎优化中的重要地位。   唯其如此,人们想方设法地为网站“制造”外部链接,导致涌出大量垃圾(spam)链接和网站,于是搜索引擎在算法调整中,仅对高质量的外部链接给予重视,对类似 Spam 的做法往往给予适得其反的结果。   因此,今天对链接广度要有这样的认识:即使获得上百个质量低劣的或内容毫不相干的站点  的链接,也抵不上一个高质量且内容高度相关或互补的站点的链接。   链接质量分析:  来自以下网站的链接都可以称为高质量的链接:  搜索框命令:在 google 中输入:link:www.yourname.com          在 Yahoo 中输入:link:http://www.yourname.com                     导出链接和内部链接   导出链接就是你的网站中指向其它网站的链接。搜索引擎机器人除了分析你的导入链接,也  会分析你引出去的站点,如果导出链接站点内容与你的网站主题相关联,同样有利于搜索引  擎友好。这也是交换链接要选择主题相关网站的原因。最后,一个网站内页面间的链接也被  纳入链接分析之中,影响到网站的页面等级,最终影响排名。   导出链接:  在你的网站上如果增加一些与你关键词有关的行业/专业的资源性网站链接,不仅有利于丰  富网站内容,也有利于提升搜索引擎对你网站的好印象。   这一点尤其值得一些站长注意。由于缺乏原创资料,他们常常转摘其它网站的文章作自己网  站的内容,但又不注明来源,惟恐导出链接助长了竞争对手,不利于自己的网站访问量。其  实,对搜索引擎来说,适量、适当的导出链接是很有必要的。   当然,导出不同于导入,即使主题相关,也要控制数量。因为从“网页级别”的角度看,搜  索引擎认为一个页面奉献的导出链接数量越多,则该网站其它页面的受益相应就减少。所以  一个页面导出链接数量应受到合理控制,不要超过 15 个。首页的导出链接更要控制在10  个以内,多出的应单独安排在次级页面。Google 认为一个页面的最大导出链接数量不应超  过 100 个。   内部链接:  除了导入导出链接,一个站点的页面之间也往往彼此链接,如一篇文章结束后的“相关文章”  列表,将该网站中同一主题下的其它文章都链接在内,不仅方便访问者,也有利于搜索引擎。  网站应有意识将重要内容页面对次链接于其它页面,让搜索引擎知道这是你的重要页面,从  而给予更高的 PR 值,进行重点索引。   网站还可以通过建立多个二级域名子站,子站间彼此相链,再一起链回主站,形成一个子站  群包围主站,对提高排名相当有利。   无论是导出链接还是内部链接,都要保证链接有效而不是死链接,死链过多不仅给用户造成  不便,也极不利于搜索引擎友好,影响排名。   附:免费链接检测工具:  1、 Xenu:http://home.snafu.de/tilman/xenulink.html   2、 W3C:http://validator.w3.org/checklink                  关键词链接文本及上下文语意   搜索引擎比较重视链接文本中出现的关键词。因此无论是导出链接、导入链接还是内部链接,  都最好兼顾到链接文本中含有关键字。比如导出链接最好选择那些有关键词命名的网站,如  一个服装厂商的网站可以在行业资源中添加名称中带有“服装”二字的导出链接。   需要注意的是,如果一个网站的导入链接的文本完全相同,则可能遭致搜索引擎忽略或惩罚。  因为搜索引擎希望导入链接是别人自然创建的,这种统一文字使搜索引擎怀疑该网站是为了  增加链接广度而进行人为制造的结果。因此网站在对外交换友情链接时最好使用不同的文  本,如新竞争力的链接文本就包括“新竞争力”“网络营销管理顾问”“深圳竞争力科技公司”  等。   除了链接文本,链接周围的文字即上下文(Context) 语意也非常重要。链接分析系统通过检  查链接上下文内容来确定网站与其链接对象之间的关联度,以评估该页面的内容质量。通过  语意分析,也可以判断出关键词是否作弊。   第六部分:走在钢丝上的搜索引擎优化作弊   由于技术型搜索引擎在网站排名过程中完全由蜘蛛程序自动完成,未有人工参与,这为那些  针对排名原理而采用欺骗蜘蛛程序的手段提供成功的可能性。因此在 SEO 的发展过程中,一直伴随着关于作弊方法的讨论,成为业界关注的话题。                       SEO 作弊手段   做 SEO 必须了解基本的作弊手段,目的是避免无意间采用了相关手段遭到处罚。以下是被视为作弊的常见手段:   1、关键字堆砌:  为了增加关键词的出现频次,故意在网页代码中,如在META、title、注释、图片ALT以及  URL地址等地方重复书写某关键词的行为(Stuffing)。   2、虚假关键词:  通过在META中设置与网站内容无关的关键词,如在Title中设置热门关键词,以达到误导用户进入网站的目的。同样的情况也包括链接关键词与实际内容不符的情况。   3、 隐形文本/链接:  为了增加关键词的出现频次,故意在网页中放一段与背景颜色相同的、包含密集关键字的文  本。访客看不到,搜索引擎却能找到。类似方法还包括超小号文字、文字隐藏层等手段。隐  形链接是在隐形文本的基础上在其它页面添加指向目标优化页的行为。   4、 重定向(Re-Direct):  使用刷新标记(Meta Refresh)、CGI程序、Java、Javascript或其它技术,当用户进入该页  时,迅速自动跳转到另一个网页。重定向使搜索引擎与用户访问到不同的网页。   5、 偷换网页:  也称“诱饵行为(Bait-&-Switch)”,是在一个网页成功注册并获得较好排名后,用另一个内  容无关的网页来替换它的行为。   6、复制站点或内容:  通过复制整个网站或部分网页内容并分配以不同域名和服务器,以此欺骗搜索引擎对同一站  点或同一页面进行多次索引的行为。镜象站点(Mirror Sites)是此中典型。   7、桥页/门页(Bridge/Doorway/Portal/Entry):  针对某一关键词专门制作一个优化的页面,链接指向或重定向到目标页面。有时候为动态页  面建立静态入口,或为不同的关键词建立不同内页也会用到类似方法,但与桥页不同的是,  前者是网站实际内容所需而建立的,是访问者所需要的,而桥页本身无实际内容,只针对搜  索引擎作了一堆充斥了关键词的链接而已。   8、隐形页面(Cloaked Page)  指同一个网址下对不同的访问者选择性返回不同的页面内:,搜索引擎得到了高度优化的网  页内容,而用户则看到不同的内容。   9、重复注册:  违反网站提交纪律,突破时间间隔限制,将一个网页在短时间内反复提交给同一个搜索引擎  以获得收录的做法。   10、垃圾链接:   加入“链接工厂” (亦称“大量链接机制”)指由大量网页交叉链接而构成的一个网络系统。一个站点加入 “链接工厂”后,一方面它可得到来自该系统中所有网页的链接,同时作为交换它需要“奉献” 自己的链接。籍此方法来提升链接得分。   11、包含指向作弊网页的链接:  这种情况,有的是无辜被作弊网页牵连,有的则是桥页之故。                     搜索引擎对作弊的处罚   由于作弊行为完全背离了搜索引擎对搜索结果排名的初衷——对用户有利的原则,破坏了正  常的搜索结果,严重影响搜索引擎质量和声誉,并昭示出搜索引擎技术的漏洞,因此作弊行  为被搜索引擎厂商深恶痛绝。一旦被侦破为作弊,将视情节轻重给予不同程度的处罚。发生  在2005年3月底的Google清理部分垃圾性搜索结果(清理“广告位出租”的SEO垃圾)以及关闭部分作弊情节严重的作弊站长网站事件,就是典型的处罚案例。   搜索引擎技术的发展也是侦破作弊技术的发展。今天,搜索引擎对于蒙蔽它的手段识别技术  越来越精,过去可能还行得通的手段在今天就有着被处罚的危险。以下是部分搜索引擎对于  作弊行为的处罚:   百度:  根据网页的作弊情况,会受到不同程度的惩罚。   •较轻微的惩罚,是系统在给网页排名时略为降低该网页的排名。   •较常见的惩罚,是作弊网站的某些关键词(或所有关键词)的排名降到其它任何网站之后。   •较严厉的惩罚,对于作弊行为和后果特别恶劣的网站,将从百度中消失。   •特别补充,含恶意代码或恶意插件等用户极端反感内容的网页,虽然不是作弊,但只要用户投诉,一经确认也会被百度拒绝收录。   中搜  •中搜采用多种方法惩罚作弊。封杀、只索引部分正常内容(不减权)、整个网页排序推后、  连带责任。  •根据历史纪录,中搜有作弊黑名单,黑名单中的网站是重点防范、监控对象;根据作弊监  控算法计算出来分值很高的网站也会被重点审查。  •有轻微作弊的基本正常网页,中搜会只收录正常内容,如隐含文字等内容不建索引。  •有较多作弊特征的网页会被减权,基本上在前几页没有机会出现。  •包含有指向作弊网页的链接的网页会被牵连,承担连带责任。   •中搜会搜索引擎技术的各个环节监控作弊,同时重点监控排序剧变的网页,网站不分大小、不分领域、部分亲属远近都受到每周7*24小时的监控。除自动监控系统外,还有一个人工监控小组打击作弊。   Google  Google 没有明确给出处罚条款,但站主通过以下情况可以了解到网站是否受到处罚:  •网站的 PageRank 变为“0”  Google 工具栏上的 PageRank 指示为“0”  •网站在 Google 的外部链接数变为“0”  Google 工具栏上的 Backlinks 或在 Google 搜索框中键入“link:www.yourdomain.com”命  令显示没有外部链。   •网站排名骤降  以核心关键词搜索,原有的排名下降明显。不过这种情况有时候是算法更新的原因,与处罚  无关。  •网站在 Google 中消失,直接输入网址,找不到该网站。  被处罚的网站一般情况下如果解除作弊,还是可以获得“新生”,情况特别严重者除外。   附:向 Google 举报作弊网站:www.google.com/contact/spamreport.html (Googe 的反作  弊技术发展就是基于这类举报中出现的案例)  向百度投诉垃圾网页http://www.baidu.com/search/spamreport.html   第七部分:网页级别(PageRank)   Google搜索引擎采用的核心软件称为 PageRank,这是由Google创始人开发出的一套用于网页评级的系统,是Google搜索排名算法中的一个组成部分,级别从1到10级,10级为满分,PR值越高说明该网页在搜索排名中的地位越重要,也就是说,在其他条件相同的情况下,PR值高的网站在Google搜索结果的排名中有优先权。网页级别由此成为Google所有网络搜索工具的基础。                      网页级别概述   Google对网页级别的描述  “作为组织管理工具,网页级别利用了互联网独特的民主特性及其巨大的链接结构。实质上,当从网页 A 链接到网页 B 时,Google 就认为“网页 A 投了网页 B 一票”。Google 根据网页的得票数评定其重要性。然而,除了考虑网页得票数(即链接)的纯数量之外,Google 还要分析投票的网页。“重要”的网页所投出的票就会有更高的权重,并且有助于提高其它网页的“重要性”。   重要的、高质量的网页会获得较高的网页级别。Google 在排列其搜索结果时,都会考虑每  个网页的级别。当然,如果不能满足您的查询要求,网页级别再高对您来说也毫无意义。因  此,Google 将网页级别与完善的文本匹配技术结合在一起,为您找到最重要、最有用的网  页。Google 所关注的远不只是关键词在网页上出现的次数,它还对该网页的内容(以及该  网页所链接的内容)进行全面检查,从而确定该网页是否满足您的查询要求。”   PR值算法原理  总体上基于下面2个前提:  1、一个网页被多次引用,则它可能是很重要的;一个网页虽然没有被多次引用,但是被重  要的网页引用,则它也可能是很重要的;一个网页的重要性被平均的传递到它所引用的网页。  这种重要的网页称为权威(Authoritive)网页。   2、假定用户一开始随机的访问网页集合中的一个网页,然后跟随网页的链接向前浏览网页,  不回退浏览,那么浏览下一个网页的概率就是被浏览网页的PageRank值。                     影响 PR 值的因素   PR值体现为从0到10的11个数值,在Google的工具栏上以一条横向绿色柱状图显示,0级情况下呈白色。它是针对网页而不是网站,因此一个网站的首页和内页往往有着迥然不同的PR 值。由于Google市场拓展进程的原因,中文网页的PR值整体上低于英文网页。对中文网站来说,拥有3级PR是基础, 4级PR算达标,5级PR可谓良好,而6、7级PR就算相当优秀的网站。 当然,由于PR最直接的影响因素是来自链接,因此这种评级并不代表内容的级别水准,网站内容质量对PR的影响是间接的、长期的。根据PR值的算法原理,可知影响一个网站(首页)  PR值的因素主要包括:  1、 网站的导入链接质量:  根据前文对高质量导入链接的分析,则获得高PR值需要获得来自以下网站的链接:  同理,Google 给予XML、PS、Word、Power Point、Excel 等类型页面的 PR 也比普通网页文件高。因此,对于网站比较有价值的内容,建议做成 PDF 格式。   6、 PR 值的更新:  Google 每个月进行一次彻底的数据更新(Dance),更新后的网站排名和导入链接都会有某  些变化,但其 PR 更新时间一般要延迟至 dance后三个月左右,而且网站的 PR 值相对稳定,要上升或下降一级 PR 是很不容易的事情。   工具推荐:  查看 PR 值是否处于更新期间:www.seochat.com/seo-tools/future-pagerank (如果结果  出现不一致的情况,则处于更新期间)                       PR 值的作用   由于网页级别的高低直接受链接的影响,而链接仅是 SEO 的一个方面,因此 PR 的高低只能反映出 SEO 的部分效果。一个网页如果拥有高 PR 值能够说明的仅是:   第八部分:搜索引擎优化管理   如果说搜索引擎优化体现在网站建设和推广的每一个环节,则对搜索引擎优化的管理贯彻于  网站推广和维护的长期过程中。在搜索引擎技术不断发展,排名算法不断更新,同行竞争越  来越激烈的背景下,任何一个排名的领先或落后都是暂时的现象,没有一劳永逸的结果。只  有长期坚持的、优秀的 SEO 管理,才是保持排名优势的不二法门。                   搜索引擎优化诊断分析   获得专业的搜索引擎优化诊断分析报告,可以使搜索引擎营销策略更有效。新竞争力  www.jingzhengli.cn 公司特别开发出高效的搜索引擎优化诊断分析系统。该诊断指标体系  由电子商务博士冯英健自行研究的 68 项评价指标构成,是国内目前最权威的搜索引擎优化  评价体系。   将搜索引擎优化诊断分析报告配合新竞争力开发的网站专业性评价系统,可以全方位透彻了  解网站的网络营销表现,还可以针对存在的问题获得专家的分析建议。              Google 沙盒效应(Sandbox Effect)   关于Google沙盒现象,业界众说纷纭。基本上可以这样理解:这是Google对于那些刚发布不久就有良好排名的“可疑”站点置于某种屏蔽程序中进行一段时期的“隔离审查”。待网站表现稳定之后,再解除屏蔽,给予其应得的实际排名和PR值。这段时长可能延续3个月左右。 之所以出现沙盒现象,主要是Google针对过度进行SEO——尤其采用了作弊手段如“制造”  大量导入链接而获得高排名的网站采取的防备措施。因此,如果你的网站在发布不久后以核  心关键词在Google排名中出现由高走低的不稳定现象,多半是被Google请进了沙盒。 当然,还有一种观点认为:Google为了在搜索结果(SERP)中为用户提供更多新信息,往往给予新发布的网站更多“关照”,使得新网站暂时获得排名优势;但随着Google数据更新不断加快,这种对新网站的照顾开始解除,于是该网站排名趋向正常。 无论原因怎样,对待沙盒效应,正确的态度和方法是:保持冷静,当排名在短时间内迅速上  升时不应盲目乐观,因为这是不稳定的表现。应该利用这个有利时机,频繁更新网站内容,  提高内容质量,获得更多高质量导入链接,增加网站访问量,才能将排名优势一直保持下去。                       网站数据更新   网站经营者都希望发布的重要内容如新产品信息或重要新闻被蜘蛛快速抓取并出现在搜索  结果中。但现今我们点击搜索结果中的链接,往往进入后发现内容与结果描述不同,这是因  为搜索到的结果是搜索蜘蛛在上次光顾该网站时抓取到的信息,之后该页内容更新,蜘蛛程  序却还没有来得及抓取,从而造成的搜索结果与实际内容不符。不过,各搜索引擎都在加快  对网站访问的频率,除了每月一次全面的深度检索,还对频繁更新的网站进行数天甚至每天  简单检索一次,以保证搜索结果的时效性。总结起来,Google 对网站信息的更新取决于以  下因素:   1、网站自身的更新频率  一个长期没有更新的网站,无论是用户和蜘蛛程序都会减少对它的访问。可以说,更新越频  繁,蜘蛛程序光顾越多,你的新信息出现在搜索结果首页的机会也越大,被抓取到的网页数  量也越多。   2、网站的结构  如果一个网站拥有优化的结构,蜘蛛访问起来很顺利的话,那么它会更乐意访问该网站。   3、服务器的性能  如果蜘蛛程序前来索引你的网站,而你的服务器迟迟不能加载页面,或根本不能访问,那么  搜索引擎就会尝试在下一次更新时再来,如果多次出现同样的情况,搜索引擎就会减少对该  站的访问,或将它在数据库里删除。   4、PR 值的高低  正如高 PR 值拥有了获得高排名的优势,很多业内人士认为 PR值的高低同样是搜索引擎判断更新频次的重要因素。   5、Meta“revisit-after”  有人在 Meta 中如下设置:<META NAME="revisit-after" CONTENT="5 days">,以次提示蜘  蛛程序每 5天访问一次。实际上,由于 Google 基本上已经将 Meta 所起的作用降到很低,因此类似标签是没有多大作用的。但是,如果将时间设为 30天以后的数值,被认为是有效的。  综上所述,网站维护得力,才是搜索引擎经常更新网站数据的根本原因。                        Google Dance   Google 有 8 个数据中心,共享超过一万台的服务器。一般在每月中下旬开始升级数据库。这期间,新的网站被加入,无效网站被删除,对收录网站进行全面深度检索,也可能在这期间调整算法。由于每次升级都会引起很多网站排名波动,俗称Google Dance。有人则直接把 Google Dance定义成 Google 重新安排它的搜索结果排名的过程。   Google Dance 对于 SEO 来说,涉及的注意事项如下:  1、 网站的提交及更新时间  在 Dance期间,新网站被收录的机会增大,因此宜在Dance其间提交新网站及加大网站更新力度。   2、 静观其变,及时跟进  由于数据调整有一个过程,Dance 期间的普遍表现是排名波动不稳定,忽上忽下。也可能在这期间调整排名算法。宜在Dance 结束后,针对排名升降结果和竞争对手的排名情况调整自己的 SEO 策略。   工具推荐:  检查是否出现 Google Dance:www.webrankinfo.com/english/tools/Googledance.php  也可以简单地在以下地址输入同样的关键词进行查询:www.google.com、www2.google.com、  www3.google.com。如果出现不同数量的搜索结果,则说明 Google 正在经历 Dance。                       网站流量分析   网站流量统计分析是网站运营和维护的基础工作。在分析访问数据的基础上对网站内容及营销策略进行调整,以期获得更好的营销效果,是进行流量分析的最终目的。获取网站访问统计资料通常有两种方法:一种是通过在自己的网站服务器端安装统计分析软件来进行网站流量监测;另一种是采用第三方提供的网站流量分析服务。   对 SEO 来说,流量分析中有两个重要统计指标:访问来源(Referrer)和搜索使用的关键词,即用户通过哪些链接进入自己的网站,以及通过哪些关键词找到自己。这些链接可能是各大搜索引擎,可能是某些导入链接,也可能就是你发布在某网站上的文章的URL;而关键词分析则可以了解哪些关键词及组合能带来访问量。这样就对网站的链接及关键词需要强化和弱化的方面了如指掌。   网站访问数据分析对SEO 的指导是多方面的。但由于市面上大部分流量统计软件目前仅停留在统计数据的罗列上,缺乏对营销指导的结论性报告,因此这些模式化的分析结果实际上只是半成品,还需要网络营销专业人士对这些原始数据进行深度剖析,其对于SEO的指导作用才能真正发挥出来。   专业服务推荐:  新竞争力网站访问统计分析:www.jingzhengli.cn/fenxi.htm (可获得访问数据对网络营销的指导意义)                      SEO 工具/系统   借助一些小工具或网站系统,可以高效、及时地检测、分析网站优化和运营情况,从而指导运营维护工作的深入开展。   搜索引擎及目录免费登录入口:  Google:http://www.Google.com/intl/zh-CN/add_url.html   百度:http://www.Baidu.com/search/url_submit.htm    中搜:http://service.chinasearch.com.cn/NetSearch/pageurlrecord/frontpageurl.jsp   搜狐:http://db.sohu.com/regurl/regform.asp?Step=REGFORM&;class=    网易:http://seek.163.com/cgi-bin/search/add_url.cgi  新浪:http://bizsite.sina.com.cn/newbizsite/docc/index-2jifu-09.htm  一搜:http://www.yisou.com/search_submit.html?source=yisou_www_hp  雅虎中国目录:http://cn.Yahoo.com/docs/info/suggest.html (分类目录)  DMOZ 目录:http://dmoz.org/World/Chinese_Simplified (分类目录)  英文搜索引擎自动提交:http://www.trafficzap.com/searchsubmit.php   域名与主机工具:  域名批量查询:http://www.whois.sc   IP 转换成域名:http://www.whois.sc/members/reverse-ip.html (查看某 IP 地址下共享 哪些域名。免费注册)   关键字工具:  Google AdWords 关键字工具:查询特定关键词的常见查询及扩展匹配  https://adwords.google.com/select/KeywordSandbox   百度关键字工具:查询特定关键词的常见查询、扩展匹配及查询热度  http://www2.baidu.com/inquire/dsquery.php   搜狐关键字工具:关键字搜索热度  http://db.sohu.com/regurl/pv_price/query_consumer.asp   网易关键字工具:关键字搜索热度  http://adpsearch.163.com/find_price.php   Overture 关键字使用频率工具(英文):特定关键词的常见查询及被查询次数  http://inventory.overture.com/d/searchinventory/suggestion  关键字密度检查(英文):频繁出现的关键词及其密度  www.seotoolkit.co.uk/keyword_density_analyser.asp   内容与结构检测工具:  新竞争力网站专业性评价:www.jingzhengli.cn\pingjia.htm (基于数千网站研究获得的  120 项评测指标) 蜘蛛程序模拟器:模拟蜘蛛可抓取到的文本及链接  www.webconfs.com/search-engine-spider-simulator.php   www.spannerworks.com/seotoolkit/spider_viewer.asp URL 检测工具:检测网站 URL 结构、无效链接等  下载地址: www.wuyue.cn/soft/XENU.ZIP  http://validator.w3.org/checklink   相似页面检测器:对比两个页面间的相似度,来判断是否有受到惩罚的危险  www.webconfs.com/similar-page-checker.php   链接广度检测工具:  www.sowang.com/so/ (综合查询:含链接广度、PR、ALEXA 排名)  www.marketleap.com/publinkpop (可同时与多个竞争对手网站进行比较)  www.uptimebot.com (同时检测 10 个搜索引擎的收录情况)  www.seotoolkit.co.uk/link_popularity_checker.asp  www.123promotion.co.uk/directory/index.php (检查网站是否登录多个重要分类目录)   SEO 效果检测工具:  http://www.jingzhengli.com/  排名监测工具:网站以某一关键词在搜索引擎中的排名。  www.cleverstat.com/Google-monitor.htm (查 Google 排名)  www.trafficzap.com/keyrank.php (查 Google、Yahoo 排名)  (注:由于排名检测占用了本来可以用来响应用户请求的服务器资源,违反了 Google 服务条款。因此 Google 强烈要求不要使用排名检查工具。)   查看网页级别:  Google 工具栏下载:http://toolbar.google.com (PageRank 值)  www.trafficzap.com/pagerank.php (PageRank 值)  www.seochat.com/seo-tools/future-pagerank (查看 PR 值是否处于更新期间)  www.digitalpoint.com/tools/webrank (Yahoo 的 WebRank 值)   查看 ALEXA 网站访问量全球排名:   ALEXA 工具栏下载:http://download.alexa.com/index.cgi?p=Dest_W_b_40_T1   www.trafficzap.com/sitepopularity.php   第九部分:选择正规 SEO 服务商   为了在短期内把客户网站排名“做上去”从而收费,一些低质 SEO 服务商们不惜采用种种危险的作弊手段,并制造出大量的垃圾链接和垃圾结果,不仅败坏了正规 SEO 的行业名声,也搅乱了整个市场。对此,Google 特在网站向网站管理员提供的信息中,针对选择“搜索引擎优化服务商”有如下告诫:   您可以通过某些迹象来判断是否正在与不道德的 SEO 打交道。下面所列出的只是其中很少 的一部分,因此,只要有任何疑虑,您都应当相信您的直觉。 如果 SEO 具有以下行为,一定要想尽办法果断摆脱它:   拥有影子域名(即域名重定向)   在桥页上放置指向其他客户的链接   出售在地址栏中输入关键字的功能   对实际搜索结果和搜索结果中的广告不加区分   保证排名,但只依靠随意可得的晦涩冗长的关键字词组  使用多个别名或伪造的 WHOIS 信息(域名注册信息)   从“虚假的”搜索引擎、间谍软件 (spyware) 或变脸软件 (scumware) 获取点击量   自身的域名或者所拥有的域名已从 Google 索引中删除,或者在 Google 的索引中没有被列出 本文转自寒意博客园博客,原文链接:http://www.cnblogs.com/hnyei/archive/2012/01/30/2332471.html,如需转载请自行联系原作者
文章
搜索推荐  ·  定位技术  ·  索引  ·  SEO  ·  内存技术
2017-11-08
云端开源⾼性能技术架构调研分析报告
并发总是网站架构最大的挑战之一。由于 web 服务的兴起,并发 的数量级在不断增长。热门网站为几十万甚至几百万的同时在线用户 提供服务并不寻常。十年前,并发的主要原因是由于客户端接入速度 慢–用户使用 ADSL 或者拨号商务。现在,并发是由移动终端和新应 用架构所带来,这些应用通常基于持久连接来为客户端提供新闻,微 博,通知等服务。另一个重要的因素就是现代浏览器行为变了,他们 浏览网站的时候会同时打开 4 到 6 个连接来加快页面加载速度。 以 nginx 为例, 从以下几个方面来进行调优: 多路复用 传统基于进程或线程的模型使用单独的进程或线程处理并发连 接,因而会阻塞于网络或 I/O 操作。根据不同的应用,就内存和 CPU 而言,这是非常低效的。派生进程或线程需要准备新的运行环境,包 括在内存上分配堆和栈、生成一个新的运行上下文。创建这些东西还 需要额外的 CPU 时间,而且过度的上下文切换引起的线程抖动最终会 导致性能低下。 Nginx 大量使用多路复用和事件通知,并且给不同的进程分配不同 的任务。数量有限的工作进程( Worker)使用高效的单线程循环处理 连接。每个 worker 进程每秒可以处理数千个并发连接、请求。 nginx 架构图 长连接 HTTP 是建立在 TCP 基础之上的,浏览器是一种 HTTP 软件,它 在与服务器通信时首先需要建立 TCP 连接,这个过程有一定的开销。 如果每次请求后都断掉的话, 太浪费资源。 web 服务器都提供长连接 的方式,所谓长连接就是客户端一次请求完后,不关闭连接,保持一 段时间的连接,下次此客户端再次请求时,不用创建新连接,复用所 保持的连接即可。从理论上,长连接可以免去大量建立和关闭连接的 资源消耗,但同时也有大量连接被占用的代价。因此可以初步判断长 连接比短连接能带来更高的 TPS,更低的 CPU 消耗,更少的 IO,更高 的内存占用。 缓存 构建高性能 web 站点时,抛开基础架构,在应用程序、编码层面 主要要考虑的问题就是缓存的设计,合理的缓存设计可以使提供动态 网页服务的网站性能大幅度提高。 客户端缓存 可以利用客户端浏览器的缓存机制,来减少浏览器对服务端的请 求次数(当然在服务端进行图片等资源合并,并结合 css 图片定位技 术,也可以减少 HTTP 请求),利用好 HTTP 的缓存协商,可以设计 出灵活的客户端缓存方案。在 HTTP 头中下面的内容与缓存协商有 关: Last-Modified:动态页面通过主动推送该值,暗示浏览器在下次 请求同一个 url 的时候,优先使用 If-Modified-Since 值与服务端进行缓 存协商,如果缓存没有过期,那么服务端可以不用重新计算动态网 页,通过返回 304 通知浏览器。网站的静态资源往往使用这种方法。 但是该方法有一个缺点:有时,文件的最后更改时间虽然改了,但是 内容却没有变,这样无法充分发挥浏览器缓存的能力。 Expires: 通过在 HTTP 头中添加 Expires 标记可以明确的告知浏览 器过期形式,浏览器会彻底减少请求的次数。 Web 服务器缓存 Web 服务器有可能支持基于 url 的缓存(基于 key-value 对),这 类似反向代理缓存。缓存通常可以通过配置存储在内存或磁盘上,在 缓存有效期的问题上, 通常是基于 HTTP 协议中的头部信息判断。但 是使用这样的机制需要注意: web 服务器还具有缓存文件描述符(类似句柄)的能力,这样可 以减少文件的 open 操作,同样是一种减少系统调用的措施,这对于一 些小文件有些效果,因为文件越小花在 open 上的开销将越来越占有重 要的比例。 应用程序缓存 应用程序本身可以对动态内容进行缓存,这可以体现在三个层 面: 动态脚本缓存:每次脚本解析都需要消耗一定的时间, 为了加快 这个速度,一些服务器端脚本语言都支持动态脚本的预编译,比如我 们熟悉的 ASP.NET、 JSP 都有所谓的中间语言,解析这些中间语言会 快很多。 动态脚本框架支持的缓存:一些动态脚本框架支持缓存,同样在 选型的时候要关注一下这些框架的缓存机制和原理,比如缓存如何存 放,过期如何设置,是否支持局部缓存等。 应用程序自身实现缓存:应用程序根据特定的业务需求独立设计 缓存。 在缓存设计的具体技术上有以下几点: 缓存在内存,这种方式的优点就是减少了磁盘的读写,但是内存 有限,单机不易扩展。 缓存在分布式缓存,这种方式的优点是减少了磁盘读写,并提高 了可靠性和扩展性,但是由于需要网络 IO,性能稍逊于单机缓存。 局部页面缓存,对于一些页面无法完整缓存的,可以考虑局部缓 存。 静态化,将网站静态化可以极大的提高性能,因为用户的请求不 需要动态脚本处理。 Nginx 缓存简介 Nginx 在文件系统上使用分层数据存储实现缓存。缓存主键可配 置,并且可使用不同特定请求参数来控制缓存内容。缓存主键和元数 据存储在共享内存段中,缓存加载进程、缓存管理进程和 worker 进程 都能访问。目前不支持在内存中缓存文件,但可以用操作系统的虚拟 文件系统机制进行优化。每个缓存的响应存储到文件系统上的不同文 件, Nginx 配置指令控制存储的层级(分几级和命名方式)。如果响应 需要缓存到缓存目录,就从 URL 的 MD5 哈希值中获取缓存的路径和 文件名。 将响应内容缓存到磁盘的过程如下:当 nginx 从后端服务器读取 响应时,响应内容先写到缓存目录之外的一个临时文件。 nginx 完成请 求处理后,就将这个临时文件重命名并移到缓存目录。如果用于代理 功能的临时目录位于另外一个文件系统,则临时文件会被拷贝一次, 所以建议将临时目录和缓存目录放到同一个文件系统上。如果需要清 除缓存目录,也可以很安全的删除文件。一些第三方扩展可以远程控 制缓存内容,而且整合这些功能到主发布版的工作已经列入计划。 负载均衡 负载均衡就是将请求分散,这涉及到应当如何设计调度策略,以 让集群发挥最大的性能。当集群中的主机能力相当时应当尽量平均调 度,能力不均时应当能者多劳。随着问题的复杂,要时刻关注调度的 性能,不要让调度成为性能瓶颈。 反向代理负载均衡 反向代理服务器工作在 HTTP 层,类似代理服务器,与普通的代 理服务器不同的是,服务器在代理的后端,而不是客户端在代理的后 端,这类似于 NAT,只是 NAT 工作在网络层。同样是负载均衡,反 向代理服务器强调“转发”而不是“转移”,因为它不仅要转发客户端的 请求,还要转发服务端的响应。 黏滞会话:对于启动 session 保存用户信息,或者后端服务器使用 动态内容缓存的应用,必须将用户在一段会话中的的请求保持在同一 台服务器上。代理服务器一般支持类似的配置。然而,尽量不要使应 用过于本地化,比如可以使用 cookie 保存用户数据,或者分布式 Session 或分布式缓存。 IP 负载均衡 字面上看,便是利用网络层进行请求转发,类似 NAT 网关。然 而,使用网关转发在带宽上可能出现瓶颈,因为出口只有一个,所以 出口的带宽要求较高。 直接路由 直接路由是通过调度器修改数据包的目的 MAC 地址,转发请求 数据包,但是响应数据包可以直接发送给外网的方式。这样做显而易 见的好处就是无需担心网关瓶颈,但是实际的服务器和调度服务器都 需要链接在 WAN 交换机上,并且拥有独立的外网 IP 地址。 数据库扩展 关键:如何更快地读/写数据。 ( 1) 建立索引 索引就像是一本书的目录,好的索引可以极大地提升 select 操作 的效率,但会增加 delete/update/insert 的开销。如果你的数据库的读远 多于写,那么索引是非常奏效的。 在哪个字段设置索引:经常出现在 select 语句的 where/order by/group by 后的字段,都可以考虑设置索引 使用组合索引:如果一条 select 语句的条件过滤中涉及到了多个 field,那可以考虑设置组合索引,组合索引有一个最重要的原则就是 ( 2)读写分离 这种方式是指利用数据库的复制或镜像功能,同时在多台数据库 上保存相同的数据,并且将读操作和写操作分开,写操作集中在一台 主数据库上,读操作集中在多台从数据库上,对于读取比写更多的站 点适合使用这种方式。如果不想在应用程序层面维护这种分离映射, 那么可以使用数据库反向代理来自动完成对读写的分离。 ( 3)垂直分区 & 水平分区 可以考虑把相对独立的数据表存放在不同的服务器上,然后每一 个都采用读写分离技术,这就是垂直分表,可以进一步将读写压力分 摊到更多的服务器上。 如果垂直分表了还不行,那就考虑将单表进一步拆分(分表), 然后每 n( n>=1)个表部署到独立的服务器上(水平分区)。分表和 水平分区的方法大概有:哈希算法、范围分区、映射关系。 ( 4) NoSQL
文章
Web App开发  ·  缓存  ·  应用服务中间件  ·  数据库  ·  索引
2015-07-10
万字长文 | 微软“刷新”的背后,Satya未讲的另一半故事
2018年的最后一天,微软以7798亿美元市值,超过苹果的7491亿美元以及亚马逊的7344亿美元市值,而跃居全球最高市值公司,并以这个记录结束了整个2018年。就在2013年前任微软CEO Steve Ballmer宣布要退休的时候,业界认为微软已经在移动互联网和智能手机时代落后,对于微软的前景并不乐观。然而,就在2014年2月Satya Nadella上任新CEO后,微软出现了巨大变化,在云计算时代迎头赶上,并在短短4年里创造了新的辉煌。在很大程度上,Satya把微软自己的成功转型归结于文化转型,甚至亲自出了一本正在进行中的类传记体书《Hit Refresh》,记录了这次微软大转型中很多不为人所知的幕后事情,特别是领导力与文化的转型,引起了业界的极大振动。Satya提出的“同理心”文化,以及一系列从领导层开始扭转企业文化的努力,被业界视为微软成功转型的“法宝”。也有不少企业试图学习微软这种自上而下的文化变革。然而,微软的文化变革之所以成功,并不完全是因为Satya所发起的自上而下的公司整体文化变革。要知道,在2014年,微软是一家有着12.8万员工的跨国公司,其中6.2万员工位于美国、6.6万员工位于美国之外的其它国家和地区,在100多个国家有办公室。对于这样一个国际化运营的公司来说,6.6万位于不同的国家和地区的员工讲着不同的语言、有着各自的文化和信仰、而且都是高级知识型员工,对不同的外来理念有着不同的理解,可以说是新时代的“乌合之众”,那么微软又如何推动文化变革呢?其实,今天有很多企业都遇到同样的问题,特别是那些国际化运营的超级大公司,仅仅依靠领导层的意志而进行的文化变革,到中层及一线员工后往往走样变形而导致最后“流产”。但微软的文化变革之所以成功,还在于Satya清楚地知道必须要借助技术平台发起自下而上的变革,要把变革的工具和能力交到每一位员工的手里,让员工自发地完成组织行为变革,才是真正的成功之道。微软认为,在任何数字化转型中,技术和文化的变化都是相辅相成的。微软核心服务工程和运营(Core Services Engineering and Operations,CSEO)的前身为微软内部IT部门,而微软IT跟其它公司的IT部门一样都是以流程为中心的思维模式、僵化的人工操作模型和不连贯的客户体验。随着微软整体上云,CSEO转向基于微软Azure的运营模型,该模型使用现代软件工程原理,例如可扩展性、敏捷性和自助服务,这些都专注于提升客户体验。在云端,打通数据对于微软来说,自身的转型第一步就是把整个微软都搬到云平台上,通过云平台打通所有部门的数据,不仅让公司能够更加敏捷地响应市场变化,而且让统一的数据成为全公司的新沟通“语言”——虽然各国员工讲着不同的语言、有着各自的文化,但显然大家对于数据的理解是高度一致的。微软与MIT Sloan管理学院的CISR信息系统研究中心(Center for Information Systems Research)合作,调研了微软在自身的数字化转型过程中,是如何成为一家基于云的数据驱动型公司。实际上在云业务成为主导业务之前,微软作为一家产品型公司,有着Windows、Office、Xbox等相互独立的产品线,有着各自的P&L损益表,每条产品线都像一家独立公司那样运营,导致微软内部相当的分裂。而在产品为王的时代,很多公司都像微软一样,有着彼此相互独立的明星产品线,明星产品线都是数据孤岛和组织孤岛,彼此之前既缺乏协同也没有数据的打通。在数字化转型的过程中,越来越多的企业像微软这样试图成为一家平台型公司,这就要求打通企业内部的资源,以一个平台的方式统一对外服务客户。MIT Sloan CISR认为,微软能否成功转型为一家云服务公司,取决于它的业务流程、企业文化和员工心态转向数据驱动型。通过获得更多数据和更好地使用数据,提高微软对客户需求的理解和响应能力,而这也是有效交付云服务的关键。Satya也经常对公司内部和外部广泛地谈论对数据的日益依赖,他认为向云的转型是颠覆性的,但更重要的是云所驱动的数据,以及数据所带来的新价值。从2014年开始,微软开展了三项面向数据的工作,以促进业务模式和组织文化的转型。首先,高层管理人员利用新指标丰富了绩效管理流程,以更好地监控云服务以及确定市场需求。其次,业务领导层整合并重新设计业务流程,以便员工可以更有效、基于事实证据的方式工作。第三,微软对内引入了自助服务分析工具套件Power BI,该工具可促进整个微软的数据和分析最佳实践,并启发基于事实证据的决策方式。到了2017年,微软有61%的员工每个月都在使用Power BI。在为高管建立新的绩效管理方式方面,为了更好的识别那些具有丰富数据的系统以及鼓励跨部门之间的数据共享,Satya主持了一个构建“高管仪表盘(Senior Management Dashboard)”的黑客马拉松(即一群志愿的技术高手在几十个小时里接力开发一个软件),微软各业务部门合作建立了一个高管仪表盘:该工作找到并确认了那些包含关键数据的系统以及相关负责人,它还减少了微软内部数据孤岛和跨部门共享的阻力。微软Power BI的首席产品经理Patrick Baumgartner表示,团队很快就开发了一个基于Power BI的在线“高管仪表盘”,为每个业务部门的数据开辟了一列,同时写上“N/A”(无效)或“TBD”(待定),这样很快所有业务部门都纷纷找上门来,因为他们希望出现在Satya的仪表盘上。为了鼓励这种跨部门的数据发布和数据共享,Satya开始定期使用这个“仪表盘”。很快,微软的其他高管也效仿Satya那样为自己负责的业务单元开发了管理仪表盘。某些具有跨公司意义的指标,尤其是反映客户参与度的指标,得以在整个微软公司范围内共享,各业务单元以各自的方式使用这些共享指标。例如,市场营销部门通过这些指标来学习如何更有效地与客户交互,包括通过产品向客户传递品牌信息,从而实现更广泛和更深入的客户参与;产品工程开发团队则通过这些指标来提升服务质量,从而提高了云服务的采用和消费。微软当时的首席信息官Jim DuBois为了开发IT部门的高管仪表盘而组建了一个三人小组,随后让其他高管也可免费使用这个小组,这样就让整个微软的高管团队都在短时间内开发了自己的高管仪表盘。随着微软向云服务的转型,微软原先产品导向的企业文化成为了服务导向战略的阻碍,Satya于2015年开始着手整合公司的核心流程(销售、市场营销等),一方面鼓励开放的平台型企业文化而不是孤立的产品型文化,另一方面让微软以“统一界面”面对客户。而微软IT也分为了两部分:一部分以共享IT服务方式提供核心企业服务功能,一部分则与业务部门合作以服务业务部门的需求。为了鼓励跨部门的协作,微软调整了员工激励机制,员工在整个组织中的协作情况成为了员工绩效评估的三大核心支柱之一。 以销售流程为例。在销售部门内,销售高管确定基于云的服务要求采用全新的、以服务为导向的销售方法,而这要求对所有云服务产品进行全面查看,包括客户采购、支持请求、市场曝光以及客户与微软的各种沟通。然而,为了收集这些数据以形成微软的整体公司视角,销售主管不得不从多达80个不同的系统中扫描、手动选择并提取数据。为了解决效率低下的问题,微软的销售高管选择重新设计核心销售流程,包括潜在商机管理、销售机会管理和预测。销售高管们希望微软的销售人员花更多的时间与客户互动而不是收集数据。而如果从企业的系统中通过计算得到洞察,就能取代低效的数据收集。为了达成面向服务销售的统一公司视角,销售高管们重新定义了共享的销售概念,例如什么是“销售管道”(pipeline)或“潜在商机”(lead)”,并在销售人员、销售主管以及IT部门等相关组织中达成共识。其中,关于什么是“潜在商机”(lead)”的讨论就长达一个月,最终达成共识,即一个“潜在商机”(lead)”就意味着一个可联系的企业客户,并据此重新设计销售平台和数据模型。接下来,销售主管们们试图找到相关的内部数据源以连接到新的公司平台上,然后就发现已有的数据源非常分散。微软的销售和共享服务IT以及相关业务部门在一年的时间里开发了一个全新的销售平台,即Microsoft Sales Experience(MSX),该平台对销售数据进行筛选和整合,以产生微软与企业客户关系的360度视图。对于每一个企业客户,该新系统都概述了采购历史、详细的问题和投诉,并将沟通存档。微软的财务、营销和人力资源等共享职能部门,都经历了类似的转型。随着微软高管和员工越来越依赖数据做出决策,微软IT投资并建立了四个企业共享服务组——数据、数据科学、变更管理和商业智能。其中,数据组为微软内部共享的所有数据建立了一个“单一的真实来源”(例如提供给华尔街的财务指标、一个共同的国家列表等)。工作组确保核心数据符合预期的质量标准,并致力于纠正数据质量问题。此外,该小组还赞助和/或与数据治理委员会合作,以解决业务相关负责人之间的问题、控制数据访问并找出应该集中管理的共享数据。数据科学组则负责微软内部分析和机器学习的“全民化”,该团队与IT和非IT同事合作,以确定需求并创建企业数据服务。例如,数据科学小组和IT中的安全专家一起开发了可以改进安全和风险管理实践的分析技术;在IT之外,这个团队和基础设施的同事利用分析技术创建了“智能”建筑供暖和制冷解决方案。变更管理组则专注于设计和交付服务,以改进整个组织对分析工具的采用。例如,团队与业务流程负责人一起准备专业的培训材料,并与业务单元一起监控采用率。值得一提的是商业智能组,又称为BI@Microsoft。BI@Microsoft需要依赖频繁且可扩展的沟通策略来推动BI自助服务。该计划赞助了一个网站,其中包含手册、视频和快速入门指南,用以回答“什么是数据,我如何在我的世界中使用数据?”该计划还发布了每月通讯,提供在线课程,以及举办线上办公活动。BI@Microsoft团队使用Yammer来培养互动社区。Yammer社区成员彼此响应回答问题、分享想法、激发创新。BI@Microsoft的领导者还通过雇佣市场营销人员和培训现有的IT服务团队成员的营销技能来推动Power BI的采用。BI@Microsoft团队依靠微软内部的业务和IT高管来鼓励在本地使用Power BI,嵌入式IT团队(例如销售 IT、财务IT)是推动全公司采用数据服务的重要合作伙伴。 “全民”数据驱动的文化,让微软扩展云平台和服务方面取得了显著的成功。 2016年最后一个季度,Microsoft Azure的使用量增加了一倍以上,成为第二个最受欢迎的云平台,并使微软获得了显著的云市场份额。数字化转型的指标示例微软自身的数字化转型由微软IT也就是后来的微软核心服务工程和运营 (Core Services Engineering and Operations,CSEO)部门主要负责推动。微软CSEO开发了一个大数据可视化解决方案,可以总结和跟踪重要的业务流程和系统。该解决方案与常规流程集成,并将大量数据提炼为准确且可执行的信息,以供整个微软内部组织使用。凭借该大数据解决方案,CSEO提高了员工满意度、推动公司业务增长,并在数字化转型的道路上驱动运营效率。这个解决方案就是CSEO记分卡,它改变了CSEO理解和管理业务的方式。而CSEO记分卡仪表盘,是微软高管仪表盘的代表之一,主要服务于CSEO负责人既早先的微软CIO Jim DuBois以及后来的CSEO负责人也是微软首席数字官Kurt DelBene(Jim DuBois离开微软后由Kurt DelBene接任并更改职位名称为微软首席数字官)。在微软, 数据无处不在。随着微软持续向数字化转型迈进, 微软数字系统和流程产生的数据近乎泛滥。微软的业务流程不断产生各种日志和事件数据, 从员工满意度到财务结果, 再到安全合规性。在任何时候,微软的系统都会有数千个关于正在运行进程的单独数据点。在完整的CSEO组织系统流程状态视图中,根本没有可行的方法来表达每个单独的数据点。即使收集和汇总数据,重要数据和信息也会在大量平均值和中位数计算中丢失。了解哪些是重要数据,这是现代IT组织面临的另一个挑战。在微软这样拥有超过12万名员工的全球性组织中,确定哪些数据对整个组织和各个业务部门很重要,这本身就是一项艰巨的任务。微软CSEO如何收集和汇总相关数据?如何决定哪些数据提供了对组织最关键业务流程的可见性, 以便更好地监控、理解和管理业务?微软CSEO高层提出了一个简单的请求,以便更好地了解CSEO的运作:提供一个显示前35个指标的在线仪表盘,这些指标要展示微软CSEO组织运作情况。这个请求看似简单,但要满足该请求却并非如此。在CSEO的环境中存在的数十万个单独指标,如何找到对某个高管最重要的35个指标?CSEO团队不得不问自己一些重要问题,例如:CSEO的工作是什么以及如何衡量?如何确定哪些指标是正确的或最重要的指标,从而可以放在仪表盘上?哪些指标将战略性地推动微软的业务向数字化转型?而最后的这个问题,为高管仪表盘提供了方向。整体开发流程涉及CSEO组织各部分的利益相关者,CSEO记分卡开发团队要求系统和流程的负责人提供意见, 他们知道什么是其部门中重要的数据,这也是获取指标的主要手段之一。一旦通过不断讨论过程建立了指标,就能够创建一个解决方案, 能够检查和使用这些指标并着手进行改变。整个开发过程类似于以下步骤:1,CSEO从领导团队中获得方向和目标;2,与整个CSEO组织的系统和流程负责人展开回顾和指标讨论;3,查看系统和流程负责人收集的指标;4,查看领导团队列出的第一个指标列表,并优化领导仪表盘上显示的主要指标列表;5,获取领导团队对于指标的批准;6,创建和测试CSEO记分卡;7,确定顶级指标的目标;8,执行第一个CSEO记分卡版本以检测和测试指标的目标;9,完成CSEO记分卡, 并在全组织范围内实施。第1步到第9步花了大约三个月时间,最终结果是通过仪表盘和记分卡解决方案,使CSEO领导团队能够准确、灵活地了解整个组织。为了确定哪些指标适合该仪表盘, CSEO开发了一组标准:1,指标必须反映组织的战略价值,只需那么要能够推动CSEO朝着目标方向发展的指标,总结为对CSEO和CSEO的客户(微软内部业务部门)都很重要的数据;2,指标提供的数据必须是可操作的,如果指标没有按预期运行, 则希望将其显示在仪表盘上, 以便引起注意并进行处理;3,指标必须及时准确,如果支持指标的数据不是最新的或没有准确地代表业务状态的话也没有帮助,微软高层的业务回顾每月进行一次, 因此更新频率低于每季度一次的指标就没有用处;4,指标必须易于理解, 并有明确的定义,指标要清晰简洁, 不需要进一步的推断或参考卡来解释其代表含义;5,指标必须要有至少一年的有效数据支持,想要了解CSEO从现在起一年后的样子就意味着捕获重要的业务数据,而且这些数据要可持续;6,指标需要有明确的价值和时间表,需要确定指标的目标以及实现这些目标的时间表,如果无法建立准确的时间表来改善表现不佳的指标,那么它就不应存在于领导力仪表盘上;7,指标必须具有单一负责人,负责指标的统一定义、统一获取数据以及协助咨询如何将该指标用于更高层的领导力记分卡上。除了选择标准之外,CSEO开发小组还与领导团队合作,为CSEO仪表盘报告的内容建立了高级目标。CSEO的领导团队想要一个真正有益于业务的方案,为仪表盘提出了三个主要目标:提高员工和供应商的满意度,改善为CSEO工作的体验,这意味着提高员工和客户的满意度;实现增长,能够帮助CSEO规划未来发展并作为一个组织朝着正确的方向前进;提高运营效率,运营效率是数字化转型愿景和其根源的重要部分。另一个重要的考虑因素是CSEO组织的不同部分对整体的贡献,将微软的组织分解为主要业务和职能部门,使CSEO能够应用已经设置的指标。这些类别是:1,工程,此类包含跟踪管理IT运营绩效的指标,指标包括重大事故、未实现收入、数据中心打补丁;2,效率,此类指标旨在衡量能否最大程度利用CSEO资源,指标包括每个项目启动的成本、按时交付给客户(业务部门);3,合规,此类指标展示了CSEO在合规性方面的立场, 包括法律合规性和内部策略合规性等重要领域,指标包括合规应用程序的可获得性、全生命周期的安全开发、DevOps工具包的合规性;4,成本和人员,此类指标强调了关键的人力资源和财务方面,指标包括员工与供应商的比率、预算和支出差异(year-to-date,年至今)、预算预测和支出差异(quarter-to-date,季度至今);5,体验,此类指标告诉CSEO员工、合作伙伴和客户如何参与CSEO的产品和服务,指标包括正面情绪百分比、零售店用户参与度、搜索成功率;6,质量,此类指标具有衡量支持业务服务的关键质量和性能指标,这些指标包括Microsoft Teams会议索引、销售机会转化率。建立了CSEO的目标和指标后,CSEO开发团队就开始创建仪表盘,命名为CSEO记分卡。CSEO使用以下技术创建:首先是Microsoft Power BI,Power BI为几乎所有高级解决方案的目标提供了现成解决方案,它提供有关实时数据的动态视图以及深入查看数据的能力,可以轻松地与基于云的流程和业务系统集成,并且可以直观、轻松地开始创建数据可视化。实际上,Power BI实施的简易性是CSEO能够在三个月内从构思到构建解决方案的主要原因之一。其次是Azure Analysis Services,利用CSEO记分卡基于云的特性,即可使用Azure Analysis Services进行数据分析,可从庞大的数据集中提取数据,使用不同的模型来操作和表达数据,以支持在CSEO记分卡中构建各种深入分析的功能。CSEO记分卡改变了CSEO定期组织业务回顾和讨论会议的方式,通过仪表盘显示实时数据以及立即深入查看特定指标和结果的能力, CSEO现在能够简化会议流程,还改进了决策过程。如果会议中出现问题,也不再需要额外的时间来发布额外的报告或与指标负责人协商。使用CSEO记分卡, 就可以公开必要的数据, 找到改进流程的答案, 并在会议期间确定业务方向。记分卡为CSEO建立了新的业务节奏,通过围绕CSEO记分卡创建流程和节奏,CSEO确保拥有最相关和最准确的数据, 并为指标负责人提供时间来验证结果并在进入CSEO月度业务回顾会议之前进行评论。CSEO数据分析师致力于维持CSEO记分卡的业务节奏,他们创建和管理仪表盘, 执行数据分析任务, 并与指标负责人合作, 为记分卡上的指标建立业务和数据标准。每月的节奏类似于以下:1,此过程的第一步是更新记分卡,所有数据都会刷新和汇总并形成报告,刷新的初始结果将发送给指标负责人,他们有10天的时间来审核结果以确保准确性、找出亮点和缺点,并以评论的形式提供反馈;2,一旦指标负责人查看了刷新后的结果, 数据分析师就会检查评论, 确认亮点和缺点, 并对仪表盘的结果进行必要的更改;3,当数据分析师的更改完成后, 他们会锁定记分卡, 为每月的回顾审查做准备,指标负责人者可以查看最终的亮点和缺点;4,记分卡锁定后,将由领导团队进行月度回顾审核,领导团队使用仪表盘评估业务绩效,确定潜在的行动方案,并创建必要的行动项目;5,在月度回顾审核完成、领导团队与所涉及的指标负责人讨论了行动项目之后,将记分卡发布给所有CSEO人员以供查看。在筹备CSEO记分卡的过程中, 也遇到不少挑战, 例如:1,指标太多,指标的数量和业务的广泛性意味着很难选择最重要的指标,开发团队最初能够将提供的指标数量减少到近80个,远远超过要求的35个,开发团队继续与高层和指标负责人合作、检查和比较指标,直到能够确定最终在最初CSEO记分卡上的指标只剩下33个,之后进一步减少到了23个,并一直努力创建最适用且可操作的仪表盘指标;2,指标的成熟度,许多指标都没有使用完整或准确的数据集,也没有像所设想的那样更新,很多有抱负的目标必须要面对现实,开发团队与指标负责人合作以提高数据质量并确定指标的实际目标;3,不愿分享信息和贡献,虽然都属于同一个组织,但指标负责人有时会保护其责任范围,他们想知道为什么要关注其业务以及为什么其指标需要向组织的其他人披露,在许多情况下发现指标负责人都保护性的,因为他们认为指标不会对其业务部门有利,事实上CSEO的目标不是让团队受到批评,而只是向领导层揭示改进的必要性,这导致资源得以分配、问题得以纠正、最终使指标负责人得到更好、更有效的过程或系统,开发团队需要向指标负责人展示CSEO记分卡如何帮助他们而不是阻碍或带来不便。截止2018年底,微软CSEO正在使用记分卡来实现主要目标: 增长、提高运营效率和满意度。CSEO记分卡的优势包括:首先是节约成本和时间,可以利用实时数据进行业务回顾和讨论会议, 并在会议上根据结果制定目标和计划,因此大家从走出会议室走出后就可以马上准备改进,而无需团队和领导之间来回拉锯, 也不需要获得后续数据或信息,一切都在实时中完成。此外, 筹备业务回顾讨论会议所需的时间大为减少甚至完全消除,因为用实时仪表盘进行报告,也无需在开会前创建任何报告或PPT,仪表盘适用于所有内容讨论。其次,快速的质量改进。在仪表盘上采用的指标使CSEO领导团队能够了解业务, 并快速揭示可能需要改进的领域,这样就能快速、高效改进,而一旦启动行动计划就可以监控结果, 以确保改进工作。第三,减少未决问题。凭借仪表盘提供的极高透明度,CSEO可以轻松地查看哪些流程无法正常工作。在六个月内,团队将仪表盘中达到或超过其阈值的指标数量提高了一倍。CSEO记分卡改变了CSEO理解和管理业务的方式,CSEO已经将它用于常规流程,它为CSEO提供了最明确的运营真相来源。CSEO已经采用了数PB的系统和流程数据,并将其细化为工具,从而为整个CSEO组织提供准确且可操作的信息。通过CSEO记分卡,CSEO在微软数字化转型的道路上提高了满意度,促进了增长并提高了运营效率。由于记分卡仪表盘的成功,CSEO还计划为组织内的每个团队创建二级仪表盘,希望为组织内的小型业务部门提供相同的价值。CSEO还计划为记分卡仪表盘提供更深入的数据详细信息,从更深入、更细致的数据收集中受益。一切运行在云端自2011年以来,微软就积极在公司内部推行云计算技术,希望从平台效率、开发灵活性和快速部署功能中受益,微软的愿景始终是“一切都在云中运行”。Microsoft IT(后更名为CSEO,Core Services Engineering and Operations)就在推动Microsoft上云,Microsoft IT上云策略的一部分是将大约2100个业务线应用程序迁移到云平台,这些应用程序当时分布在微软全球8个数据中心、包括40,000多个不同的操作系统实例。微软IT战略“一切运行在云端”既适用于新应用程序,也适用于在数据中心环境中运行的现有应用程序。微软IT由两大组成部分:业务流程单元(BPU),与公司财务、销售或人力资源等业务流程保持一致,BPU负责内部LOB应用程序(财务、销售、人力资源等);集中式IT服务,负责各种服务,包括服务器基础架构、SAP实施、安全和架构指南等。为了推动微软自身的上云工作,微软IT专门组建了Stratus团队。与任何IT部门一样,微软IT的核心任务是创建支持其客户(公司内部其它业务部门)的解决方案、维护和升级服务器、服务器应用程序、数据库以及所需硬件,这是一项巨大的任务;而且维护所需的所有资产包括硬件、数据中心和人员的成本都是巨大的,还有持续的软件更新和安全补丁。为了保持硬件运行,需要每年数百万美元的可观预算。例如,当有新产品发布时,微软IT面临着升级三大洲数据中心的任务,而通过将其大部分基础架构和数据迁移到云,微软IT能够将大部分工作交给Microsoft Office 365服务。而微软IT的管理层认识到,将应用程序和数据移动到Office 365云,可以改善协作并随时随地访问从台式机或笔记本电脑到平板电脑或智能手机,任何可以运行Office 365的设备都能使用。微软的目标是通过公有云服务托管80%的服务和应用程序,自2011年以来该战略不断发展和完善,调整目标为用公有云覆盖90%以上的IT服务和应用程序。向云迁移是一个需要仔细规划、执行和沟通的项目,微软IT部使用Microsoft Project软件来管理此次迁移项目,但其实可以使用任何项目管理工具。关键是要遵循良好的项目管理原则,识别利益相关者和风险,建立具有可拆解任务的计划,并设置实际的结束日期,预测每种可能的情况并为意外做好准备。微软认为分享有关云端迁移消息的沟通计划应该:吸引关键利益相关者和最终用户;尽可能透明;建立最佳沟通渠道(电子邮件、PPT、网站消息);概述发送消息的时间和安排;使用有针对性的电子邮件;使用相关且及时的信息更新SharePoint网站主页;举办讲解和问答环节;在沟通中加入品牌。Microsoft IT的上云是一个渐进的过程。在早期阶段,当Microsoft IT开始选择要迁移到云的应用程序时,它对应用程序进行了简单的分类,以确定何时应该将应用程序作为迁移的目标。在评估云迁移应用程序时,团队权衡了两个因素:技术复杂性和业务影响。微软IT从对业务影响最小的最不复杂的技术应用程序开始。这种方法可以让团队构建新的体系结构模型,并提高工程团队的技能,从而在没有很大风险的情况下充分利用新功能。Stratus团队为每个业务流程单元(BPUs)的云端迁移提供支持,鼓励尽快上云。如果某个部门不想将应用程序迁移到云,则需要证明这样做的合理性。但是一旦决定将应用程序迁移到云端,Stratus团队就会采取“快速试错”的方法。如果应用程序在云端应用的不顺畅,团队就会努力发现失败的原因,探索解决方案。如果暂时无法解决,则应用程序将保留在数据中心中。在微软,每个应用程序都有详尽的记录,以便于对应用程序的生命周期进行审核。在向云端迁移时,Stratus团队将会仔细查阅各部门应用程序的记录。微软使用“维持”和“投资”来描述将要迁移到云的应用程序:如果将应用程序移至云端,并且没有计划进一步投资进行重新开发,则该应用程序处于“维持”模式,应该在IaaS中重新托管;如果应用程序需要重建或本身就是新开发的,则应该为PaaS或SaaS模型。如果某个部门开发了一个新应用程序,则该应用将在纯云环境的PaaS中运行。如果将现有应用程序移至云端,则或者重新构建应用程序以在PaaS中运行,或将主机转换以在IaaS中运行。随着整体迁移的推进,更多因素被纳入战略考虑,Stratus团队使用多种策略,以将应用程序顺利迁移到云端。Stratus团队最终决定开发一个决策框架,以评估应用程序是应该转移到IaaS、被整合还是关闭。该决策框架基于远程数据,以及Stratus团队对现有虚拟机和物理服务器环境的理解,这些环境具有基于以下几个特殊因素:硬件要求、软件版本、网络和所需的内部资源访问权限、安全考虑。该团队构建了一个架构,将内部部署环境与微软Azure中的IaaS交付方式进行了比较。Stratus团队还对迁移应用程序进行了全面了解。通常,一个应用程序需要多个服务器来支持环境。因此,Stratus团队综合理解了应用层的上下游关系。在某些情况下,可以在混合IT模型中移动一台服务器,而不会影响整体运行状况或服务级别协议(SLA)。该决策框架很快变得非常复杂,新开发的框架使用了大量数据点,并建议重新构建SaaS或PaaS应用程序,或在IaaS中重新托管。云端迁移的一个关键部分是增加应用程序开发团队之间的知识库。 微软IT构建了一个全面的模型,来共享有关云技术的信息以及有关迁移和重新构建应用程序的成功案例。这样做有两个目标:提升IT团队整体的知识水平,以及提供一个了解正在迁移工作任务的平台从而支持云的采用。一个关于云的维基百科提供了全面的信息,可帮助开发团队了解云技术及其使用示例(微软IT采用可共享的微软OneNote笔记本实现这个功能)。微软IT已经发现了管理Azure平台所需的角色和技能变化,Azure对快速开发、自动化和自助服务技术的重视引起了巨大的变化,这包括:更少的业务项目经理、随着职位转变为开发/运营而几乎消除了开发/测试角色、更少的解决方案提供者、更多具有敏捷思维和云技能的项目经理、更多具有开发技能的开发人员和支持工程师。云端迁移项目旨在利用云服务的优势作为开始,通过对微软应用程序组合的现代化,微软IT正在实现这些潜在的好处。微软IT发现,推动采用云服务的团队至关重要,这是因为Stratus团队不断分析正在演进中的云功能、服务器和应用程序需求。当云服务能提供所需功能时,Stratus团队将使用决策框架并与相关BPU部门合作,以找到将应用程序移至云端的最佳解决方案。Stratus团队还发现了报告的重要性,通过在部门间共享报告数据,Stratus团队不仅可以跟踪项目的进度,还可以推进BPU部门间的责任感。“一切运行在云中”战略是微软迁移到云的关键。这也可让那些优先考虑减少内部资产及相应运营支出的企业受益,这也是一个重新审视现有环境并大胆按照云规模而重新调整、关闭未使用环境并实现可能的成本节约。在微软迁移到云的过程中,有如下经验:1,首席信息官(CIO)和IT部门应提供培训和支持,推动对云服务的应用;2,创建一个积极推动云端迁移的团队;3,把尝试解决业务问题作为每个云服务决策的核心,但一定要在做决定时平衡业务和技术因素;4,没有一种放之四海而皆准的解决方案;5,将云服务作为一个缩小规模、发现适合规模和优化的机会,以避免服务器数量的持续扩展;6,在开发或重新构建云应用时,使用PaaS的可扩展性和能力;7,在将多层应用程序迁移到云时,考虑采用混合策略;8,将应用程序保持在云模块中以利用云弹性;9,积极暂停或消除未充分利用和废弃的服务器;10,意识到云服务的采用将改变任何组织中IT的角色,快速开发技能将变得越来越重要。与Azure一同演进微软IT部门(后来的微软CSEO核心服务运营)正在拥抱数字化转型,从僵化的、以流程为中心的运营转变为在Azure中运行的敏捷、以客户为中心的组织。现在,CSEO的运营基于现代DevOps工程原理。CSEO与业务伙伴合作,为员工提供支持和培训,并重塑CSEO服务。“一切在云端”的好处之一是首先在微软自己的大型企业环境中部署和彻底测试微软对外部发布的任何应用程序或服务;其次,微软可以向外界展示新技术的应用,并借此鼓舞客户的创新。此外,微软还得以与客户分享各种经验教训。在微软向云迁移的过程中,混合云是比较现实的技术方案。尽管微软Azure是适用于许多工作负载的基础架构平台,但有些应用程序还不适合云的方式,而且遗留的旧有应用程序因其复杂性和法规要求使得移动一小部分都变得极具挑战性。尽管如此,绝大多数LOB应用程序都是尽快迁移的目标。当然,随着Azure平台的发展,微软计划在内部数据中心部署的内部应用程序数量越来越少。微软IT的策略是首选公有云,因为它提供了最大的灵活性和可扩展性。微软IT通过选择SaaS来使用商品化云服务,例如微软Dynamics CRM Online、SharePoint和电子邮件;而计划投资的现有应用程序,则尽量使用Azure PaaS,以缩短战略和服务交付之间的时间;对那些不准备进一步投资的应用程序,如果仍然可以完成服务,将转移到Azure IaaS。此外,所有预生产环境都将移至Azure。而对于具有特定法规遵从性要求且在公有云解决方案中不可用的少数现有应用程序,微软IT则使用内部部署私有云。经过评估,近30%的应用程序组合可以退役、调整规模或关停,微软IT能够将这些功能整合到单个应用程序或服务中,数以千计的物理服务器和虚拟机(VM)被淘汰;大约15%的应用程序组合被SaaS解决方案取代,例如Office 365、SharePoint Online和一些第三方解决方案,这使微软IT能够将功能从定制应用程序转换为标准化的解决方案;复杂和定制的LOB应用程序占应用程序组合的50%,其中的大多数是可以“首批移动”,包括基本的Web应用程序或重新设计的解决方案,其余的被确定为“第二批”向IaaS积极“移动”的候选,一小部分被确定为“难以移动或成本高昂”;不到5%的应用程序将保留在本地。IT治理方式变革有助于推动上云的过程。从2015年6月开始,微软实施了各种审批级别。物理服务器需要获得总经理的批准、高级领导团队的批准,以及CFO、CIO和Azure产品开发组的批准,内部部署虚拟机则需要投资委员会(Capital Committee)批准。这种治理和审批方式强化了云平台的“唯一性”(Cloud-Only),除非业务团队向领导层申请特殊场景并提供相应的支持数据。微软IT将用户教育和推广、外包服务、访问控制、应用程序安全性和其它策略结合起来,确保向云的安全过渡。迁移前的重点是保护网络边界和设备安全,需要严密控制网络边界,用户必须登录公司网络才能访问任何资源。一旦应用和服务开始转移到云端,内外边界变得更加模糊,安全成为一种逻辑而非物理的挑战。用户可以访问各种基于云的文件共享服务,因而需要了解合规性要求,例如存储数据的位置以及数据的分类方式。除了用户意识外,外包安全服务还可以保护物理、网络和应用层安全。访问控制是控制访问(网络层)和维护逻辑控制的关键;如果发生违规,细分的应用程序将彼此隔离。过去,如果用户通过有效登录进入内网,应用程序就是安全的;现在,在应用程序开发或迁移期间需要更高级别的安全测试,例如入侵测试。微软IT使用System Center Operations Manager来管理Azure和Windows Server实例的混合环境,System Center Operations Manager在单个窗口中显示服务器可用性、运行状况和性能数据。这使得IT团队可以自动执行重复性任务,监控可用性并识别潜在的安全问题。业务部门可以使用IT服务所提供的映像(Image)在Azure中快速构建虚拟机,通过使用映像模板在内部IT环境和Azure中构建虚拟机,可以在两种环境中使用相同的部署逻辑。而应用程序开发团队使用Azure Application Insights来监视应用程序。Application Insights允许将性能、使用情况和远程数据发送到Azure门户以供审核。用户可以查看有关微软ASP.NET应用程序、Azure Web应用程序或Java网站的信息。在容量规划和使用方面,微软IT提供了一个托管资源和恢复(HRR)计划,为业务部门提供可持续的端到端解决方案,以检查服务器的使用情况,然后对结果进行分类,将其纳入分层响应资源流程——服务器可能已退役、重新分配或以其他方式使用。HRR通过针对未充分利用的服务器、已经关闭的数据中心、完全折旧的硬件和不合规类别等领域来推动服务器容量的正确使用并减少未使用的占用空间。迁移到云对企业现有网络基础架构提出了挑战。云迁移极大地改变了企业网络内外流量的数量和性质。在15个月的时间内,从微软内部企业网络到互联网的流量增加了十倍,大部分流量都流向公有云服务,取代之前前往内部网络上的本地服务的流量。总体而言,已有的网络基础架构不足以在微软部署和支持基于云的新解决方案。微软IT对于网络的改进主要是两个:分布式网络和Azure边缘网络。微软IT使用基于硬件的防火墙替换了旧网络代理,以实现更分布化和更高容量的配置。通过实施默认互联网和Azure边缘网络,可以在安全性和服务级别方面区别对待其它所有互联网流量和微软云流量。在应用程序现代化方面,微软内部的许多不同组织和业务部门都开发了自己的应用程序,而且对这些应用程序的分析表明所有的功能都包含在应用程序中,这种架构使得应用程序变得庞大,难于托管且难以维护。微软IT对内部应用程序开发策略进行了现代化并使其更高效:创建了一个内部业务和数据服务的共享组,可跨组织使用共享的业务、数据和实用程序服务,这些共享服务确保开发人员和工程师始终与相同的资源和数据进行交互,而新的应用程序设计原则确保模块化的应用程序能够尽可能简单的被采用和集成,通知、日志记录和安全处理功能等低级功能被封装到可重用的实用程序服务中。现代化后的微软内部应用程序发布新功能不再需要三个月的时间,凭借现代软件工程方法的灵活性和速度,高优先级项目可在短短两周内发布,而最终将每天都能发布增量更新。微软上云的许多好处使得IT成为业务的战略合作伙伴:通过降低运营开销,IT能够专注于为业务提供价值和功能;云让客户体验至关重要,所有业务部门共同负责用户体验和服务,并致力于不间断在线(Live Site)的文化;云计算推动了前瞻性思维和战略性技术投资,鼓励实验并将失败用作广泛分享的学习机会;随着向云的迁移,微软IT的核心角色也发生了变化,以前IT是计算资源的集中化管理和分配角色,而云计算的分布式模型意味着IT现在必须有效地管理越来越自助的环境。截止到2016年3月,随着PaaS和IaaS的采用逐年加速(同比),自动化增加、支持成本降低。与此同时,本地物理和虚拟机的数量减少,基础设施事件的数量也减少了。具体来说,已经看到:本地物理服务器同比下降63%,从14,584降至9,208;PaaS采用率同比增长257%,从88增加到252;IaaS采用率同比增长286%,从2,536增加到6,507;事故同比下降66%,从7,902降至5,197;最终,运营成本得以下降。例如,使用自助服务功能,用户可以快速申请VM,PaaS自动化DevOps功能,支持费用也有所下降。数据的迁移就像搬家时的分拣和包装一样,数据和应用程序也经过评估和优先排序。有些资产根本不需要移动,所以可以离线存档或留下。重要的数据和应用程序计划首先移动,然后是简单的,最后是困难的应用程序。某些应用程序和门户需要重新设计才能在云中工作并保留在本地,这些在迁移的过程中被更新了。一开始的时候,微软IT必须移动大量数据,主SharePoint门户包含36 TB的数据。对网络吞吐量的测试以及迁移过程本身表明,整个迁移需要四年时间。因此,微软IT团队制定了“有机地”移动数据的策略:为全新的网站开放云端注册,并停止在内部开设新网站——鼓励用户移动他们自己的网站和数据是一个成功的策略。仅将处于激活状态(Active)的内容移动到云中大幅减少了要移动的数据量,此策略还意味着微软IT不必花费时间来占用空间并存储未使用的数据,因此专注于迁移日常运营中所需的协作内容,有助于优先考虑从最重要到最不重要的资产。这其中可以让用户评估他们自己的数据,然后存档需要保留但不再主动用于离线存储的任何内容,留下不用进一步使用的不需要的数据。主动迁移自己内容的团队和用户可以更快地获得云服务并能够创建新站点,他们可以随时随地从任何设备上访问云平台。一个成功迁移的经验是:促进及时的合作和准备,并通过谈判和确定每个集团迁移的确切日期和时间来满足期望,然后按计划进行。在迁移数据的过程中,由于微软IT无法简单地将硬件驱动器连接到云数据中心并高速移植数据,而必须像其他任何客户一样通过企业网关将数据发送到Office 365云平台。因此,微软IT在首次迁移到云中时,最初移动了大约2,000个邮箱。由于没有必要的基础设施来支持企业内部网和云之间突然流动的大量数据,当用户在迁移后连接并且其邮箱缓存开始同步时,导致整个网络陷入困境。IT部门不得不撤销更改并与网络团队合作,以确保迁移成功而不会中断任何其他服务。将现有基础架构迁移到云,这比仅将数据从一个地方复制到另一个地方更复杂。IT部必须考虑防火墙、数据带宽限制、延迟、配置文件同步以及可能适用的其它技术注意事项。以使用微软Exchange服务器处理电子邮件的企业为例,在迁移到基于云的Office 365邮件之前,应牢记这些重要概念:先移动一小部分邮箱以确定进程是否正常,以及网络是否可以处理从本地服务器通过网络网关移动并最终进入云的数据量;避免停机,在周末或非工作时间进行移动;移动后,在从本地服务器切换到云之前(即,更改邮箱指向的路径)同步用户的邮箱;如果出现问题,制定计划以退出流程,消除或最大限度地减少停机时间并防止数据丢失。除了将要迁移的用户以及执行迁移的团队之外,IT还必须确定可能受影响的其他团队。例如,网络团队可能会突然发现大量数据突然涌向云端。除了需要向网络团队提供迁移计划的详细信息,并告知网络流量可能会突然激增外,网络团队的专业知识对于确定网络硬件是否足以满足云与本地网络之间增加的数据流量非常重要。减少要迁移的数据量,以减少完成该过程所需的复杂性和时间;仔细检查硬件和网络,以确定它是否可以处理云的额外流量;咨询专家并根据需要升级基础架构;使用“迁移房屋”的类比来鼓励用户留下日常业务运营不再需要的内容和数据;从在第一次尝试中取得成功的小流程开始迁移,并从经验中学习,以此为基础来应对更具挑战性的项目;在迁移过程中避免丢失任何数据,执行备份并监视操作的进展;时刻准备面对变化和挫折。总结:微软的数字化转型,其成功依赖于成功的文化转型,而成功的企业文化转型则依赖于高层的决心、自上而下的推动和自下而上的平台,这三者缺一不可。特别是自下而上的技术平台,是微软整个公司成功转型的保障,也是微软向平台型数字化业务转转型的根本。只有把整个微软搬到统一的云平台上,通过统一的技术平台赋能企业的每一个员工以数字化的能力,才能让员工自行根据转型中的任务构建自己的新流程,从而完成整个企业的数字化转型。整个数字化转型,就是对于企业和产业流程的重构,这虽然可以自上而下构建起整体框架,但其中的细节却需要员工自行处理和完善,再通过统一打通的数据和平台进行全球化、全局化、全域化、自动化和智能化对接。数字化转型就像Satya使用的高管仪表盘,一个小小的仪表盘连接着整个企业的核心动态数据,又通过Satya的反馈指引整个微软的下一步发展方向。而这个仪表盘的背后是整个微软数据的打通、重构和价值再造,其根本是微软整体向Azure云平台的迁移。微软用自身实践说明,如何通过数字化平台实现自下而上的数字化转型。
文章
存储  ·  监控  ·  安全  ·  Devops  ·  BI  ·  网络安全  ·  数据中心  ·  云计算  ·  数据安全/隐私保护  ·  Windows
2021-12-17
云科技时代
1 人关注 | 0 讨论 | 20 内容
+ 订阅
查看更多 >
开发与运维
5243 人关注 | 125834 讨论 | 202512 内容
+ 订阅
  • CSS3——CSS3 新增选择器
  • JDK1.8新特性(七):默认方法,真香,开动!接口?我要升级!!
  • React系列九 - 受控非受控组件
查看更多 >
数据库
249308 人关注 | 44495 讨论 | 62466 内容
+ 订阅
  • PolarDB for PostgreSQL 开源创造营课后练习
  • JDK1.8新特性(六):Stream的终极操作,轻松解决集合分组、汇总等复杂操作
  • JDK1.8新特性(五):Stream,集合操作利器,让你好用到飞起来
查看更多 >
云计算
21619 人关注 | 57900 讨论 | 39092 内容
+ 订阅
  • 构建WEB项目的 25 个HTML建议
  • React系列二 - 核心JSX语法二
  • React系列(一) -邂逅React开发
查看更多 >
大数据
184488 人关注 | 23063 讨论 | 57101 内容
+ 订阅
  • JDK1.8新特性(五):Stream,集合操作利器,让你好用到飞起来
  • 前端面试 | 18个常见HTML问题与答案
  • React系列二 - 核心JSX语法一
查看更多 >