@Article{arpaci-dusseau:jriver, author = {Arpaci-Dusseau, Remzi, H.}, title = {Run-Time Adaptation in {R}iver}, journal = {ACM Transactions on Computer Systems}, year = {2003}, month = {February}, volume = {21}, number = {1}, pages = {36--86}, publisher = {ACM Press}, keywords = {distributed query processing, dataflow, pario-bib}, comment = {River is a dataflow programming environment for database query processing applications. River is specifically designed for clusters of computers with heterogeneous performance characteristics. The goal of the River runtime system is to adapt to "performance faults"--portions of the system that perform poorly by dynamically adjusting the transfer of data through the dataflow graph. River uses two constructs to build applications: a distributed queue that deals with performance faults by consumers, and graduated declustering that deals with performance faults of producers. A distributed queue pushes data through the dataflow graph at a rate proportional to the rate of consumption and adapts to changes in consumption rates. Graduated declustering deals with producer performance faults by reading from replicated producers. Although River is designed specifically for query processing, they briefly discuss how one might adapt scientific applications to work in their framework.} }