CN103329113B - 配置用于分级高速缓存的代理服务器以及动态站点加速和自定义对象和相关的方法 - Google Patents
配置用于分级高速缓存的代理服务器以及动态站点加速和自定义对象和相关的方法 Download PDFInfo
- Publication number
- CN103329113B CN103329113B CN201180058093.8A CN201180058093A CN103329113B CN 103329113 B CN103329113 B CN 103329113B CN 201180058093 A CN201180058093 A CN 201180058093A CN 103329113 B CN103329113 B CN 103329113B
- Authority
- CN
- China
- Prior art keywords
- request
- content
- server
- response
- custom object
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 236
- 230000008569 process Effects 0.000 claims description 200
- 230000004044 response Effects 0.000 claims description 110
- 230000009471 action Effects 0.000 claims description 60
- 238000003860 storage Methods 0.000 claims description 47
- 238000007726 management method Methods 0.000 claims description 41
- 235000014510 cooky Nutrition 0.000 claims description 15
- 230000008859 change Effects 0.000 claims description 5
- 238000009826 distribution Methods 0.000 abstract description 11
- 230000002085 persistent effect Effects 0.000 abstract 3
- 239000003795 chemical substances by application Substances 0.000 description 38
- 230000005540 biological transmission Effects 0.000 description 25
- 238000004590 computer program Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 17
- 244000035744 Hura crepitans Species 0.000 description 14
- 230000000875 corresponding effect Effects 0.000 description 14
- 230000000903 blocking effect Effects 0.000 description 13
- 230000006835 compression Effects 0.000 description 13
- 238000007906 compression Methods 0.000 description 13
- 230000003068 static effect Effects 0.000 description 13
- 230000014509 gene expression Effects 0.000 description 12
- 238000005457 optimization Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 238000004458 analytical method Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 238000005243 fluidization Methods 0.000 description 6
- 230000000977 initiatory effect Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 230000001276 controlling effect Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 239000000243 solution Substances 0.000 description 3
- 101100443272 Arabidopsis thaliana DIR2 gene Proteins 0.000 description 2
- 102100038804 FK506-binding protein-like Human genes 0.000 description 2
- 101001031402 Homo sapiens FK506-binding protein-like Proteins 0.000 description 2
- 101000807859 Homo sapiens Vasopressin V2 receptor Proteins 0.000 description 2
- 102100037108 Vasopressin V2 receptor Human genes 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000033228 biological regulation Effects 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 238000002372 labelling Methods 0.000 description 2
- 230000002045 lasting effect Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000004899 motility Effects 0.000 description 2
- 230000006855 networking Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 241000239290 Araneae Species 0.000 description 1
- 102100035475 Blood vessel epicardial substance Human genes 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 101001094636 Homo sapiens Blood vessel epicardial substance Proteins 0.000 description 1
- 101000942586 Homo sapiens CCR4-NOT transcription complex subunit 8 Proteins 0.000 description 1
- 101001094629 Homo sapiens Popeye domain-containing protein 2 Proteins 0.000 description 1
- 101001094649 Homo sapiens Popeye domain-containing protein 3 Proteins 0.000 description 1
- 101000608194 Homo sapiens Pyrin domain-containing protein 1 Proteins 0.000 description 1
- 101000608230 Homo sapiens Pyrin domain-containing protein 2 Proteins 0.000 description 1
- 101000608234 Homo sapiens Pyrin domain-containing protein 5 Proteins 0.000 description 1
- 101000595404 Homo sapiens Ribonucleases P/MRP protein subunit POP1 Proteins 0.000 description 1
- 101000578693 Homo sapiens Target of rapamycin complex subunit LST8 Proteins 0.000 description 1
- 102100035482 Popeye domain-containing protein 2 Human genes 0.000 description 1
- 102100035477 Popeye domain-containing protein 3 Human genes 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000002155 anti-virotic effect Effects 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000012508 change request Methods 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000013011 mating Effects 0.000 description 1
- 230000005039 memory span Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 238000002203 pretreatment Methods 0.000 description 1
- 238000004080 punching Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 230000001550 time effect Effects 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
提供了一种通过网络分发内容的方法,包括:由代理服务器接收请求;由代理服务器确定接收的请求是涉及要从源使用一个或多个永久网络连接分发的内容还是从高速缓存分发的内容;当确定请求涉及高速缓存的内容时,由代理服务器发送用于从高速缓存取回内容的请求;当确定内容涉及要使用一个或多个永久网络连接分发的内容时,由代理服务器使用一个或多个永久网络连接发送用于从源取回内容的请求。
Description
对相关申请的交叉引用
本申请要求于2010年10月10提交的美国专利申请No.12/901,571的优先权,其通过引用而整体合并于此。本申请的主题与2010年4月11日提交的、题为ProxyServerConfiguredforHierarchicalCachingandDynamicSiteAccelerationandAssociatedMethod的美国专利申请No.12/758,017相关,其通过引用而明确地合并于此。
背景技术
内容分发网络(CDN)包括跨因特网定位的服务器的专用集合。三个主要的实体参与CDN:内容内容提供者、CDN提供者和最终用户。内容提供者是对于要被分配的网络对象授权统一资源定位符(URL)名称空间的一个。内容提供者的源服务器保持这些对象。CDN提供者向内容提供者提供基础设施(例如,代理服务器的网络)以实现内容通过因特网的及时和可靠的传送。最终用户是访问在内容提供者的源服务器上提供的内容的实体。
在CDN的背景下,内容传送描述响应于最终用户请求通过网络传送内容的动作。术语‘内容’是指任何种类的数据,不论何种形式,不管它的表示并且不管它表示什么。内容一般包括编码的媒体和元数据二者。编码的内容可以无限制地包括静态、动态或连续媒体,包括流化的音频、流化的视频、网页、计算机程序、文档、文件等等。一些内容可以被嵌入在其它内容中,例如使用诸如HTML(超文本标记语言)和XML(可扩展标记语言)之类的标记语言。元数据包括可以允许编码的内容的识别、发现、管理和解释的内容描述。
因特网的基本结构相对简单:运行在用户的机器上的网络客户端使用HTTP(超文本传输协议)从网络服务器请求对象。服务器处理请求并且将响应发送回客户端。HTTP建立于其中客户端做出服务器的请求的客户端-服务器模型上。
HTTP请求使用消息格式结构如下:
<request-line>
<general-headers>
<request-headers>
<entity-headers>
<empty-line>
[<message-body>]
[<message-trailers>]
开始HTTP消息的请求线的一般风格具有三层目的:指示客户端想要执行的命令或动作;指定行动应当采取的资源;和向服务器指示客户端使用的HTTP的版本。请求线的形式语法是:
<METHOD><request-uri><HTTP-VERSION>
‘requestURI’(统一资源标识符)识别请求应用到的资源。URI可以指定诸如文档名称之类的对象的名称和诸如在内部网或在因特网上的服务器之类的它的位置。当请求发送给代理服务器时,URL可以被包括在请求线中而不是仅仅URI。URL涵盖URI并且还指定协议。
HTTP使用传输控制协议(TCP)作为它的传输机制。HTTP建立于TCP之上,这意味着HTTP是面向应用层连接的协议。CDN可以采用HTTP请求静态的内容、流化的媒体内容或动态的内容。
静态的内容是指改变的频率低的内容。它包括静态的HTML页、嵌入的图像、可执行程序、PDF文件、音频文件和视频文件。静态的内容能够被容易地高速缓存。源服务器能够在HTTP首标中指示内容是可高速缓存的并且提供高速缓存的数据,诸如有效期时间、etag(指定文件的版本)或其它。
流化的媒体内容可以包括流化的视频或流化的音频并且可以包括诸如新闻、运动、音乐会、电影和音乐之类的事件的现场或按需媒体传送。
在典型的CDN服务中,高速缓存代理服务器将在本地高速缓存内容。但是,如果高速缓存代理服务器接收对没有高速缓存的内容的请求,则它一般将直接去源服务器以取得内容。以这样的方式,传送可高速缓存的内容所需的CDN之内的开销被最小化。此外,CDN之内的较少的代理服务器将包含在内容对象的传送中,从而进一步减少内容的请求和传送之间的等待时间。通常用于“长尾”内容/应用的具有非常大的可高速缓存的对象库(例如,千万或亿万个对象或更多)的内容提供者/源由于能够被高速缓存的有限数目的对象而可能经受高速缓存耗尽,这可能导致高的高速缓存未中率。当内容提供者服务非常大的对象库时,已经采用分级高速缓存来避免高速缓存耗尽。分级高速缓存涉及在代理服务器的簇之间分割这样的对象库,以使得每个代理将存储库的一部分。当作为分级高速缓存的组成部分的代理服务器接收内容请求时,它应当知道代理簇中的哪一个代理服务器被指定高速缓存请求的内容以使得这样的接收代理能够从高速缓存它的代理取得请求的内容。
动态内容是指频繁地改变的内容,诸如对于用户个性化的内容,并且是指按需创建的内容,诸如例如通过执行一些应用进程。动态内容一般是不可高速缓存的。动态内容包括代码生成的页(诸如PHP、CGI、JSP或ASP)、事务数据(诸如登录过程、电子商务站点中的离开过程或个性化的购物车)。在一些情况下,使用DSA传送可高速缓存的内容。有时,使用诸如持久连接之类的DSA技术而不是通过高速缓存将传送什么内容的问题可能涉及实施方式选择。例如,高速缓存对于一些高度敏感的数据可能是不可接受的,并且由于高速缓存的数据可能损害的问题,SURL和DSA可能比高速缓存更优选。在其它情况下,例如,更新高速缓存的负担可能大到以致使得DSA更有吸引力。
动态站点加速(DSA)是指一些CDN使用来加速不可高速缓存的内容跨网络的发送的一个或多个技术的集合。更具体地,有时被称为TCP加速的DSA是用于改善诸如例如最终用户设备(超级文本传输协议客户端)和源服务器(HTTP服务器)之类的因特网上的最终节点之间的HTTP或TCP连接的性能的方法。DSA已被用于加速这样的最终节点之间的内容的传送。最终节点通常将通过通常接近于最终节点中的至少一个定位的一个或多个代理服务器彼此通信,以便在这样的节点之间具有相对短的网络往返航程。加速能够通过代理服务器之间的TCP连接的优化来实现。例如,DSA通常涉及保持代理之间和代理与之通信的某些最终节点(例如,源)之间的持久连接,以便优化TCP堵塞窗口以通过连接更快速地传送内容。此外,DSA可以涉及使用例如TCP连接(诸如HTTP)的较高层应用的优化。从连接池再使用连接还能够有助于DSA。
存在对于为CDN内容提供者提供对于实际上组合高速缓存和DSA二者的CDN确定如何管理最终用户对内容的请求的灵活性的增大的需要。
附图说明
图1是显示根据一些实施例的分级高速缓存中的服务器之间的关系的说明性的结构级图。
图2是显示根据一些实施例的两个不同的动态站点加速(DSA)配置中的服务器之间的关系的说明性的结构级图。
图3A是根据一些实施例的在代理服务器的每一个上运行的进程/线程的示意图。
图3B-3C是显示线程的操作(图3B)和它与被称为NIO的异步IO层3(图3C)的交互的附加细节的说明性的流程图集合。
图4是表示根据一些实施例的在代理服务器上运行的图3A的进程/线程之内的应用级任务的说明性的流程图,所述应用级任务估计通过网络连接接收的请求以确定多个处理器过程中的哪一个应当处理请求。
图5A是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的第一服务器侧分级高速缓存(‘hcache’)处理器任务的说明性的流程图。
图5B是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的第二服务器侧hcache处理器任务的说明性的流程图。
图6A是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的第一服务器侧正常高速缓存处理器任务的说明性的流程图。
图6B是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的第二服务器侧正常高速缓存处理器任务的说明性的流程图。
图7A是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的第一服务器侧DSA处理器任务的说明性的流程图。
图7B是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的第二服务器侧DSA处理器任务的说明性的流程图。
图8是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的错误处理器任务的说明性的流程图。
图9是根据一些实施例的在每个代理服务器上运行的图3A的进程/线程之内的客户端任务的说明性的流程图。
图10是根据一些实施例的表示异步地读和写数据到NIO层中的SSL网络连接的过程的说明性的流程图。
图11A-11C是表示创建高速缓存密钥(图11A)的过程;和将由高速缓存密钥表示的内容与根服务器相关联的过程(图11B);和使用高速缓存密钥管理正常和分级高速缓存的过程(图11C)的说明性的附图。
图12是根据一些实施例的表示运行在代理服务器之内的软件的结构的示意图。
图13是显示用于从设备读取数据块的非阻塞过程的说明性的流程图。
图14是功能上表示用于传送从一个设备读取的要被写到另一个设备的数据的、能够由高层应用使用NIO框架创建的数据的虚拟“隧道”的示意图。
图15是根据一些实施例的显示运行在代理服务器之内的软件的结构的附加细节的示意图。
图16是根据一些实施例的显示合并在运行在代理服务器之内的图15的结构的之内的自定义对象框架的细节的示意图。
图17是根据一些实施例的显示在图16的自定义对象框架之内运行在沙箱环境之内的自定义对象的细节的示意图。
图18是示出了根据一些实施例的从最终用户的用户代理到达的请求流的说明性的流程图。
图19是根据一些实施例的显示新的自定义对象代码的布置的说明性的流程图。
图20是根据一些实施例的根据图4-9的总体CDN流的说明性的流程图。
图21是根据一些实施例的自定义对象过程流的说明性的流程图。
图22A-22B是显示在阻塞的图21的流之内运行的自定义对象的操作的示例的说明性的附图。
图23是根据一些实施例的提供一些示例以可能阻塞自定义对象可以请求的服务的说明性的流程图。
图24显示根据一些实施例的说明性的示例配置文件。
图25A-25B显示根据一些实施例的另一个说明性的示例配置文件。
图26是能够被编程来充当被配置为实现该过程的代理服务器的计算机系统的说明性的块级图。
具体实施方式
呈现以下描述以使得任何本领域技术人员能够做出和使用计算机实现的系统和方法以及制造品以执行根据本发明的通过网络(特别是因特网)的内容传送,并且以下描述在特定实施例、应用和它们的要求的背景中提供。对公开的实施例的各种修改将对本领域技术人员容易地清楚,并且这里定义的一般原理可以应用于其它实施例和应用而不背离本发明的精神和范围。此外,在下面的描述中,阐述许多细节以便于说明。但是,本领域普通技术人员将实现到,可以不用这些特定的细节来实践本发明。在其它实例中,以框图形式显示公知的结构和过程以便不用不必要的细节模糊本发明的描述。因而,本发明不意欲局限于示出的实施例,而是将得到与这里公开的原理和特征一致的最宽的范围。
分级高速缓存
图1是显示根据一些实施例的分级高速缓存100中的服务器之间的关系的说明性的结构级图。可以实际上包括多个服务器的源102充当可高速缓存的内容的原始来源。源102例如可以属于诸如视频、音乐或新闻之类的内容的电子商务提供者或其它在线提供者,例如其使用由包括这里描述的新颖的代理服务器的CDN提供的高速缓存和动态站点加速服务。源102能够服务来自于一个服务器的一个或多个不同类型的内容。可替换地,给定提供者的源102可以分布来自于几个不同的服务器的内容–例如一个或多个服务器用于应用、另外一个或多个服务器用于大文件、另外一个或多个服务器用于图像,并且另外一个或多个服务器用于SSL。这里使用的术语‘源’应该用于指代由提供者服务的内容的源,不管是从单个服务器还是从多个不同的服务器。
分级高速缓存100包括第一POP(存在点)104和第二POP106。每个POP104、106可以包括多个代理服务器(或簇)。简单地描述,‘代理服务器’是客户端使用来接入其它计算机的服务器。POP通常将具有与它相关联的多个IP地址,一些对特定的服务器是唯一的,一些在几个服务器之间共享以形成服务器簇。IP地址可以被分配给从该POP服务的特定服务(例如,–服务特定的源),或可以用于服务多个服务/源。
客户端通常连接到代理服务器以请求在另一个服务器(例如,高速缓存代理或源)上可用的一些服务,诸如文件、连接、网页或其它资源。接收请求的代理服务器然后可以直接去到其它服务器(或去到另一个中间代理服务器)并且代表客户端请求客户端想要的东西。注意,典型的代理服务器具有客户端功能和服务器功能二者,因而向另一个服务器(高速缓存、源或中间)做出请求的代理服务器充当相对于其它服务器的客户端。
第一POP(存在点)104包括用于高速缓存先前从源102服务的内容的第一多个代理服务器S1、S2和S3(或簇)。第一POP104被称为‘最后一英里’POP以指示它在网络“距离”方面而未必是地理上位于相对接近于最终用户设备108之处,以便根据网络拓扑最佳服务最终用户。第二POP106包括用于高速缓存先前从源102服务的内容的第二多个代理服务器S4、S5和S6(或簇)。簇共享IP地址以服务此源102。第二POP106之内的簇可以也具有附加的IP地址。代理服务器S1、S2和S3的每一个被配置在不同的机器上。同样,代理服务器S4、S5和S6的每一个被配置在不同的机器上。此外,这些服务器的每一个运行在下面描述的计算机可读存储设备中编码的相同的计算机程序代码(软件),虽然具有不同的配置信息以反映网络之内的它们的不同的拓扑位置。
在根据一些实施例的高速缓存分级结构中,内容分配给‘根’服务器以高速缓存该内容。基于内容做出根服务器指定,意味着每个内容对象分配给根服务器。以这样的方式,在代理簇之间分配内容对象。簇之内的给定代理可以充当数千内容对象的根。如果给定内容对象没有被高速缓存在该根服务器上或如果它已经期满,则给定内容对象的根服务器充当将接入源102以获得给定内容对象的代理。
在操作中,例如,最终用户设备108创建到代理服务器S1的第一网络连接110并且通过第一连接110做出对于一些特定的可高速缓存的内容(例如相片图像)的请求。最终用户设备108连接到的代理服务器被称为‘前服务器’。在此示例中,S1充当前服务器。响应于用户设备请求,在分级高速缓存的情况下,S1确定是否指定高速缓存请求的内容。如果S1确定指定高速缓存此内容(即,它是否是对于此内容的‘根服务器’)。如果S1是对于此内容的根服务器,则它确定它是否已经实际上高速缓存了请求的内容。如果S1确定它已经高速缓存了请求的内容,则S1将验证高速缓存的内容是‘新鲜的’(即,没有期满)。如果内容已被高速缓存并且是新鲜的,则S1通过第一连接110向最终用户设备108服务请求的内容。如果内容不被高速缓存或不是新鲜的,则S1检查二级根服务器上的内容。如果内容不被高速缓存或在二级根上不是新鲜的,则S1检查源102上的内容,或如果此内容被确定使用保护分级高速缓存服务的话,则检查第二(保护)POP106上的内容。当S1接收内容并且验证它是好的时,它将它服务到最终用户设备108。
如果代之以S1确定它不是对于该请求的根,则S1基于该请求将确定哪一个服务器应当高速缓存此请求的内容(即,其是对于该内容的‘根服务器’)。假定现在代之以S1确定S2是对于请求的内容的根服务器。在那种情况下,S1向S2发送请求以从S2获得内容。通常,S1向S2发送请求内容的请求。如果S2确定它已经高速缓存了请求的内容,则S2将确定内容是否是新鲜的并且没有期满。如果内容是新鲜的,则S2将请求的内容服务回到S1(在相同的连接上),并且S1又通过第一连接110将请求的内容服务到最终用户设备108。注意,在这种情况下,S1不会将对象存储在高速缓存中,因为它被存储在S2上。如果S2确定它没有高速缓存请求的内容,则S2将检查是否存在对于此内容的二级‘根服务器’。
现在假定S3充当这样的对于查找的内容的二级根。S2然后向S3发送请求内容的请求。如果S3确定它已经高速缓存了请求的内容并且它是新鲜的,则S3向S2服务请求的内容,并且S2将此内容存储在高速缓存中(因为假定高速缓存它)并且将它服务回到S1。S1又通过第一连接110将请求的内容服务到最终用户设备108。
另一方面,如果S3确定它没有高速缓存请求的内容,则S3向S2通知在S3处的高速缓存未中,并且S2确定第二/保护POP106是否被定义用于该对象。如果没有定义第二POP106,则S2将通过连接116接入源102以获得内容。另一方面,如果对于该内容定义了第二/保护POP106,则S2向第二/保护POP106发送请求。
更具体地,假定第二/保护POP106存在,则S2创建与服务第二POP106中的源的簇的网络连接112,或如果已经就位并且可用,则使用现有的这样的连接。例如,S2可以从用于先前创建的与服务第二POP106内的源的服务器的连接的连接池(未示出)当中选择。如果不存在这样的先前的连接,则创建新的连接。假定已经在第一POP104的S1和第二POP106的S4之间创建了第二连接112,则与上面参考第一POP104描述的过程相似的过程用于确定S4、S5和S6中的任何一个是否已经高速缓存请求的内容。具体地,例如,S4确定哪一个服务器是对于请求的内容的POP106中的根。如果发现S5是根,则S4向S5发送从S5请求内容的请求。如果S5已经高速缓存该内容并且高速缓存的内容是新鲜的,则S5向S4服务请求的内容,S4将它服务回到S2,S2又将内容服务回到S1。S2也高速缓存内容,因为在此示例中假定S2是对于此内容的根。S1通过第一连接110将请求的内容服务到最终用户设备108。如果另一方面S5没有高速缓存请求的内容或内容不是新鲜的,则S5通过第三网络连接114将请求发送到源102。S5可以从连接池(未示出)之内的先前创建的连接当中选择第三连接114,或者如果不存在S5和静态的内容源102之间的先前的连接,则创建新的第三网络连接114。
源102通过第三连接114将请求的内容返回到S5。S5检查来自于源102的响应并且基于响应首标确定响应/内容是可高速缓存的;不可高速缓存的内容将在首标中指示它不应该被高速缓存。如果返回的内容是不可高速缓存的,则S5不会存储它并且利用合适的指示将它传送回(以使得S2不会高速缓存它)。如果返回的内容是可高速缓存的,则它被存储具有高速缓存参数。如果内容已经处于高速缓存(即,请求的内容不被修改)但是被登记为期满,则更新与高速缓存的内容相关联的记录以指示新的期满时间。S5向S4发送请求的内容,S4又通过第二连接112将它发送到S2,S2又将它发送到S1,S1又将它发送到最终用户设备108。假定确定内容是可高速缓存的,则S2和S5二者高速缓存返回的内容对象。
在一些实施例中,根据HTTP协议,当内容对象处于高速缓存中但是列为期满时,服务器可以实际上请求具有“是否从那时起修改(ifmodifiedsince)”或它在高速缓存中具有什么对象的相似指示的对象。服务器(源或二级服务器)可以验证高速缓存的对象仍然是新鲜的,并且将用“未修改”响应答复–通知拷贝仍然是新鲜的并且它可以被使用。
第二POP106可以被称为提供分级高速缓存的二级级别的二级或‘保护’POP106。通常,二级POP能够是二级到多个POP。因而,它增加了它将在高速缓存中具有给定内容对象的概率。此外,它提供冗余。如果前POP失败,则内容仍然被高速缓存在接近的位置中。二级POP也减少源102上的负荷。此外,如果POP失败,则二级POP而不是源102可以吸收失效备援命中的冲击。
在一些实施例中,不提供第二/保护POP106。在那种情况下,在发生根服务器对于请求的内容的高速缓存未中时,根服务器将接入源102以获得内容。
动态站点加速(DSA)
图2是显示根据一些实施例的两个不同的动态站点加速(DSA)配置200中的服务器之间的关系的说明性的结构级图。在图1-2中相等的项标有相等的参考数字。相同的源102可以服务静态和动态内容二者,虽然静态和动态内容的传送可以分成源102之内的不同的服务器。从附图中将理解,充当图1的分级高速缓存中的服务器的第一POP104的代理服务器S1、S2和S3也充当图2的DSA配置中的服务器。第三POP118包括用于从动态内容源102请求动态内容的第三多个代理服务器S7、S8和S9(簇)。第三POP118中的服务器簇可以共享对于特定服务(服务源102)的IP地址,但是在一些情况下,IP地址可以用于多于一个服务。第三POP118被称为‘第一英里’POP以指示它位于相对接近于源102之处(在网络距离方面接近)。注意,在此示例配置中,第二POP106不参与DSA。
图2的示意图实际上显示两个可替换的DSA配置,不对称的DSA配置涉及第五网络连接120,对称的DSA配置涉及第六和第七网络连接122和124。不对称的DSA配置包括位于相对接近于最终用户设备108之处的第一(即‘最后一英里’)POP104,但是它不包括相对接近于源102的‘第一英里’POP。相反,不对称的DSA配置包括位于相对接近于最终用户设备108之处的第一(即‘最后一英里’)POP104和相对接近于动态内容源102之处的第三(‘第一英里’)POP118。
假定例如用户设备108通过例如第一网络连接110做出对于诸如登录信息之类的动态内容的请求以在线执行交易购买或获得基于网络的电子邮件。在不对称的DSA配置中,前服务器S1使用第五网络连接120来直接从源102请求动态内容。而在对称配置中,前服务器S1使用第六网络连接122以从第三POP118之内的例如S7的服务器请求动态内容,S7又使用第七连接124从源102请求动态内容。在一些实施例中,为了优化连接和传送效率,到特定源的所有连接将从POP中的特定的服务器(或POP中的服务器的有限的列表)完成。在那种情况下,服务器S1将请求第一POP104中的特定的“选择的”服务器以按照异步模式从源获得内容。服务器S7按类似方式在第一英里POP118之内动作。当接入源102时,这是主要相关的。
在不对称的DSA配置中,(前)服务器S1可以从连接池(未示出)当中选择第五连接120,但是如果池中不存在这样的与动态源102的连接,则S1创建与动态内容源102的新的第五连接120。相反,在对称配置中,(前)服务器S1可以从连接池(未示出)当中选择第六连接122,但是如果不存在这样的与第三POP118的连接,则S1创建与第三POP118之内的服务器的新的第六连接122。
在DSA中,上面描述的所有三个连接将是持久的。一旦它们被设置,则它们通常将利用‘HTTP保持活动’被保持开放,例如从服务器中的一个到源102或到另一个POP的所有请求将被集中在这些连接上。保持持久连接的优点是,连接将被保持在最佳条件下以传送业务以使得使用这样的连接的请求将是快速的并且被优化:(1)不需要发起连接–因为它是活动的(在TCP的情况下,连接的发起通常将花费一个或两个往返,并且在建立SSL连接的情况下,将花费几个往返以仅仅用于密钥交换);(2)TCP堵塞窗口将通常达到最佳设置以用于特定的连接,因此在它上的内容将更快速流动。因此,在DSA中,一般期望保持连接尽可能忙、传送更多的业务,以将它们保持在优化的条件下。
在操作中,不对称的DSA配置不高速缓存由源102服务的动态内容,对称的DSA配置也不高速缓存由源102服务的动态内容。在不对称的DSA配置中,在第五连接120上从动态内容源102向第一POP104服务动态内容然后在(‘最后一英里’)第一连接110上向最终用户服务动态内容。在对称的DSA配置中,在第七连接124上从动态内容源102向(‘第一英里’)第三POP118服务动态内容,然后在第六连接122上从第三POP118向(‘最后一英里’)第一POP104服务动态内容,然后在第一连接110上从第一POP104向最终用户设备108服务动态内容。
当决定是采用不对称的DSA还是对称的DSA时,可以考虑几个权衡。例如,当源102和最后一英里POP104之间的连接高效时,具有低(或无)分组损失,并且具有稳定的等待时间–不对称的DSA将足够好,甚至更好,因为它将减少了在途中的附加的跳/代理服务器,并且实现将更便宜(消耗较少的资源)。另一方面,例如,当从源102到最后一英里POP104的连接拥塞、不稳定、具有可变的位速率、误差率和等待时间时,–对称的DSA可以更优选,以使得从源102的连接将是高效的(由于低的往返航程时间和最佳的对等)。
具有多个任务的线程/进程
图3A是根据一些实施例的在代理服务器的每一个上运行的进程/线程300的示意图。线程包括多个任务,如下所述。每个任务能够由相同的进程/线程300异步地运行。这些任务运行在相同的进程/线程300中以优化存储器和CPU使用。进程/线程300基于任务可以需要的资源的可用性在任务之间切换,以异步方式执行每个任务(即–执行不同的片段直到“阻塞”动作),然后切换到下一个任务。进程/线程被编码在计算机可读存储设备中以配置代理服务器执行任务。也编码在计算机可读设备中的下层NIO层管理来自于网络或来自于存储器的可能引起阻塞单个任务的接入信息,并且通过检查可能阻塞的资源的可用性提供如上所述的用于线程300以这样的异步的不阻塞的模式的框架,并且提供不阻塞的功能并且调用诸如300之类的线程,以使得它们能够最佳地操作。每个到达的请求将触发这样的事件,并且象300的线程将处理排序的所有请求(以请求或资源可用性的次序)。能够在数据结构中管理任务的列表以用于300使用(例如,队列)。为了支持这样的实施方式,每个服务器任务,其内可能可以具有许多阻塞的呼叫,将被重新编写为不阻塞的模块的集合,将一起完成任务,但是这些任务的每一个能够被不间断地执行,并且这些模块能够被异步地执行,并且与其它任务的模块混合。
图3B-3C是显示线程320的操作(图350B)和它与被称为NIO的异步IO层350(图3C)的交互的附加细节的说明性的流程图集合。图3B-3C的过程表示配置机器以执行所示的操作的计算机程序进程。每当例如接收到新的套接字连接或HTTP请求,就将任务添加到准备执行的不阻塞的任务的队列322。线程模块324监视等待执行的不阻塞的任务的队列322并且从队列中选择任务用于执行。线程模块326执行选择的任务。任务模块328确定可能阻塞的动作何时将要在任务之内执行。如果在任务之内不出现不阻塞的动作,则在线程模块330中完成任务并且传递回线程模块324以选择用于执行的另一个任务。但是,如果模块328确定将要执行可能阻塞的动作,则调用NIO层模块352以按照不阻塞的方式(即,按照不阻塞其它任务的方式)执行动作,并且在线程320之内控制传递回到模块324,模块324从队列322中选择用于执行的另一个任务。再次参考NIO侧,当完成阻塞的动作时(例如,搜索的资源可用–例如,内容或连接),NIO层模块354触发事件356。线程模块332检测事件,并且线程模块334将先前阻塞的任务再一次添加到队列,以使得线程能够选择它以完成它之前停止的执行。
任务
图4是表示根据一些实施例的在代理服务器上运行的进程/线程400之内的应用级任务400的说明性的流程图,所述应用级任务估计通过网络连接接收的请求以确定多个处理器过程中的哪一个应当处理请求。图1-2的服务器104、106和118的每一个能够运行包括任务400的线程的一个或多个实例。根据一些实施例,运行一个进程/线程或少量进程/线程,所述进程/线程包括估计请求以确保资源的最佳使用的任务400。当一个请求的估计,即一个估计请求/任务阻塞时,相同的进程能够继续并且在线程之内处理不同的任务,当数据或设备准备好时,返回到阻塞的任务。
将理解,请求可以由服务器中的一个发送到另一个服务器或从用户设备108发送到前服务器104。在一些实施例中,请求包括通过TCP/IP连接接收的HTTP请求。图3A的流程图包括表示根据存储在机器可读存储设备中的机器可读程序代码以执行模块的指定的活动的代理服务器处理资源(例如,处理器、存储器、存储装置)的配置的多个模块402-416。进程使用编码在存储设备中的配置结构418之内的信息以选择处理器进程以处理请求。
模块402动作以接收如下通知:请求或该请求的至少必要的部分存储在存储器中并且准备被处理。更具体地,如下所述的线程监听接收请求的代理服务器和‘客户端’之间的TCP/IP连接以监视请求通过网络的接收。本领域技术人员将理解,代理服务器包括服务(即,响应)包括来自于其它代理服务器的请求的请求的服务器侧接口和做出(即,发送)包括到其它代理服务器的请求的请求的客户端侧接口二者。因而,NIO层监视的TCP/IP连接上的客户端可以是最终用户设备或另一个代理服务器的客户端侧。
在从NIO层接收到请求的足够的部分已经到达存储器以开始估计请求的通知时,模块402实质上醒来。进程400是不阻塞的。代替包括在模块402的动作完成之前被阻塞的任务400的进程/线程,对此动作的调用将立即返回,带有故障指示(因为动作没有完成)。这使得进程/任务能够同时执行其它任务(例如估计其它HTTP请求或一些不同的任务),当NIO层指示资源处于存储器中并且准备继续确定特定HTTP请求是否就绪的任务时,返回到该任务。
在进程400的实例等待来自于NIO层的足够的信息已经到达连接并且已经被加载到存储器的通知的同时,包括进程400的其它实例的其它应用级进程能够在代理服务器上运行。假定根据一些实施例请求包括HTTP请求,仅仅HTTP请求线和HTTP请求首标需要已被加载到存储器中以便提示NIO层的唤醒通知。请求体不需要处于存储器中。此外,在一些实施例中,NIO层保证在进程400估计请求以确定哪一个处理器应当处理该请求之前HTTP请求体不被加载到存储器。
通过限制需要被加载到存储器的请求的信息量以便处理该请求,进程400使用的存储器量被最小化。通过将请求处理限制到仅仅涉及请求的某些部分,进程400的存储器使用要求被最小化,留下更多的存储器空间可用于包括进程400的其它实例的其它任务/请求。
通过利用运行在TCP/IP连接上的NIO层监视该连接,如果(通过和NIO层)观察到进程400能够变得阻塞,则NIO层将向调用任务指示它还不能被完成,并且NIO层将继续努力完成它(读或写所需的数据)。以这种方式,进程能够同时执行其它任务(估计其它请求),并且等待来自于NIO层的、足够的请求信息处于存储器中以进行的通知。同时,进程能够执行被解锁的包括400的其它实例的其它任务。再次,如上所述,包括任务400的其它实例的数千或数万其它应用级任务可以同时由单个线程(或仅仅几个线程)在代理服务器上执行,由于此实施方式并且因为任务400以异步的不阻塞的方法实现,因此这些其它任务或实例不被延迟,同时对于给定任务400的请求信息被接收并且存储在存储器中。
响应于模块402的醒来,模块404从存储器获得HTTP请求线和HTTP首标。模块406检查请求信息并且检查作为HTTP首标的一部分的主机名称,以验证支持主机(即,被在此代理服务器上服务)。在一些实施例中,来自于请求线的主机名称和URL如下所述被用来创建对于高速缓存/请求的密钥。但是,可替换地,这样的密钥可以使用来自于首标的一些更多的参数创建(诸如,特定的cookie(小型文本文件)、用户代理或其它数据,诸如客户端的IP,其通常从连接接收)。可以与将响应聚集到请求有关的来自于首标的其它参数包括:支持的文件格式、压缩的支持、用户代理(指示客户端的浏览器/平台)。此外,在HTTP首标已经被高速缓存在客户端上的情况下(例如,来自于先前的请求),HTTP首标可以提供关于请求的内容对象的数据。
决定模块408使用来自于由模块406识别的请求的信息参数确定采用哪一个处理器进程来服务该请求。更具体地,配置结构418包含由决定模块408使用的配置信息以过滤由模块406识别的请求信息以确定如何处理请求。决定模块408执行选择的请求信息与配置结构418之内的配置信息的匹配并且基于最接近的匹配确定使用哪一个处理器进程。
基于如上所述的来自于HTTP请求线和首标的参数(主要是URL)的值定义过滤函数。具体地,配置结构(或文件)定义被称为‘视图’的参数的组合。决定模块418比较HTTP请求信息的选择的部分与视图并且基于HTTP请求信息和视图之间的最佳匹配从配置结构418中选择使用的处理器进程。
视图在配置结构之内定义,配置结构包括关于从首标和请求线处理的资源/数据的条件的集合,以及连接参数(诸如请求用于此请求的客户端的IP地址或服务器的IP地址(服务器可以具有配置的多个IP地址))。这些条件被形成为“过滤器”并且保持在存储器中的数据结构中。当接收到请求时,服务器将处理请求数据,并且将它与过滤器/条件的集合匹配以确定视图中的哪一个最佳地匹配该请求。
下列表1阐述假设的示例视图和对应的处理器选择。如果HTTP请求参数匹配过滤器视图,则选择对应的处理器,如表1所指示的。请回到列的顺序–“过滤器视图”应该是第一(向左),“选择的处理机”应该是中间列。规则的“关键”是过滤器,而不是处理机,因为过滤器将确定使用哪一个处理机。
表1
此外,参考附录以进一步说明根据一些实施例的计算机程序代码格式的配置文件。
根据决定模块408对HTTP请求参数的过滤结果,进程400将调用分岔到模块410的分级高速缓存(hcache)处理机、模块412的‘正常的’请求处理机、模块414的DSA请求处理机或模块416的错误请求处理机416中的一个。下面描述这些处理机的每一个。正常的请求是将高速缓存但是不以分级方式的请求;它既不涉及DSA又不涉及分级高速缓存。
图5A是根据一些实施例的在每个代理服务器上运行的第一服务器侧分级高速缓存(‘hcache’)处理机任务500的说明性的流程图。图5B是根据一些实施例的在每个代理服务器上运行的第二服务器侧hcache处理机任务550的说明性的流程图。图5A-5B的任务使用计算机程序代码实现,所述计算机程序代码配置例如处理器、存储器和存储装置的代理服务器资源来执行由图所示的相应的模块指定的动作。
参考图4和5A,假定图4的请求任务400确定对应于模块410的分级高速缓存处理机410应当处理给定的HTTP请求,图5A的模块502醒来以发起HTTP请求的处理。模块504涉及与高速缓存请求相关联的请求密钥的产生。下面参考图11A-11C说明请求密钥产生。基于请求密钥,决定模块506确定接收到请求的代理服务器是否是对于请求的内容的根服务器(即,负责高速缓存内容的服务器)。如上所述,基于内容本身确定对于内容的根服务器。例如,如下面更完整地说明的,可以对于内容计算唯一的散列值,并且散列值可以用于确定对于内容的根服务器。假定当前代理服务器是根服务器,决定模块510执行对于请求的对象的查找。假定查找确定请求的对象实际上被高速缓存在当前代理服务器上,决定模块512确定高速缓存的内容对象是否是‘新鲜的’(即,没有期满)。假定高速缓存的对象是新鲜的,模块512从高速缓存获得对象。对象能够以多种方式之一处于存储器中,或存储在盘或一些其它IO设备上,例如它能够被直接存储在盘上、存储为文件系统中的文件或其它。注意,因为对象能够可能非常大,所以它的仅仅一部分能够被存储在存储器中,并且每次将处理一部分,在其之后取得下一个块。
模块512涉及可能阻塞的动作,因为在请求对象的时间和它被返回的时间之间可能存在显著的等待时间。模块512向NIO层或内容对象做出不阻塞的调用。NIO层又可以设置事件以通知来自于对象的一些规定的数据块当时已被加载到存储器中。模块512在该点被终止,并且当NIO层通知来自于请求的对象的规定的数据块已被加载到存储器中并且准备被读取时,将重新开始。在该点,模块能够重新开始并且读取数据块(在存储器中的),并且将该块传送到发送器进程以准备数据并且将它发送到请求客户端(例如,用户设备或另一个代理服务器)。此处理将重复,直到整个对象被处理并且发送给请求者,即与存储器异步地取得块,将它发送到请求者等等。注意,当模块等待可用的阻塞资源时,由于非阻塞的异步的实施方式,该进程能够实际上处理其它任务、请求或响应,同时保持每个这样的“分离的”任务的状态,因为它被分解成不阻塞的片段的集合。如下所述–利用轮询(诸如epoll)的诸如NIO之类的层使得单个线程/进程能够使用单个调用处理许多同时的任务以等待多个事件/阻塞的操作/设备,每个任务以如上所述的方式实现。与在单独的线程/进程中管理每个任务相反,在单个线程/进程中处理多个任务形成更加高效的整体服务器和好得多的存储器、IO和CPU使用。
如果决定模块506确定当前代理不是根或如果模块508确定代理没有被高速缓存,则内容或决定进程510确定内容不是新鲜的,然后控制到模块514的流。基于请求流–根据下列逻辑确定下一个服务器,如图1所述。注意,请求的路径上的每个跳(服务器)将添加指示请求的路径的内部首标(这对于记录和通告原因同样重要–因为你想要仅仅在系统中记录该请求一次)。能够避免此方式循环,并且每个服务器知道当前请求流和它的次序:
-如果服务器不是根–将调用对于内容的根。只有当根不响应时,它将调用二级根或直接调用源。注意,根服务器在被要求时,如果它不具有内容,将获得内容,因而消除了从前服务器去到可替换的源的需要。
-如果服务器是根–并且不具有高速缓存的内容–它将在相同的POP中从二级根请求(当根从另一个服务器获得请求时,这也将发生)。
-二级根–由于流序列导致知道它是二级的–将直接去到源。
-当使用分级高速缓存保护方法时,如果内容不被高速缓存或如果确定它不是新鲜的,则根服务器将向配置的保护POP,而不是向源,发送请求。
-当请求到达保护POP(从前POP)时,–知道它的服务器处理充当对于此请求的保护服务器(由于如在首标中指示的此请求的处理的流序列),因而就像正常的hcachePOP一样动作(即,在POP中没有找到内容的情况下,它将去从源获得它)。
因此设置阐述从其查找内容的优化的或分级的服务器集合。模块514使用这些设置识别下一个服务器。能够例如对于源(客户)或对于该源的特定的视图定义设置。由于CDN网络在全世界分布的事实,用于DSA和hcache或保护hcache的实际的服务器和“下一个服务器”在每个POP中不同。保护POP将通常由CDN提供者对于每一个POP配置,并且客户能够简单地指示他想要此特征。定义下一个服务器的准确的地址能够通过DNS查询(其中由CDN提供的专用服务将基于它被从其要求的服务器/位置解析DNS查询)或使用一些静态的配置确定。以标准的方式从管理系统在POP之间分布配置,并且特定于POP的本地配置将通常在设置弹出时被配置。注意,配置将总是处于存储器中以确保立即决定(没有IO等待时间)。
模块514基于设置确定高速缓存分级结构中的从其请求内容的下一个服务器。模块516在分级结构识别的设置中向HTTP客户端任务做出对于来自于的下一个服务器的内容的请求以具有高速缓存的内容。
参考图5B,当代理的客户端侧从下一个顺次分级服务器接收响应时,不阻塞的模块552由NIO层唤醒。如果决定模块554确定下一个分级高速缓存返回不新鲜的内容,则控制流到模块556,模块556象模块514一样使用高速缓存分级结构设置用于该内容以确定分级结构中从其查找该内容的下一个顺次服务器;并且模块558像模块516一样调用代理上的HTTP客户端以做出对于来自于分级结构中的下一个服务器的内容的请求。如果决定模块554确定在由分级结构中的下一个更高的服务器返回的信息中存在错误,则控制流到模块560,模块560调用错误处理机。如果决定模块554确定新鲜的内容已被返回而没有错误,则模块562将内容服务到从当前服务器请求了内容的用户设备或其它代理服务器。
图6A是根据一些实施例的在每个代理服务器上运行的第一服务器侧正常高速缓存处理机任务600的说明性的流程图。图6B是根据一些实施例的在每个代理服务器上运行的第二服务器侧正常高速缓存处理机任务660的说明性的流程图。图6A-6B的任务使用计算机程序代码实现,所述计算机程序代码配置例如处理器、存储器和存储装置的代理服务器资源来执行由图所示的相应的模块指定的动作。
参考图4和6A,假定图4的请求任务400确定对应于模块412的正常的高速缓存处理机412应当处理给定的HTTP请求,图6A的模块602醒来以发起HTTP请求的处理。模块604涉及与高速缓存请求相关联的请求密钥的产生。基于请求密钥,决定模块608执行对于请求的对象的查找。假定查找确定请求的对象实际上被高速缓存在当前代理服务器上,决定模块610确定高速缓存的内容对象是否是‘新鲜的’(即,没有期满)。
如果决定模块608确定代理没有高速缓存内容或决定进程610确定内容不是新鲜的,则控制流到模块614。提供识别与搜索的内容相关联的源的源设置。模块614使用这些设置识别对于内容的源。模块616调用当前代理上的HTTP客户端以使它做出对于来自于源的内容的请求。
参考图6B,当代理的客户端侧从源接收响应时,不阻塞的模块652由NIO层唤醒。模块654分析从源接收到的响应。如果决定模块654确定在由源返回的信息中存在错误,则控制流到模块660,模块660调用错误处理机。如果决定模块654确定内容已被返回而没有错误,则模块662将内容服务到从当前服务器请求了该内容的用户设备或其它代理服务器。
图7A是根据一些实施例的在每个代理服务器上运行的第一服务器侧DSA处理机进程700的说明性的流程图。图7B是根据一些实施例的在每个代理服务器上运行的第二服务器侧DSA处理机进程450的说明性的流程图。图7A-7B的进程使用计算机程序代码实现,所述计算机程序代码配置例如处理器、存储器和存储装置的代理服务器资源来执行由图所示的相应的模块指定的动作。
参考图4和7A,假定图4的请求任务400确定对应于模块414的DSA处理机应当处理给定的HTTP请求,图7A的模块702接收HTTP。模块704涉及对于到源的请求确定对应于请求的动态内容的设置。这些设置可以包括下一跳服务器细节(第一英里POP或源)、指示接入服务器的方法(例如,是否使用SSL)的连接参数、SSL参数(如果有的话)、请求线,并且能够修改或向请求首标添加线,例如(但是不限于此),所述线指示这被CDN服务器要求、请求的路径、描述用户客户端(诸如原始的用户代理、原始的用户IP等等)的参数。其它连接参数可以包括例如呼出服务器–这可以用来优化POP之间的连接或POP与特定的源之间的连接–其中确定较少的连接将输出更好的性能(在那种情况下,参与的服务器的仅仅一部分将开放到源的DSA连接,并且其余的将呼出业务引导通过它们)。模块706调用代理上的HTTP客户端以使它做出对于来自于源的动态内容的请求。
参考图7B,当代理的客户端侧从源接收响应时,不阻塞的模块752由NIO层唤醒。模块754分析从源接收到的响应。如果模块754确定响应指示由源返回的信息中的错误,则控制流到模块670,模块670调用错误处理机。如果模块754确定动态动态内容已被返回而没有错误,则模块762将内容内容服务到从当前服务器请求了该动态内容的用户设备或其它代理服务器。
图8是根据一些实施例的在每个代理服务器上运行的错误处理机任务800的说明性的流程图。图8的进程使用计算机程序代码实现,所述计算机程序代码配置例如处理器、存储器和存储装置的代理服务器资源来执行由图所示的相应的模块指定的动作。
参考图4和8,假定图4的请求任务400确定对应于模块416的错误处理机应该响应于接收的HTTP请求被调用。这样的调用可以由基于配置(用于客户/源的视图设置)确定此请求应该被阻塞/限制来产生,请求可能不是有效的(坏的格式、不支持的HTTP版本、对不被配置的主机的请求)或在源侧上存在一些错误,例如源服务器可能宕机或不可访问,一些内部错误可能发生在源服务器中,源服务器可能忙碌,或其它。图8的模块802醒来并且基于在调用时它被给予的参数发起处理错误响应的生成(调用错误处理机的专用请求处理机或映射器将基于配置提供错误的原因并且它应该被如何处理)。模块804确定错误响应的设置。设置可以包括错误的类型(终止连接或发送具有指示错误的状态码的HTTP响应)、关于要被呈现给用户的错误的描述性数据(作为响应体中的内容)、要用在响应上的状态码(例如,‘500’内部服务器错误、‘403’禁止)和能够基于配置添加的特定首标。设置还将包括与请求客户端有关的数据–由请求处理机收集的数据,诸如HTTP版本(可以需要这样的调整来发送支持特定版本的内容)、压缩支持或其它信息。模块806向请求客户端发送错误响应,或能够终止到客户端的连接,如果例如被配置/请求这样做的话。
图9是根据一些实施例的在每个代理服务器上运行的客户端任务900的说明性的流程图。图9的任务使用计算机程序代码实现,所述计算机程序代码配置例如处理器、存储器和存储装置的代理服务器资源来执行由图所示的相应的模块指定的动作。模块902从客户端在其上运行的代理的服务器侧接收对内容对象的请求。模块904准备要被发送给目标服务器的首标和请求。例如,模块将使用原始的接收的请求并且将基于配置确定请求线是否应该被修改(例如–替换或添加URL的一部分),请求首标的修改是否可以是必要的–例如,用下一个服务器将期待看到的可替换的主机替换主机线(这将在配置中详细描述)、添加请求的用户的原始的IP地址(如果被配置的话)、添加内部首标以跟踪请求流。模块906基于服务器模块提供的主机参数准备主机密钥。主机密钥是用于主机的唯一标识符,并且将用于确定到必要的主机的连接是否已经被建立并且可以用于发送请求或是否不存在这样的连接。使用主机密钥,决定模块908确定在客户端在其上运行的代理和请求将要被发送到的不同的代理或源服务器之间是否已经存在连接。客户端在其上运行的代理可以具有连接池,并且做出关于连接池是否包括到对于内容对象的请求将要对其作出的代理的连接的确定。如果决定模块908确定连接已经存在,并且可用于使用,则模块910选择现有连接用于发送对搜索的内容的请求。另一方面,如果决定模块908确定在客户端在其上运行的代理和请求将要被发送到的代理之间当前不存在连接,则模块912将调用NIO层在这两个之间建立新的连接,传递用于该连接创建的所有相关参数。具体地,如果连接应该使用SSL,并且在必要的连接是SSL连接的情况下,验证方法用于验证服务器的密钥。模块914通过由模块910或912提供的连接向另一个代理服务器发送请求并且从其接收响应。模块912和914二者可以涉及阻塞动作,在该阻塞动作中,对NIO层做出调用以管理信息通过网络连接的传送。在任一种情况下,在模块912的情况下一旦创建连接或者在模块914的情况下一旦接收到响应,则NIO层唤醒客户端。
图10是根据一些实施例的表示异步地读和写数据到NIO层中的SSL网络连接的过程1000的说明性的流程图。图10的流程图包括表示根据存储在机器可读存储设备中的机器可读程序代码以执行模块的指定的活动的代理服务器处理资源(例如,处理器、存储器、存储装置)的配置的多个模块1002-1022。假定,在模块1002中,应用正在请求NIO在SSL连接上发送数据块。在模块1004中,NIO然后将测试SSL连接的状态。如果SSL连接准备好发送数据,则在模块1008中,NIO将前进、将使用加密密钥来加密所需数据、并且开始在SSL连接上发送加密的数据。此动作能够具有几个结果。通过模块1010所示的一个可能的结果是具有阻塞的写的写返回故障,因为发送缓冲器满了。在那种情况下,如模块1012指示的,NIO设置事件,并且在连接就绪时,将继续发送数据。由模块1014指示的另一个可能的结果是,在发送数据的一部分之后,SSL协议需要在客户端和服务器之间的一些协商(用于控制数据、密钥交换或其它)。在那种情况下,如模块1016指示的,NIO将在SSL层中管理/设置SSL连接。因为此动作通常涉及客户端和服务器之间的双向网络通信,所以在TCP套接字上执行的读和写动作中的任何一个能够阻塞,导致不能读或写,和由模块1018指示的适当的错误(阻塞的读或写)。NIO保持跟踪SSL连接和通信的状态,并且由模块1020所指示,设置适当的事件,以使得在就绪时,NIO将继续写或从套接字读以完成SSL通信。注意,即使高级别应用请求写数据(发送),NIO也可以从套接字接收对于阻塞的读的错误。如果在模块1004中NIO检测到SSL连接需要被设置或管理(例如,如果还未被发起,并且双方需要执行密钥交换以便开始传送数据),则相似的进程可以发生,导致NIO首先进行到模块1016以准备SSL连接。一旦连接就绪,NIO能够继续(或返回)到模块1008并且发送数据(或剩余的数据)。一旦整个数据被发送,NIO能够通过模块1022指示发送完成并且向请求的应用发送事件。
密钥
图11A-11C是表示创建高速缓存密钥结构1132的过程1100(图11A);和将由高速缓存密钥1132表示的内容与根服务器相关联的过程1130(图11B);和使用高速缓存密钥结构1130管理正常和分级高速缓存的过程1150(图11C)的说明性的附图。
参考图11A,模块1102检查对于服务的源/内容提供者的配置文件以确定来自于HTTP请求线的包括主机标识符和其它信息的哪一个信息将要用于生成高速缓存密钥(或请求密钥)。当处理请求时,处理整个请求线和请求首标,以及描述发出此请求的客户端的参数(诸如客户端的IP地址或它出现的区域)。当定义密钥时可用于从中选择的信息包括(但是不局限于):
-主机
-URL
○全URL
○关于URL的一些正则表达式–像路径、后缀、前缀。
○URL的成分的列表(例如–路径中的第二和第4目录)
-用户代理(或关于它的正则表达式)
-特定的cookie
-IP地址或区域(从地理IP映射接收的)。
模块1104获得由模块1102识别的选择的信息集。模块1106使用数据集创建唯一的密钥。例如,在一些实施例中,数据级连到一个字符串并且执行md5哈希函数。
参考图11B,显示了使用在图11A的进程1100中创建的高速缓存密钥1132来将根服务器(服务器0…服务器N-1)与对应于密钥的内容相关联的过程的示意图。在确定内容对象以分级高速缓存方法被高速缓存的情况下,代理将使用由图101的进程1100对于内容创建的高速缓存密钥来确定它的POP中的哪一个服务器是对于此请求的根服务器。因为密钥是一些唯一的参数集的散列,因此密钥能够被进一步用于通过使用一些将散列密钥映射到服务器的功能来在参与的服务器之间分布内容。本领域技术人员将理解,当使用合适的哈希函数时,例如,能够以合适的方式分布密钥以使得内容将被大致均匀地分布在参与的服务器之间。这样的机制能够是例如获得密钥的开头2个字节。假定例如参与的服务器从0编号到N-1。在这种情况下,2个符号的可能的组合的范围将在服务器之间均匀地分割(例如–读取2个符号为数字X并且计算X模N,获得在0和N-1之间的数字,其将是高速缓存此内容的服务器编号)。注意,任何其它散列函数可以用于以确定性的方式在给定的服务器集合之间分布密钥。
参考图11C的示意图,显示了根据一些实施例的查找分级高速缓存中的对象的过程1150。在给定代理确定特定请求应该被缓存在此特定的代理服务器上的情况下,该服务器将使用请求密钥(或高速缓存密钥)并且将在完全存储在存储器中的查找表1162中查找它。查找表使用高速缓存密钥索引,以使得关于对象的数据被存储在由对于此对象(来自于请求)计算的高速缓存密钥索引的行中。查找表将包含服务器上的所有高速缓存的对象的准确的索引。因而,当服务器接收到请求并且确定它应当高速缓存这样的请求时,它将使用高速缓存密钥作为到查找表的索引,并且将检查需要的内容是否实际上被高速缓存在代理服务器上。
NIO层
图12是根据一些实施例的表示运行在代理服务器之内的软件1200的结构的示意图。软件体系结构图显示了应用1202-1206、为应用提供异步框架的网络IO(NIO)层1208、提供异步的并且不阻塞的系统调用的操作系统1210、和此代理服务器上的IO接口(即,网络连接和接口1212、磁盘接口1214和文件系统访问接口1216)之间的关系。将理解,可以存在其它没有显示的IO接口。
现代操作系统提供不阻塞的系统调用和操作并且提供库来轮询设备和可以具有阻塞的动作的文件描述符。阻塞操作例如可以从一些IO设备(例如盘或网络连接)请求数据块。由于这样的行动可能存在的等待时间,IO数据检索对于CPU速度可能花费长时间(例如,与子纳秒长的CPU周期相比,毫秒到秒来完成IO操作)。为了防止资源的效率低的使用,操作系统将提供不阻塞的系统调用,以使得当执行可能阻塞的动作时,诸如请求从IO设备读数据块,OS可以立即返回指示任务是否成功完成的调用,并且如果没有,则将返回状态。例如–当从TCP套接字请求读16KB块时,如果读取的套接字缓冲器具有16KB的数据准备好被读入存储器中,则调用将立即成功。但是,如果不是所有数据都可用,则OS1210将提供部分可用的数据并且将返回指示可用数据量和故障的原因的错误,例如–阻塞的读,指示读缓冲器为空。应用然后能够再试一次从套接字读,或设置事件,以使得当设备(在这种情况下为套接字)具有数据并且可用于从中读时,操作系统将事件发送到应用。这样的事件能够使用例如Linux操作系统中的epoll库来设置。这使得应用能够在等待资源可用时执行其它任务。
类似地,在将数据块写入设备时,例如写入TCP套接字时,由于写入缓冲器满的原因,操作可能失败(或被部分地执行),并且设备在那时不能获得附加的数据。也可以设置事件以指示写入装置何时可用于被使用。
图13是显示使用用于从设备读取数据块的epoll库实现的非阻塞过程1300的说明性的流程图。此方法可以被想要获得数据块的完整的异步读的较高级别应用1202-1206使用,并且在NIO层1208中实现,NIO层1208是非阻塞调用的OS1210到应用之间的层。最初,模块1302(nb_read(dev,n))做出从设备“dev”读“n”个字节的非阻塞的请求。请求立即返回,并且可以在决定模块1304中检查返回代码,其确定请求是否成功。如果请求成功并且请求的数据被接收到,则动作完成并且请求的数据在存储器中可用。在该点,NIO框架1208通过模块1306可以向请求的高级别应用1202-1206发送请求的块可用于被读的指示。但是,如果请求失败,则NIO1208通过模块检查故障原因。如果原因是因为阻塞的读,则NIO1208通过模块1308将更新要被读的剩余的字节,并且将epoll_wait调用调用到OS,以使得OS1210通过模块1310可以向NIO1208指示设备何时准备好被从中读取。当这样的事件发生时,NIO1208可以对于剩余的字节再次发出非阻塞的读请求,等等,直到它接收到所有请求的字节,其将完成请求。在该点,如上所述–请求的数据可用的事件将通过块1306发送到请求的高级别应用。
因此,NIO1208在OS1210的帮助下监视诸如存储器(例如缓冲器)之类的设备资源的可用性或可以限制数据可以被传送的速率的连接,并且当它们变得可用时使用这些资源。此对于线程300/320对其它任务的执行透明地发生。更具体地,例如,因此,NIO层1208管理诸如涉及通过可以逐渐出现的网络连接的数据传送的读或写之类的动作,例如数据被通过以k字节块的网络连接传送或发送。由于例如TCP窗口尺度,在块的发送或接收之间可以存在延迟。NIO层处理数据的递增的发送或接收,同时需要数据的任务被阻塞并且同时线程300/320继续处理队列322上的其它任务,如参考图3B-3C说明的。也就是说,NIO层透明地处理阻塞的数据传送(以非阻塞的方式),以使得其它任务继续被执行。
NIO1208通常将为高级别应用提供其它高级别异步请求,以当在具有如上所述的操作系统的低级别层中实现请求时,使用来读取内容块。这样的动作可以是数据线(要被确定为以换行符结束的数据块)的异步读、读取HTTP请求首标(完成全HTTP请求首标)或其他选项。在这些情况下,NIO将读取数据块,并且将确定请求的数据何时满足,并且将返回需要的对象。
图14是功能上表示用于传送从一个设备读取的要被写到另一个设备的数据的、能够由高层应用使用NIO框架创建的数据的虚拟“隧道”1400的示意图。例如当将高速缓存的文件服务到客户端时(从文件或盘读数据并且在套接字上将它发送到客户端),或当将内容从二级服务器(源或另一个代理或高速缓存服务器)传送到客户端时,可以使用这样的虚拟隧道。在此示例中,通过模块1402,高级别应用1202例如发出对来自于NIO1208的数据块的请求。注意,虽然此示例参考基于尺寸的数据块,但是该处理还可以涉及例如来自于HTTP请求的“getline”(获得线)或来自于HTTP请求的“getheader”(获得首标)。模块1302涉及做出的非阻塞的调用,如参考图3B-3C所述的,因为可能存在与该动作有关的显著的等待时间。继续该示例,当数据块在要由应用使用的存储器中可用时,如模块1404指示,将事件发送给请求的应用,并且然后在存储器中处理数据并且基于设置调整数据以倍发送给第二设备,如模块1406所指示。这样的调整可以是在接收客户端不支持压缩、改变编码或其它的情况下(但是不局限于)解压缩对象。一旦数据被修改并且准备被发送,对NIO的异步调用将发生,如模块1408指示,以要求将数据写到第二设备(例如,连接到请求客户端的TCP套接字)。模块1308涉及做出的非阻塞的调用,如参考图3B-3C所述的,因为可以存在与该动作有关的显著的等待时间。当数据块成功地传送到第二设备时,NIO将向应用指示写已经成功地完成,如箭头1410表示。注意,此指示指示未必意味着数据被实际上传送到请求客户端,而是仅仅意味着数据被传送到发送设备,并且现在在设备的发送缓冲器中或者被发送。在该点,应用可以向NIO发出对于另一个块的请求,或如果数据完成–则终止会话。以这样的方式,任务和NIO层可以更有效地通信,因为应用级任务逐渐消耗变得从NIO层逐渐可用的数据。此实施方式将平衡设备的读和写缓冲器,并且将保证没有数据在被需要之前被带进服务器存储器。这对利用读和写缓冲器使能高效的存储器使用是重要的。
CDN服务器的软件组件
这里使用的‘自定义对象’或‘自定义进程’是指可以由CDN内容提供者定义以在整个CDN进程流的进程中运行以实施影响最终用户请求和/或对最终用户请求的响应的处理的决定、逻辑或进程的对象或进程。自定义对象或自定义进程可以用配置机器以实现该决定、逻辑或进程的程序代码表示。自定义对象或自定义进程已被即时应用的分配者称为‘云块(cloudlet)’。
图15是根据一些实施例的显示运行在代理服务器之内的软件的结构的附加细节的示意图。操作系统1502例如管理硬件、提供文件系统、网络驱动器、进程管理、安全。在一些实施例中,操作系统包括Linux操作系统的版本,被调节以最佳地服务CDN需要。盘管理模块1504管理对盘/存储装置的访问。一些实施例在每个服务器中包括多个文件系统和盘。在一些实施例中,OS1502提供在盘(或分区)上使用的文件系统。在其它实施例中,OS1502使用异步IO(AIO)提供直接磁盘访问1506,其允许应用以非阻塞的方式访问盘。盘管理模块1504将系统中的不同的盘区分优先次序并且管理,因为不同的盘可以具有不同的性能特征。例如,一些盘可以更快速,并且一些更慢速,并且一些盘可以具有比其它盘更多可用的存储器容量。AIO层1506是由诸如例如Linux之类的许多现代的操作系统提供的服务。当使用利用AIO的原始磁盘访问时,盘管理模块1504将管理设备上的用户空间文件系统,并且将管理从/到设备的读和写,以用于最佳的使用。盘管理模块1504提供对于系统中的其它组件的想要写或读或写到盘的API和库调用。因为这是非阻塞的动作,所以它提供异步例程和方法使用它,以使得整个系统可以保持高效。
高速缓存管理器1508管理高速缓存。从代理/CDN服务器请求和服务的对象可以在本地被高速缓存。是否高速缓存对象的实际决定在上面详细地讨论并且本身不是高速缓存管理的一部分。对象可以被高速缓存在存储器中、在标准的文件系统中、在私有的“优化的”文件系统中(如上所述,例如原始磁盘访问)、以及在更快速的盘或更慢速的盘上。
通常,存储器中的对象还将被映射/存储在盘上。每个请求/对象被映射以使得高速缓存管理器可以在它的索引表(或查找表)上查找所有高速缓存的对象并且检测对象是否被在本地高速缓存在服务器上。此外,指示对象被存储在何处并且对象多么新鲜以及何时它最后一次被请求的特定数据也可用于高速缓存管理器1508。对象通常由它的“高速缓存密钥”识别,“高速缓存密钥”是对于该对象的唯一密钥,其允许对于对象的快速的并且高效的查找。在一些实施例中,高速缓存密钥包括对于识别对象的参数集的一些散列码,诸如URL、URL参数、主机名称或它的一部分,如上所述。因为高速缓存空间被限制,因此高速缓存管理器1508不时从高速缓存删除/移除对象,以便释放空间以高速缓存新的或更多大众化的对象。
网络管理模块1510管理网络有关的决定与连接。在一些实施例中,网络有关的决定包括找到并定义最佳路线、设置并更新服务器的IP地址、服务器之间的负载平衡、以及基本网络活动,诸如倾听新的连接/请求、处理请求、在已建立的连接上接收和发送数据、在需要时管理连接上的SSL、管理连接池、以及集中目标是相同的连接上的相同的目的地的请求。与盘管理模块1504类似,网络管理模块1510以非阻塞的异步方式提供它的服务,并且通过NIO(网络IO)层1512提供对于系统中的其它组件的API和库调用,如上所述。网络管理模块1510连同网路优化模块1514目的是实现有效的网络使用。
网路优化模块1514连同连接池1516以最佳的方式管理连接和网络,遵循不同的算法,其不形成本发明的一部分,以获得最佳的使用、带宽、等待时间或到相关设备的路线(是最终用户、另一个代理或源)。网路优化模块1514可以采用诸如网络测量、到不同的网络的往返时间和调整网络参数(诸如堵塞窗口尺寸、不止一次发送分组或其它技术)之类的方法以实现最佳的使用。网络管理模块1510连同网路优化模块1514和连接池1516目的是高效的网络使用。
请求处理器模块1518在非阻塞的异步环境之内管理作为多个非阻塞的任务的请求处理,一旦需要的资源变得可用,每个非阻塞的任务可以被单独地完成。例如,解析请求之内的URL和主机名称通常只有当与请求相关联的第一个数据块被从网络获取并且在服务器存储器之内可用时才被执行。为了处理请求并且知道所有的用户设置和规则,请求处理器1518使用配置文件1520和视图1522(特定的视图是每个CDN内容提供者的配置文件)。
配置文件1520指定诸如例如哪些CDN内容提供者被主机名称服务、识别之类的信息。配置文件1520也可以提供诸如例如CDN内容提供者的源地址(以从其取得内容)、增加/修改的首标(例如–添加X-forwarded-for首标作为通知源服务器原始的请求者的IP地址的方式),以及关于如何服务/高速缓存响应的指示(高速缓存或不高速缓存,并且在它应当高速缓存的情况下,TTL)。
视图1522充当对于诸如URL信息之类的首标信息的过滤器。在一些实施例中,视图1522动作以确定请求之内的首标信息是否指示一些特定的自定义对象代码将要被调用以处理请求。如上所述,在一些实施例中,视图1522指定例如在请求之内指示的不同的特定的文件类型的不同的处理(利用请求的URL文件名后缀,诸如“.jpg”)或对于URL(路径)的一些其它规则。
存储器管理模块1524执行存储器管理功能,诸如为应用分配存储器并且释放未使用的存储器。许可和访问控制模块1526提供安全性并且对无特权的任务的执行进行保护并且防止用户执行某些任务和/或访问某些资源。
记录模块1528提供对于运行在服务器上的其它进程的记录设施。因为代理服务器提供要被CDN内容提供者支付的‘服务’,因此服务器处理的客户请求和关于请求的数据被记录(即,记录)。记录的请求信息是使用的追踪错误,或服务内容的问题或其它问题。记录的请求信息也用于提供帐单数据以确定客户费用。
控制模块1530负责监视系统健康并且充当代理,通过该代理,CDN管理(未示出)控制服务器、发送配置文件更新、系统/网络更新和动作(诸如指示从高速缓存清除/冲刷内容对象的需要)。此外,控制模块1530充当通过其CDN管理(未示出)分布自定义对象配置以及自定义对象代码到服务器的代理。
自定义对象框架1532管理启动自定义对象并且管理自定义对象与代理服务器的其它组件和资源的交互,如下面更完整地描述的。
自定义对象框架
图16是根据一些实施例的显示合并在运行在代理服务器之内的图15的结构的之内的自定义对象框架的细节的示意图。自定义对象框架1532包括根据配置文件1520识别代理服务器知道的自定义对象的自定义对象储存库1602。每个自定义对象利用唯一标识符、它的代码和诸如指示给定自定义对象的有效的配置的XSD(XML模式定义)文件之类的它的设置来登记。在一些实施例中,给定自定义对象的XSD文件设置用于确定给定自定义对象配置是否有效。
自定义对象框架1532包括自定义对象工厂1604。自定义对象工厂1604包括负责启动新的自定义对象的代码。注意,启动新的自定义对象未必涉及开始新的进程,而是可以使用普通线程来运行自定义对象代码。自定义对象工厂1604设置自定义对象需要的参数和环境。工厂映射该自定义对象所需的相关数据,具体地–请求和响应的所有数据(在响应已经给定的情况下)。由于为其启动自定义对象的请求和/或响应数据通常已经被存储在由存储管理模块1524管理的存储器1606的一部分中,因此自定义对象工厂1604将新启动的自定义对象映射到包含存储的请求/响应的存储器1606的一部分。自定义对象工厂1604将保护的名称空间分配到启动的自定义对象,并且结果,自定义对象不可以接入不在它的名称空间中的文件、DB(数据库)或其它资源。自定义对象框架1532阻塞自定义对象访问存储器的其它部分,如下所述。
在一些实施例中,启动自定义对象并且运行在应该被称为‘沙箱’环境1610中。一般说来,在计算机安全领域,“沙箱”环境是采用一个或多个安全机制来分离运行的程序的环境。沙箱环境常常用于执行未测试的代码、或从未验证的第三方、提供者和不信任的用户获得的不信任的程序。沙箱环境可以实现多个技术来限制对沙箱环境的自定义对象访问。例如,沙箱环境可以掩盖自定义对象的调用、限制存储器访问并且在代码之后通过释放存储器和资源来‘清洁’。在这里描述的CDN实施例的情况下,不同的CDN内容提供者的自定义对象运行在‘沙箱’环境中,以便在执行期间将自定义对象彼此隔离,以使得它们彼此不干扰或与在代理服务器之内运行的其它进程干扰。
沙箱环境1610包括自定义对象异步通信接口1612,通过其自定义对象访问并且与其它服务器资源通信。自定义对象异步通信接口1612掩盖系统调用和对阻止的资源的访问并且根据情况管理或阻止这样的调用和访问。接口1612包括管理对这样的资源的访问的库/工具/包装1614-1624(每个被称为‘接口工具’),以使得自定义对象代码访问可以被监视并且可以服从预定策略和许可并且遵循异步框架。在一些实施例中,说明性的接口1612包括网络访问接口工具1614,其提供对在本地或联网的存储装置上存储的数据的文件访问(例如,到盘管理的接口或服务器上的其它元件)。说明性的接口1612包括存储或获得来自于高速缓存的内容的高速缓存访问接口工具1618;它与高速缓存管理器通信或提供到高速缓存管理器的接口。在从另一个服务器请求一些数据时,高速缓存访问接口工具1618也提供到NIO层和连接管理器的接口。接口1612包括访问非sqlDB或分布式DB的一些其它实例的共享/分布式DB访问接口工具1616。示例接口工具1616的典型的使用示例是访问可以包含自定义对象所用的特定的用户数据的分布式只读数据库或CDN可以提供的一些全局服务。在一些情况下,这些服务或特定的DB实例可以被作为单独的工具封装。接口1612包括将IP范围映射到特定的地理位置1624的地理映射DB接口工具1624。此示例工具1624可以为自定义对象代码提供此能力,以使得自定义对象代码不会需要对于每个自定义对象单独地实现此搜索。接口1612也包括用户代理规则DB接口1622,其列出关于用户代理字符串的规则并且提供关于用户代理能力的数据,诸如它是什么类型的设备、版本、分辨率或其它数据。接口1612也可以包括IP地址阻止工具(未示出),其提供对要被阻止的IP地址的数据库的访问,因为它们已知被恶意的网络蜘蛛(bot)、间谍网络或垃圾发布者使用。本领域技术人员将理解,说明性的接口1612也可以提供其它接口工具。
自定义对象
图17是根据一些实施例的显示在图16的自定义对象框架之内运行在沙箱环境之内的自定义对象的细节的示意图。自定义对象1700包括计量资源使用组件1702,其计量并且记录由特定的自定义对象实例使用的资源。此组件1702将计量CPU使用(例如,通过记录它何时开始运行以及它何时完成)、存储器使用(例如,通过掩盖自定义对象完成的每个存储器分配请求)、网络使用、存储装置使用(二者也由相关的服务/工具提供)或DB资源使用。自定义对象1700包括管理配额组件1704和管理许可组件1706以及管理资源组件1708以分配和指派自定义对象所需的资源。注意,沙箱框架1532可以掩盖所有自定义对象请求以便管理资源的自定义对象使用。
自定义对象使用来自于框架1532的自定义对象异步通信接口1612以获得对其它服务器资源的访问并且与其它服务器资源通信。
自定义对象1700被映射到图16所示的共享存储器1606之内的由自定义对象工厂1604分配给可以由特定自定义对象访问的存储器1710的部分的图17所示的存储器1710的特定部分。存储器部分1710包含与自定义对象的启动相关联的实际请求和关于请求的附加数据(例如,来自于网络、配置、高速缓存等等)和响应(如果存在的话)。存储器部分1710表示服务器上的请求被处理至少直到该点的实际的存储器的区域。
请求流
图18是示出了根据一些实施例的从最终用户的用户代理到达的请求流的说明性的流程图。将理解,自定义对象实现具有内置的逻辑以实现根据特定CDN提供者要求定制的请求(或响应)处理的代码。自定义对象可以识别它对于特定的配置可以获得的外部参数。最初,请求由请求处理器1518处理。实际上,请求首先由OS1502和网络管理器1510处理,并且请求处理器1518将经由NIO层1512获得请求。但是,因为NIO1518和网络管理器1512以及盘/存储装置管理器1504在每次访问网络或盘时都涉及,因此它们没有显示在此图中以便简化说明。
请求处理器1512分析请求并且将比对配置文件1520来匹配它,配置文件1520包括客户的定义(具体地–确定请求被服务的客户是谁的主机名称)和对于该特定的主机名称定义的特定的视图,对于这些视图具有所有特定的配置。
CDN服务器组件1804表示上面参考图3A-14说明的整个请求处理流,因此它封装流的那些组件,诸如高速缓存管理和服务请求的其它机制。因而,将理解,利用自定义对象的请求和响应的处理被合并到整个请求/响应处理流中,并且与整个进程同时存在。单个请求可以利用参考图3A-14描述的整个流并且通过自定义对象处理二者来处理。
因为请求处理器1518根据配置1520分析请求,所以可以断定此请求落入特定的视图之内,即“视图V”(或如图25、26A-26B的示例自定义对象XML配置文件所示–显示视图和它的配置以及该视图的自定义对象实例的配置)。在此视图中,让我们假定它指示“自定义对象X”将处理此请求(可能可以存在被指示一个接一个地处理该请求的一连字符串自定义对象,但是因为请求被字符串联地处理,所以首先调用单个自定义对象,并且在这种情况下,我们假定它是“自定义对象X”)。
为了启动自定义对象X的特定代码以处理请求/执行它的逻辑,请求处理器1518将调用自定义对象工厂1604为自定义对象提供配置,以及请求的上下文:即已经指派给请求/响应的相关的资源、客户ID、存储器和要被启动的自定义对象的唯一名称。
工厂1604将识别自定义对象储存库1602中的自定义对象代码(根据唯一名称),并且将根据自定义对象具有的XSD验证自定义对象配置。然后它将设置环境:定义配额、许可、映射相关存储器和资源、并且启动具有像图17所示的结构的自定义对象X以在图16所示的自定义对象沙箱环境1610之内运行。自定义对象X提供记录、计量并且验证许可和配额(根据工厂1604设置的自定义对象实例的识别)。工厂1604也将自定义对象X实例与它的配置数据相关联。一旦自定义对象开始运行,它可以执行由它的代码1712指定的进程,其可以涉及配置机器以例如执行计算、测试和对于内容的操作、请求和响应本身、以及与它们相关联的数据结构(诸如时间、高速缓存指示、源设置等等)。
自定义对象X运行在‘沙箱’环境1610中以使得不同的自定义对象不彼此干扰。自定义对象通过如上所述的接口工具访问“受保护的”或“受限的”资源,诸如利用地理IP接口工具1624来获得关于请求从哪里到达的准确的地理位置的解;利用高速缓存接口工具1620以从高速缓存获得对象或将对象放置到高速缓存;或利用DB接口工具1622以从一些数据库获得数据或从服务获得另一个接口工具(未示出),如上所述。
一旦自定义对象X完成它的任务,自定义对象框架1532释放对于自定义对象X设置的特定的资源,并且控制返回到请求处理器1518。请求处理器1518然后将返回到等待任务的队列,例如如上参考图3B-3C所述,并且将处理下一个任务,如参考图3B所述。
自定义对象代码可以配置机器以通过修改请求结构、改变请求、配置/修改或建立响应,以及在一些情况下生成新的请求–或者异步(它们的结果不会直接影响此特定请求的响应)或者同步–即新的请求的结果将影响现有的请求(并且是流的一部分),来影响给定请求的进程流。注意,这里在说同步和异步时,它是在请求流的上下文下说的,而不是在服务器的上下文下,服务器本身异步地、非阻塞地运行。但是被分解以分离任务的请求可以在发起将被并行处理的新的请求的同时被完成,不影响初始请求并且不阻止它完成–因而是异步的。
例如,自定义对象可以通过将新的请求添加到队列中、或通过启动“HTTP客户端”来使得新的请求被“注入”到系统中,如上参考图3A-14所述。注意,新的请求可以是内部的(如在重写请求情况下,当新的请求应该由本地服务器处理时),或外部的–诸如当将请求转发到源时,而且可以是新生成的请求。
根据请求流–请求然后可以被转发给源(或第二代理服务器)1518、返回到用户、终止或进一步处理–或者由另一个自定义对象或者由如上参考图3A-14所述的流(例如–检查高速缓存中的对象)。
当获得从源回来的响应时,请求处理器1518再次处理请求/响应的流,并且根据配置和相关视图,可以决定启动自定义对象来处理请求或引导它到标准的CDN处理进程,或它们的一些组合(第一个然后其它)–再次,也在该方向上,请求处理器1518将管理请求流直到它确定将响应发送回最终用户。
自定义对象的CDN内容提供者管理更新
图19是根据一些实施例的显示新的自定义对象代码的布置的说明性的流程图。图19的进程可以由CDN内容提供者使用来将新的自定义对象上传到CDN。CDN内容提供者可以使用网络接口(入口),终端1902通过网络入口访问CDN管理应用,可以使用程序/软件来经由API1904访问管理接口。管理服务器1906通过该接口将接收自定义对象代码、唯一名称和确定自定义对象代码支持的XML配置的格式的XSD。
唯一名称可以由客户提供–然后由管理服务器验证是唯一的(如果不唯一,则返回错误),或者可以由管理服务器提供并且返回到客户以用于客户的进一步使用(因为客户将需要名称来指示他想要特定的自定义对象执行一些任务)。
在该点,管理服务器1906将自定义对象连同它的XSD存储在自定义对象储存库1908中,并且分布自定义对象与它的XSD以用于存储在与每个这样的服务器上的管理/控制代理通信的所有相关CDN服务器的相应的自定义对象储存库(类似于自定义对象储存库1602)(例如,POP1、POP2、POP3之内的CDN服务器的自定义对象储存库)之内。
将理解,图19示出了新的自定义对象代码(不是配置信息)的布置。一旦自定义对象被布置,它可以由CDN内容提供者通过它们的配置来使用。配置更新以相似的方式完成,通过API1904或网络入口1902更新,并且分配给相关CDN服务器。配置由管理服务器1906验证,以及当它获得新的配置时由每一个服务器验证。该验证由CDN配置的标准的验证器来完成,并且每个自定义对象配置区段利用它的提供的XSD来验证。
图20是根据一些实施例的根据图4-9的总体CDN流的说明性的流程图。图20的进程表示配置机器以执行所示的操作的计算机程序。此外,将理解,图20的每个模块2002-2038表示执行参考这样的模块描述的动作的机器的配置。图20以及图20的后面的描述流提供用于说明自定义对象进程如何可以被嵌入在根据一些实施例的图4-9的整个CDN请求流之内的上下文。换句话说,包括图20以提供整个CDN流的整个描写。注意,图20提供参考图4-9详细描述的整个流的简化描写,以便避免丢失细节并且简化说明。具体地,图20省略参考图4-9描述的一些子进程的某些细节。此外,图8的错误处理情况没有示出在图20中以便简化描写。本领域技术人员可以参考在图4-9中提供的整个进程的详细说明,以便理解参考图20描述的整个CDN进程的细节。
模块2002接收从最终用户到达的诸如HTTP请求之类的请求。模块2004解析请求以识别请求被引导到的CDN内容提供者(即,‘客户’)。模块2006解析请求以确定哪一个视图最佳匹配该请求,在图20的示例中的Hcache视图、正常的高速缓存视图或DSA视图。
假定模块2006选择分支2005,模块2008创建高速缓存密钥。如果高速缓存密钥指示请求的内容被存储在正常的本地高速缓存中,则模块2010在接收该请求的代理服务器的正常的高速缓存中查看。如果模块2010确定请求的内容在本地正常的高速缓存中可用,则模块2012从正常的高速缓存获得对象并且模块2014准备响应以将请求的内容发送到请求的最终用户。但是,如果模块2010确定请求的内容在本地正常的高速缓存中不可用,则模块2013向源服务器发送对期望的内容的请求。随后,模块2016从源服务器获得请求的内容。模块2018将从源取回的内容存储在本地高速缓存中,并且模块2014然后准备响应以将请求的内容发送到请求的最终用户。
如果由模块2008创建的高速缓存密钥确定请求的内容被存储在分级高速缓存中,则模块2020确定对于该请求的根服务器。模块2022从根服务器请求该内容。模块2024从根服务器获得请求的内容,并且模块2014然后准备响应以将请求的内容发送到请求的最终用户。
现在假定模块2006选择分支2007,模块2026确定DSA是否被使能。如果模块2026确定DSA不被使能,则模块2028识别被指定来提供对于该请求的内容的源服务器。模块2030向源服务器发送对期望的内容的请求。模块2032从源服务器获得包含请求的内容的响应,并且模块2014然后准备响应以将请求的内容发送到请求的最终用户。
但是,如果模块2026确定DSA被使能,则模块2034定位利用DSA服务内容的服务器(源或其它CDN服务器)。模块2036获得与由模块2034识别的源或服务器的优化的DSA连接。控制然后流向模块2030并且如上所述进行。
假定高速缓存分支2005或动态的分支2007已经导致控制流向模块2014,则模块2038将响应服务到最终用户。模块2040记录关于对请求做出响应所进行的动作的数据。
图21是根据一些实施例的自定义对象进程流2100的说明性的流程图。图21的进程表示配置机器以执行所示的操作的计算机程序进程。此外,将理解,图21的每个模块2102-2112表示执行参考这样的模块描述的动作的机器的配置。进程2100由从图20所示的整个进程流之内的模块到自定义对象框架的调用发起。将理解,进程2100运行在自定义对象框架1532之内。模块2102响应于调用在自定义对象框架之内运行以发起自定义对象储存库1602之内的自定义对象代码。模块1604获得在配置文件之内提供的自定义对象名称和参数并且使用它们以识别哪一个自定义对象将要被启动。模块2106调用自定义对象工厂1604以设置要被启动的自定义对象。模块2108设置对于自定义对象的许可和资源并且启动自定义对象。模块2110表示运行在沙箱环境1610之内的自定义对象。模块2112将控制返回到请求(或响应)流。
注意,模块2110被标记为可能阻塞的。存在自定义对象运行并且不是阻塞的情况。例如,自定义对象可以操作来检查IP地址并且验证它在配置文件中提供的允许的IP地址范围之内。在那种情况下,所有所需的数据都处于本地服务器存储器中,并且自定义对象可以检查并且验证而不做出任何可能阻塞的调用,并且流2100将不间断地继续到标准的CDN流。但是,如果需要模块自定义对象来执行诸如例如终止连接或向用户发送指示此请求未被授权的“403”响应之类的一些操作,则在模块2110中运行的自定义对象(终止或响应)可能是阻塞的。
图22A-22B是显示在阻塞的图21的流之内运行的自定义对象的操作的示例的说明性的附图。模块2202表示由图21的模块2110表示的运行的自定义对象。模块2204显示了示例自定义对象流涉及从高速缓存获得对象,其是阻塞操作。模块2206表示在从高速缓存接收到请求的内容后自定义对象从阻塞操作醒来。模块2208表示在接收到请求的内容之后自定义对象继续处理。模块2210表示在自定义对象处理的完成之后自定义对象将控制返回到整个CDN处理流。
图23是根据一些实施例的向自定义对象可以请求的可能阻塞的服务提供一些示例的说明性的流程图。图23还在应用于启动HTTP客户端和应用于识别请求是否被串行化(在此文档的其它地方中,这可以被称为同步,但是为了避免与异步框架混淆,我们这里使用术语‘串行化’)的新请求的两类任务之间区分。在串行化的请求中,需要请求的响应/结果以便完成任务。例如,当处理对对象的请求时,发起HTTP客户端以从源获得对象被‘串行化’,因为只有当来自于源的响应可用时,原始的请求才可以被利用包含刚刚被接收的对象的响应来应答。
相反,后台HTTP客户端请求可以被用于其它目的,如下面的段落所描述的,但是客户端请求的实际结果不会影响对原始请求的响应,并且不需要接收的数据以便完成请求。在后台请求的情况下,在请求添加到队列之后,自定义对象可以继续它的任务,因为它不需要等待请求的结果。后台HTTP请求的示例是到源的异步请求,以便向该源通知该请求(例如,用于记录或监视目的)。这样的后台HTTP请求不应该影响到最终用户的响应,并且自定义对象可以甚至在向源发送请求之前向用户服务该响应。在图23中,后台类型的请求被标记为非阻塞的,因为实际上它们不被立即处理,而是仅仅被添加到任务队列322。
示例自定义对象动作
参考图20,以下段落提供可以利用在整个CDN流的相应的模块处的自定义对象进程执行的动作的说明的例子。
以下是可以从模块2006调用的自定义对象进程的示例。
1)当从用户接收到请求时:
i.应用访问控制表(ACL)规则和高级的访问控制规则。自定义对象可以检查请求并且基于请求的特性和特定的视图阻塞访问。例如,客户可能想要仅仅使能来自于iPhone设备、来自于特定的IP范围或来自于特定的国家或区域的用户对站点的访问,并且阻塞所有其它请求、返回HTTP403响应、重定向到一些页、或简单地重置上述连接–客户由HTTP请求首标中的主机名称识别。此客户能已经配置了白名单/黑名单的IP范围的列表并且自定义对象可以应用规则。
b.基于指定的请求(或“视图”)–自定义对象可以生成响应页并且直接服务它,旁路整个流。再次–在那种情况下,自定义对象可以通过检查普通的CDN框架不支持的请求的参数来扩展视图的概念–在任何给定时间,CDN将知道基于一些预定义的自变量/参数识别。例如,假定CDN不支持“cookies”作为“视图”过滤的一部分。重要的是理解这仅仅是示例,因为不存在对于将它添加到视图的真正的局限性,但是在任何给定时间,将存在不是它的一部分的参数。
c.基于指定的请求,自定义对象可以将该请求重写为另一个请求-例如,基于地理位置重写请求以合并该位置。以使得来自于德国的形式www.x.com/path/file的请求将被重写为www.x.com/de/path/file,或者形式www.x.com/item/item-id/item-name的请求将被重写为www.x.com/item.php?id=item-id)。一旦请求被重写–它现在可以被当做系统中新的请求(自定义对象代码将生成新的请求、嵌套在当前请求中,将被当做新的请求并且将遵循标准的CDN流),或可以立即旁路逻辑/流并且将新的请求直接发送到源(包括可以由自定义对象确定的可替换源)或者发送到另一个CDN服务器(像在DSA的情况一样)。–通常现在对于源完成的关于地理目标、智能高速缓存等等的决定现在可以在边缘被完成。另一个示例–大的项目录可以在将搜索/导航反映到项的URL中被呈现给世界。以使得x.com/tables/round/12345/ikea-small-round-table-23和x.com/ikea/brown/small/12345/ikea-small-round-table-23实际上是相同的项,并且可以被高速缓存为相同的对象。通过减少源的负荷、改善高速缓存效率并且改善站点性能–当将理解URL的逻辑移动到边缘时。
d.与重写相似,自定义对象可以重定向–其中代替在现有的请求之上服务新的请求,自定义对象将立即发送具有代码301或302(或其它)的HTTP响应和新的URL以重定向–指示浏览器从新的URL获得内容。通过那么做,这与生成页并且直接从边缘服务它相似。
e.在此初始阶段,自定义对象代码可以实现不同的验证机制以验证发出请求的最终用户的许可或证书。假定客户想要我们用用户/密码和特定的IP范围的一些组合验证用户,或使能仅仅来自于特定的区域的访问或验证使能时间范围之内的访问的令牌。每个客户可以使用不同的验证方法。
以下是可以从模块2008调用的自定义对象进程的示例。
2)自定义对象代码可以替换由CDN使用的默认方法以定义高速缓存密钥。例如–自定义对象代码可以指定,对于特定请求,高速缓存密钥将由附加参数、较少的参数或不同的参数确定。
a.例如–在客户想要在请求特定的页时将不同的内容服务到不同的移动用户(所有请求相同的URL)的情况下,源可以根据例如用户代理确定移动设备的类型。–用户代理是HTTP首标、HTTP标准的一部分,其中用户代理(移动设备、浏览器、蜘蛛或其它)自身可以识别。在那种情况下,客户将想要请求根据用户代理被服务和高速缓存。为了完成此操作–一个人可以将用户代理添加到高速缓存密钥,或更准确地,对于用户代理的一些条件,因为相同类型的设备可以具有稍有不同的用户代理。
b.另一个示例将是将特定的cookie值添加到高速缓存密钥。基本上cookie由客户设置,或也可以由自定义对象代码基于客户配置来设置)。
c.另一个示例可以是自定义对象处理URL到一些新的URL或挑选URL的一些特定的部分并且将在确定高速缓存密钥时仅仅使用它们的情况。例如–对于格式HOST/DIR1/DIR2/DIR3/NAME的url,自定义对象可以确定要用于确定请求的唯一性的唯一值是HOST,DIR1,DIR3,因为由于网络应用被写的方式,相同的对象/页可以被以不同的方式参考,其中在URL结构中添加一些数据(DIR2和NAME),尽管附加的数据不相关以便服务实际的请求-在此示例中,自定义对象将“理解”URL结构,并且因而可以处理它并且更有效地高速缓存它,避免重复等等)。
以下是可以从模块2014调用的自定义对象进程的示例。
3)在向源发送请求时(或之前),自定义对象可以操作请求并且改变请求中的一些数据。(2022、2028、2030也是如此)。配置文件将识别要被用于特定的视图的自定义对象。但是–因为视图由请求确定,所以在配置自定义对象以处理请求时–我们也提供此自定义对象的方法,指定它应该在该的什么部分中被调用。例如–“在来自于用户的请求上”“在到用户的响应上”、“在来自于源的响应上”。
a.添加HTTP首标以指示一些东西或向服务器提供一些附加的数据。
b.改变源服务器地址。
c.改变HTTP请求中的主机字符串(注意,这也可以在接收到请求时完成,但是将获得不同的影响–因为主机字符串可以是高速缓存密钥和视图的一部分)。
以下是可以从模块2022调用的自定义对象进程的示例。
4)与3相似。
以下是可以从模块2024和2016和2032调用的自定义对象进程的示例。
5)(还有9)当接收到响应时,自定义对象代码可以被触发以在响应进一步由CDN服务器处理之前处理该响应。这可以是为了改变或操作响应,或用于一些逻辑差别或流改变。一些示例:
a.添加一些信息用于记录目的。
b.修改接收到的内容或数据(例如–如果内容是可高速缓存的,以使得修改的内容/对象将被高速缓存并且不是原始的)。
i.两个示例:1)基于地理–例如用代理服务器所处的区域的相关数据替换字符串。
ii.2)个人页:假定页包含特定的最终用户的数据。想想经常飞跳(flyer)的网络站点。一旦你登录–大多数用户看到几乎相同的页,用户之间具有一些小的差别:用户名、迄今为止得到的英里#、状态等等。但是,页面设计、促销和页的大部分是相等的。预存储的部分在从源请求响应时可以“预处理”或“串行化”不包含任何个人数据的页(代之以用“占位符”替换它)。在服务响应时,个性化的数据可以被插入该页中,因为这处于来自于已知用户的特定请求的上下文中。个性化的数据可以从请求取回(例如用户名可以被保持在cookie中)、或从特定请求(从源获得仅仅真正的个性化的/动态的内容)取回。
c.作为响应的结果触发新的请求。例如–假定多步处理,其中初始请求发送给一个服务器,并且基于来自于该服务器的响应,CDN(通过自定义对象代码)利用来自于该响应的数据向第二服务器发送新的请求。来自于第二服务器的响应然后将返回到最终用户。
i.在上面的示例中–对我们已经“清除/串行化”它的高速缓存的版本的页的请求,我们将触发对源的附加的请求以获得特定请求的个性化的数据。
ii.假定信用卡在线事务:它可以通过解析具有CC数据的请求并且向信用卡公司发送具有相关数据的特定请求以获得批准来实现(由自定义对象代码完成)。信用卡公司将提供回令牌(批准或不批准),另一个自定义对象代码将分析响应,抓取令牌和结果(批准与否)并且将随数据创建更新的请求到商家/零售商。这样零售商不获得信用卡数据,但是获得有关数据–事务被批准(或不被批准)并且可以使用令牌来通信回到信用卡公司以最后确定事务。
iii.其它情况可以是基于来自于源的响应预先取得对象。
iv.最后一个示例–在来自于源的响应是坏的情况下,–例如,源不响应,或利用错误代码作出响应,检查响应的自定义对象代码能够确定尝试并且向可替换(备用的)源服务器发送请求,以使得最终用户将获得有效的响应。这可以确保商业连续性并且帮助减轻源服务器的错误或故障。
以下是可以从模块2018调用的自定义对象进程的示例。
6)当处理响应时,自定义对象代码可以修改关于它应该被高速缓存的方式的设置,定义TTL、用于存储对象的高速缓存密钥或其它参数。
以下是可以从模块2028调用的自定义对象进程的示例。
7)被3(上面)的描述覆盖。自定义对象代码可以添加关于从哪一个源获得内容的逻辑和规则。例如–取得应该被从被定制以服务移动内容的可替换源服务到移动设备的内容,或在自定义对象代码识别时从德国的服务器获得内容。IP源,作为与请求有关的所有其它参数,在它被服务的整个流期间被存储在与请求/响应相关联的数据结构中。记住我们通常在接收请求的相同的服务器中,并且即使不在–这些属性也被添加到会话,只要它被处理),请求来自于德国、或来自于它支持的默认语言是德语的用户代理。
以下是可以从模块2030调用的自定义对象进程的示例。
8)与3相似。
以下是可以从模块2032调用的自定义对象进程的示例。
9)与5相似。
以下是可以从模块2013和2038调用的自定义对象进程的示例。
10)和11):响应可以在它被发送给最终用户之前被修改。例如,当传送的方法可以与最终用户或用户代理的特定的特性有关时。
a.在用户代理支持附加的能力(或不支持它)情况下,–自定义对象代码可以适当地设置响应。一个示例是用户代理支持压缩。即使用户代理可以在HTTP首标中指示它支持什么格式和技术(例如压缩),也存在附加参数或认识可以另外指示的情况。例如–实际上支持压缩的设备或浏览器,但是标准的首标将指示它不支持它。自定义对象代码可以执行附加的测试(根据提供的认识)–注意,存在一些知道设备支持压缩的情况,但是由于一些代理、防火墙、防病毒或其它原因,接受编码首标不会被适当地配置。例如根据用户代理首标,你可以识别设备实际上支持压缩。另一个情况–是自定义对象通过发送小的压缩的Java脚本测试压缩支持,如果未被适当地压缩,将cookie设置到某一值。当现在服务内容时,可以检查cookie值并且它将指示支持压缩,即使首标指示(另外)并且决定服务压缩的内容,你也可以服务压缩的压缩。
b.添加或修改首标以向用户代理提供附加的数据。例如–提供附加的调试信息或关于请求流的信息或高速缓存状态。
c.操作响应的内容。例如–在HTML页中,检查主体(HTML代码)并且添加或用一些新的字符串替换特定的字符串。例如–将HTML代码中的URL修改为基于最终用户的设备或位置为最终用户优化的URL。或在另一个情况下–为了在最终用户的登录页欢迎最终用户,从请求中的cookie中取消用户名,并且将它放置在需要的页的高速缓存的HTML中的适当的位置–通过使得页能够被高速缓存(因为大部分是静态的)并且将页中的“动态的”部分在服务它之前添加,其中动态数据由请求中的cookie、用户的地理位置计算,或由于另一个自定义对象代码仅仅向源或向由自定义对象框架提供的一些数据库发送对于动态数据的特定请求。–注意,返回到上面的其中“串行化”内容的示例-这里是相反的情况,其中在向实际用户服务内容之前,你想要将对于此用户的特定的数据注入到响应中。通常这是应用/商业逻辑将对于源进行的事情。另一个情况可以如上所述–修改链路以为设备优化–如果不在边缘完成,则这将在源上完成)。
以下是可以从模块2038调用的自定义对象进程的示例。
11)参见10。
以下是可以从模块2040调用的自定义对象进程的示例。
12)自定义对象框架提供附加的/增强的记录,以使得一个人可以跟踪关于在CDN中默认记录在什么之上的附加的数据。这可以用于开帐单、用于跟踪、或用于CDN或用户的其它使用。自定义对象代码可以接入处理的请求的所有相关数据(请求线、请求首标、cookie、请求流、决定、特定的自定义对象代码的结果等等)并且记录它,因此它能够然后被传送到客户、并且由CDN集合或处理。
示例配置文件
图24和25A-25B显示根据一些实施例的说明性的示例配置文件。
图24显示示例1。这显示源的XML配置。
可以看出,域名被指定为www.domain.com。
配置默认视图(在此特定配置中,仅仅存在默认视图,因此现在设置附加的视图)。对于默认视图,源被配置为“origin.domain.com”,并且使能DSA,其中默认指示不高速缓存任何对象–不在边缘并且不在用户代理上(由指令uset_ttl=“no_store”,edge_ttl=”no_store”指示)。
还指示自定义对象“origin_by_geo”应该处理此视图中的请求(在此示例中–这是所有请求)。
此自定义对象被编码以寻找请求从其到达的地理,并且基于配置的国家规则,将请求引导到指定的源。
提供的自定义对象参数指定默认源将是origin.domain.com,但是对于指示的特定国家,自定义对象代码将请求引导到3个可替换源中的一个(基于用户来自于哪里)。在此示例中,10.0.0.1被分配给北美洲的国家(US、加拿大、墨西哥),10.0.1.1被分配给一些欧洲国家(英国、德国、意大利),10.0.2.1被分配给一些亚洲/太平洋国家(澳大利亚、中国、日本)。
每个自定义对象的配置模式在布置时具有自定义对象代码。每个自定义对象将提供XSD。这样管理软件可以验证由客户提供的配置,并且可以在自定义对象配置被调用时将其提供给自定义对象。
每个自定义对象可以定义它自己的配置和模式。
图25A-25B显示示例2。此示例示出了利用两个自定义对象以便将最终用户从移动设备重定向到移动站点。在这种情况下–域是customobject.cottest.com,移动站点是m.customobject.cottest.com。
第一自定义对象应用于默认视图。这是基于提供的正则表达式重写请求的一般的自定义对象。
此自定义对象被称为“url-rewrite_by_regex”,并且可以在自定义对象配置区段中看到配置。
被指定的特定的重写规则将在HTTP首标中寻找以“User-agent”开始的线并且将寻找指示用户代理是移动设备的表达,在这种情况下–将寻找字符串“iPod”、“iPhone”和“Android”。如果找到这样的匹配,则将URL重写为URL“/_mobile_redirect”。
一旦重写,将新的请求作为到达系统的新的请求处理,因而将寻找最佳匹配的视图。完全为了该目的,视图被添加名称“redirect_customobject”。此视图由路径表达式定义,指定仅仅URL“/_mobile_redirect”包括在它中。当接收到对此URL的这样的请求时,将激活第二自定义对象,名称为“redirect_customobject”。此自定义对象通过发送具有状态301(永久重定向)或302(临时重定向)的HTTP响应来将请求重定向到新的URL。这里也可以应用规则,但是在这种情况下,仅仅存在省缺规则,指定请求应当结果是向URL“http://m.customobject.cottest.com”发送永久重定向。
可替换结构
确保规则/标准CDN活动的最佳确定的性能和“经证明”或“信任”的自定义对象的最佳确定的性能但是使能客户“投入”在新的未测试的自定义对象代码中的灵活性的另一个机制是通过以下结构:
我们可以在每个POP中将代理分离为前端代理和后端代理。此外,我们可以将它们分离为“簇”。
前端代理不会运行用户自定义对象(仅仅Cotendo证明的用户自定义对象)。
这意味着每个自定义对象将用特定的“目标簇”标记。这样信赖的自定义对象将在前端运行,并且不信赖的自定义对象将由后端代理群服务。
前端代理将业务传递到后端,就好像是源一样。换句话说–确定自定义对象代码是否应当处理请求的配置/视图将分配给所有代理,以使得前端代理在确定请求应该由后端代理服务的类的自定义对象处理时,将请求转发给后端代理(就象它在HCACHE或DSA中引导请求一样)。
这样,非自定义对象业务和信赖的自定义对象业务不会受不高效的不信赖的自定义对象的影响。
这不会提供如何处理将来自于一个客户的自定义对象与其它隔离的后端群方法。
不存在对此的100%解决方案。像google、amazon和任何虚拟化公司一样,不存在履约保证。它是过度供应和监视和优先化的问题。
注意,存在两件事情:1)保证环境、阻止未授权的访问或类似–这将在所有实施方式中执行,在前端和后端二者中;2)保证系统的性能–这是我们不能在多租用服务器中约定的,其中我们主机托管不被“证明”的客户代码–在这种情况下,我们可以提供像优先化、配额限制、也许甚至一些最小委托的工具–但是因为资源是有限的,一个客户可能影响另一个客户的可用资源(与证明的环境不同,在证明的环境中,我们控制代码并且可以确保我们提供的性能和服务)。
非信赖的自定义对象的隔离:
自定义对象将具有虚拟文件系统,其中对文件系统的每个访问将去到分布式文件系统的另一个群。它将被限制到它自己的名称空间,因此不存在安全风险(下面说明自定义对象名称空间)。
自定义对象将限于存储器的X量。注意,这在应用引擎种类的虚拟化中是非常复杂的任务。原因是因为所有自定义对象共享相同的JVM,因此难以知道特定的自定义对象使用多少存储器。注意:在AkamaiJ2EE专利中–每个用户J2EE代码运行在它自己单独的JVM中,这是非常不高效的,并且不同于我们的方法]。
关于如何测量存储器使用的一般构思是不限制存储器量,而是相反限制对于特定的事务的存储器分配量。这意味着将考虑分配1M的小尺寸的对象的循环,好像它需要1M乘以对象的大小的存储器一样,即使对象在循环期间被解除分配。(存在去掉对象而不通知引擎的垃圾收集器)因为我们控制新对象的分配–我们可以执行该限制。
另一个方法是利用分配它的线程标记每个分配的对象,并且因为在给定时间的线程专用于特定的自定义对象,因此可以知道哪一个自定义对象需要它然后用自定义对象标记该对象。
这样可以后来在垃圾收集期间检测原始区。
再一次,挑战是如何跟踪共享相同的JVM的自定义对象的存储器,因为也可以利用另一个框架实现自定义对象(或者甚至提供框架–像我们开始所做的一样)–控制存储器分配、解除分配、垃圾收集和一切别的东西,因为在这种情况下,我们写和提供框架。
跟踪非信赖的自定义对象的CPU:
自定义对象总是具有特定请求的开始和结束。在该时间期间,自定义对象采取线程用于它的执行(因此在中间使用CPU)。
存在两个问题需要考虑:
1.检测无限循环(或太长时间的事务),
2.检测多次运行的小的事务(因此整个–客户消耗来自于系统的许多资源)。
问题2实际上不是问题,因为客户为它付钱。这与客户面对flash拥挤的事件(业务/许多请求的尖峰)的情况相似,这基本上适当地供应簇和服务器以缩放和处理客户请求。
为了处理问题1,我们首先需要检测它。检测这样的情形实际上是容易的(例如通过监视所有线程的另一个线程),在那种情况下的挑战将是终止线程。这可能引起数据一致性等方面的问题,但是,这也是客户在布置不优化的代码时客户接受的风险。当线程终止时,通常流就用于该请求的逻辑而论将继续(通常终止与重置的HTTP连接或一些错误代码,或在这被配置的情况下,利用另一个自定义对象处理错误、或重定向或重试以再一次启动自定义对象)。
其它共享的资源:
还存在隔离基于文件系统的资源以及客户之间的数据库数据的问题。
文件系统的解决方案是简单的但是编码是复杂的。每个自定义对象获得线程用于它的执行(当它被启动时)。刚好在它获得执行上下文之前,线程将存储用于该线程的根名称空间,以使得从该线程对文件系统的每个访问将被限制在配置的根下。因为名称空间将为线程提供唯一的名称,所以访问将实际上被限制。
对于数据库,它是不同的。关于如何处理这个的一个选项是利用将通过客户id(或一些其它密钥)分割的“非sql”种类的数据库。并且对数据库的每个查询将包括该密钥。因为自定义对象在客户的上下文中执行,所以id由系统确定,因此它不能被自定义对象代码伪造。
硬件环境
图26是能够被编程来充当被配置为实现该进程的代理服务器的计算机系统2600的说明性的块级图。计算机系统2600可以包括一个或多个处理器,诸如处理器2602。处理器2602可以利用一般或特定用途处理引擎实现,诸如例如微处理器、控制器或其它控制逻辑。在图16所示的示例中,处理器2602连接到总线2604或其它通信介质。
计算系统2600也可以包括主存储器2606,优选地随机访问存储器(RAM)或其它动态存储器,用于存储信息和要被处理器2602执行的指令。一般说来,认为存储器是由CPU访问的存储设备,具有直接接入并且操作在约为CPU时钟的时钟速度,因而几乎不存在等待时间。主存储器2606还可以用于存储在要被处理器2602执行的指令的执行期间的临时变量或其它中间信息。计算机系统2600可以同样包括耦接到总线2604的用于存储用于处理器2602的静态信息和指令的只读存储器(“ROM”)或其它静态存储设备。
计算机系统2600也可以包括信息存储机构2608,其可以包括例如媒体驱动器2610和可移除存储装置接口2612。媒体驱动器2610可以包括支持固定或可移除存储介质2614的驱动器或其它机构。例如,硬盘驱动器、软盘驱动器、磁带驱动器、光盘驱动器、CD或DVD驱动器(R或RW)或其它可移除或固定媒体驱动器。存储介质2614可以包括例如由媒体驱动器2610读取和写到媒体驱动器2610的硬盘、软盘、磁带、光盘、CD或DVD、或其它固定或可移除介质。信息存储机构2608还可以包括与接口2612通信的可移除存储单元2616。这样的可移除存储单元2616的示例可以包括程序盒和盒式接口、可移除存储器(例如,闪速存储器或其它可移除存储器模块)。如这些示例示出的,存储介质2614可以包括计算机可用的存储介质,其中存储有特定的计算机软件或数据。此外,计算机系统2600包括网络接口2618。
在此文档中,术语“计算机程序设备”和“计算机可用设备”用于一般是指介质,诸如例如存储器2606、存储设备2608、安装在硬盘驱动器2610中的硬盘。在将一个或多个指令的一个或多个序列传送到处理器2602以用于执行中可以涉及这些和其它各种形式的计算机可用设备。这样的指令,一般被称为“计算机程序代码”(其可以被以计算机程序或其它组的形式组合)在被执行时使得计算系统2600执行这里讨论的特征或功能。
配置文件附录
附录是源代码格式的示例配置文件,其通过引用明确地合并于这里。配置文件附录显示根据一些实施例的示例配置文件的结构和信息内容。这是对于特定的源服务器的配置文件。第3行描述要被使用的源IP地址,并且其后面的部分(第4-6行)描述要被对于该源服务的域。利用此,当请求到达时,服务器可以检查请求的主机,并且根据确定此请求目标是哪一个源,或在配置中不存在这样的主机的情况下,拒绝该请求。在那之后(第?行)是DSA配置–指定在此源上是否将要支持DSA。
此后,指定响应首标。这些首标将被添加在从代理服务器向最终用户发送的响应上。
下一部分指定高速缓存设置(其可以包括指定不高速缓存特定的内容的设置)。开始将默认设置陈述为<cache_settings…>,在这种情况下,指定默认行为将是不存储对象并且越权源设置,以使得不管什么源将指示处理该内容–这些是要被使用的设置(在这种情况下,不高速缓存)。还有从高速缓存服务内容的指示,如果在高速缓存中可用并且期满并且服务器从源获得新鲜的内容有问题的话。在指定默认设置之后,可以划出内容应该被以别的方式对待的特定的特性。这通过利用称为‘cache_view’的元素来使用。在该视图中,不同的表达可以用于指定模式:路径表达式(指定路径模式)、cookie、用户代理、请求者IP地址或首标中的其它参数。在此示例中,仅仅使用路径表达式,指定在目录/images/下的.gif、.jpe、.jpeg等等类型的文件。一旦定义了高速缓存视图,则可以指定特殊的行为和关于如何处理这些请求/对象的指令:在这种情况下–以便高速缓存在代理上7小时匹配这些准则的这些特定对象,并且以指示最终用户高速缓存对象1小时。在视图上,还可以指定cachine参数,象在此示例中一样(第二页第一行-<url_mappingobject_ignore_query_string=”1”/>)–以忽略请求中的查询字符串,即在创建请求密钥时不使用请求的查询部分(查询部分–在请求线的结尾,所有数据在“?”符号之后)。
使用这些参数,服务器将知道对特定请求应用DSA行为模式,而将其它请求作为对可以被高速缓存的静态内容的请求来对待。因为处理显著地不同,所以这对知道最早可能何时处理这样的请求并且此配置使能这样的早期决定。
在此配置示例的结尾,指定自定义首标字段。这些首标字段在将请求发送回到源时将被添加到该请求。在此示例中,服务器将添加指示它被CDN服务器请求的字段、将添加指示请求的主机的主机行(这是从名称不同于对于最终用户请求的服务发布的主机的主机取回内容时是关键的)、修改用户代理以提供原始的用户代理、并且添加指示请求为其完成的原始的最终用户IP地址的X转发栏(因为源将从请求的CDN服务器的IP地址获得请求)。
上文根据本发明的优选实施例的描述和附图仅仅示出本发明的原理。例如,虽然这里很多的讨论参考HTTP请求和响应,但是相同的原理应用于安全HTTP请求和响应,例如HTTPS。此外,例如,虽然NIO被描述为设置发信号给完成阻塞的动作的线程300/320的事件,但是可以代之以使用轮询技术。本领域技术人员可以对实施例做出各种修改,而不背离在附加的权利要求书中定义的本发明的精神和范围。
Claims (17)
1.一种通过计算机网络分布信息的方法,包括:
从内容提供者接收定义自定义对象的程序代码,该程序代码通过与基础设施的提供者相关联的管理接口接收,该基础设施包括多个服务器,该内容提供者的内容响应于最终用户请求从该多个服务器分发;
将该自定义对象分布到该基础设施中的多个服务器;
在所述多个服务器当中的给定服务器处,通过计算机网络从最终用户接收针对内容的请求,该请求针对与该内容提供者相关联的内容;
在该给定服务器中的存储设备中提供配置文件,所述配置文件包括用于识别自定义对象的参数;
该给定服务器通过执行多个动作来处理接收的针对内容的请求,所述动作包括:
(i)将来自于接收的针对内容的请求的信息与该配置文件中的参数相比较,以识别自定义对象;
(ii)以下中的至少一个:
(a)确定接收的请求针对可高速缓存的内容,并且响应于所述确定,确定请求的内容是否可高速缓存在该给定服务器上,并且当确定内容不可高速缓存在该给定服务器上时:确定该基础设施中的另一个服务器或从其请求该请求的内容的源服务器中的一个,由该给定服务器产生用于通过计算机网络传输的请求以从确定的服务器请求该请求的内容,并且接收对产生的请求的响应;以及
(b)确定接收的请求针对动态的内容,并且响应于所述确定,确定该基础设施中的另一个内容分发网络服务器或将针对动态的内容的请求引导到的源服务器中的一个,并且由该给定服务器产生用于通过计算机网络传输的请求以从确定的服务器请求该请求的内容,并且接收对产生的请求的响应;以及
(iii)准备对接收的针对内容的请求的响应,并且将该响应提供给该最终用户;
其中该给定服务器在处理接收的针对内容的请求的过程中运行识别的自定义对象以影响由该给定服务器执行的动作中的一个或多个。
2.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括阻塞该请求。
3.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括生成响应页并且提供该响应页。
4.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括重写相应的接收的针对内容的请求。
5.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括发送用于重定向到不同的URL的响应。
6.如权利要求1所述的方法,
其中确定请求的内容是否是可高速缓存的动作涉及创建高速缓存密钥;
其中影响由该给定服务器执行的动作中的一个或多个包括以下中的任何一个:将用户-代理添加到该高速缓存密钥,将cookie值添加到该高速缓存密钥,和处理URL以确定该高速缓存密钥。
7.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中将HTTP首标添加到由该给定服务器产生的请求中。
8.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中改变由该给定服务器产生的请求之内的源地址和主机字符串中的任何一个。
9.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中将基于地理的替换字符串添加到由该给定服务器接收到的响应中。
10.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中将个性化的信息插入到由该给定服务器接收到的网页中。
11.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中基于由该给定服务器接收到的响应预先取得对象。
12.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中基于由该给定服务器接收到的响应触发新的请求。
13.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中将调试信息添加到由该给定服务器接收到的响应中。
14.如权利要求1所述的方法,
其中影响由该给定服务器执行的动作中的一个或多个包括在处理接收的针对内容的请求的过程中修改由该给定服务器接收到的响应之内的HTML页。
15.如权利要求14所述的方法,
其中修改响应之内的HTML页包括基于客户端设备或基于客户端位置修改该HTML页。
16.如权利要求14所述的方法,
其中修改响应之内的HTML页包括从接收的针对内容的请求中的cookie获得信息并且在HTML页中包括该信息。
17.一种通过计算机网络分布信息的系统,包括:
与基础设施的提供者相关联的第一机器,该第一机器被配置为提供管理接口并且从内容提供者接收定义自定义对象的程序代码;
其中该基础设施包括多个第二机器,该内容提供者的内容响应于最终用户请求从该多个第二机器分发;
该第一机器进一步被配置为将该自定义对象分布到该基础设施中的多个第二机器;
第二机器中的给定第二机器被配置为通过计算机网络从最终用户接收针对与该内容提供者相关联的内容的请求;
该给定第二机器进一步被配置为在第二机器中的存储设备中存储配置文件,所述配置文件包括用于识别自定义对象的参数;
该给定第二机器进一步被配置为通过执行多个动作来处理接收的针对内容的请求,所述动作包括:
(i)将来自于接收的针对内容的请求的信息与该配置文件中的参数相比较,以识别自定义对象;
(ii)以下中的至少一个:
(a)确定接收的请求针对可高速缓存的内容,并且响应于所述确定,确定请求的内容是否可高速缓存在该给定第二机器上,并且当确定内容不可高速缓存在该给定第二机器上时:确定该基础设施中的另一个机器或从其请求该请求的内容的源机器中的一个,由该给定第二机器产生用于通过计算机网络传输的请求以从确定的机器请求该请求的内容,并且接收对产生的请求的响应;以及
(b)确定接收的请求针对动态的内容,并且响应于所述确定,确定基础设施中的另一个机器或将针对动态的内容的请求引导到的源机器中的一个,并且由该给定第二机器产生用于通过计算机网络传输的请求以从确定的机器请求该请求的内容,并且接收对产生的请求的响应;以及
(iii)产生对接收的针对内容的请求的响应,并且将该响应提供给该最终用户;
其中该给定第二机器进一步被配置为在处理接收的针对内容的请求的过程中运行识别的自定义对象以影响由该给定第二机器执行的动作中的一个或多个。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/901,571 | 2010-10-10 | ||
US12/901,571 US20120089700A1 (en) | 2010-10-10 | 2010-10-10 | Proxy server configured for hierarchical caching and dynamic site acceleration and custom object and associated method |
PCT/US2011/055616 WO2012051115A1 (en) | 2010-10-10 | 2011-10-10 | Proxy server configured for hierarchical caching and dynamic site acceleration and custom object and associated method |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103329113A CN103329113A (zh) | 2013-09-25 |
CN103329113B true CN103329113B (zh) | 2016-06-01 |
Family
ID=45925979
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180058093.8A Expired - Fee Related CN103329113B (zh) | 2010-10-10 | 2011-10-10 | 配置用于分级高速缓存的代理服务器以及动态站点加速和自定义对象和相关的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20120089700A1 (zh) |
EP (1) | EP2625616A4 (zh) |
CN (1) | CN103329113B (zh) |
WO (1) | WO2012051115A1 (zh) |
Families Citing this family (215)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7991910B2 (en) | 2008-11-17 | 2011-08-02 | Amazon Technologies, Inc. | Updating routing information based on client location |
US8028090B2 (en) | 2008-11-17 | 2011-09-27 | Amazon Technologies, Inc. | Request routing utilizing client location information |
US8447831B1 (en) | 2008-03-31 | 2013-05-21 | Amazon Technologies, Inc. | Incentive driven content delivery |
US7962597B2 (en) | 2008-03-31 | 2011-06-14 | Amazon Technologies, Inc. | Request routing based on class |
US7970820B1 (en) | 2008-03-31 | 2011-06-28 | Amazon Technologies, Inc. | Locality based content distribution |
US8601090B1 (en) | 2008-03-31 | 2013-12-03 | Amazon Technologies, Inc. | Network resource identification |
US8321568B2 (en) | 2008-03-31 | 2012-11-27 | Amazon Technologies, Inc. | Content management |
US8606996B2 (en) | 2008-03-31 | 2013-12-10 | Amazon Technologies, Inc. | Cache optimization |
US8837491B2 (en) | 2008-05-27 | 2014-09-16 | Glue Networks | Regional virtual VPN |
US9407681B1 (en) | 2010-09-28 | 2016-08-02 | Amazon Technologies, Inc. | Latency measurement in resource requests |
US9986279B2 (en) | 2008-11-26 | 2018-05-29 | Free Stream Media Corp. | Discovery, access control, and communication with networked services |
US10334324B2 (en) | 2008-11-26 | 2019-06-25 | Free Stream Media Corp. | Relevant advertisement generation based on a user operating a client device communicatively coupled with a networked media device |
US9026668B2 (en) | 2012-05-26 | 2015-05-05 | Free Stream Media Corp. | Real-time and retargeted advertising on multiple screens of a user watching television |
US9519772B2 (en) | 2008-11-26 | 2016-12-13 | Free Stream Media Corp. | Relevancy improvement through targeting of information based on data gathered from a networked device associated with a security sandbox of a client device |
US9961388B2 (en) | 2008-11-26 | 2018-05-01 | David Harrison | Exposure of public internet protocol addresses in an advertising exchange server to improve relevancy of advertisements |
US8180891B1 (en) | 2008-11-26 | 2012-05-15 | Free Stream Media Corp. | Discovery, access control, and communication with networked services from within a security sandbox |
US10631068B2 (en) | 2008-11-26 | 2020-04-21 | Free Stream Media Corp. | Content exposure attribution based on renderings of related content across multiple devices |
US10977693B2 (en) | 2008-11-26 | 2021-04-13 | Free Stream Media Corp. | Association of content identifier of audio-visual data with additional data through capture infrastructure |
US9386356B2 (en) | 2008-11-26 | 2016-07-05 | Free Stream Media Corp. | Targeting with television audience data across multiple screens |
US10880340B2 (en) | 2008-11-26 | 2020-12-29 | Free Stream Media Corp. | Relevancy improvement through targeting of information based on data gathered from a networked device associated with a security sandbox of a client device |
US9154942B2 (en) | 2008-11-26 | 2015-10-06 | Free Stream Media Corp. | Zero configuration communication between a browser and a networked media device |
US10419541B2 (en) | 2008-11-26 | 2019-09-17 | Free Stream Media Corp. | Remotely control devices over a network without authentication or registration |
US10567823B2 (en) | 2008-11-26 | 2020-02-18 | Free Stream Media Corp. | Relevant advertisement generation based on a user operating a client device communicatively coupled with a networked media device |
US8412823B1 (en) | 2009-03-27 | 2013-04-02 | Amazon Technologies, Inc. | Managing tracking information entries in resource cache components |
US8688837B1 (en) | 2009-03-27 | 2014-04-01 | Amazon Technologies, Inc. | Dynamically translating resource identifiers for request routing using popularity information |
US8782236B1 (en) | 2009-06-16 | 2014-07-15 | Amazon Technologies, Inc. | Managing resources using resource expiration data |
US8989705B1 (en) | 2009-06-18 | 2015-03-24 | Sprint Communications Company L.P. | Secure placement of centralized media controller application in mobile access terminal |
US8489685B2 (en) | 2009-07-17 | 2013-07-16 | Aryaka Networks, Inc. | Application acceleration as a service system and method |
US8397073B1 (en) | 2009-09-04 | 2013-03-12 | Amazon Technologies, Inc. | Managing secure content in a content delivery network |
US9495338B1 (en) | 2010-01-28 | 2016-11-15 | Amazon Technologies, Inc. | Content distribution network |
US10025734B1 (en) * | 2010-06-29 | 2018-07-17 | EMC IP Holding Company LLC | Managing I/O operations based on application awareness |
US9367561B1 (en) | 2010-06-30 | 2016-06-14 | Emc Corporation | Prioritized backup segmenting |
US9235585B1 (en) | 2010-06-30 | 2016-01-12 | Emc Corporation | Dynamic prioritized recovery |
US8438420B1 (en) | 2010-06-30 | 2013-05-07 | Emc Corporation | Post access data preservation |
US9697086B2 (en) | 2010-06-30 | 2017-07-04 | EMC IP Holding Company LLC | Data access during data recovery |
US10958501B1 (en) | 2010-09-28 | 2021-03-23 | Amazon Technologies, Inc. | Request routing information based on client IP groupings |
US8468247B1 (en) | 2010-09-28 | 2013-06-18 | Amazon Technologies, Inc. | Point of presence management in request routing |
US9712484B1 (en) | 2010-09-28 | 2017-07-18 | Amazon Technologies, Inc. | Managing request routing information utilizing client identifiers |
US9003035B1 (en) | 2010-09-28 | 2015-04-07 | Amazon Technologies, Inc. | Point of presence management in request routing |
US8452874B2 (en) | 2010-11-22 | 2013-05-28 | Amazon Technologies, Inc. | Request routing processing |
US9213562B2 (en) * | 2010-12-17 | 2015-12-15 | Oracle International Corporation | Garbage collection safepoint system using non-blocking asynchronous I/O call to copy data when the garbage collection safepoint is not in progress or is completed |
US8849990B2 (en) * | 2011-02-03 | 2014-09-30 | Disney Enterprises, Inc. | Optimized video streaming to client devices |
US8874750B2 (en) | 2011-03-29 | 2014-10-28 | Mobitv, Inc. | Location based access control for content delivery network resources |
US10467042B1 (en) | 2011-04-27 | 2019-11-05 | Amazon Technologies, Inc. | Optimized deployment based upon customer locality |
US8966625B1 (en) | 2011-05-24 | 2015-02-24 | Palo Alto Networks, Inc. | Identification of malware sites using unknown URL sites and newly registered DNS addresses |
US8555388B1 (en) * | 2011-05-24 | 2013-10-08 | Palo Alto Networks, Inc. | Heuristic botnet detection |
US9747592B2 (en) * | 2011-08-16 | 2017-08-29 | Verizon Digital Media Services Inc. | End-to-end content delivery network incorporating independently operated transparent caches and proxy caches |
US8843758B2 (en) * | 2011-11-30 | 2014-09-23 | Microsoft Corporation | Migrating authenticated content towards content consumer |
CN104246737B (zh) | 2011-12-01 | 2017-09-29 | 华为技术有限公司 | 在内容分发网络中使用视频流的连接池技术的系统和方法 |
CN104011701B (zh) | 2011-12-14 | 2017-08-01 | 第三雷沃通讯有限责任公司 | 内容传送网络系统和能够在内容传送网络中操作的方法 |
US9742858B2 (en) | 2011-12-23 | 2017-08-22 | Akamai Technologies Inc. | Assessment of content delivery services using performance measurements from within an end user client application |
US9749403B2 (en) * | 2012-02-10 | 2017-08-29 | International Business Machines Corporation | Managing content distribution in a wireless communications environment |
US8918474B2 (en) * | 2012-03-26 | 2014-12-23 | International Business Machines Corporation | Determining priorities for cached objects to order the transfer of modifications of cached objects based on measured network bandwidth |
US8782008B1 (en) * | 2012-03-30 | 2014-07-15 | Emc Corporation | Dynamic proxy server assignment for virtual machine backup |
US9772909B1 (en) | 2012-03-30 | 2017-09-26 | EMC IP Holding Company LLC | Dynamic proxy server assignment for virtual machine backup |
US10623408B1 (en) | 2012-04-02 | 2020-04-14 | Amazon Technologies, Inc. | Context sensitive object management |
US8712407B1 (en) | 2012-04-05 | 2014-04-29 | Sprint Communications Company L.P. | Multiple secure elements in mobile electronic device with near field communication capability |
US10198462B2 (en) * | 2012-04-05 | 2019-02-05 | Microsoft Technology Licensing, Llc | Cache management |
DE112012006217T5 (de) * | 2012-04-10 | 2015-01-15 | Intel Corporation | Techniken zur Überwachung von Verbindungspfaden bei vernetzten Geräten |
US9027102B2 (en) | 2012-05-11 | 2015-05-05 | Sprint Communications Company L.P. | Web server bypass of backend process on near field communications and secure element chips |
US8862181B1 (en) | 2012-05-29 | 2014-10-14 | Sprint Communications Company L.P. | Electronic purchase transaction trust infrastructure |
US9154551B1 (en) | 2012-06-11 | 2015-10-06 | Amazon Technologies, Inc. | Processing DNS queries to identify pre-processing information |
US9282898B2 (en) | 2012-06-25 | 2016-03-15 | Sprint Communications Company L.P. | End-to-end trusted communications infrastructure |
US9066230B1 (en) | 2012-06-27 | 2015-06-23 | Sprint Communications Company L.P. | Trusted policy and charging enforcement function |
US20140006543A1 (en) * | 2012-06-29 | 2014-01-02 | William M Pitts | Distributed filesystem atomic flush transactions |
US9015233B2 (en) | 2012-06-29 | 2015-04-21 | At&T Intellectual Property I, L.P. | System and method for segregating layer seven control and data traffic |
US8649770B1 (en) | 2012-07-02 | 2014-02-11 | Sprint Communications Company, L.P. | Extended trusted security zone radio modem |
US9741054B2 (en) * | 2012-07-06 | 2017-08-22 | International Business Machines Corporation | Remotely cacheable variable web content |
US8667607B2 (en) | 2012-07-24 | 2014-03-04 | Sprint Communications Company L.P. | Trusted security zone access to peripheral devices |
US8863252B1 (en) | 2012-07-25 | 2014-10-14 | Sprint Communications Company L.P. | Trusted access to third party applications systems and methods |
US9183412B2 (en) | 2012-08-10 | 2015-11-10 | Sprint Communications Company L.P. | Systems and methods for provisioning and using multiple trusted security zones on an electronic device |
GB2505179A (en) * | 2012-08-20 | 2014-02-26 | Ibm | Managing a data cache for a computer system |
US9015068B1 (en) | 2012-08-25 | 2015-04-21 | Sprint Communications Company L.P. | Framework for real-time brokering of digital content delivery |
US9215180B1 (en) | 2012-08-25 | 2015-12-15 | Sprint Communications Company L.P. | File retrieval in real-time brokering of digital content |
US8954588B1 (en) | 2012-08-25 | 2015-02-10 | Sprint Communications Company L.P. | Reservations in real-time brokering of digital content delivery |
US8752140B1 (en) | 2012-09-11 | 2014-06-10 | Sprint Communications Company L.P. | System and methods for trusted internet domain networking |
US9323577B2 (en) | 2012-09-20 | 2016-04-26 | Amazon Technologies, Inc. | Automated profiling of resource usage |
US9104870B1 (en) | 2012-09-28 | 2015-08-11 | Palo Alto Networks, Inc. | Detecting malware |
US9215239B1 (en) | 2012-09-28 | 2015-12-15 | Palo Alto Networks, Inc. | Malware detection based on traffic analysis |
US8527645B1 (en) * | 2012-10-15 | 2013-09-03 | Limelight Networks, Inc. | Distributing transcoding tasks across a dynamic set of resources using a queue responsive to restriction-inclusive queries |
US8447854B1 (en) * | 2012-12-04 | 2013-05-21 | Limelight Networks, Inc. | Edge analytics query for distributed content network |
US20140344453A1 (en) * | 2012-12-13 | 2014-11-20 | Level 3 Communications, Llc | Automated learning of peering policies for popularity driven replication in content delivery framework |
US10205698B1 (en) | 2012-12-19 | 2019-02-12 | Amazon Technologies, Inc. | Source-dependent address resolution |
US9667747B2 (en) | 2012-12-21 | 2017-05-30 | Akamai Technologies, Inc. | Scalable content delivery network request handling mechanism with support for dynamically-obtained content policies |
US9654579B2 (en) | 2012-12-21 | 2017-05-16 | Akamai Technologies, Inc. | Scalable content delivery network request handling mechanism |
US9300759B1 (en) * | 2013-01-03 | 2016-03-29 | Amazon Technologies, Inc. | API calls with dependencies |
US9578664B1 (en) | 2013-02-07 | 2017-02-21 | Sprint Communications Company L.P. | Trusted signaling in 3GPP interfaces in a network function virtualization wireless communication system |
US9161227B1 (en) | 2013-02-07 | 2015-10-13 | Sprint Communications Company L.P. | Trusted signaling in long term evolution (LTE) 4G wireless communication |
US9128944B2 (en) * | 2013-02-13 | 2015-09-08 | Edgecast Networks, Inc. | File system enabling fast purges and file access |
CN105190598A (zh) * | 2013-02-28 | 2015-12-23 | 惠普发展公司,有限责任合伙企业 | 资源索引分类 |
US9104840B1 (en) | 2013-03-05 | 2015-08-11 | Sprint Communications Company L.P. | Trusted security zone watermark |
US8881977B1 (en) | 2013-03-13 | 2014-11-11 | Sprint Communications Company L.P. | Point-of-sale and automated teller machine transactions using trusted mobile access device |
US9613208B1 (en) | 2013-03-13 | 2017-04-04 | Sprint Communications Company L.P. | Trusted security zone enhanced with trusted hardware drivers |
US9049186B1 (en) | 2013-03-14 | 2015-06-02 | Sprint Communications Company L.P. | Trusted security zone re-provisioning and re-use capability for refurbished mobile devices |
US9049013B2 (en) | 2013-03-14 | 2015-06-02 | Sprint Communications Company L.P. | Trusted security zone containers for the protection and confidentiality of trusted service manager data |
US9760528B1 (en) | 2013-03-14 | 2017-09-12 | Glue Networks, Inc. | Methods and systems for creating a network |
US9191388B1 (en) | 2013-03-15 | 2015-11-17 | Sprint Communications Company L.P. | Trusted security zone communication addressing on an electronic device |
US8984592B1 (en) | 2013-03-15 | 2015-03-17 | Sprint Communications Company L.P. | Enablement of a trusted security zone authentication for remote mobile device management systems and methods |
US9374363B1 (en) | 2013-03-15 | 2016-06-21 | Sprint Communications Company L.P. | Restricting access of a portable communication device to confidential data or applications via a remote network based on event triggers generated by the portable communication device |
US9021585B1 (en) | 2013-03-15 | 2015-04-28 | Sprint Communications Company L.P. | JTAG fuse vulnerability determination and protection using a trusted execution environment |
US9928082B1 (en) | 2013-03-19 | 2018-03-27 | Gluware, Inc. | Methods and systems for remote device configuration |
US9324016B1 (en) | 2013-04-04 | 2016-04-26 | Sprint Communications Company L.P. | Digest of biographical information for an electronic device with static and dynamic portions |
US9454723B1 (en) | 2013-04-04 | 2016-09-27 | Sprint Communications Company L.P. | Radio frequency identity (RFID) chip electrically and communicatively coupled to motherboard of mobile communication device |
US9171243B1 (en) | 2013-04-04 | 2015-10-27 | Sprint Communications Company L.P. | System for managing a digest of biographical information stored in a radio frequency identity chip coupled to a mobile communication device |
US9838869B1 (en) | 2013-04-10 | 2017-12-05 | Sprint Communications Company L.P. | Delivering digital content to a mobile device via a digital rights clearing house |
US9443088B1 (en) | 2013-04-15 | 2016-09-13 | Sprint Communications Company L.P. | Protection for multimedia files pre-downloaded to a mobile device |
US9124668B2 (en) * | 2013-05-20 | 2015-09-01 | Citrix Systems, Inc. | Multimedia redirection in a virtualized environment using a proxy server |
US9069952B1 (en) | 2013-05-20 | 2015-06-30 | Sprint Communications Company L.P. | Method for enabling hardware assisted operating system region for safe execution of untrusted code using trusted transitional memory |
CN103281369B (zh) * | 2013-05-24 | 2016-03-30 | 华为技术有限公司 | 报文处理方法及广域网加速控制器woc |
US9367448B1 (en) | 2013-06-04 | 2016-06-14 | Emc Corporation | Method and system for determining data integrity for garbage collection of data storage systems |
US9560519B1 (en) | 2013-06-06 | 2017-01-31 | Sprint Communications Company L.P. | Mobile communication device profound identity brokering framework |
US10963431B2 (en) * | 2013-06-11 | 2021-03-30 | Red Hat, Inc. | Storing an object in a distributed storage system |
US9246988B2 (en) * | 2013-06-17 | 2016-01-26 | Google Inc. | Managing data communications based on phone calls between mobile computing devices |
US8601565B1 (en) * | 2013-06-19 | 2013-12-03 | Edgecast Networks, Inc. | White-list firewall based on the document object model |
US9183606B1 (en) | 2013-07-10 | 2015-11-10 | Sprint Communications Company L.P. | Trusted processing location within a graphics processing unit |
US10019575B1 (en) | 2013-07-30 | 2018-07-10 | Palo Alto Networks, Inc. | Evaluating malware in a virtual machine using copy-on-write |
US9811665B1 (en) | 2013-07-30 | 2017-11-07 | Palo Alto Networks, Inc. | Static and dynamic security analysis of apps for mobile devices |
US9613210B1 (en) | 2013-07-30 | 2017-04-04 | Palo Alto Networks, Inc. | Evaluating malware in a virtual machine using dynamic patching |
US10951726B2 (en) * | 2013-07-31 | 2021-03-16 | Citrix Systems, Inc. | Systems and methods for performing response based cache redirection |
US9208339B1 (en) | 2013-08-12 | 2015-12-08 | Sprint Communications Company L.P. | Verifying Applications in Virtual Environments Using a Trusted Security Zone |
CN103414777A (zh) * | 2013-08-15 | 2013-11-27 | 网宿科技股份有限公司 | 基于内容分发网络的分布式地理信息匹配系统和方法 |
CN103488697B (zh) * | 2013-09-03 | 2017-01-11 | 沈效国 | 能自动收集和交换碎片化商业信息的系统及移动终端 |
US9413842B2 (en) * | 2013-09-25 | 2016-08-09 | Verizon Digital Media Services Inc. | Instantaneous non-blocking content purging in a distributed platform |
BR112016007659A2 (pt) * | 2013-10-07 | 2017-08-01 | Telefonica Digital Espana Slu | ?procedimento e sistema para configurar uma memória cache web para processar pedidos? |
US9635580B2 (en) | 2013-10-08 | 2017-04-25 | Alef Mobitech Inc. | Systems and methods for providing mobility aspects to applications in the cloud |
US9037646B2 (en) * | 2013-10-08 | 2015-05-19 | Alef Mobitech Inc. | System and method of delivering data that provides service differentiation and monetization in mobile data networks |
CN103532817B (zh) * | 2013-10-12 | 2017-01-18 | 无锡云捷科技有限公司 | 一种cdn动态加速的系统及方法 |
US9405761B1 (en) * | 2013-10-29 | 2016-08-02 | Emc Corporation | Technique to determine data integrity for physical garbage collection with limited memory |
US9185626B1 (en) | 2013-10-29 | 2015-11-10 | Sprint Communications Company L.P. | Secure peer-to-peer call forking facilitated by trusted 3rd party voice server provisioning |
US8819187B1 (en) * | 2013-10-29 | 2014-08-26 | Limelight Networks, Inc. | End-to-end acceleration of dynamic content |
US9191522B1 (en) | 2013-11-08 | 2015-11-17 | Sprint Communications Company L.P. | Billing varied service based on tier |
US9161325B1 (en) | 2013-11-20 | 2015-10-13 | Sprint Communications Company L.P. | Subscriber identity module virtualization |
US9118655B1 (en) | 2014-01-24 | 2015-08-25 | Sprint Communications Company L.P. | Trusted display and transmission of digital ticket documentation |
US9967357B2 (en) * | 2014-03-06 | 2018-05-08 | Empire Technology Development Llc | Proxy service facilitation |
US9226145B1 (en) | 2014-03-28 | 2015-12-29 | Sprint Communications Company L.P. | Verification of mobile device integrity during activation |
US9489425B2 (en) * | 2014-03-31 | 2016-11-08 | Wal-Mart Stores, Inc. | Routing order lookups |
US10068281B2 (en) | 2014-03-31 | 2018-09-04 | Walmart Apollo, Llc | Routing order lookups from retail systems |
US10114880B2 (en) * | 2014-03-31 | 2018-10-30 | Walmart Apollo, Llc | Synchronizing database data to a database cache |
US9489516B1 (en) | 2014-07-14 | 2016-11-08 | Palo Alto Networks, Inc. | Detection of malware using an instrumented virtual machine environment |
US9811248B1 (en) | 2014-07-22 | 2017-11-07 | Allstate Institute Company | Webpage testing tool |
US9230085B1 (en) | 2014-07-29 | 2016-01-05 | Sprint Communications Company L.P. | Network based temporary trust extension to a remote or mobile device enabled via specialized cloud services |
US10178203B1 (en) * | 2014-09-23 | 2019-01-08 | Vecima Networks Inc. | Methods and systems for adaptively directing client requests to device specific resource locators |
CN104320404B (zh) * | 2014-11-05 | 2017-10-03 | 中国科学技术大学 | 一种多线程高性能http代理实现方法及系统 |
US10951501B1 (en) * | 2014-11-14 | 2021-03-16 | Amazon Technologies, Inc. | Monitoring availability of content delivery networks |
US9519887B2 (en) * | 2014-12-16 | 2016-12-13 | Bank Of America Corporation | Self-service data importing |
US10097448B1 (en) | 2014-12-18 | 2018-10-09 | Amazon Technologies, Inc. | Routing mode and point-of-presence selection service |
US9805193B1 (en) | 2014-12-18 | 2017-10-31 | Palo Alto Networks, Inc. | Collecting algorithmically generated domains |
US9542554B1 (en) | 2014-12-18 | 2017-01-10 | Palo Alto Networks, Inc. | Deduplicating malware |
EP3243314A4 (en) * | 2015-01-06 | 2018-09-05 | Umbra Technologies Ltd. | System and method for neutral application programming interface |
US9779232B1 (en) | 2015-01-14 | 2017-10-03 | Sprint Communications Company L.P. | Trusted code generation and verification to prevent fraud from maleficent external devices that capture data |
CN104618237B (zh) * | 2015-01-21 | 2017-12-12 | 网宿科技股份有限公司 | 一种基于tcp/udp的广域网加速系统及方法 |
US9838868B1 (en) | 2015-01-26 | 2017-12-05 | Sprint Communications Company L.P. | Mated universal serial bus (USB) wireless dongles configured with destination addresses |
CN109783017B (zh) * | 2015-01-27 | 2021-05-18 | 华为技术有限公司 | 一种存储设备坏块的处理方法、装置及存储设备 |
US9785412B1 (en) | 2015-02-27 | 2017-10-10 | Glue Networks, Inc. | Methods and systems for object-oriented modeling of networks |
US10225326B1 (en) | 2015-03-23 | 2019-03-05 | Amazon Technologies, Inc. | Point of presence based data uploading |
US10298713B2 (en) * | 2015-03-30 | 2019-05-21 | Huawei Technologies Co., Ltd. | Distributed content discovery for in-network caching |
US9819567B1 (en) | 2015-03-30 | 2017-11-14 | Amazon Technologies, Inc. | Traffic surge management for points of presence |
US9473945B1 (en) | 2015-04-07 | 2016-10-18 | Sprint Communications Company L.P. | Infrastructure for secure short message transmission |
US9832141B1 (en) | 2015-05-13 | 2017-11-28 | Amazon Technologies, Inc. | Routing based request correlation |
CN104994131B (zh) * | 2015-05-19 | 2018-07-06 | 中国互联网络信息中心 | 一种基于分布式代理服务器的自适应上传加速方法 |
US10289686B1 (en) * | 2015-06-30 | 2019-05-14 | Open Text Corporation | Method and system for using dynamic content types |
CN105939201A (zh) * | 2015-07-13 | 2016-09-14 | 杭州迪普科技有限公司 | 服务器状态的检查方法和装置 |
CN105118020A (zh) * | 2015-09-08 | 2015-12-02 | 北京乐动卓越科技有限公司 | 用于快速图片处理的方法及装置 |
WO2017042813A1 (en) | 2015-09-10 | 2017-03-16 | Vimmi Communications Ltd. | Content delivery network |
US9819679B1 (en) | 2015-09-14 | 2017-11-14 | Sprint Communications Company L.P. | Hardware assisted provenance proof of named data networking associated to device data, addresses, services, and servers |
US10375026B2 (en) * | 2015-10-28 | 2019-08-06 | Shape Security, Inc. | Web transaction status tracking |
US10270878B1 (en) * | 2015-11-10 | 2019-04-23 | Amazon Technologies, Inc. | Routing for origin-facing points of presence |
US10282719B1 (en) | 2015-11-12 | 2019-05-07 | Sprint Communications Company L.P. | Secure and trusted device-based billing and charging process using privilege for network proxy authentication and audit |
US9817992B1 (en) | 2015-11-20 | 2017-11-14 | Sprint Communications Company Lp. | System and method for secure USIM wireless network access |
US20170168956A1 (en) * | 2015-12-15 | 2017-06-15 | Facebook, Inc. | Block cache staging in content delivery network caching system |
US10185666B2 (en) | 2015-12-15 | 2019-01-22 | Facebook, Inc. | Item-wise simulation in a block cache where data eviction places data into comparable score in comparable section in the block cache |
US10348639B2 (en) | 2015-12-18 | 2019-07-09 | Amazon Technologies, Inc. | Use of virtual endpoints to improve data transmission rates |
US10944842B2 (en) * | 2016-05-27 | 2021-03-09 | Home Box Office, Inc. | Cached data repurposing |
US10404823B2 (en) | 2016-05-27 | 2019-09-03 | Home Box Office, Inc. | Multitier cache framework |
US10075551B1 (en) | 2016-06-06 | 2018-09-11 | Amazon Technologies, Inc. | Request management for hierarchical cache |
US10110694B1 (en) | 2016-06-29 | 2018-10-23 | Amazon Technologies, Inc. | Adaptive transfer rate for retrieving content from a server |
US9992086B1 (en) | 2016-08-23 | 2018-06-05 | Amazon Technologies, Inc. | External health checking of virtual private cloud network environments |
US10033691B1 (en) | 2016-08-24 | 2018-07-24 | Amazon Technologies, Inc. | Adaptive resolution of domain name requests in virtual private cloud network environments |
US10469513B2 (en) | 2016-10-05 | 2019-11-05 | Amazon Technologies, Inc. | Encrypted network addresses |
EP3488590B1 (en) | 2016-10-14 | 2022-01-12 | PerimeterX, Inc. | Securing ordered resource access |
CN106534118A (zh) * | 2016-11-11 | 2017-03-22 | 济南浪潮高新科技投资发展有限公司 | 一种高性能ip‑sm‑gw系统的实现方法 |
US10372499B1 (en) | 2016-12-27 | 2019-08-06 | Amazon Technologies, Inc. | Efficient region selection system for executing request-driven code |
US10831549B1 (en) | 2016-12-27 | 2020-11-10 | Amazon Technologies, Inc. | Multi-region request-driven code execution system |
US10938884B1 (en) | 2017-01-30 | 2021-03-02 | Amazon Technologies, Inc. | Origin server cloaking using virtual private cloud network environments |
CN108494720B (zh) * | 2017-02-23 | 2021-02-12 | 华为软件技术有限公司 | 一种基于会话迁移的调度方法及服务器 |
US10503613B1 (en) | 2017-04-21 | 2019-12-10 | Amazon Technologies, Inc. | Efficient serving of resources during server unavailability |
CN107707517B (zh) * | 2017-05-09 | 2018-11-13 | 贵州白山云科技有限公司 | 一种HTTPs握手方法、装置和系统 |
US11075987B1 (en) | 2017-06-12 | 2021-07-27 | Amazon Technologies, Inc. | Load estimating content delivery network |
US10447648B2 (en) | 2017-06-19 | 2019-10-15 | Amazon Technologies, Inc. | Assignment of a POP to a DNS resolver based on volume of communications over a link between client devices and the POP |
US10499249B1 (en) | 2017-07-11 | 2019-12-03 | Sprint Communications Company L.P. | Data link layer trust signaling in communication network |
CN107391664A (zh) * | 2017-07-19 | 2017-11-24 | 广州华多网络科技有限公司 | 基于web的页面数据处理方法和系统 |
US10742593B1 (en) | 2017-09-25 | 2020-08-11 | Amazon Technologies, Inc. | Hybrid content request routing system |
US11068281B2 (en) * | 2018-03-02 | 2021-07-20 | Fastly, Inc. | Isolating applications at the edge |
US10592578B1 (en) | 2018-03-07 | 2020-03-17 | Amazon Technologies, Inc. | Predictive content push-enabled content delivery network |
US10887407B2 (en) * | 2018-05-18 | 2021-01-05 | Reflektion, Inc. | Providing fallback results with a front end server |
US10956573B2 (en) | 2018-06-29 | 2021-03-23 | Palo Alto Networks, Inc. | Dynamic analysis techniques for applications |
US11010474B2 (en) | 2018-06-29 | 2021-05-18 | Palo Alto Networks, Inc. | Dynamic analysis techniques for applications |
US11914556B2 (en) * | 2018-10-19 | 2024-02-27 | Red Hat, Inc. | Lazy virtual filesystem instantiation and caching |
US10862852B1 (en) | 2018-11-16 | 2020-12-08 | Amazon Technologies, Inc. | Resolution of domain name requests in heterogeneous network environments |
US11025747B1 (en) | 2018-12-12 | 2021-06-01 | Amazon Technologies, Inc. | Content request pattern-based routing system |
US10805652B1 (en) * | 2019-03-29 | 2020-10-13 | Amazon Technologies, Inc. | Stateful server-less multi-tenant computing at the edge |
CN110442326B (zh) * | 2019-08-11 | 2023-07-14 | 西藏宁算科技集团有限公司 | 一种基于Vue简化前后端分离权限控制的方法及其系统 |
US11196765B2 (en) | 2019-09-13 | 2021-12-07 | Palo Alto Networks, Inc. | Simulating user interactions for malware analysis |
CN114981792A (zh) * | 2019-11-06 | 2022-08-30 | 法斯特利有限公司 | 在内容递送网络的边缘处管理共享应用程序 |
CN113626208B (zh) * | 2020-05-08 | 2024-05-14 | 许继集团有限公司 | 一种基于nio异步线程模型的服务器通信方法 |
FR3110801A1 (fr) * | 2020-05-25 | 2021-11-26 | Orange | Procédé de délégation de la livraison de contenus à un serveur cache |
CN111770170B (zh) * | 2020-06-29 | 2023-04-07 | 北京百度网讯科技有限公司 | 请求处理方法、装置、设备和计算机存储介质 |
US20220237097A1 (en) * | 2021-01-22 | 2022-07-28 | Vmware, Inc. | Providing user experience data to tenants |
CN112988378A (zh) * | 2021-01-28 | 2021-06-18 | 网宿科技股份有限公司 | 业务处理方法及装置 |
CN113011128B (zh) * | 2021-03-05 | 2024-09-06 | 北京百度网讯科技有限公司 | 文档在线预览方法、装置、电子设备及存储介质 |
CN112988680B (zh) * | 2021-03-30 | 2022-09-27 | 联想凌拓科技有限公司 | 数据加速方法、缓存单元、电子设备及存储介质 |
CN113468081B (zh) * | 2021-07-01 | 2024-05-28 | 福建信息职业技术学院 | 基于ebi总线的串口转udp的装置及方法 |
US11366705B1 (en) * | 2021-07-29 | 2022-06-21 | Apex.AI, Inc. | Deterministic replay of events between software entities |
CN115842722A (zh) * | 2021-09-18 | 2023-03-24 | 贵州白山云科技股份有限公司 | 业务实现方法、装置、系统、计算机设备及存储介质 |
CN114936192B (zh) * | 2022-07-19 | 2022-10-28 | 成都新橙北斗智联有限公司 | 一种文件动态压缩混淆和双向缓存方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961858B2 (en) * | 2000-06-16 | 2005-11-01 | Entriq, Inc. | Method and system to secure content for distribution via a network |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6167427A (en) * | 1997-11-28 | 2000-12-26 | Lucent Technologies Inc. | Replication service system and method for directing the replication of information servers based on selected plurality of servers load |
US6587928B1 (en) * | 2000-02-28 | 2003-07-01 | Blue Coat Systems, Inc. | Scheme for segregating cacheable and non-cacheable by port designation |
US7162539B2 (en) * | 2000-03-16 | 2007-01-09 | Adara Networks, Inc. | System and method for discovering information objects and information object repositories in computer networks |
WO2001076192A2 (en) * | 2000-03-30 | 2001-10-11 | Intel Corporation | Method and device for distributed caching |
US6704024B2 (en) * | 2000-08-07 | 2004-03-09 | Zframe, Inc. | Visual content browsing using rasterized representations |
US20030135509A1 (en) * | 2002-01-11 | 2003-07-17 | Davis Andrew Thomas | Edge server java application framework having application server instance resource monitoring and management |
US7133905B2 (en) * | 2002-04-09 | 2006-11-07 | Akamai Technologies, Inc. | Method and system for tiered distribution in a content delivery network |
US7953820B2 (en) * | 2002-09-11 | 2011-05-31 | Hughes Network Systems, Llc | Method and system for providing enhanced performance of web browsing |
US7171469B2 (en) * | 2002-09-16 | 2007-01-30 | Network Appliance, Inc. | Apparatus and method for storing data in a proxy cache in a network |
US7653722B1 (en) * | 2005-12-05 | 2010-01-26 | Netapp, Inc. | Server monitoring framework |
US8151323B2 (en) * | 2006-04-12 | 2012-04-03 | Citrix Systems, Inc. | Systems and methods for providing levels of access and action control via an SSL VPN appliance |
US20080228864A1 (en) * | 2007-03-12 | 2008-09-18 | Robert Plamondon | Systems and methods for prefetching non-cacheable content for compression history |
US8516080B2 (en) * | 2008-12-03 | 2013-08-20 | Mobophiles, Inc. | System and method for providing virtual web access |
-
2010
- 2010-10-10 US US12/901,571 patent/US20120089700A1/en not_active Abandoned
-
2011
- 2011-10-10 WO PCT/US2011/055616 patent/WO2012051115A1/en active Application Filing
- 2011-10-10 EP EP11833206.3A patent/EP2625616A4/en not_active Withdrawn
- 2011-10-10 CN CN201180058093.8A patent/CN103329113B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961858B2 (en) * | 2000-06-16 | 2005-11-01 | Entriq, Inc. | Method and system to secure content for distribution via a network |
Also Published As
Publication number | Publication date |
---|---|
WO2012051115A1 (en) | 2012-04-19 |
US20120089700A1 (en) | 2012-04-12 |
EP2625616A1 (en) | 2013-08-14 |
EP2625616A4 (en) | 2014-04-30 |
CN103329113A (zh) | 2013-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103329113B (zh) | 配置用于分级高速缓存的代理服务器以及动态站点加速和自定义对象和相关的方法 | |
US11206451B2 (en) | Information interception processing method, terminal, and computer storage medium | |
US10334016B2 (en) | System and method for context specific website optimization | |
CN108027805B (zh) | 数据网络中的负载分发 | |
CN106031130B (zh) | 具有边缘代理的内容传送网络架构 | |
JP5160134B2 (ja) | 配送保証されるコンテンツベースのパブリッシュ/サブスクライブ・システムの動的アクセス制御 | |
CN105247529B (zh) | 在目录服务之间同步凭证散列 | |
CN104767834B (zh) | 用于加速计算环境到远程用户的传送的系统和方法 | |
CN103154895B (zh) | 用于在多核系统中的核上管理cookie代理的系统和方法 | |
US7237030B2 (en) | System and method for preserving post data on a server system | |
CN109510846A (zh) | Api调用系统、方法、装置、电子设备及存储介质 | |
CN107251528B (zh) | 用于提供源自服务提供商网络内的数据的方法和装置 | |
US20050188048A1 (en) | Systems and methods for processing dynamic content | |
JP2018506936A (ja) | ネットワークにおいてコンテンツを配信するエンドツーエンドソリューションのための方法及びシステム | |
CN109635550B (zh) | 集群数据的权限校验方法、网关及系统 | |
CN103596066B (zh) | 一种数据处理方法及装置 | |
CN108259425A (zh) | 攻击请求的确定方法、装置及服务器 | |
US9471533B1 (en) | Defenses against use of tainted cache | |
CN103795690A (zh) | 一种云访问控制的方法、代理服务器和系统 | |
CN113765980A (zh) | 一种限流方法、装置、系统、服务器和存储介质 | |
CN114902612A (zh) | 基于边缘网络的帐户保护服务 | |
CN106464497A (zh) | 利用低延迟会话聚合框架体系发放、传送和管理令牌的方法和系统 | |
CN107315972A (zh) | 一种大数据非结构化文件动态脱敏方法及系统 | |
CN112511565B (zh) | 请求响应方法、装置、计算机可读存储介质及电子设备 | |
US8352442B2 (en) | Determination of an updated data source from disparate data sources |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160601 |