System and method for managing shared computer resources

A system for managing a plurality of shared computer resources, comprising at least one hardware processor adapted for: in at least one of a plurality of management iterations: computing statistical values each associated with one of a plurality of streams, where the streams are input to a plurality of computing processes which are used for processing the plurality of streams, executed using at least one of a plurality of shared computer resources; identifying according to an analysis of the statistical values at least one obstructing stream; allocating at least one new shared computer resource; creating a plurality of new computing processes which execute using the at least one new shared computer resource; and instructing inputting the at least one obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes while the plurality of streams are inputted to the plurality of computing processes.

BACKGROUND

The present invention, in some embodiments thereof, relates to a system for processing a plurality of streams of data and, more specifically, but not exclusively, to a system for providing software as a service (SaaS).

A hosted service is a computer based service offered to one or more consumers by a provider that hosts one or more hardware processors executing one or more applications providing the computer based service, where the one or more hardware processors are located remote to locations of the one or more consumers. As used herein, the term “cloud computing” refers to delivering one or more hosted services, often over the Internet. A cloud based system is a computer system offering a hosted service. Some hosted services are software services, each hosted by a provider and made available to one or more consumers over the Internet. In a cloud based system that provides software as a service (SaaS), a software service is managed by the provider, and a consumer of the software service consumes the service as a utility, in a pay-as-you-go model.

In a cloud based system, the provider may allow more than one consumer to access one software instance of the software service. The term “tenant” refers to a group of users who share a common access to a software instance. A multi-tenant SaaS architecture is a computer software architecture where one software instance, executed by one or more hardware processors, serves multiple tenants while providing each of the multiple tenants with its own data.

The term “elasticity” in cloud computing refers to a capability of a cloud based system to dynamically adapt its capacity to meet varying workload. The term “provisioning” in cloud computing refers to making one or more shared computer resources available to one or more consumers of a service provided by a cloud based system. Some examples of a shared computer resource are a hardware processor, a virtual machine, a transient digital memory and a non-transient digital storage. Currently a common practice to achieve elasticity is by dynamically provisioning and de-provisioning, in an autonomous manner, one or more shared computer resources to match an amount of allocated computer resources with an actual amount of computer resources needed at any given point in time.

SUMMARY

It is an object of the present invention to provide a system and a method for managing a plurality of shared computer resources for processing a plurality of streams of data.

According to a first aspect of the invention, a system for managing a plurality of shared computer resources comprises at least one hardware processor adapted for: in at least one of a plurality of management iterations: computing a plurality of statistical values each associated with one of a plurality of streams, where the streams are input to a plurality of computing processes which are used for processing the plurality of streams, executed using at least one of a plurality of shared computer resources; identifying according to an analysis of the plurality of statistical values at least one obstructing stream among the plurality of streams; allocating at least one new shared computer resource to process the at least one obstructing stream; creating a plurality of new computing processes which execute using the at least one new shared computer resource; and instructing inputting the at least one obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes while the plurality of streams are inputted to the plurality of computing processes.

According to a second aspect of the invention, a method for managing a plurality of shared computer resources comprises: in at least one of a plurality of management iterations: computing a plurality of statistical values each associated with one of a plurality of streams, where the streams are input to a plurality of computing processes which are used for processing the plurality of streams, executed by at least one hardware processor using at least one of a plurality of shared computer resources; identifying according to an analysis of the plurality of statistical values at least one obstructing stream among the plurality of streams; allocating at least one new shared computer resource to process the at least one obstructing stream; creating a plurality of new computing processes which execute on the at least one hardware processor using the at least one new shared computer resource; and instructing inputting the at least one obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes while the plurality of streams are inputted to the plurality of computing processes.

According to a third aspect of the invention, a system for processing a plurality of streams, each comprising a sequence of log entries, comprises at least one hardware processor adapted for: in each of a plurality of stream iterations: receiving at least one log entry of a stream of the plurality of streams; inputting the at least one log entry to a plurality of computing processes executed using a plurality of shared computer resources managed by in at least one of a plurality of management iterations: computing a plurality of statistical values each associated with one of the plurality of streams, where the streams are input to a plurality of computing processes which are used for processing the plurality of streams, executed by the at least one hardware processor using at least one of the plurality of shared computer resources; identifying according to an analysis of the plurality of statistical values at least one obstructing stream among the plurality of streams; allocating at least one new shared computer resource to process the at least one obstructing stream; creating a plurality of new computing processes which execute on the at least one hardware processor using the at least one new shared computer resource; and instructing inputting the at least one obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes while the plurality of streams are inputted to the plurality of computing processes; and providing an output of the computing processes to at least one other hardware processor to perform a log-analysis task.

With reference to the first and second aspects, in a first possible implementation of the first and second aspects of the present invention at least one of the plurality of shared computer resources is selected from a group of computer resources consisting of: a virtual machine, digital memory, and a non-volatile digital storage. At least one of the new shared computer resources is selected from the group of computer resources. Optionally, at least one of the plurality of computing processes is executed by at least one virtual machine executing on at least one other hardware processor. Using a shared virtual machine, additionally or alternatively a shared digital memory and additionally or alternatively a shared non-volatile digital storage reduces cost of implementation and cost of operation of one or more services provided by one or more tenants sharing computer resources.

With reference to the first and second aspects, in a second possible implementation of the first and second aspects of the present invention each of the plurality of streams comprises a plurality of digital data objects, each digital data object comprising a plurality of values. Optionally, each of the plurality of streams comprises a plurality of log entries. Processing the plurality of streams comprises for each of the plurality of streams: in each of a plurality of stream iterations: receiving at least one digital data object of the respective stream; computing a plurality of object statistical values according to the at least one digital data object; computing at least one additional value according to the plurality of values of one or more of the at least one digital data object; and adding the at least one additional value to the one or more digital data objects. Optionally, processing the plurality of streams further comprises for each of the plurality of streams, in at least one of the plurality of stream iterations, providing the plurality of object statistical values to at least one other computing process to perform a data-analysis oriented task. Optionally, the at least one hardware processor is adapted to computing the plurality of statistical values using the plurality of object statistical values. Optionally, processing the plurality of streams further comprises for each of the plurality of streams, in each of the plurality of stream iterations, storing the at least one digital data object on at least one non-volatile digital storage connected to the at least one hardware processor. Storing the at least one digital data object on non-volatile digital storage facilitates deferring processing of the at least one digital data object, reducing data loss which may reduce availability of a service provided by a tenant using the plurality shared computer resources. Providing the plurality of object statistical values to at least one other computing process to perform a data-analysis oriented task facilitates identifying an obstructing stream and thus increases throughput and reduces data loss of at least one service provided by a tenant using the plurality of shared computer resources.

With reference to the first and second aspects, in a third possible implementation of the first and second aspects of the present invention the plurality of shared computer resources comprises at least one buffer, such that at least one acceptor process of the plurality of computing processes stores the plurality of streams in the at least one buffer, and at least one processing process of the plurality of computing processes reads the plurality of streams from the at least one buffer. The plurality of new shared computer resources comprises at least one new buffer, such that the at least one acceptor process stores the at least one obstructing stream in the at least one new buffer, and at least one new processing process of the plurality of new computing processes reads the at least one obstructing stream from the at least one new buffer. Using a new buffer to process an obstructing stream facilitates reducing data loss and thus increasing system reliability and reliability of at least one service provided by a tenant using the shared computer resources.

With reference to the first and second aspects, in a fourth possible implementation of the first and second aspects of the present invention the at least one hardware processor is further adapted for: in at least one other of the plurality of management iterations: identifying according to the analysis of the plurality of statistical values at least one other obstructing stream among the plurality of streams; and instructing inputting the at least one other obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes while the plurality of streams are inputted to the plurality of computing processes. Optionally, the at least one hardware processor is further adapted for: in at least one other of the plurality of management iterations: identifying according to an analysis of the plurality of statistical values at least one other obstructing stream among the plurality of streams; allocating at least one other new shared computer resource to process the at least one other obstructing stream; creating a plurality of other new computing processes which execute using the at least one other new shared computer resource; and instructing inputting the at least one other obstructing stream to the plurality of other new computing processes instead of to the plurality of computing processes while the plurality of streams are inputted to the plurality of computing processes. Directing another obstructing stream to processing using the new plurality of computing resources reduces processing latency without further increasing an amount of computing resources needed to process the plurality of streams thus reducing cost of operation.

With reference to the first and second aspects, in a fifth possible implementation of the first and second aspects of the present invention the plurality of statistical values comprises a plurality of byte-rate values, each associated with one of the plurality of streams and indicative of an amount of bytes of the stream received by the at least one hardware processor in an identified time interval. Identifying according to the analysis of the plurality of statistical values at least one obstructing stream among the plurality of streams comprises: computing a plurality of rate-change values, each associated with one of the plurality of streams, by for each of the plurality of streams dividing the byte-rate value of the respective stream by a previous byte-rate value of the respective stream computed in a previous iteration of the plurality of management iterations; identifying at least one high rate-change value of the plurality of rate-change values, each greater than an identified rate-change threshold value; and identifying at least one stream of the plurality of streams, each associated with one of the at least one high rate-change value, as the at least one obstructing stream. Optionally, the at least one hardware processor is further adapted for: in at least one additional iteration of the plurality management iterations: computing at least one new rate-change value, each associated with one of the at least one obstructing stream, by for each of the at least one obstructing stream dividing the byte-rate value of the respective stream by another previous byte-rate value of the respective stream computed in another previous iteration of the plurality of management iterations; identifying at least one normal rate-change value of the at least one new rate-change value, each less than the identified rate-change threshold value; and instructing inputting the at least one obstructing stream to the plurality of computing processes instead of to the plurality of new computing processes while the plurality of streams are inputted to the plurality of computing processes. Using a plurality of average byte-rate values requires few computational resources to identify an obstructing stream thus reducing cost of operation and reducing latency of identifying an obstructing stream. Identifying a stream no longer having a high byte-rate facilitates reducing cost of operation by reducing an amount of shared computer resources required to process the plurality of streams.

With reference to the first and second aspects, in a sixth possible implementation of the first and second aspects of the present invention each of the plurality of streams comprises a plurality of digital data objects The plurality of statistical values comprises a plurality of processing-time values, each associated with one of the plurality of streams and indicative of an amount of time the plurality of computing processes execute to process a digital data object of the stream. Identifying according to the analysis of the plurality of statistical values at least one obstructing stream among the plurality of streams comprises: producing a plurality of average processing-time values, each associated with one of the plurality of streams, by for each of the plurality streams computing an average of some of the plurality of processing-time values, each associated with the respective stream; identifying at least one high average processing-time value of the plurality of average processing-time values, each greater than an identified processing-time threshold value; and identifying at least one stream of the plurality of streams, each associated with one of the at least one high average processing-time value, as the at least one obstructing stream. Optionally, the at least one hardware processor is further adapted for in each of a plurality of stream iterations: receiving at least one digital data object of the obstructing stream; marking the at least one digital data object as unprocessed; and storing the marked at least one digital data object in at least one non-volatile digital storage connected to the at least one hardware processor. Optionally, instructing inputting the at least one obstructing stream to the plurality of new computing processes comprises instructing the plurality of new computing processes to retrieve the marked at least one digital data objects from the at least one non-volatile digital storage. Optionally, the at least one hardware processor is further adapted for: in at least one additional iteration of the plurality management iterations: producing at least one new average processing-time value, each associated with one of the at least one obstructing stream, by for each of the at least one obstructing stream computing another average of some other of the plurality of processing-time values, each associated with the respective stream; identifying at least one normal average processing-time value of the at least one new average processing-time value, each less than the identified processing-time threshold value; and instructing inputting the at least one obstructing stream to the plurality of computing processes instead of to the plurality of new computing processes while the plurality of streams are inputted to the plurality of computing processes. Using a plurality of average processing-time values requires few computational resources to identify an obstructing stream thus reducing cost of operation and reducing latency of identifying an obstructing stream. Identifying a stream no longer having a high processing time facilitates reducing cost of operation by reducing an amount of shared computer resources required to process the plurality of streams. Marking a digital data object stored in non-volatile digital storage as unprocessed allows processing the digital data object at another time after marking the digital object, thus reducing an amount of shared computer resources required to process the plurality of streams without suffering data loss, and thus without impacting one or more services provided by a tenant using the plurality of shared computer resources.

DETAILED DESCRIPTION

The present invention, in some embodiments thereof, relates to a system for processing a plurality of streams and, more specifically, but not exclusively, to a system for providing software as a service (SaaS).

When a computer system processes a plurality of streams of data, a sudden, and possibly transient, change in one of the streams might impact performance of processing some other streams of the plurality of streams of data. For example, a sudden increase in an amount of bytes of a stream of the plurality of streams of data in an identified amount of time may increase an amount of time required to process the increased amount of bytes and cause a delay in processing data from other streams of the plurality of streams of data. In another example, the increase in the amount of bytes may increase an amount of memory required to store data from the stream resulting in other data, from other streams, to be discarded. When the computer system is a multi-tenant system and the plurality of streams are received each from one of a plurality of tenants, a sudden (and transient) condition of one of the tenants might impact performance of processing some of the plurality of streams received from some other tenants of the plurality of tenants. For example, when a SaaS is for processing log entries, a burst of log entries received from one tenant (for example due to an error condition in the tenant's system) could significantly reduce throughput of processing other tenants' streams of log entries. In another example, a sudden, and perhaps temporary, increase in an amount of time required to process each log entry received in a stream of one tenant could significantly reduce throughput of processing other tenants' streams of log entries.

A service-level agreement (SLA) is a commitment between a service provider and a client, specifying one or more aspects of the service. Some examples of service aspects are availability and quality, such as throughput and latency. In a system providing a SaaS, a client may have one tenant or a plurality of tenants. In a system providing a service to a tenant according to an SLA, impact to throughput of processing a stream associated with the tenant may violate one or more terms of the SLA.

Dynamic elasticity of cloud based resources eventually solves such congestion issues by allocating new shared computer resources for processing the plurality of streams. For example, when the shared computer resources comprise one or more computing processes for processing the plurality of streams, dynamic elasticity may result in allocation and execution of at least one more computing process for processing the plurality of streams. However there is a latency (of at least several minutes) before elasticity increases the amount of shared computer resources. In addition, an elastic expansion usually requires significant increases in resources. One reason an elastic expansion requires significant increases in resources is that due to the latency in increasing the amount of shared computer resources current elastic expansion practices attempt to reduce the frequency of elastic expansions by allocating, upon detecting congestion, sufficient shared computer resources to accommodate some additional resource requirements beyond the congestion that triggered an elastic expansion, even though these shared computer resources may never be needed.

Instead of increasing a plurality of shared computer resources for processing the plurality of streams from the plurality of tenants, the present invention, in some embodiments thereof, proposes identifying in the plurality of streams an obstructing stream from a tenant and temporarily isolating processing of the obstructing stream from processing of other of the plurality of streams. According to some embodiments of the present invention, a plurality of statistical values is computed, where each of the plurality of statistical values is associated with one of the plurality of streams. In such embodiments, one or more obstructing streams are identified among the plurality of streams according to an analysis of the plurality of statistical values. An obstructing stream may be noisy, having an identified increase in an amount of bytes of the stream received by the system in an identified amount of time. Optionally, an obstructing stream is slow, such that an average processing-time value, indicative of an amount of time the system executes to process a digital data object of the obstructing stream, exceeds an identified processing-time threshold value. Optionally, an obstructive stream is both noisy and slow. In embodiments where a plurality of shared computer resources are used by a plurality of computing processes to process the plurality of streams, the present invention proposes allocating one or more new shared computer resources and creating one or more new computing processes, such that the one or more new computing processes execute using the one or more new shared computer resources to process the one or more obstructing streams while the plurality of computing processes process other streams of the plurality of streams using the plurality of shared computer resources. By diverting processing of an obstructing stream to one or more new computing processes using one or more new shared computer resources, other streams of the plurality of streams may be processed by the plurality of computing processes using the plurality of computer resources without suffering increased latency, reduced throughput or data loss. In addition, diverting processing of the obstructing stream according to the present invention requires fewer resources than cloud-base systems' dynamic elasticity as new shared computer resources, and additionally or alternatively new computing processes, may be allocated according to only the obstructing stream without anticipating future requirements for increased shared computer resources.

In addition, when an obstructing stream is slow, in some embodiments of the present invention one or more digital data objects of the obstructing stream are marked as unprocessed and stored in at least one non-volatile (i.e. non-transient) digital storage, for example a hard-disk, a network connected storage or a storage network. In such embodiments, inputting the obstructing stream to the one or more new computing processes comprises the one or more new computing processes retrieving the one or more digital data objects from the at least one non-volatile digital storage. For example, when the one or more digital data objects are one or more log entries and processing the one or more log entries comprises adding one or more values to each of the one or more log entries, the one or more log entries received from the tenant may be stored in the at least one non-volatile digital storage and processed at a time later than when the one or more log entries were received. Deferring processing of a slow obstructing stream allows reducing cost of operation to process the slow obstructing stream from the tenant without increasing latency of a service provided to another tenant, as the slow obstructing stream may be processed when there is less demand for the shared computer resources and thus fewer shared computer resources are needed than when processing all the plurality of streams simultaneously.

In addition, according to the present invention, when a stream identified as an obstructing stream ceases to be obstructing, the identified obstructing stream is input to the shared computer resources processing the other of the plurality of streams. The new shared computer resources may be deallocated and the new computing processes may be stopped. Returning a stream identified as an obstructing stream to be input to the plurality of computing processes instead of to the one or more new computing processes reduces cost of operation as fewer shared computer resources are needed than when shared computer resources are allocated for a worst-case scenario.

The computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing.

Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network.

Reference is now made toFIG. 1, showing an exemplary system100, according to some embodiments of the present invention. In such embodiments, at least one hardware processor101is connected to at least one non-volatile digital storage103. Some examples of a non-volatile digital storage are a hard disk, a network connected storage and a storage network. A hardware processor is typically, but not exclusively, a processor running suitable software for performing one or more data-analysis oriented tasks and additionally or alternatively for communicating with a plurality of tenants and for processing a plurality of streams of data received from the plurality of tenants. A hardware processor may comprise digital memory storage, for example random access memory (RAM). Optionally, a stream comprises one or more digital data objects. Optionally, a digital data object comprises a plurality of values. An example of a digital data object is a log entry. Another example of a digital data object is a physical measurement value, such as a temperature value or a wind velocity value.

For brevity, henceforth the term “processor” is used to mean “at least one hardware processor” and the terms are used interchangeably. Optionally, processor101stores one or more digital data objects of the plurality of stream in at least one non-volatile digital storage103. Optionally, at least one other hardware processor (not shown) is connected to at least one non-volatile digital storage103and retrieves the one or more digital data objects stored on at least one non-volatile digital storage103for the purpose of processing the one or more digital data objects. Optionally, processor101is connected to one or more digital communication network interfaces102, for the purpose of communicating with the at least one other hardware processor, and additionally or alternatively for the purpose of receiving the plurality of streams from the plurality of tenants.

Optionally, processor101executes one or more computing processes to process the plurality of streams, using a plurality of shared computer resources. Optionally, the at least one other hardware processor executes the one or more computing processes. Reference is now made also toFIG. 2, showing a schematic block diagram of an exemplary stream processing dataflow200, according to some embodiments of the present invention. In such embodiments, at least one hardware processor executes one or more computing processes to processes a plurality of streams250. Plurality of streams250are input to the one or more computing processes. Optionally, the one or more computing processes comprise at least one acceptor process201for receiving the plurality of streams, and at least one processing process221for processing the plurality of streams. Optionally, the plurality of shared computer resources comprises at least one buffer211. A buffer is a region of a digital memory storage used to temporarily store data. Optionally, at least one acceptor process201stores one or more digital data objects of the plurality of data streams in at least one buffer211. Optionally, at least one processing process221retrieves the one or more digital data objects from at least one buffer211in order to process the one or more digital data objects. Optionally, at least one acceptor process201stores the one or more digital data objects in at least one non-volatile digital storage103, additionally or alternatively to storing the one or more digital objects in at least one buffer211. Optionally, at least one processing process221retrieves the one or more digital data objects from at least one non-volatile digital storage103in order to process the one or more digital data objects. Optionally, at least one processing process221stores the one or more digital data objects in at least one non-volatile digital storage103after processing the one or more digital data objects, for example after adding at least one value to at least one of the one or more digital data objects.

When one or more streams are identified as obstructing, for example one or more streams252, a plurality of new computing processes is optionally created for processing one or more streams252, for example at least one new processing process222. Optionally, one or more new shared computer resources are allocated for processing one or more streams252, for example at least one new buffer212. Optionally, one or more streams252are input to the plurality of new computing processes instead of to the plurality of computing processes, while plurality of streams250are input to the plurality of computing processes. For example, at least one acceptor process201optionally stores at least one new digital data object of one or more streams252in at least one new buffer212. Optionally, at least one new processing process222retrieves the at least one new digital data object from at least one new buffer212in order to process the at least one new digital data object. Optionally, at least one acceptor process201stores the at least one new digital data object in at least one non-volatile digital storage103. Optionally, at least one new processing process222retrieves the at least one new digital data object from at least one non-volatile digital storage103in order to process the at least one new digital data object. Optionally, at least one new processing process222stores the at least one new digital data object in at least one non-volatile digital storage103after processing the at least one new digital data object, for example after adding at least one new value to at least one of the at least one new digital data object.

To manage the plurality of shared computer resources, in some embodiments of the present invention system100implements the following optional method.

Reference is now made also toFIG. 3, showing a flowchart schematically representing an optional flow of operations300for managing shared computer resources, according to some embodiments of the present invention. In such embodiments, processor101executes a plurality of management iterations. In at least one of the plurality of management iterations, in301processor101optionally computes a plurality of statistical values. Optionally, each of the statistical values is associated with one of plurality of streams250. Optionally, plurality of streams250are input to a plurality of computing processes, for example comprising at least one acceptor process201and at least one processing process221used for processing the plurality of streams. Optionally, the plurality of computing processes are executed using one or more of a plurality of shared computer resources, for example at least one buffer211and at least one non-volatile digital storage103. Some other examples of a shared computer resource are a hardware processor, and a virtual machine. Optionally, the plurality of computing processes are executed by processor101. Optionally, the plurality of computing processes are executed by the least one other hardware processor. Optionally, at least one of the plurality of computing processes is executed by at least one virtual machine. The virtual machine is optionally executed by the at least one other hardware processor. Optionally, the at least one other hardware processor executing the virtual machine is processor101.

Reference is now made also toFIG. 4, showing a flowchart schematically representing an optional flow of operations400for processing a stream, according to some embodiments of the present invention. Optionally, processing a stream comprises executing a plurality of stream iterations for each stream of the plurality of streams, optionally by processor101. Optionally, in each of the plurality of stream iterations the processor101receives in401at least one digital data object of the respective stream. In411, processor101optionally computes a plurality of object statistical values according to the at least one digital object. Optionally, in at least one of the plurality of stream iterations, processor101provides the plurality of object statistical values to at least one other computing process, for example to perform a data-analysis oriented task. In one example, the data-analysis oriented task computes one or more metric values about the plurality of streams. Optionally, processor101computes in301the plurality of statistical values using the plurality of object statistical values.

Optionally, in421, processor101computes at least one additional value according to the plurality of values of one or more of the at least one digital data object. For example, when the at least one digital object describes a geographical location and comprises one or more coordinate values in a world coordinate system, in some embodiments of the present invention in421processor101computes a common name value indicative of the geographical location, such as a name of a city or a name of a street, according to the one or more coordinate values. In431, the at least one hardware processor optionally adds the at least one additional values to the one or more digital data objects, and in441optionally stores the at least one data object on at least one non-volatile digital storage103. Optionally, processor101marks the at least one data object as unprocessed prior to storing the at least one data object on at least one non-volatile digital storage.

Reference is now made again toFIG. 3. In311, processor101optionally identifies, according to an analysis of the plurality of statistical values, at least one obstructing stream252among plurality of streams250. Optionally, the plurality of statistical values comprises a plurality of byte-rate values, each associated with one of plurality of streams250. Optionally, each of the plurality of byte-rate values is indicative of an amount of bytes of the respected stream received by processor101in an identified time interval. Some examples of a time interval are 1 second, 10 seconds, 30 seconds, and 1 minute. Optionally, analysis of the plurality of statistical values comprises identifying a noisy stream, having an identified increase in an amount of bytes of the stream received by system100in an identified amount of time, as at least one obstructing stream252.

Reference is now made also toFIG. 5, showing a flowchart schematically representing an optional flow of operations500for identifying a noisy stream, according to some embodiments of the present invention. Optionally, in501processor101computes a plurality of rate-change values, each associated with one of plurality of streams250. Optionally, to compute one of the plurality of rate-change values, associated with one of the plurality of streams, processor101divides the byte-rate value of the plurality of byte-rate values, of the respective stream, by a previous byte-rate value of the respective stream, computed in a previous iteration of the plurality of management iterations. Optionally, the plurality of statistical values comprises a plurality of latency values, each indicative of an amount of time between a receive time of receiving a data object of one of plurality of streams250and a completion time of completing processing the data object by the plurality of computing processes. Optionally, each of the plurality of latency values is associated with one of plurality of streams250. Optionally, processor101computes the plurality of rate-change values after identifying in the plurality of latency values at least one latency value exceeding an identified latency threshold value, for example 500 milliseconds, 1 second, 1.5 seconds and 5 seconds. In511, processor101optionally identifies at least one high rate-change value of the plurality of rate-change values, each greater than an identified rate-change threshold value. Some examples of a rate-change threshold value are 1.05, 1.1, 1.2, 1.3, 1.4, 1.5, 1.85, 2.0, and 2.05. Optionally each of the at least one high rate-change values is associated with one of plurality of streams250, for example at least one stream252. In521, processor101optionally identifies at least one stream252, associated with one of the at least one high rate-change value, as the at least one obstructing stream. Optionally, identifying at least one obstructing stream252is subject to identifying congestion in one or more of the computing processes or one of more of the shared computer resources. Optionally, the congestion is identified according to at least some of the plurality of statistical values computed in301. Optionally, a smoothing function is applied to the plurality of byte rate values, for example a Gaussian function, to produce a plurality of smooth byte-rate values. Optionally, a plurality of convolution values is computed by applying a convolution function to the plurality of rate-change values and the plurality of smooth byte-rate values. Optionally, processor101computes a priority value for each of at least one obstructing stream252according to the plurality of convolution values.

Reference is now made again toFIG. 3. Optionally, the plurality of statistical values comprises a plurality of processing-time values, each associated with one of plurality of streams250. Optionally, each of the plurality of processing-time values is indicative of an amount of time the plurality of computing processes execute to process a digital object of the respective stream. Optionally, analysis of the plurality of statistical values comprises identifying a slow stream, such that an average processing-time value, indicative of an amount of time system100executes to process a digital data object of the slow stream, exceeds an identified processing-time threshold value, as at least one obstructing stream252.

Reference is now made also toFIG. 6, showing a flowchart schematically representing an optional flow of operations600for identifying a slow stream, according to some embodiments of the present invention. In such embodiments, in601processor101computes a plurality of average processing-time values, each associated with one of plurality of streams250. Optionally, to compute one of the plurality of average processing-time values, associated with one of the plurality of streams, processor101computes an average of some of the plurality of processing-time values, each associated with respective stream. In611, processor101optionally identifies at least one high average processing-time value of the plurality of average processing-time values, each greater than an identified processing-time threshold value. Some examples of a processing-time threshold value are 500 microseconds, 3 milliseconds, 100 milliseconds, 500 milliseconds, 750 milliseconds, and 1 second. Optionally, the some of the plurality of processing-time values are each associated with one or more streams of the plurality of streams processed by an identified set of computation processes of the plurality of computation processes. Optionally each of the at least one high average processing-time values is associated with one of plurality of streams250, for example at least one stream252. In621, processor101optionally identifies at least one stream252, associated with one of the at least one average processing-time value, as the at least one obstructing stream. Optionally, identifying at least one obstructing stream252is subject to identifying congestion in one or more of the computing processes or one of more of the shared computer resources.

Reference is now made again toFIG. 3. In321, processor101optionally allocates at least one new shared computer resource, for example at least one new buffer212, to process at least one obstructing stream252. In331, processor101optionally creates a plurality of new computing processes, for example at least one new processing process222, which execute using the at least one new shared computer resources. For example, at least one processing process222may read one or more digital data objects of at least one obstructing stream252from at least one new buffer212. In341, processor101optionally instructs inputting at least one obstructing stream252to the plurality of new computing processes instead of to the plurality of computing processes. Optionally, at least one obstructing stream252is inputted to the plurality of new computing processes while the plurality of streams are inputted to the plurality of computing resources, for example by instructing at least one acceptor process201to store one or more data objects of at least one obstructing stream252in at least one new buffer212instead of in as least one buffer211, while storing a plurality of data objects of other streams of plurality of stream250in at least one buffer211. Optionally, instructing inputting at least one obstructing stream252to the plurality of new computer resources comprises instructing the plurality of new computing processes to retrieve the one or more data objects of at least one obstructing stream252from at least one non-volatile digital storage103. Optionally, processor101marks the one or more data objects of at least one obstructing stream252as unprocessed prior to storing the one or more data objects in at least one non-volatile digital storage103.

Plurality of streams250may comprise more than one obstructing stream. Optionally, in each of the at least one of the plurality of management iterations, plurality of streams250consists of no more than an identified threshold amount of obstructing streams.

Processor101may input another obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes. To do so, in some embodiments of the present invention system100further implements the following optional method.

Reference is now made also toFIG. 7, showing a flowchart schematically representing an optional flow of operations700for redirecting another stream, according to some embodiments of the present invention. In such embodiments, in at least one other of the plurality of management iterations, in711processor101identifies according to the analysis of the plurality of statistical values at least one other obstructing stream among plurality of streams250. The at least one other obstructing stream may be a noisy stream. Optionally, the at least one other obstructing stream is a slow stream. Optionally, the at least one other obstructing stream is both a noisy stream and a slow stream. In741, processor101optionally instructs inputting the at least one other obstructing stream to the plurality of new computing processes instead of to the plurality of computing processes, for example by instructing at least one acceptor process201to store one or more other data objects of the at least one other obstructing stream in at least one new buffer212instead of in as least one buffer211, while storing the plurality of data objects of other streams of plurality of stream250in at least one buffer211. Optionally, when at least one obstructive stream252is a noisy stream the at least one other obstructing stream is another noisy stream. Optionally, when at least one obstructive stream252is a slow stream the at least one other obstructing stream is another slow stream.

In addition or alternatively, processor101may input the other obstructing stream to a plurality of other new computing processes instead of to the plurality of computing processes or to the plurality of new computing processes. To do so, in some embodiments of the present invention system100further implements the following optional method.

Reference is now made also toFIG. 8, showing a flowchart schematically representing another optional flow of operations800for redirecting another stream, according to some embodiments of the present invention. In such embodiments, in the at least one other of the plurality of management iterations, in811processor101identifies according to the analysis of the plurality of statistical values the at least one other obstructing stream among plurality of streams250. In821, processor101optionally allocates at least one other new shared computer resource to process the at least one other obstructing stream, for example another new buffer or another new virtual machine. In831, processor101optionally creates a plurality of other new computing processes which execute using the at least one other new shared computer resource, for example, another new processing process that reads data from the other new buffer, or another new processing process executed by the other new virtual machine. In841, processor101optionally instructs inputting the at least one other obstructing stream to the plurality of other new computing processes instead of to the plurality of computing processes or to the plurality of new computing processes, while inputting other of plurality of streams252to the plurality of computing processes. Optionally, when at least one obstructive stream252is a noisy stream the at least one other obstructing stream is a slow stream. Optionally, when at least one obstructive stream252is a slow stream the at least one other obstructing stream is a noisy stream.

It may be that over time a stream that was identified as an obstructing stream ceases to be obstructing and may not require computing processes and shared computer resources separate from the plurality of computing processes and the plurality of shared computer resources. In some embodiments, in at least one additional iteration of the plurality of management iterations, processor101identifies that at least one obstructing stream252is no longer obstructing and instructs inputting at least one obstructing stream252to the plurality of computing processes instead of to the plurality of new computing processes, while plurality of streams250are inputted to the plurality of computing processes.

For example, in some embodiments where at least one obstructing stream252is a noisy stream, system100optionally implements the following method.

Reference is now made also toFIG. 9, showing a flowchart schematically representing an optional flow of operations900for identifying a no longer noisy stream, according to some embodiments of the present invention. In such embodiments, in the at least one additional iteration of the plurality of management iterations, in901processor101computes at least one new rate-change value, each associated with one of at least one obstructing stream252. Optionally, to compute one of the at least one new rate-change values, associated with one of at least one obstructing stream252, processor101divides the byte-rate value of the plurality of byte-rate values, of the respective stream, by another previous byte-rate value of the respective stream, computed in another previous iteration of the plurality of management iterations. In911, processor101optionally identifies at least one normal rate-change value of the at least one new rate-change values, each less than the identified rate-change threshold value. Optionally, each of the least one new rate-change values is less than another identified rate change threshold value. Some other examples of a rate-change threshold value are 0.2, 0.95, 0.99, and 1.1. Optionally each of the at least one normal rate-change values is associated with at least one obstructing stream252. In921, processor101optionally instructs inputting at least one obstructing stream252to the plurality of computing processes instead of the plurality of new computing processes while inputting plurality of streams250to the plurality of computing resources. Optionally, instructs inputting at least one obstructing stream252to the plurality of computing processes is subject to identifying no-congestion in one or more of the computing processes or one of more of the shared computer resources. Optionally, the no-congestion is identified according to at least some of the plurality of statistical values computed in301.

Additionally or alternatively, in some embodiments where at least one obstructing stream252is a slow stream, system100optionally implements the following method.

Reference is now made also toFIG. 10, showing a flowchart schematically representing an optional flow of operations1000for identifying a no longer slow stream, according to some embodiments of the present invention. In such embodiments, in the at least one additional iteration of the plurality of management iterations, in1001processor101produces at least one new average processing-time value, each associated with one of at least one obstructing stream252. Optionally, to produce one of the at least one new average processing-time values, associated with one of at least one obstructing stream252, processor101computes another average of some other of the plurality of processing-time values, each associated with the respective stream. In1011, processor101optionally identifies at least one normal average processing-time value of the at least one new average processing-time values, each less than the identified average processing-time threshold value. Optionally, each of the least one new average processing-time threshold values is less than another identified average processing-time threshold value. Optionally each of the at least one normal average processing-time values is associated with at least one obstructing stream252. In1021, processor101optionally instructs inputting at least one obstructing stream252to the plurality of computing processes instead of the plurality of new computing processes while inputting plurality of streams250to the plurality of computing resources. Optionally, instructs inputting at least one obstructing stream252to the plurality of computing processes is subject to identifying no-congestion in one or more of the computing processes or one of more of the shared computer resources.

It is expected that during the life of a patent maturing from this application many relevant shared computer resources will be developed and the scope of the term “shared computer resources” is intended to include all such new technologies a priori.

As used herein the term “about” refers to ±10%.