Abstract:
A method of authenticating communications includes receiving, by a computer, a first set of credentials, verifying the first set of credentials by comparing the first set of credentials to a plurality of sets of credentials stored in a database, subsequent to verifying the first set of credentials, deriving a second set of credentials, and transmitting notification of the second set of credentials to a remote computer.

Description:
RELATED APPLICATIONS 
     This application is related to co-pending U.S. application Ser. No. 12/911,390, entitled “METHODS AND SYSTEMS FOR PROVIDING IMPROVED ACCESS TO DATA AND MEASUREMENTS IN A MANAGEMENT SYSTEM,” , and filed on Oct. 25, 2010, which is herein incorporated by reference in its entirety. 
     BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates generally to the field of secure network communications, and more particularly, to methods and systems for establishing secure authenticated bidirectional server communication using automated credential reservation. 
     2. Discussion of Related Art 
     Data centers are widely used to house various types of electrical equipment, including computer systems and the physical infrastructure needed to support such systems, such as power supplies (e.g., uninterruptible power supplies and backup power supplies), environmental systems (e.g., air conditioning, fire suppression, etc.), physical data center security, and other monitoring devices. Companies that depend on the proper and efficient operation of their data centers use various tools to monitor and operate the physical infrastructure, including multiple monitoring systems that are coordinated to provide centralized collection and reporting of critical infrastructure events. 
     BRIEF SUMMARY OF THE INVENTION 
     According to one embodiment, a method of authenticating communications includes acts of receiving, by a computer, a first set of credentials and verifying the first set of credentials by comparing the first set of credentials to a plurality of sets of credentials stored in a database. Subsequent to verifying the first set of credentials, the method further includes acts of deriving a second set of credentials, and transmitting notification of the second set of credentials to a remote computer. 
     According to various embodiments, the act of verifying the first set of credentials may be performed by the remote computer. The first set of credentials may be created by a user of the computer. The first set of credentials may be created on the remote computer. The first set of credentials may include a username and password. At least one of the first set of credentials and the second set of credentials may be encrypted by the computer. The second set of credentials may be stored in a database accessible by the computer. 
     In another embodiment, the method may further include an act of receiving, by the computer, contact information for the remote computer. 
     In another embodiment, the method may further include an act of establishing, by the remote computer, secure communications with the computer using at least the second set of credentials. 
     In yet another embodiment, the method may further comprise an act of automatically changing at least one of the first set of credentials and the second set of credentials using the at least one of the first set of credentials and the second set of credentials as a seed for calculating a new set of credentials to replace the at least one of the first set of credentials and the second set of credentials. The act of automatically changing may occur periodically. The act of automatically changing may occur in response to at least one of a user event, a system event, and a security event. 
     According to another embodiment, a method of authenticating communications between a first computer and a second computer includes acts of receiving, from a user, a first set of credentials at the first computer; receiving, from the user, the first set of credentials at the second computer; calling, by the second computer, a first service operating on the first computer, the first service configured to provide verification of the first set of credentials to the second computer; responsive to receiving the verification of the first set of credentials from the second computer, deriving a second set of credentials by the second computer; and transmitting notification of the second set of credentials from the second computer to the first computer. 
     In another embodiment, the method may further include an act of establishing, by the second computer, secure communications with the first computer using at least the second set of credentials. 
     In another embodiment, the method may further include an act of establishing, by the first computer, secure communications with the second computer using at least the first set of credentials. 
     In yet another embodiment, the method may further include an act of automatically changing at least one of the first set of credentials and the second set of credentials using the at least one of the first set of credentials and the second set of credentials as a seed for calculating a new set of credentials to replace the at least one of the first set of credentials and the second set of credentials. The act of automatically changing may occur periodically. The act of automatically changing may occur in response to at least one of a user event, a system event, and a security event. 
     According to another embodiment, a data center infrastructure management system includes a network, a first server connected to the network, a plurality of data center infrastructure devices connected to the first server, the first server being configured to maintain device data related to management of the plurality of data center infrastructure devices, and a second server connected to the network and configured to verify a set of user-created credentials, to be supplied by the first server, by comparing the set of user-created credentials to a plurality of sets of user-created credentials stored in a database, the second server further configured to derive a set of server-created credentials based on the set of user-created credentials subsequent to verifying the set of user-created credentials, the second server further configured to notify the first server of the set of server-created credentials subsequent to deriving the set of server-created credentials. The first server uses the set of server-created credentials to establish secure communication with the second server for exchanging the device data with the second server. 
     In another embodiment, the system may be configured to establish secure communication between the first server and a second server through the network using at least the set of used-created credentials and the set of server-created credentials. 
     According to one embodiment, a data center infrastructure management system includes a plurality of central servers configured to maintain device data related to management of a plurality of data center infrastructure devices located within one or more data centers and a global server connected to the plurality of central servers through a first network. The global server is configured to receive at least a subset of the device data asynchronously from each of the plurality of central servers, and is further configured to store the at least the subset of the device data in a database, and is further configured to generate and maintain an index of the subset of the device data. The index is configured to facilitate searching of the subset of the device data in the database by the global server. The system further includes a global client connected to the global server through a second network, the global client having a user interface configured to request and receive from the global server at least one of a portion of the subset of the device data and a portion of the device data. The portion of the subset of the device data is to be located in the database using the index by the global server in response to the request, and the portion of the device data is to be received from the plurality of central servers in response to a request by the global client for data that is not in the database. 
     In another embodiment, the global client may include a thin client device that includes a terminal having at least the components necessary for receiving input from a user, displaying output to the user, and communicating with the global server. 
     In another embodiment, the subset of the device data may includes data center asset inventory data. 
     In yet another embodiment, the global server may be further configured to request the device data from the plurality of central servers in response to the request from the global client for the device data, wherein the device data is not stored in the database, and wherein the global server is further configured to provide the device data to the global client in a lightweight format subsequent to receiving the device data from the plurality of central servers. The lightweight format of the device data may be a format that is adapted for consumption by a thin client device that includes a terminal having at least the components necessary for receiving input from a user, displaying output to the user, and communicating with the global server. 
     In another embodiment, the global client may include a data requestor component configured to request at least one of the portion of the subset of the device data and the portion of the device data, and further configured to display the at least one of the portion of the subset of the device data and the portion of the device data. 
     In another embodiment, the index may include a table of ordered records including at least one of the data, an occurrence frequency of the data, a database table name, and identification information for locating the data in the database. 
     According to another embodiment, a data center infrastructure management system includes a plurality of central servers configured to maintain device data related to management of a plurality of data center infrastructure devices located within one or more data centers. Each of the plurality of central servers has an asynchronous event component configured to automatically generate a first portion of the device data in response to a change in a status of at least one of the plurality of data center infrastructure devices, and a first device data service component configured to service a request for a second portion of the device data, the second portion of the device data being different than the first portion of the device data. The system further includes a global server connected to each of the plurality of central servers through a network. The global server has an asynchronous event handling component configured to receive the first portion of the device data from the one or more central servers, a second device data service component configured to service a request for at least one of the first portion of the device data and the second portion of the device data, a data access component configured to maintain a database containing at least the first portion of the device data, and a data indexing component configured to generate and maintain an index of the first portion of the device data contained in the database. The index is configured to facilitate searching of the first portion of the device data. 
     In another embodiment, the system may further include a global client connected to the global server. The global client may have a data requestor component configured to request at least one of the first portion of the device data and the second portion of the device data, and may further have a user interface configured to display at least one of the first portion of the device data and the second portion of the device data. 
     In yet another embodiment, the global client may include a thin client device that includes a terminal having at least the components necessary for receiving input from a user, displaying output to the user, and communicating with the global server. 
     In another embodiment, the global client may include a data requestor component configured to request at least one of the first portion of the device data and the second portion of the device data, and may further be configured to display at least one of the first portion of the device data and the second portion of the device data. 
     In another embodiment, the index may include a table of ordered records including at least one of the data, an occurrence frequency of the data, a database table name, and identification information for locating the data in the database. 
     In another embodiment, the first portion of the device data may include a status of at least one of a data center server, a data center device, and a data center device group. The status may include at least one of sensor data, log data, and alarm data. 
     According to another embodiment, a method of managing device data related to a data center infrastructure includes generating, by a first server, a first portion of the device data in response to a change in a status of at least one of a plurality of data center infrastructure devices, storing, by a second server, the first portion of the device data in a database, and generating an index, by the second server, of the first portion of the device data. The index is configured to facilitate searching of the first portion of the device data by the second server. The method further includes generating, by the first server, a second portion of the device data in response to a request for data that is not contained in the database. The second portion of the device data is different than the first portion of the device data and is generated in a lightweight format. The lightweight format is adapted for consumption by a thin client device. The method further includes displaying, in response to a user request, at least a portion of the first portion of the device data using a user interface that is provided to a client computer by the second server. 
     In another embodiment, the method may further include searching, responsive to receiving a search request from a user, the first portion of the device data using the index to find data satisfying the search request. 
     In yet another embodiment, the thin client device may include a terminal having at least the components necessary for receiving input from a user, displaying output to the user, and communicating with at least one of the first server and the second server. 
     In another embodiment, the method may further include automatically polling, by the second server, the first server to retrieve an update to the first portion of the device data. 
     In another embodiment, the method may further include asynchronously transmitting to the second server, by the first server, an update to the first portion of the device data. 
     In yet another embodiment, the method may further include generating a list of suggested search terms based on the first portion of the device data and on a user-supplied search query. The list of suggested search terms may include one or more terms derived from the first portion of the device data. 
     In another embodiment, the user interface may be configured to display the list of suggested search terms to a user in response to receiving the user-supplied search query. The user interface may be further configured to enable the user to select one search term from the list of suggested search terms. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The accompanying drawings are not intended to be drawn to scale. In the drawings, each identical or nearly identical component that is illustrated in various figures is represented by a like numeral. For purposes of clarity, not every component may be labeled in every drawing. In the drawings: 
         FIG. 1  is a block diagram of a data center infrastructure management system in accordance with one embodiment of the present invention; 
         FIG. 2  is a data flow diagram of an automated credential reservation system for a data center infrastructure management system in accordance with one embodiment of the present invention; 
         FIG. 3  illustrates a flow chart of a method for establishing secure authenticated bidirectional server communication using an automated credential reservation according to one embodiment of the present invention; 
         FIGS. 4A, 4B and 4C  illustrate a unified modeling language model of a data center infrastructure management system in accordance with one embodiment of the present invention; 
         FIG. 5  illustrates a user interface in accordance with one embodiment of the present invention; 
         FIG. 6  illustrates a user interface in accordance with another embodiment of the present invention; 
         FIG. 7  shows a more detailed description of data flow in the data center infrastructure management system of  FIG. 1 ; 
         FIG. 8  shows a detailed view of a user interface as described with respect to  FIG. 7 ; 
         FIG. 9  shows a detailed view of the user interface of  FIG. 7 ; 
         FIG. 10  is a functional block diagram of a data center infrastructure management system in accordance with one embodiment of the present invention; and 
         FIG. 11  is a functional block diagram of a storage system that may be used with the data center infrastructure management system of  FIG. 10 . 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     Embodiments of this invention are not limited in their application to the details of construction and the arrangement of components set forth in the following description or illustrated in the drawings. Embodiments of the invention are capable of other embodiments and of being practiced or of being carried out in various ways. Also, the phraseology and terminology used herein is for the purpose of description and should not be regarded as limiting. The use of “including,” “comprising,” or “having,” “containing”, “involving”, and variations thereof herein, is meant to encompass the items listed thereafter and equivalents thereof as well as additional items. 
     As discussed above, various tools are used to manage the physical infrastructures of data centers. It is appreciated that additional tools can be deployed for monitoring large-scale and/or physically disparate data centers. Due to the critical nature of data center operations, these monitoring systems must exchange data with each other quickly and securely. Therefore, before exchanging any sensitive data, various devices (e.g., a server and a client) must provide authentication credentials. 
     In one known technique, authentication credentials are pre-programmed into each device on the network prior to establishing secure communications between them. However, security vulnerabilities arise when those credentials are acquired by a non-trusted party having access to those devices. Further, pre-programming the credentials into each device is labor intensive and prone to error. 
     Embodiments of the present invention provide techniques for establishing secure, authenticated, bidirectional communication between multiple computers across a network. In one embodiment, establishing bidirectional communication between two computers utilizes an automated credential reservation system. In the automated credential reservation system, each computer provides authentication credentials (e.g., username and password) to the other computer before, for example, unsolicited data is securely exchanged between them. Initially, a user creates a first set of credentials on a first computer. The first set of credentials will be used by a second computer to access the first computer. The user then enters the first set of credentials on the second computer along with contact information (e.g., a hostname) of the first computer. The second computer calls a service on the first computer (e.g., over a network connection), which verifies the first set of credentials to the second computer. Once verified, the second computer automatically derives a second set of credentials, which will be used by the first computer to access the second computer, and transmits the second set of credentials to the first computer. In this manner, secure, bidirectional communication can be established between the first computer and the second computer using multiple sets of credentials that are based on a single set of user-created credentials. For example, a set of server-created credentials may be derived from, but different than, the user-created credentials. The server-created credentials may be unique for authenticating communication between the first computer and the second computer. 
       FIG. 1  illustrates a block diagram of a data center infrastructure management system  100  for managing the physical infrastructure (e.g., power, cooling, security, and environment) of one or more data centers  112  in accordance with one embodiment of the present invention. The system  100  is configured to monitor a plurality of devices  110  located within one or more data centers  112 . The system  100  includes one or more central servers  114  that are each connected to at least some of the devices  110 . The central servers  114  may be servers, clients, or both. The system  100  further includes a global server  116  that is connected to each of the central servers  114  over a network  118 . It should be understood that the system  100  may include more than one global server  116 , and that the infrastructure of one data center  112  may be managed by more than one central server  114 . One or more global clients  120  are connected to the global server  116  over a network  122 , which may be the same as network  116 . Optionally, one or more of the global clients  120  may be connected to one or more devices  110 . 
     The system  100  monitors incoming alarms and other telemetric data from the devices  110 , such as uninterruptible power supplies (UPS), cooling systems, environmental sensors, video cameras, power distribution systems, and power or load management systems, which are located in the data centers  112 . The system  100  may also control each of the devices  110 . Each central server  114  collects data from the devices  110  in one associated data center  112 , or multiple associated data centers, analyzes the data, and provides alarms, reports, and other relevant information to a user through a central client  126 . Further, each central server  114  provides the alarms, reports, and other information to the user  124  through the global server  116 . While the central server  114  only maintains data received from the devices  110  within an associated data center  112 , the global server  116  aggregates data from all central servers  114  and provides a single access point for each global client  120  to the data from all data centers. Other data, including user-supplied and server-supplied data that are used to established secure communications, may be exchanged between each central server  114  and the global server  116 . The user  124  may access the central server  114 , the global server  116 , or both directly (e.g., using a local user interface) to create user credentials, such as a username and password, to configure the global server to access one or more central servers, or to perform other administrative functions. 
       FIG. 2  is a data flow diagram of an automated credential reservation system  200  for the data center infrastructure management system  100 , as described above with reference to  FIG. 1 , in accordance with one embodiment. The automated credential reservation system  200  includes a plurality of processes executing on the central server  114 , the global server  116 , or both, including a request verification of user credentials process  210 , a verify user credentials process  212 , and a derive server credentials process  214 . As used herein, a process is any instance of a computer-executable program, or portion thereof, that is being executed by a processor of the computer (e.g., the central server  114 , the global server  116 , the global client  120 , and so forth). It should be understood that, as shown in  FIG. 2 , the central server  114  may be any server, and that the global server  116  may be any server (e.g., the automated credential reservation system  200  may comprise two or more central servers, two or more global servers, or any combination thereof). The automated credential reservation system  200  further includes a plurality of data stores (or databases), including a user authentication database  216  and a server authentication database  218 . The plurality of data stores are implemented, in one embodiment, using a storage medium connected to the system  200 , such as a hard disk drive, flash memory, or another computer storage medium. A plurality of data flows includes user-created credentials data  220 , contact information data  222 , unverified user credentials data  224 , trusted user credentials data  226 , verified user credentials data  228 , and derived server-created credentials data  230 . As used herein, a data flow represents the exchange of data between two or more processes. 
     The automated credential reservation system  200  enables two or more servers (e.g., the global server  116  and at least one central server  114 ) to each maintain credentials for authenticating requests originating from one or more of the other servers using a set of user-supplied credentials that are unique to at least one of the servers (e.g., unique to the central server  114 ). The user-created credentials may be uniquely associated with one of the servers, or may be common among more than one server. When the global server  116  is given the user-created credentials data  220  needed to access the central server  114 , the global server automatically derives server-created credentials data  230  for the central server to use when accessing the global server, stores the derived server-created credentials data within a database for future authentication verification (e.g., creating a reservation for future access to the global server by the central server, such as for posting unsolicited authenticated requests to services provided by the global server), and notifies the central server of the derived server-created credentials data. The notification may be, for example, a call from the global server into a process (e.g., a service configured to receive a notification call) running on the central server which includes information identifying the derived server-created credentials data  230 . In one non-limiting example, once notified that the derived server-created credentials data  230  are available, the central server  114  may use the derived server-created credentials data to access the global server  116 , and further, the global server may use the user-created credentials  220  to access the central server. It should be understood that either the global server  116  or the central server  114  may create the derived server-created credentials data  230  (e.g., either server may create and post the derived server-credentials to the other server). 
     The following describes one exemplary data flow of the automated credential reservation system  200 , as shown in  FIG. 2 . The user  124  provides the user-created credentials data  220  to the central server  114 , which is stored in the user authentication database  216  on the central server. The user-created credentials data  220  includes, for example, a username and password that are used by the global server  116  to access services and data on the central server  114 . The user  124  also provides the user-created credentials data  220  (e.g., for the central server  114 ) to the global server  116 , along with the contact information data  222 , such as a hostname of the central server, which is used by the global server to contact the central server. The request verification of user credentials process  210 , operating on the global server  116 , transmits the unverified user credentials data  224  to the verify user credentials process  212  operating on the central server  114 . The verify user credentials process  212  compares the unverified user credentials data  224  to the trusted user credentials data  226  stored in the user authentication database  216  and returns, to the global server  116 , the verified user credentials data  228  (which may include information with respect to whether the user credentials are or are not verified). The trusted user credentials data  226  may be the same as the user credentials data  220 . 
     The derived server-created credentials process  214 , operating on the global server  116 , receives the verified user credentials data  228  from the central server  114  and produces the derived server-created credentials data  230 , which is transmitted to and stored in the server authentication database  218  on the global server  116 , the central server  114 , or both. The derived server-created credentials data  230  may then be used by the central server  114  to access the central server  116 , for example, to asynchronously post data to the global server  116 . 
       FIG. 3  illustrates a flow chart of a method for establishing secure authenticated bidirectional server communication using an automated credential reservation  300  according to one embodiment. The bidirectional server communication occurs between a first server (e.g., the central server  114 , as shown and described above with reference to  FIGS. 1 and 2 ) and at least a second server (e.g., the global server  116 , as shown and described above with reference to  FIGS. 1 and 2 ), or other computer, by sharing authentication credentials with each other. In one example, the second server may establish a trusted relationship with the first server by receiving verified user credentials from the first server. The first server may also establish a trusted relationship with the second server, such as described in further detail below with reference to  FIG. 3 . 
     The method  300  of  FIG. 3  begins at block  302 . At block  304 , user-created credentials and contact information are received by the first server from a user. The user-created credentials include authentication information (e.g., a username and password) used by one or more servers, including the second server, to authenticate any request for services on the respective servers. The contact information includes information describing one or more remote servers to be contacted, such as a hostname, IP address, or other locating information. The contact information is used by the first server to identify the second server, and for sending a credential verification request to the second server. The received user-created credentials may be stored, by the first server, in a database for future use. 
     At block  306 , the user-created credentials are verified by at least the second server. In one example, the first server sends a user-created credential verification request to the second server, which includes the user-created credentials. The second server compares the user-created credentials received from the first server against a user credential database, and if the credentials match, returns a verification message to the first server. The user-created credentials may be encrypted for enhanced security. At block  308 , if the user-created credentials are not verified, process  300  continues to block  318 ; otherwise, the process continues to block  310 . It should be understood that blocks  306  and  308  are optional. For example, the user-created credentials may be verified in other ways, such as by notifying the second server that the first server has created the derived server-created credentials, such as described below with reference to block  316  (e.g., the user-created credentials are verified if the notification is successful). However, the method of block  306  may be used to enhance data security. 
     At block  310  the first server derives a set of server-created credentials that can be used by the second server to access the first server. The server-created credentials may be automatically derived. This automation avoids the necessity of manually creating the server-created credentials, and is useful, for example, where the first server is in a trusted relationship with the second server. In one example, the first server maintains a service that is designed to facilitate communication with the second server (e.g., a service that is configured to receive and process requests from the second server), and the second server maintains another service that is designed to facilitate communication with the first server. At block  312 , the server-created credentials are stored in a database, and at block  316 , the second server is notified by the first server that the server-created credentials have been created. In one example, the first server notifies the second server of the server-created credentials by posting (e.g., using a HTTP POST request) the server-created credentials to a service provided by the second server, the service being configured to receive the post. The second server may then use the server-created credentials to gain unsolicited access to services provided by the first server using secure, authenticated communications. At block  318 , process  300  ends. 
     In another embodiment, the user and/or server credentials will automatically change periodically (e.g., as a security feature). In one example, the original user-created credentials and server-created credentials are used as seeds for calculating one or more new server-created credentials. Either or both the first server and the second server may derive new credentials, notify the other server of the new credentials, and then disable the old credentials. This reduces the risk of unauthorized access to either or both the first server and the second server by a third party who has obtained any of the credentials. The periodicity of change may be any length of time (e.g., every few milliseconds, minutes, hours, days, weeks, months, years, etc.). The automatic change may also occur upon request from a user (e.g., a system operator) or upon occurrence of an event (e.g., a security event, a user login or logout, a detected fault, or other relevant event). 
     In one embodiment, the source code for executing process  300  may be coded in Java™ by Oracle Corporation, or in another programming language. 
       FIGS. 4A, 4B and 4C  illustrate a unified modeling language (UML) model of a data center infrastructure management system, such as system  100  as described above with reference to  FIG. 1 , in accordance with one embodiment. Generally indicated at  402  is a data flow that occurs during an automated credential reservation process, such as described above with reference to  FIG. 2 . A first server passes a set of user credentials (e.g., username and password) to a second server for verification, as indicated generally at  404 . If the second server validates the user credentials, the first server derives a set of server credentials, and saves the server credentials for future use, as indicated generally at  406 . The first server then establishes secure communication with the second server, as generally indicated at  408 . 
       FIG. 5  illustrates a user interface  500  in accordance with one embodiment. The user interface  500  includes a user configuration dialog box  510 , which includes a username entry field  512 , and a password entry field  514 . The user interface  500  is used by a user to create the user-created credentials data  220  of  FIG. 2 . The user interface  500  may, for example, be implemented on the central server  114 , such as described above with reference to  FIG. 1 . 
       FIG. 6  illustrates a user interface  600  in accordance with one embodiment. The user interface  600  includes a server configuration dialog box  610 , which includes a hostname entry field  612 , a username entry field  614 , and a password entry field  616 . The user interface  600  is used by a user to add a central server, such as central server  114  of  FIG. 1 , to a global server, such as global server  116  of  FIG. 1 . The hostname entry field  612  is used to create the contact information data  222  of  FIG. 2 , and the username entry field  614  and the password entry field  616  are used to create the user-created credentials  220  of  FIG. 2 . The user interface  600  may be implemented on the global server  116  of  FIG. 1 . For example, code (e.g., HTML and/or JavaScript) may be stored on the global server  116  and deployed to the global client  120  when the user  124  requests it (e.g., by launching an application on the global client that is designed to call the global server for the user interface  600 ). 
     In one version of the data center infrastructure management system  100 , the global client  120  may, for example, be a “thin client” device having limited processing capabilities, and therefore it is desirable to optimize the performance of the system. A thin client device, in one embodiment, is a terminal having at least the components necessary for receiving input from a user, displaying output to the user, and communicating with the global server  116 . Some of the components on the thin client device may be provided by the global server  116  (e.g., a user interface or other application that enables the user to interact with and receive information from the system  100 ). Further, the performance of the system can be optimized in any number of ways, such as by minimizing the amount of processing performed by the global client, reducing data access and retrieval times (e.g., in particular, for critical data), pre-fetching data by anticipating future information requirements, and indexing the data to enable fast lookup and retrieval. 
       FIG. 7  shows a more detailed description of data flow in the data center infrastructure management system  100  of  FIG. 1  in accordance with one embodiment. The system  100  includes one or more central servers  114 , a global server  116  connected to each of the central servers (e.g., over a network, not shown), and a global client  120  connected to the global server (e.g., over a network, not shown, such as the Internet). The central server  114  and the global server  116  may be personal computers, minicomputers, mainframe computers, data servers, or other types of computers. The global client  120  may be a personal computer, a terminal (e.g., a dumb terminal), a pager, a personal digital assistant or smart phone (such as iPhone® by Apple, Inc. of Cupertino, Calif.), a thin client device, or other computing device having a network interface. 
     Each central server  114  provides one or more services  710 . The service  710  is configured to receive requests from the global server  116 . The requests may include, for example, a request originating from the global client  120  for data that is stored on the central server  114 . The service  710  may, additionally or alternatively, be configured to monitor and control various devices within a data center or multiple data centers responsive to, for example, service requests (e.g., requests for data) from users of the system  100 . Each central server  114  further provides an asynchronous event generator  712  for generating events, such as alarms, warnings, notifications, status updates, and the like, using data collected by the services  710 . The events are posted to the global server  116  as they are generated, or at a later time. Each of the central servers  114  may operate autonomously. 
     The global server  116  includes a centralized repository of information received from the central servers  114 , and functions as a data gateway between the global client  120  and each central server. The global server  116  includes one or more services  716  for responding to service requests from the global client  120 , an asynchronous event handler  718  for receiving and processing asynchronous events generated and posted by the asynchronous event generator  712 , a data access component  718  for managing data storage and retrieval to and from a database  720 , and a data indexing component  722  for indexing data stored within the global server  116  (e.g., within the database). 
     The global client  120  includes a data requester component  724  for requesting data from the global server  116 , the central server  114 , or both. The global client  120  further includes a user interface  726  for displaying data to a user and for enabling the user to interact with the system  100 . The global client  120  periodically polls the global server  116  to retrieve the most up-to-date data that is available, or polls the global server in response to a user action (e.g., an action requesting information that is not locally available at the global client, the global server, or both). 
     The global server  116  aggregates, optimizes, and indexes data produced by each of the central servers  114 . The data includes critical, real-time data used for managing one or more data centers, or less critical or ad hoc data. The global client  120  is configured to request, receive and display the data for the user. The data may be stored, for example, in the database  720  of the global server  116 , or retrieved from one or more of the central servers  114 . The database may contain a subset of all data contained in the central servers  114 . For instance, the subset of data may include high-availability data (e.g., frequently accessed data, critical data, and so forth). The subset of data may be formatted in a lightweight format that is adapted for consumption by the global client  120  (e.g., where the global client is a thin client device). The database is populated as a result of both synchronous and asynchronous communication between the global server  116  and the central servers  120 . The data includes data center asset inventory data, and may optionally include real-time alarms generated by the monitoring subsystems of the central servers  114 , device logs, sensor data, or a combination of these. Asynchronous data may be automatically transmitted from the central server  114  to the global server  120  as it becomes available, for example, in real-time or near real-time. The global server  116  reacts to changes in the asynchronous data as they are sent from the central server  114 . 
     The database  720  is used to store data regarding various devices that may be used in the data center, such as servers, uninterruptible power supplies, power strips, network connectivity equipment (such as network cabling, hubs, routers, wireless routers, switches, patch panels, etc.), automatic transfer switches, power distribution units, air conditioning units, racks and any other data center equipment. In one embodiment, the data stored in the database  720  includes one or more of the following:
         Central server data
           hostname of central server   Central server software version   Central server server network address   
           Central server device group data
           name of device group   location   severity (e.g. normal, warning, critical)   
           Central server device data
           device type (e.g. UPS, PDU, cooler)   device model number   device network address   device hostname   device severity   device location   device label   device serial number   
           Current alarms   Alarm history summary   Device sensor list   Device sensor history summary       

     The global server  116  maintains one or more indexes of the data contained by the database  720 . The index may be stored in memory (e.g., random-access memory) or on another computer-readable storage medium, such as a hard drive. An index, as used herein, is a data structure that is configured to improve the speed of data retrieval from the database  720 , or other databases. The index may, for example, include a table of ordered records including the data (e.g., ordered by record identifiers, text terms within the data), the occurrence frequency of the data (e.g., the number of instances that a particular term is stored in the database), and the database table and identification information for locating the data record in the database. The indexes enable the global server  116  to perform rapid interactive searching of the data, as requested by the global client  120 . Data received by the global server  116  is automatically stored in the database  720  and indexed by the data indexing component  722 . If the global client  120  requests data that is not contained by the database  720 , the services  714  of the global server  116  can automatically delegate the data search and retrieval to one or more of the central servers  114 . Once the data is received by the global server  116  from the central server(s)  114 , the global server can perform pre-processing and data aggregation to return a lightweight and easily processed representation of the data to the global client  120 . 
     In one embodiment, the global server  116  stores software that is sent to the global client  120  automatically, for example, when the user first logs into the system  100 . The software is used to generate the user interface and manage the information to be exchanged with the global server  116 . 
       FIG. 8  shows a detailed view of the user interface  726  of  FIG. 7  in accordance with one embodiment. The user interface  726  includes a search query field  810  and a suggested search term list  812 . As a user begins to enter a search query into the search query field  810 , one or more suggested search terms are displayed in the search term list  812 . The suggested search terms are derived from, for example, the data stored in the database  720  of  FIG. 7 . The data indexing component  722  of  FIG. 7  is used to increase the speed at which the suggested search terms are derived. The suggested search terms may be derived, for example, based on one or more letters, words, or phrases entered by the user into the search query field  810 . The suggested search terms may update dynamically as the user enters or modifies the search query. For example, as the user enters each character of the search query, the search term list is updated with a new set of suggested search terms. The user may select one of the suggested search terms to initiate a search of the data in the database  720 , or initiate the search using the user-supplied search term. 
       FIG. 9  shows a detailed view of the user interface  726  of  FIG. 7  in accordance with another embodiment. The user interface  726  includes search results field  910  that includes one or more items representing the results of a search performed by the user, such as described above with reference to  FIG. 8 . The results may include data that is stored in the database  720  of  FIG. 7 , or data that is received from the central server  114 . 
     Various embodiments of the present invention may be implemented on one or more computer systems. For example, system  100  may be implemented in a single computer system or in multiple computer systems. These computer systems may be, for example, general-purpose computers such as those based on Intel PENTIUM-type processor, Motorola PowerPC, Sun UltraSPARC, Hewlett-Packard PA-RISC processors, or any other type of processor. 
     For example, various aspects of the invention may be implemented as specialized software executing in a general-purpose computer system  1000  such as that shown in  FIG. 10 . The computer system  1000  may include a processor  1003  connected to one or more memory devices  1004 , such as a disk drive, memory, or other device for storing data. Memory  1004  is typically used for storing programs and data during operation of the computer system  1000 . The computer system  1000  may also include a storage system  1006  that provides additional storage capacity. Components of computer system  1000  may be coupled by an interconnection mechanism  1005 , which may include one or more busses (e.g., between components that are integrated within a same machine) and/or a network (e.g., between components that reside on separate discrete machines). The interconnection mechanism  1005  enables communications (e.g., data, instructions) to be exchanged between system components of system  1000 . 
     Computer system  1000  also includes one or more input devices  1002 , for example, a keyboard, mouse, trackball, microphone, touch screen, and one or more output devices  1007 , for example, a printing device, display screen, speaker. In addition, computer system  1000  may contain one or more interfaces (not shown) that connect computer system  1000  to a communication network (in addition or as an alternative to the interconnection mechanism  1005 ). 
     The storage system  1006 , shown in greater detail in  FIG. 11 , typically includes a computer readable and writeable nonvolatile recording medium  1111  in which signals are stored that define a program to be executed by the processor or information stored on or in the medium  1111  to be processed by the program to perform one or more functions associated with embodiments described herein. The medium may, for example, be a disk or flash memory. Typically, in operation, the processor causes data to be read from the nonvolatile recording medium  1111  into another memory  1112  that allows for faster access to the information by the processor than does the medium  1111 . This memory  1112  is typically a volatile, random access memory such as a dynamic random access memory (DRAM) or static memory (SRAM). It may be located in storage system  1106 , as shown, or in memory system  1004 . The processor  1003  generally manipulates the data within the integrated circuit memory  1004 , 1112  and then copies the data to the medium  1111  after processing is completed. A variety of mechanisms are known for managing data movement between the medium  1111  and the integrated circuit memory element  1004 ,  1112 , and the invention is not limited thereto. The invention is not limited to a particular memory system  1004  or storage system  1006 . 
     The computer system may include specially-programmed, special-purpose hardware, for example, an application-specific integrated circuit (ASIC). Aspects of the invention may be implemented in software, hardware or firmware, or any combination thereof. Further, such methods, acts, systems, system elements and components thereof may be implemented as part of the computer system described above or as an independent component. 
     Although computer system  1000  is shown by way of example as one type of computer system upon which various aspects of the invention may be practiced, it should be appreciated that aspects of the invention are not limited to being implemented on the computer system as shown in  FIG. 10 . Various aspects of the invention may be practiced on one or more computers having a different architecture or components shown in  FIG. 10 . Further, where functions or processes of embodiments of the invention are described herein (or in the claims) as being performed on a processor or controller, such description is intended to include systems that use more than one processor or controller to perform the functions. 
     Computer system  1000  may be a general-purpose computer system that is programmable using a high-level computer programming language. Computer system  1000  may be also implemented using specially programmed, special purpose hardware. In computer system  1000 , processor  1003  is typically a commercially available processor such as the well-known Pentium class processor available from the Intel Corporation. Many other processors are available. Such a processor usually executes an operating system which may be, for example, the Windows 95, Windows 98, Windows NT, Windows 2000 (Windows ME) or Windows XP or Vista operating systems available from the Microsoft Corporation, MAC OS System X operating system available from Apple Computer, the Solaris operating system available from Sun Microsystems, or UNIX operating systems available from various sources. Many other operating systems may be used. 
     The processor and operating system together define a computer platform for which application programs in high-level programming languages are written. It should be understood that embodiments of the invention are not limited to a particular computer system platform, processor, operating system, or network. Also, it should be apparent to those skilled in the art that the present invention is not limited to a specific programming language or computer system. Further, it should be appreciated that other appropriate programming languages and other appropriate computer systems could also be used. 
     One or more portions of the computer system may be distributed across one or more computer systems coupled to a communications network. For example, as discussed above, a computer system that determines available power capacity may be located remotely from a system manager. These computer systems also may be general-purpose computer systems. For example, various aspects of the invention may be distributed among one or more computer systems configured to provide a service (e.g., servers) to one or more client computers, or to perform an overall task as part of a distributed system. For example, various aspects of the invention may be performed on a client-server or multi-tier system that includes components distributed among one or more server systems that perform various functions according to various embodiments of the invention. These components may be executable, intermediate (e.g., IL) or interpreted (e.g., Java) code which communicate over a communication network (e.g., the Internet) using a communication protocol (e.g., TCP/IP). For example, one or more database servers may be used to store device data, such as expected power draw, that is used in designing layouts associated with embodiments of the present invention. 
     It should be appreciated that the invention is not limited to executing on any particular system or group of systems. Also, it should be appreciated that the invention is not limited to any particular distributed architecture, network, or communication protocol. 
     Various embodiments of the present invention may be programmed using an object-oriented programming language, such as SmallTalk, Java, C++, Ada, or Q (C-Sharp). Other object-oriented programming languages may also be used. Alternatively, functional, scripting, and/or logical programming languages may be used. Various aspects of the invention may be implemented in a non-programmed environment (e.g., documents created in HTML, XML or other format that, when viewed in a window of a browser program, render aspects of a graphical-user interface (GUI) or perform other functions). Various aspects of the invention may be implemented as programmed or non-programmed elements, or any combination thereof. 
     Embodiments of a systems and methods described above are generally described for use in relatively large data centers having numerous equipment racks, however, embodiments of the invention may also be used with smaller data centers and with facilities other than data centers. 
     Having thus described several aspects of at least one embodiment of this invention, it is to be appreciated various alterations, modifications, and improvements will readily occur to those skilled in the art. Such alterations, modifications, and improvements are intended to be part of this disclosure, and are intended to be within the spirit and scope of the invention. Accordingly, the foregoing description and drawings are by way of example only.