Optimization of service provider load balancing

A method is disclosed for balancing a load of clients of a network across a plurality of communications providers. Connection data that includes information on attempts to connect to the network and whether each attempt was successful is collected. A time-independent demand curve for each of the communications providers representing a likelihood of successful connection as against client load is determined, based on the collected connection data. The load of clients is then apportioned across the communications providers based on the time-independent demand curve for each of the communications providers.

FIELD OF THE INVENTION

The present invention relates to an environment where multiple intermediate entities provide a service to end clients on behalf of an ultimate entity. More particularly, the present invention relates to an arrangement where multiple communications providers provide access to a computer network on behalf of an Internet Service Provider (ISP) or the like to clients. Even more particularly, the present invention relates to optimizing a load of clients across such communications providers with respect to a derived time-independent demand curve.

BACKGROUND OF THE INVENTION

Internet Service Providers (ISPs) provide Internet access to clients. Such clients are typically home clients, but may also be business or high-speed clients. For example, an ISP may provide dial-up support to a home client, while providing cable or Digital Subscriber Line (DSL) support to another home client, or may provide any of these or other services, such as for example T1or T3connectivity, to business clients.

One method of providing Internet access to a client is for an ISP to install and operate equipment in the area in which the client is located. Alternatively, an ISP may install and operate sufficient equipment to service its clients regardless of the location of such clients. Such methods permit an ISP to exercise direct control over such equipment, thereby allowing the ISP to precisely control quality of service to its clients. However, such methods also have the limitation of requiring the ISP desiring to provide services over a large geographic area to install and maintain equipment capable of servicing such an area. When the geographic area to be serviced is especially large, such as for example in a situation where the ISP desires to provide regional or even nationwide Internet services, the amount of equipment and associated costs, such as for example procurement, maintenance, management and staffing costs, increases rapidly. In fact, in an extreme case the costs involved with implementing such a system may exceed the financial or management capacity of any single ISP.

A more practical method of providing such large-scale Internet access is for an ISP to enter into an agreement with one or more local communications providers to provide connective services to clients on behalf of the ISP. For example, a large, nationally-recognized ISP may contract with a plurality of local communications providers so such ISP does not have to deploy equipment throughout a nation or region. In this way, the ISP can have broad geographic coverage without the difficulty and expense of actually maintaining a large network. Instead, such an ISP exerts control over such local communications providers according to such contract or other agreement to provide service to clients that meets certain ISP criteria. Each local communications provider may exclusively cover a distinct geographic area or, and as is more common in heavily populated areas, several local communications providers may simultaneously cover the same geographic area. An ISP providing dial-up service in such an area by way of multiple local communications providers, for example, may assign clients to different local communications providers by assigning different telephone numbers for the clients to dial. The assignment of clients to different local communications providers may take place according to a contract or other agreement, as discussed above. Using such a method, an ISP may use several local communications providers to provide service to a populated area, even in a situation where each of such local communications providers may not have sufficient capacity to individually provide complete service to such an area. An additional aspect of such an arrangement is that such arrangement may be transparent to clients in that it appears to the clients that such connective services are being rendered directly by the ISP and not by a local communications provider on behalf of the ISP. In this way, a local communications provider may benefit from an ISP's name recognition while an ISP gains capacity it would not otherwise have.

In contracting such Internet services to local communications providers, an ISP typically monitors each local communications provider to track performance data, such as for example: the time of a connection attempt, whether such attempt was successful, the time of a connect and disconnect, a number of clients being serviced at a certain time, and/or the like. Such performance data provides to the ISP an approximate indication of service quality provided to clients by each local communications provider because such data is relevant to clients' experience with such local communications provider. Typically, an ISP will want its local communications providers to operate within certain thresholds of service quality. This is particularly important in situations where an ISP—local communications provider relationship is transparent to a client as discussed above. In such a situation, a client who receives poor service quality from a local communications provider may ascribe such poor service quality to the ISP, from which such client believes such connective services are rendered. Such thresholds used by an ISP may be, for example, a percentage of successful connection attempts out of all connection attempts, average percentage of capacity in use, client wait time, average signal quality, data transmission speed, and/or the like. Each local communications provider may also exhibit a different response to increasing client load. For example, a local communications provider with a smaller client capacity may experience a faster drop-off in service quality than a local communications provider with a larger client capacity. Such local communications provider responses may be determined from historical performance data, hardware data regarding each local communications provider and/or the like.

Additionally, an ISP may acquire performance data from individual clients. For example, an ISP may configure its system to cause a client to log connection information such as for example, connection attempts, successful or unsuccessful attempts, disconnects, data speed during connection, and/or the like. When a client connects to the Internet, such an ISP may request such performance data from the client's system. Such a request may be transparent to the client or may require the active participation of the client, such as for example providing permission to the ISP to receive such performance data. Such a transmission of performance data from a client system may occur every time a client connects to the Internet, at set times, according to system requirements, and/or the like.

Regardless of the source of such performance data, an ISP may use such performance data as a basis for periodically reassigning one or more clients amongst such local communications providers to load balance as between local communications providers in a geographic area. Such a reassignment may be accomplished in any number of ways. For example, a dial-up ISP may change the assignment of a local communications provider while a client is connected to the Internet. In such a method, an update may be sent by the ISP to the client, whereby the update changes the dial-up number(s) for such client to reflect the new local communications provider assignment. Other methods may include manual updates and/or the like.

An ISP may decide to change a local communications provider assignment for any number of reasons. For example, a particular local communications provider may not be capable of adequately handling the client demand it is experiencing, so the ISP may change the assignment to another local communications provider having adequate capability to satisfy additional client load. Likewise, a particular local communications provider may be underutilized, so the ISP may change the assignment of a client associated with another local communications provider to increase the underutilized local communications provider's client load. Also, an ISP may be able to consolidate the number of local communications providers it is using if client demand is such that fewer local communications providers could handle the demand without adversely affecting either the ability of clients to connect or connection quality. An additional factor that may influence an ISP in deciding to reassign clients to a different local communications provider may be the contract price and other details of a contract with such local communications provider. Such a price, for example, may affect the relative weighting of the thresholds of service quality discussed above. In addition, such a reassignment may be subject to a contract or other agreement as discussed above. An added complication is that an ISP cannot simply reassign all clients to the lowest-cost local communications provider without the risk that such a reassignment will either overload such local communications provider, or will at least lower the probability of a client successfully connecting to such local communications provider.

Conventionally, when determining whether to reassign clients amongst local communications providers, an ISP reviews, for example, each local communications provider's performance data, such provider's performance with respect to thresholds of service quality and/or the like. An ISP, however, presently lacks a means for accurately and automatically determining time-independent load balancing from such performance data and the like.

In contrast, a conventional method of reassigning client load typically entails a manual review of such performance data and the like, and then a decision is made with respect to such reassignment. Such decision, while based on performance data and the like, still retains a large element of guesswork. For example, such performance data typically has time as a factor, such as for example: connection rates per hour, connection rates varying continuously over time, and/or the like. As a result, any reassignment decision is based on time-specific data has been found to be overly complex. In addition, such a manual process is inherently inefficient because a manual review takes a greater amount of timer than an automated calculation, and therefore a manual calculation can be performed less frequently during any given period of time. What is needed is a method for automatically performing load balancing based on time-independent performance data.

SUMMARY OF THE INVENTION

The present invention overcomes these problems by providing a method of balancing a load of clients across a plurality of intermediate providers. The clients can be clients of a network, and each provider may act to operatively connect one or more of the clients to the network. The method is carried out to achieve an optimal client load, in terms of a desired connection probability or the like, across all of the providers.

In the method, connection data regarding each of the plurality of communications providers is collected. The connection data includes information on attempts to connect to the network by way of each communications provider and whether each attempt was successful. A time-independent demand curve for each of the communications providers representing a likelihood of successful connection as against client load is determined, based on the collected connection data. The load of clients is then apportioned across the communications providers based on the time-independent demand curve for each of the communications providers.

DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS

Overview

The present invention is directed to a method and computer readable medium for optimizing a load of clients across a plurality of intermediate providers. The present invention can be implemented to balance a load of clients across a plurality of communications providers that provide connectivity to a network. Means for connecting to such a network such as dialup connections, cable modems, DSL connections and the like exhibit properties suitable for use with the present invention, but other connection means are compatible as well. Also, networks such as the Internet or the like are suitable for use with the present invention, but again, other networks and the like are compatible with the present invention.

The present invention improves the ability of an ultimate provider, such as for example an ISP, to efficiently optimize client load across a plurality of providers. In particular, the present invention enables efficient optimization of a load of computer clients across a plurality of communications providers. Conventionally, such an optimization entails a manual review of performance data and the like, and then a decision must be made with respect to such reassignment. The present invention provides a means for calculating a time-independent demand curve that represents client connection probability as against client load. A means for incorporating additional variables into such demand curve, such as for example a monetary cost associated with increasing connection probability is also provided.

Exemplary Computing Environment

Exemplary Distributed Computing Frameworks Or Architectures

Various distributed computing frameworks have been and are being developed in light of the convergence of personal computing and the Internet. Individuals and business clients alike are provided with a seamlessly interoperable and web-enabled interface for applications and computing devices, making computing activities increasingly web browser or network-oriented.

For example, MICROSOFT®'s .NET platform includes servers, building-block services, such as web-based data storage, and downloadable device software. Generally speaking, the .NET platform provides (1) the ability to make the entire range of computing devices work together and to have client information automatically updated and synchronized on all of them, (2) increased interactive capability for web sites, enabled by greater use of XML rather than HTML, (3) online services that feature customized access and delivery of products and services to the client from a central starting point for the management of various applications, such as e-mail, for example, or software, such as Office NET, (4) centralized data storage, which will increase efficiency and ease of access to information, as well as synchronization of information among clients and devices, (5) the ability to integrate various communications media, such as e-mail, faxes, and telephones, (6) for developers, the ability to create reusable modules, thereby increasing productivity and reducing the number of programming errors, and (7) many other cross platform integration features as well.

While exemplary embodiments herein are described in connection with software residing on a computing device, one or more portions-of the invention may also be implemented via an operating system, API, or a “middle man” object between a coprocessor and requesting object, such that services may be performed by, supported in, or accessed via all of NET's languages and services, and in other distributed computing frameworks as well.

Exemplary Embodiments

Referring now toFIG. 2, a functional diagram of a relationship between an ISP, a plurality of local communications providers that actually provide connection services for the ISP in a given geographic region and clients in the geographic region is provided.

Each such local communications provider206is in operative communication with each client208by way of communications network212. Client208may be an individual person, a company, an electronic device such as, for example, a computer or the like. Communications network212may be any communications method client208may employ to operatively connect to local communications provider206, such as for example by way of a local telephone company, DSL line, cable modem, other dedicated line and/or the like. Local service provider206, in turn, is operatively connected to Internet204, or other network, by way of network214. Network214may be any means which each local communications provider206may employ to connect to Internet204, such as for example a dedicated line or the like. Local service provider206may employ any type of electronic equipment in conjunction with network214, such as for example a router, gateway, a general or special purpose computer or the like. In such a manner, therefore, local communications provider206provides client208with operative connectivity to Internet204. Typically, and as discussed above, local communications provider206may be in a contractual or other relationship with ISP202, and local communications provider206may provide an Internet204connection to client208transparently or anonymously on behalf of the ISP202entity.

ISP202may obtain connection data over time from each local communications provider206and/or from the clients208. Connection data collected from each local communications provider206may be, for example, a record of each successful connect and disconnect of a client208. Connection data may include additional information, such as for example the telephone number dialed by such client208, if such client208utilizes a dialup communications network212, or identifying information of the client208, and/or the like. Connection data from each client208may include, for example, a list of connection attempts, the time of each such attempt, and the results of such attempt. ISP202may either use such collected connection data directly, or may aggregate such data or perform other mathematical or statistical operations on such connection data to render it suitable for use by the ISP202to perform load balancing among local communications providers206. ISP202may use any means for collecting and processing the data, such as for example a general or special purpose computer or the like.

In particular, with such connection data, ISP202can develop usage statistics regarding how busy each local communications provider206is at particular times, referred to as client load, and the success rate of clients208in connecting to the local service provider206during such times. As may be appreciated, tracking such information over time shows fluctuations in client load as may be encountered from day to day and hour to hour. For example, such connection data should show that each local communications provider206experiences light client loads at 3 AM and relatively light client loads at 7 PM each day, and that a weekend afternoon has a relatively higher load while a weekday afternoon has a relatively lower load, at least with respect to residential clients.

For any particular time period, such as for example from 12 noon to 1 PM on a weekday, connection data from such time period may be employed to construct a bell-shaped curve324such as that shown inFIG. 3a. As may be appreciated, in such curve324, the x-axis represents load and the y-axis represents the likelihood of a particular load during the time period. Thus, the bell-shaped curve324shows that for the particular time period an expected load326is most likely, but that the actual load may vary from the expected load326. ISP202may generate an individual bell-shaped curve324, for each local communications provider206, for each time period of interest. However, and significantly, for multiple local communications providers206and finer granularities in time period the number of generated curves324can easily become cumbersome to the point that examining the data to perform load balancing is overly complex.

Accordingly, and turning now toFIG. 3b, such connection data is employed to define for each local communications provider206a time-independent demand curve308that represents the likelihood of a successful connection302versus actual load304for the local communications provider206over all time periods. Load304may be, for example, client service requests, dialup connection requests, or the like. Demand curve308may be generated from the collected connection data by using any appropriate method, such as for example a Levenberg-Marquardt, Gauss-Newton, Steepest Descent method and/or the like.

As seen inFIG. 3b, the demand curve308exhibits an upper limit306corresponding to a region between loads 0 and N; wherein the likelihood of a successful connection is relatively high and stable. Correspondingly, the demand curve308exhibits a lower limit312corresponding to loads of B and higher where the likelihood of a successful connection is relatively low and stable. Significantly, between the upper and lower limits306,312is a rapidly-changing region corresponding to loads between A and B, where it is seen that increasing load results in decreasing likelihood of a successful connection.

As may be appreciated, any particular local communications provider206should not be operating with a time-independeht load of B or above as set by the ISP202, especially inasmuch as the relatively low likelihood of a successful connection is undesirable both by clients208and the ISP202. Correspondingly, the local communications provider206should not be operated with a time-independent load between 0 and A as set by the ISP202, especially inasmuch as the relatively high likelihood of a successful connection is achieved with a relatively low load and an underutilization of available capacity. Thus, the local communications provider206should be operating at a time-independent load somewhere between A and B as set by the ISP202. That said, the ISP202may nevertheless set loads for each particular local communications provider206on additional factors, such as cost, that require a time-independent load lower than A or higher than B.

Referring now toFIG. 4, a method of generating a time-independent demand curve308and conducting a load balancing determination amongst a plurality of local communications providers206in accordance with an embodiment is described. In the description that follows, it is noted that those of skill in the art should be aware of the statistical analyses and calculations performed herein, such-as the aforementioned Levenberg-Marquardt algorithm, Gauss-Newton method, Steepest Descent method and/or the like, and therefore a detailed explanation of such matters is omitted for the sake of clarity. More details on the Levenberg-Marquardt algorithm and Steepest Descent method may be found in: Rainer Kress,Numerical Analysis(Springer-Verlag New York, Inc. 1998). Details on Gauss-Newton and additional details on Levenberg-Marquardt may be found in:Numerical Algorithms(J. L. Mohamed and J. Walsh eds., Oxford University Press 1986). Each of the above-mentioned references are hereby incorporated by reference in their entirety.

At step401, and as disclosed above in connection withFIG. 3a, ISP202acquires performance data for and from each local communications provider206for which ISP202desires to determine a demand curve308. At step403, ISP202may in addition acquire such performance data from clients208. ISP202may perform step401and403inclusively, or may perform only step401or403.

At step404, ISP202may prepare data collected in step401and/or403for use in later steps. For example, data collected from local communications provider206may simply be a sequential listing of each client208connect and disconnect time. ISP202, therefore, may have to perform a data analysis or the like on such raw data to render such data suitable for use in calculating demand curve308. Likewise, if such performance data is acquired from client208, ISP202may have to aggregate such client208-acquired performance data with the performance data acquired from other clients208in order to render such performance data suitable for use. Such an aggregation may include all clients208associated with local communications provider206, a statistical sampling f some clients208, and/or the like.

At step405, ISP202uses such prepared performance data to determine a time-independent demand curve308for each of a plurality of local communications providers206that service a particular region of interest. ISP202may select any number of local communications providers206for which a demand curve308will be generated, and ISP202may also exclude one or more of such local communications providers206in the region of interest from such demand curve308determination. ISP202need only include local communications providers206that will be load balanced according to an embodiment, and any selection of local communications providers206to be included in such load balancing is consistent with an embodiment.

In an embodiment, the aforementioned Levenberg-Marquardt algorithm is employed to generate each time-independent demand curve308. Generally, in the Levenberg-Marquardt algorithm, a probability that a connection request will be successful when local communications provider206(Dk) is servicing a load L of client208connections may be defined as Pk(L). As noted above in connection withFIG. 3b, demand curve308may take an idealized S-shaped curve form, in which case a normal distribution of such curve may be provided by the following definition:

Accordingly, a connection probability may be defined as:

Resolving the above integral yields a demand curve308such as that illustrated inFIG. 3b. For clarity, the above integral and resulting demand curve308assume a purely probabilistic client connection request distribution While such a situation may occur when using a real-world data-derived demand curve308, it is more likely that such a demand curve308may deviate from the above idealized model, because of irregularities in a client208connection request distribution. Either situation is equally consistent with an embodiment.

Depending on the regularity of demand curves308and the degree of similarity between local communications providers206in the particular region of interest, a set of values may be chosen to characterize each such demand curve308. For example, each demand curve308may be characterized based on client load304values at which success likelihood302is, for example, ⅓ at load B and ⅔ at load A, in which case each local communications provider206may be characterized by a set of two values. Alternatively, each demand curve may be characterized based on a single ideal load value between loads A and B, or a load where the likelihood of connection success is a pre-determined percentage. Local communications provider206may be characterized by any number of such values, as any number of values is equally consistent with an embodiment. As may be appreciated, such load values represent the effective capacity of a local communications provider206to handle client connection attempts. In an idealized model, each such demand curve308may be characterized by a single value, such as for example Ck, for capacity.

At step407, ISP202determines whether cost versus quality of service inputs will be accounted for in the load balancing process. Such inputs are not absolutely necessary, but using such inputs enables such ISP202to, for example, account for differences in contract prices between local communications providers206, or to make a subjective judgment that a certain loss of connection probability302in exchange for reduced operating expenses is acceptable. If no such inputs will be considered, the process continues at step409. If such inputs will be considered, such process continues at step411.

At step409, an embodiment determines the partition of client208connection requests among a plurality of local communications providers206. Each local communications provider206(Dk) may receive a fraction fkof client208connection requests. The total of all such fractions fkis equal to 1, as indicated by the following formula:

Such distribution among local communications providers206reduces to:

The client load304for each local communications provider206is Lk=L0×fk, where L0is total client load304across all local communications providers206. For each local communications provider206(Dk), an equal likelihood of connection success at such specified load may be independent of k, as indicated by the expressions:

Once such expression is populated with empirical data, ISP202may determine an optimum client load304for each local communications provider206. For example, if for a particular region there are 2 local communications providers206A and B, and it is decided based on the determined demand curves308of step405that A should have a load of X and B should have a load of Y, then X/(X+Y) of all clients208in the region should be assigned to A and Y/(X+Y) of all such clients208should be assigned to B. Ideal load balancing in a particular region should occur in real time, based on current optimal loads for each local communications provider206that services the region. However, it may be the case that reassignment of clients takes place after a client connects, in which case a time delay in reassignment and load balancing takes place.

At step411, the partition of client208connection requests among a plurality of local communications providers206is determined while additionally accounting for cost versus service quality tradeoffs decided upon by ISP202. For example, a cost per client208connection for local communications provider206(Dk) may be represented by Sk. As discussed above, ISP202could simply distribute all clients208across only local communications providers206whose associated cost per connection Skis relatively low. However, a negative impact on quality of service, such as for example in connection success likelihood302or the like due to, for example, increased client208retry counts would probably result. The ISP202may therefore make a tradeoff between cost and quality of service to clients208. For example, ISP202may be able to reduce costs by reassigning clients208to a lower cost local communications provider206, but increasing such a local communications provider's206client load304will decrease connection success likelihood302, according to the corresponding demand curve308for such local connection provider206. ISP202may instead assign only a limited number of clients208to a lower cost local communications provider206so such local communications provider's206connection probability302remains above lower limit312.

In an embodiment, ISP202may assign a fixed acceptable monetary cost for a fixed fractional increase in connection probability302for each client208connection request, such as for example dollars per percentage increase in connection probability302, which may be represented by the variable Q. Alternatively, ISP202may assign a variable acceptable monetary cost for a fractional increase in connection probability302, such as for example by making Q a function of connection probability302. As may be appreciated, any combination of fixed and variable factors may be used. A choice of Q determines a set of cost-corrected local communications provider206demand curves308, where the load balancing discussed above in connection with step409is performed, but instead of using the provider curves Pk(L), ISP202uses:

Such a cost-adjusted fractional distribution of client208connection requests across local communications providers206becomes {{tilde over (f)}k} using the local communications provider206load balancing described, where values, {{tilde over (P)}k(L0×{tilde over (f)}k)} are equal, and

∑j⁢f~j=1.
Accordingly, moving client208from local communications provider206Dato local communications provider206Db, under conditions of client load304L, incurs a cost of Sb−Sa, and increases the connection probability302by:

Which yields a cost per percentage connectivity increase of:

As Q becomes very large, meaning that ISP202has decided to accept a very high cost for increased connection probability302, demand curve308defined by {tilde over (P)}k(L) approaches demand curve308defined by Pk(L). ISP202may choose {tilde over (P)}k(T) appropriately depending on any number of variables, such as for example, cost, number of local communications providers206, and/or the like. For example, {tilde over (P)}k(L) used above is based on a functional T where B is a constant:
T(g(x),B)=g(x)+B

Many other choices of T may be made. For example, T could reflect an ISP202fee schedule that provides discounted connectivity pricing if specified client load304figure are reached. While the above equation is used herein in an illustrative example, any modification is consistent with the present invention. For example, in some applications client load304peaks in a diurnal fashion, where such diurnal client load304demand curves308exhibit statistically significant differences in behavior for increasing versus decreasing client load304regions. In such a situation, an embodiment may employ separate demand curves308and local communications provider206client load304distribution for each of the two regions.

Whether load balancing is performed with or without reference to costs (steps411or409, respectively) the result is an optimized time-independent load calculated for each local communications provider206servicing a particular region of interest. At step413, ISP202determines whether a reassignment of client's208amongst local communications providers206is necessary. In some situations, client load304amongst local communications providers206may have remained static for the time period during which performance data was gathered, and therefore no reassignment of clients208is necessary if such client load304is acceptable. In such a situation, ISP202terminates the load balancing determination at step417. In most situations, however, clients208will need to be reassigned to different local communications providers206that service the region in order to maintain acceptable connection probability302, acceptable cost levels and/or the like. In such a situation, ISP202continues to step415where such reassignment takes place. As discussed above, such a reassignment may be accomplished in any number of ways, such as for example by changing an assignment of a local communications provider206for a particular client208while such client208is connected to the Internet. In such a method, an update may be sent by ISP202to client208, and connection information or the like may be changed to reflect a new local communications provider206. Other methods may include, for example, manual updates and/or the like. Any method of updating a client208assignment amongst local communications providers206is consistent with an embodiment. At the conclusion of such a reassignment, ISP202terminates the load balancing determination at step417. Arrow419indicates that the method ofFIG. 4may be repeated at any interval desired by ISP202.

The method ofFIG. 4may also be employed to assist ISP202to make a variety of strategic decisions. For example, generation of demand curve308provides a means for verifying whether a local communications provider206actually has a client load304capacity that such local communications provider206may have claimed to ISP202. In such a verification, the data-derived fall off of connection probability302of demand curve308, possibly within the region between upper limit306and lower limit312, may be compared to a claimed client load304capacity. If such a comparison yields a disparate result, such local communications provider's206claims of client load104capacity may be suspect, and therefore warrant further investigation on the part of ISP202. Any additional use of the method ofFIG. 4is also consistent with the present invention.

While the present invention has been described in connection with the preferred embodiments of the various figures, it is to be understood that other similar embodiments may be used or modifications and additions may be made to the described embodiment for performing the same function of the present invention without deviating therefrom. For example, one skilled in the art will recognize that the present invention as described in the present application may apply to any arrangement where a plurality of agent providers are servicing a load of clients, and an ultimate provider wishes to optimize such client load across such providers. Such arrangement has been described herein with respect to communications providers providing access to a computer network, typically the Internet, but it may be appreciated that such arrangement may be for any type of service by way of any type of medium. Therefore, the present invention should not be limited to any single embodiment, but rather should be construed in breadth and scope in accordance with the appended claims.