|Publication number||US6898633 B1|
|Application number||US 09/680,120|
|Publication date||May 24, 2005|
|Filing date||Oct 4, 2000|
|Priority date||Oct 4, 2000|
|Publication number||09680120, 680120, US 6898633 B1, US 6898633B1, US-B1-6898633, US6898633 B1, US6898633B1|
|Inventors||Sean Lyndersay, Brian Deen, Alex Hopmann, Joel Soderberg|
|Original Assignee||Microsoft Corporation|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (7), Referenced by (55), Classifications (14), Legal Events (4)|
|External Links: USPTO, USPTO Assignment, Espacenet|
1. Related Applications
The following co-pending applications, which are filed the same day as this application, are hereby incorporated by reference: U.S. application Ser. No. 09/679,720, entitled “Routing Client Requests to Back-End Servers, and U.S. application Ser. No. 09/679,716, entitled “Transparently Redirecting Client Requests for Content.”
2. The Field of the Invention
The present invention relates to systems and methods for directing a client request to a server. More particularly, the present invention relates to systems and methods for directing a client request by using a front end server to select a back end server to respond to the request.
3. The Prior State of the Art
Many computer networks have a client/server architecture. In these architectures, the client computer is typically the requesting computer and the server computer responds to the request of the client. Client/server architectures can be found networks including local area networks (LANs), wide area networks (WANs), and the Internet. These systems are often used advantageously by various applications. Network messaging systems, for example, are often implemented using a client/server architecture. In network messaging, a mail server effectively functions as a post office for client computers. The mail server receives and distributes incoming electronic messages to the client computers and also forwards outgoing electronic messages.
These systems are becoming increasingly popular and in some systems, including the Internet, there is a great demand for the information that can be stored and managed by server computers. The demand is often significant and a single server computer is often not capable of meeting the demand. To increase accessibility, the data being accessed is often distributed over a bank of server computers. Distributing the data across a server bank, however, presents problems with regard to accessing the data.
For instance, when a new server is added to a server bank, the data is often redistributed over the servers. As a result, the URI of the data may change and clients may not have their requests fulfilled in these types of situations. Personal mailboxes in particular are subject to this problem because they are typically maintained on a single server. When a new server is added to the system and the personal mailboxes are reallocated across the serves, the URI will change.
In order to access this bank of server computers, these systems provide a routing server that receives the client request. However, the routing server usually stores some data and actually services part of the client's request, including Hyper Text Markup Language (HTML) rendering. In addition, the routing server does not really forward the request to one of the servers in the server bank. Rather, the routing server typically uses a separate protocol to access the data in the bank of server computers. The data returned from this server is incorporated into the response sent to the client from the routing server. As a result, the applications of this server system are limited to the applications of the routing server.
Other systems simply use the routing server to route client requests to one of the servers in the server bank. These systems, however, are not able to analyze the requests or perform other operations on these requests other than forward them to one of the servers. Necessarily, each server in the bank of servers completely replicates the data stored on the other servers. This type of system makes no allowance for customized or selective replication. For example, the routing server may be configured to route requests from a particular geography to a particular server in the server bank. Even though this data may be dedicated to a local topic that is of little interest to other users, this data must be replicated on all of the servers in the server bank. The routing server operates under the assumption that all of the data is available from each server. While this type of system does provide a type of load balancing with regard to client requests, this system is unable to respond dynamically at the time of the client request. These systems are also not capable of immediately adapting to new situations, such as adding or removing servers from the bank of servers. In addition, these types of systems cannot utilize selective data replication across the servers.
A system that provides load balancing of client requests against multiple servers therefore faces several issues that are difficult to overcome. For example, there is a need to improve the server efficiency by servicing requests as quickly as possible. Additionally, there is a need to allow access to the requested resources for as long as possible. Often, client requests fail when the server selected by the routing server is unavailable. Finally, there is a need to balance the requests across the available servers while dynamically responding to both changing system conditions and multiple client requests.
The present invention relates to systems and methods for selecting a server for servicing client requests. The present invention includes a server system that has one or more back end servers connected with at least one front end server. The front end server receives client requests and directs those requests to one of the back end servers. The front end server is also capable of analyzing the client request such that the client requests are balanced across the back end servers. The present invention also balances the needs of timely servicing the client requests, distributing the client requests to the back end servers, allowing access to the requested data for as long as possible, and selecting a back end server that can actually service the client requests.
The selection of a back end server is often based on the user that is making the request, the resource that is the subject of the client request and the URI of the request. The user information can include the user name, the user's authentication token, and the like. The resource can be located in a private folder, a home public folder, or an application public folder. When a request is made to the private folders, the location of the associated user's private folder is determined by the front end server and the client request is forwarded to that server.
When a request is made to a default or home public folder, the user is directed to the server storing the home public folder that is associated with the private folder of the authenticated user. Identifying and selecting a server in this manner maintains the usefulness of status information related to the home public folder such as which items have been read and the like. In other words, client requests for private folders or the home public folder are usually sent to the same server. If the private folder is unavailable, the request is failed. If the home public folder is unavailable, the client request is redirected to a server that replicates the home public folder. This ensures that a user has access to the requested resource if it is available, while maintaining system efficiency.
When a request is made to an application public folder, the user's authentication token is used as a key in a selection module that selects a back end server to service the request. The selection module keeps a list of all servers such that the same server is usually selected for a particular user. One example of the selection module is a hash function that uses the user's authentication token as its key. If the selected back end server is unavailable, then that server is marked as unavailable and the selection module is used to identify an alternative back end server.
In some cases, a server does not store the actual content of a requested resource. In that case, the server returns a list of back end servers to the front end server that do store the requested content. The selection module operates on this shortened list to select a back end server to service the client request.
Additional features and advantages of the invention will be set forth in the description which follows, and in part will be obvious from the description, or may be learned by the practice of the invention. The features and advantages of the invention may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. These and other features of the present invention will become more fully apparent from the following description and appended claims, or may be learned by the practice of the invention as set forth hereinafter.
In order to describe the manner in which the above-recited and other advantages and features of the invention can be obtained, a more particular description of the invention briefly described above will be rendered by reference to specific embodiments thereof which are illustrated in the appended drawings. Understanding that these drawings depict only typical embodiments of the invention and are not therefore to be considered to be limiting of its scope, the invention will be described and explained with additional specificity and detail through the use of the accompanying drawings in which:
The present invention relates to systems and methods for using a front end server to direct a client request to a back end server. Client requests can generally be described as requests for private resources or folders and as requests to public resources or folders. In either case, the availability and capability of the back end servers should be accounted for when directing the client request.
While the present invention is described in terms of Hyper Text Transfer Protocol (HTTP), it is understood that the present invention can apply to other protocols as well such as Post Office Protocol 3 (POP3) and Internet Messaging Access Protocol (IMAP). When an HTTP request is initially received, the user may be prompted for authentication credentials. The authentication credentials may be used to select a back end server to service the client request. The front end server also utilizes the Uniform Resource Identifier (URI) of the client request to make a decision regarding which back end server will receive and service the client request. More generally, the URI is the primary determinant used by the front end server to select a back end server and the authentication information is often a secondary determinant. In cases where authentication credentials are not available, only the URI is used. In other cases, a user's authentication token is a primary determinant used by the front end server to select a back end server.
The advantage of using an intelligent front end server to direct requests is that the client requests will be properly distributed across all of the available back end servers. In addition, the front end server provides clients with prolonged accessibility, server efficiency, and directs client requests to back end servers that can actually service the client's request.
The present invention extends to both methods and systems for directing client requests to back end servers. The embodiments of the present invention may comprise a special purpose or general purpose computer including various computer hardware, as discussed in greater detail below.
Embodiments within the scope of the present invention also include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media can be any available media which can be accessed by a general purpose or special purpose computer. By way of example, and not limitation, such computer-readable media can comprise RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to carry or store desired program code means in the form of computer-executable instructions or data structures and which can be accessed by a general purpose or special purpose computer. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or a combination of hardwired or wireless) to a computer, the computer properly views the connection as a computer-readable medium. Thus, any such a connection is properly termed a computer-readable medium. Combinations of the above should also be included within the scope of computer-readable media. Computer-executable instructions comprise, for example, instructions and data which cause a general purpose computer, special purpose computer, or special purpose processing device to perform a certain function or group of functions.
FIG. 1 and the following discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented. Although not required, the invention will be described in the general context of computer-executable instructions, such as program modules, being executed by computers in network environments. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Computer-executable instructions, associated data structures, and program modules represent examples of the program code means for executing steps of the methods disclosed herein. The particular sequence of such executable instructions or associated data structures represent examples of corresponding acts for implementing the functions described in such steps.
Those skilled in the art will appreciate that the invention may be practiced in network computing environments with many types of computer system configurations, including personal computers, hand-held devices, multi-processor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, and the like. The invention may also be practiced in distributed computing environments where tasks are performed by local and remote processing devices that are linked (either by hardwired links, wireless links, or by a combination of hardwired or wireless links) through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.
With reference to
The computer 20 may also include a magnetic hard disk drive 27 for reading from and writing to a magnetic hard disk 39, a magnetic disk drive 28 for reading from or writing to a removable magnetic disk 29, and an optical disk drive 30 for reading from or writing to removable optical disk 31 such as a CD-ROM or other optical media. The magnetic hard disk drive 27, magnetic disk drive 28, and optical disk drive 30 are connected to the system bus 23 by a hard disk drive interface 32, a magnetic disk drive-interface 33, and an optical drive interface 34, respectively. The drives and their associated computer-readable media provide nonvolatile storage of computer-executable instructions, data structures, program modules and other data for the computer 20. Although the exemplary environment described herein employs a magnetic hard disk 39, a removable magnetic disk 29 and a removable optical disk 31, other types of computer readable media for storing data can be used, including magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, RAMs, ROMs, and the like.
Program code means comprising one or more program modules may be stored on the hard disk 39, magnetic disk 29, optical disk 31, ROM 24 or RAM 25, including an operating system 35, one or more application programs 36, other program modules 37, and program data 38. A user may enter commands and information into the computer 20 through keyboard 40, pointing device 42, or other input devices (not shown), such as a microphone, joy stick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 21 through a serial port interface 46 coupled to system bus 23. Alternatively, the input devices may be connected by other interfaces, such as a parallel port, a game port or a universal serial bus (USB). A monitor 47 or another display device is also connected to system bus 23 via an interface, such as video adapter 48. In addition to the monitor, personal computers typically include other peripheral output devices (not shown), such as speakers and printers.
The computer 20 may operate in a networked environment using logical connections to one or more remote computers, such as remote computers 49 a and 49 b. Remote computers 49 a and 49 b may each be another personal computer, a server, a router, a network PC, a peer device or other common network node, and typically include many or all of the elements described above relative to the computer 20, although only memory storage devices 50 a and 50 b and their associated application programs 36 a and 36 b have been illustrated in FIG. 1. The logical connections depicted in
When used in a LAN networking environment, the computer 20 is connected to the local network 51 through a network interface or adapter 53. When used in a WAN networking environment, the computer 20 may include a modem 54, a wireless link, or other means for establishing communications over the wide area network 52, such as the Internet. The modem 54, which may be internal or external, is connected to the system bus 23 via the serial port interface 46. In a networked environment, program modules depicted relative to the computer 20, or portions thereof, may be stored in the remote memory storage device. It will be appreciated that the network connections shown are exemplary and other means of establishing communications over wide area network 52 may be used.
Primarily, the front end server 210 receives requests from the client 200 and directs those requests to one of the back end servers 220. The front end server 210 thus provides a single namespace from the viewpoint of the client 200 and the client 200 is unaware of which back end server actually services the request. In this sense, the front end server 210 functions to direct or route client requests to the appropriate server. This is more fully described in a co-pending application entitled “Routing Client Requests to Back-End Servers,” Ser. No. 09/679,720, filed the same day herewith and incorporated by reference in its entirety.
On the other hand, the public folders 230 and 232 not only have similar structure or hierarchy, but also have the same content in most instances. In structure, the folder 233 is identical to the folder 238, the folder 234 is identical to the folder 239, the folder 236 is identical to the folder 240, the folder 235 is identical to the folder 241, and the folder 237 is identical to the folder 242.
In content, however, the public folders 230 may differ from the public folders 232. The difference in content occurs because it is not always necessary for each back end server to maintain all of the content that may be found on other back end servers. For example, the folder 236 and the folder 240 are corresponding folders in identical folder trees, but are located on different back end servers. The folder 236, which is illustrated in a dashed line, does not contain any content and is referred to herein as a ghosted folder. The folder 240, which is illustrated in a solid line, does contain content. If necessary, the content of the folder 240 can be replicated to the folder 236 and the folder 236 would no longer be ghosted.
One of the reasons for organizing the public folders in this manner is related to how often a particular folder is accessed. Where content is actually stored is also related to factors such as geography that may determine which back end server is selected. For example, the private folders of users in a particular geographical location may all be stored on a single server. The home public folder that is associated with those users may contain content that is specific to those users and of little interest to others. As a result, the content of that folder does not need to be replicated on other back end servers because those users are usually directed to their home public folder. Thus, the content may be ghosted on the other back-end servers and replicated as needed.
Another aspect of the back end servers 220 is that each private folder is usually associated with a specific public folder. In
The front end server, shown in
When a back end server is selected or accessed, client requests to private folders and client requests to public folders should be considered. In each case, the client request can be affected by whether the selected back end server is available and whether the back end server can actually service the request. Availability may be a temporary condition while the ability of the back end server to service the request may be dependent on compatibility issues and is a more permanent condition.
The front end server 210 either accesses the directory 211 directly to obtain the configuration information, or maintains a copy of the directory 211. In the case where the private folders represent personal mailboxes, the directory 211 may be used to identify which mailbox server and which mailbox store are associated with a particular user. The directory 211 also identifies the home public folder that is associated with a particular mailbox store. In this manner, the home public folder for a particular user may be determined. The directory 211 may also be accessed to determine which servers maintain a copy of a particular public folder tree. It is possible that more than one public folder tree can be present on the back end servers. Additionally, all of the servers are not required to have all of the public folder trees. More generally, the data stored on the back-end servers does not have to be replicated in its entirety on all of the back end servers.
When a request is received from a client 200, an initial determination is made by the front end server 210 as to whether the client request is directed to the user's private folders, the home public folder, or to an application public folder. Using the directory 211, the front end server 210 examines the Uniform Resource Identifier (URI) received in the client request to identify the resource the user is attempting to access (read, write, copy, move, save, delete and the like), and whether the client request is directed to the private folders, the home public folders, or to application public folders. If the URI cannot be identified as one of these types, then the client request is typically failed.
For example, if a client request contains a URI of “http://server/mailbox/user,” then this request is intended for the mailbox of the user, which is located in the private folders. The front end server 210, in this case, determines which back end server is the mailbox server for this user from the directory 211, which contains metadata identifying the location of the user's mailbox. If the URI of the client request is http://server/mailbox, then the front end server 210 will look up the username associated with the authenticated user and proceed as if the request had contained the username of the authenticated user, as described above. After the back end server is determined or selected, the client request is directed to the identified back end server.
Another situation handled by the front end server 210 is where the client is attempting to access the public folders. When the client request is received at the front end server 210, the configuration information in or from the directory 211 is used to determine that the client request is directed to the public folders. Within the directory 211, the virtual root associated with the URI of the client request is mapped to a physical location. The path name of the actual location of the requested data may contain the string “public folder.” If this string is detected in the path, then the front end server 210 determines that the client request is directed to the public folder. Even though the virtual root may change, the actual physical location will most likely contain a string that can be used to determine that the client request is directed to the public folders. The actual string used to make this determination can vary and is not limited to “public folder.” It is understood that the front end server 210 is not precluded from determining that the client request is directed to the public folders using other methods.
The next issue is determining which back end server will serve this client request to access the public folders. As previously described, each user has an associated home public folder. The home public folder of a particular user is associated with the private folder of that user and is typically located on the same back end server as the private folders of the user. Thus, a request for the public folder is typically sent to the home public folder every time a new request from a particular user is received by the front end server 210.
This is important because each public folder on each back end server is effectively the same as described with reference to FIG. 3. However, only the home public folder of a user stores status information such as when a user has read an item and which items have not been read. Maintaining this type of information is particularly useful when a user is always directed to the same home public folder. This information would not be useful if a user were not directed to the same back end server. Thus, the front end server 210 directs all requests from a particular user to that user's home public folders when possible.
The next situation involves a URI that refers to an application public folder or top level hierarchy system. The front end server 210 obtains a list of servers 212 from the directory 211 that have a replica of the application folder tree that is referenced by the URI in the client request. The front end server 210 also has access to the user's authentication token or security identifier (SID) 214. In order to determine which back end server to send the client request to, the front end server 210 uses the SID 214 as input to the selection module 215 in order to select one of the back end servers in the list of servers 212. One example of the selection module 215 is a hash function.
Using the SID 214 as a key in a hash function ensures that exactly one server in the list of servers 212 will be selected and that the same server will be selected for the user assuming that the number of back end servers does not change. In this manner, client requests from a particular user are sent to the same server when possible. In addition, the hash function is able to spread the client requests across all of the available back end servers 220 because the SID 214 of each user is different. Thus, the system efficiency is maintained by distributing the client requests across all of the back end servers 220.
As shown in
When a selected back end server is unavailable, nothing is usually returned to the front end server 210, although that server is marked as unavailable as described. When the selected back end server is unavailable, the hash function is performed against the remaining servers in the list of servers 213 in order to select a different back end server to service the client request.
In some instances, the front end server 210 will already have some of the servers in the list of servers 212 marked as unavailable when an initial client request is received. However, these servers are not excluded from the hash function in order to ensure that the same back end server is repeatedly selected. Altering the number of servers in the list of servers 212 could result in an uneven distribution of client requests across the back end servers 220. If, however, the hash function does select a server that is marked as unavailable, then that server is removed from the list of servers 212 for that request only and the hash is re-executed to select a back end server to service the request. This process can be repeated until either a functioning back end server is selected or it is determined that none of the back end servers host the requested content. Servers that are marked as unavailable are periodically reevaluated to determine their availability and the mark is removed when they are available.
Once a valid back end server has been selected, the request 216 is sent to the back end server 222 to service the request. In this case, the back end server 222 has resource 240 and resource 241. The resource 241, indicated by dashed lines, is ghosted and the content of that resource is not physically present on the back end server 222. If the request 216 is for the ghosted resource 241, the back end server 222 sends a list of servers 218 to the front end server 210 that contains a list of all back end servers that actually do store the requested content. The list of servers 218 returned by the back end server 222 is typically a subset of the list of servers 212. The front end server 210 executes the hash function on the list of servers 218 to select a back end server to service the client request. In this example, the back end server 224 is selected and the request 217 is then sent to the back end server 224, which does store the content in the resource 243 that is ghosted in the resource 241 and was the subject of the initial request 216. As more fully described in the co-pending U.S. application Ser. No. 09/679,716, entitled “Transparently Redirecting Client Requests for Content,” filed the same day herewith and incorporated by reference, the redirection of the request 216 from the back end server 222 to the back end server 224 is transparent.
Another aspect of the present invention is that when the front end server 210 is generating the initial list of servers 212, one or more tiers of servers are generated. For example, the first tier of servers may include back end servers that provide fast access when compared to other back end servers. Alternatively, some back end servers included in the first tier may have larger bandwidths than other back end servers. These types of back end servers are included in the first tier of servers in the list of servers 212, while the remaining servers are classified into other tiers. The front end server 210 usually attempts to select a back end server that is in the first tier when selecting a back end server to service a client request. If a first tier server is not selected, the systems and methods described herein will be applied to the second tier of servers.
The present invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US5940289 *||Aug 27, 1997||Aug 17, 1999||Hitachi, Ltd.||Parallel database system retrieval method of a relational database management system using initial data retrieval query and subsequent sub-data utilization query processing for minimizing query time|
|US6101495 *||Sep 15, 1998||Aug 8, 2000||Hitachi, Ltd.||Method of executing partition operations in a parallel database system|
|US6161104 *||May 11, 1999||Dec 12, 2000||Ibm Corporation||Methods and apparatus for high-speed access to and sharing of storage devices on a networked digital data processing system|
|US6272492 *||Nov 21, 1997||Aug 7, 2001||Ibm Corporation||Front-end proxy for transparently increasing web server functionality|
|US6286047 *||Sep 10, 1998||Sep 4, 2001||Hewlett-Packard Company||Method and system for automatic discovery of network services|
|US6339423 *||Mar 23, 2000||Jan 15, 2002||Entrust, Inc.||Multi-domain access control|
|US6609159 *||Nov 30, 1998||Aug 19, 2003||Semyon Dukach||Methods, systems, and machine readable programming for interposing front end servers between servers and clients|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US7254626||Jul 25, 2002||Aug 7, 2007||Foundry Networks, Inc.||Global server load balancing|
|US7423977||Aug 23, 2004||Sep 9, 2008||Foundry Networks Inc.||Smoothing algorithm for round trip time (RTT) measurements|
|US7454500||Sep 26, 2000||Nov 18, 2008||Foundry Networks, Inc.||Global server load balancing|
|US7496651||May 6, 2004||Feb 24, 2009||Foundry Networks, Inc.||Configurable geographic prefixes for global server load balancing|
|US7574508||Aug 7, 2002||Aug 11, 2009||Foundry Networks, Inc.||Canonical name (CNAME) handling for global server load balancing|
|US7581009||Apr 27, 2007||Aug 25, 2009||Foundry Networks, Inc.||Global server load balancing|
|US7584301||May 6, 2004||Sep 1, 2009||Foundry Networks, Inc.||Host-level policies for global server load balancing|
|US7650410 *||Feb 9, 2005||Jan 19, 2010||Hitachi, Ltd.||Method and system for managing programs for Web service system|
|US7657501 *||Aug 10, 2004||Feb 2, 2010||Teradata Us, Inc.||Regulating the workload of a database system|
|US7657629||Feb 28, 2003||Feb 2, 2010||Foundry Networks, Inc.||Global server load balancing|
|US7676576 *||Feb 28, 2003||Mar 9, 2010||Foundry Networks, Inc.||Method and system to clear counters used for statistical tracking for global server load balancing|
|US7756965||Jan 14, 2009||Jul 13, 2010||Foundry Networks, Inc.||Configurable geographic prefixes for global server load balancing|
|US7840678||Jul 20, 2009||Nov 23, 2010||Brocade Communication Systems, Inc.||Host-level policies for global server load balancing|
|US7853643 *||Mar 12, 2003||Dec 14, 2010||Blue Titan Software, Inc.||Web services-based computing resource lifecycle management|
|US7885188||Jul 21, 2008||Feb 8, 2011||Brocade Communications Systems, Inc.||Smoothing algorithm for round trip time (RTT) measurements|
|US7899899||May 26, 2010||Mar 1, 2011||Foundry Networks, Llc||Configurable geographic prefixes for global server load balancing|
|US7949757||Nov 2, 2010||May 24, 2011||Brocade Communications Systems, Inc.||Host-level policies for global server load balancing|
|US7975291||Dec 3, 2007||Jul 5, 2011||Fujitsu Limited||Network node machine and information network system|
|US8024441||Feb 16, 2007||Sep 20, 2011||Brocade Communications Systems, Inc.||Global server load balancing|
|US8234336 *||Feb 25, 2005||Jul 31, 2012||Microsoft Corporation||Virtual conference center architecture|
|US8239535 *||Dec 20, 2005||Aug 7, 2012||Adobe Systems Incorporated||Network architecture with load balancing, fault tolerance and distributed querying|
|US8248928||Nov 8, 2007||Aug 21, 2012||Foundry Networks, Llc||Monitoring server load balancing|
|US8255485 *||Dec 7, 2010||Aug 28, 2012||Blue Titan Software, Inc.||Web services-based computing resource lifecycle management|
|US8260924 *||May 3, 2006||Sep 4, 2012||Bluetie, Inc.||User load balancing systems and methods thereof|
|US8280867 *||Oct 20, 2005||Oct 2, 2012||Teradata Us, Inc.||Identifying database request sources|
|US8280998||Feb 8, 2011||Oct 2, 2012||Brocade Communications Systems, Inc.||Configurable geographic prefixes for global server load balancing|
|US8321503 *||Jun 24, 2010||Nov 27, 2012||Microsoft Corporation||Context-specific network resource addressing model for distributed services|
|US8499312 *||Mar 9, 2007||Jul 30, 2013||Microsoft Corporation||Administrator level access to backend stores|
|US8504721||Jul 1, 2009||Aug 6, 2013||Brocade Communications Systems, Inc.||Global server load balancing|
|US8510428||Aug 27, 2012||Aug 13, 2013||Brocade Communications Systems, Inc.||Configurable geographic prefixes for global server load balancing|
|US8515414||Jan 28, 2011||Aug 20, 2013||Telecommunication Systems, Inc.||Cellular augmented radar/laser detection using local mobile network within cellular network|
|US8532266||May 3, 2007||Sep 10, 2013||Telecommunication Systems, Inc.||Efficient usage of emergency services keys|
|US8549148||Oct 29, 2010||Oct 1, 2013||Brocade Communications Systems, Inc.||Domain name system security extensions (DNSSEC) for global server load balancing|
|US8576991||Apr 11, 2008||Nov 5, 2013||Telecommunication Systems, Inc.||End-to-end logic tracing of complex call flows in a distributed call system|
|US8595699 *||Dec 30, 2010||Nov 26, 2013||Business Objects Software Limited||Logical address based object oriented programming|
|US8755279||Jan 18, 2011||Jun 17, 2014||Brocade Communications Systems, Inc.||Smoothing algorithm for round trip time (RTT) measurements|
|US8862740||May 5, 2011||Oct 14, 2014||Brocade Communications Systems, Inc.||Host-level policies for global server load balancing|
|US8949850||May 5, 2006||Feb 3, 2015||Brocade Communications Systems, Inc.||Statistical tracking for global server load balancing|
|US8954028 *||Oct 28, 2008||Feb 10, 2015||Telecommunication Systems, Inc.||Geo-redundant and high reliability commercial mobile alert system (CMAS)|
|US9002347||Jul 30, 2013||Apr 7, 2015||Telecommunication Systems, Inc.||Transmitter augmented radar/laser detection using local mobile network within a wide area network|
|US9015323||Dec 10, 2009||Apr 21, 2015||Brocade Communications Systems, Inc.||Global server load balancing|
|US9042522||Nov 4, 2013||May 26, 2015||Telecommunication Systems, Inc.||End-to-end logic tracing of complex call flows in a distributed call system|
|US20020138660 *||Mar 25, 2002||Sep 26, 2002||Bernd Eilers||Method and system for the redirection of client requests|
|US20050028012 *||Jul 28, 2004||Feb 3, 2005||Fujitsu Limited||Network node machine and information network system|
|US20050210136 *||Feb 9, 2005||Sep 22, 2005||Hitachi, Ltd.||Method and system for managing programs for Web service system|
|US20060274761 *||Dec 20, 2005||Dec 7, 2006||Error Christopher R||Network architecture with load balancing, fault tolerance and distributed querying|
|US20070260732 *||May 3, 2006||Nov 8, 2007||Bluetie, Inc.||User load balancing systems and methods thereof|
|US20090132638 *||Nov 15, 2007||May 21, 2009||Kim Moon J||Server-processor hybrid system for processing data|
|US20100075626 *||Mar 25, 2010||Mark Titus||Geo-redundant and high reliability commercial mobile alert system (CMAS)|
|US20110196940 *||Dec 7, 2010||Aug 11, 2011||Soa Software, Inc.||Web Services-Based Computing Resource Lifecycle Management|
|US20110320522 *||Jun 24, 2010||Dec 29, 2011||Microsoft Corporation||Context-specific network resource addressing model for distributed services|
|US20120096133 *||Apr 19, 2012||Centerbeam, Inc.||System and Method for Serving and Managing Independent Access Devices|
|US20120174063 *||Dec 30, 2010||Jul 5, 2012||O'carroll Luan||Logical address based object oriented programming|
|WO2012082151A2 *||Dec 12, 2011||Jun 21, 2012||Telecommunication Systems, Inc.||Location services gateway server|
|WO2015094195A1 *||Dec 17, 2013||Jun 25, 2015||Hitachi Data Systems Corporation||Transaction query engine|
|U.S. Classification||709/226, 709/217, 718/106|
|International Classification||H04L29/06, G06F9/50, H04L29/08|
|Cooperative Classification||H04L67/1023, H04L67/1002, H04L67/1014, H04L63/08|
|European Classification||H04L29/08N9A1J, H04L29/08N9A1E, H04L63/08, H04L29/08N9A|
|Mar 6, 2001||AS||Assignment|
Owner name: MICROSOFT CORPORATION, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:LYNDERSAY, SEAN;DEEN, BRIAN;HOPMANN, ALEX;AND OTHERS;REEL/FRAME:011572/0269;SIGNING DATES FROM 20010302 TO 20010306
|Oct 23, 2008||FPAY||Fee payment|
Year of fee payment: 4
|Oct 4, 2012||FPAY||Fee payment|
Year of fee payment: 8
|Dec 9, 2014||AS||Assignment|
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034541/0001
Effective date: 20141014