rule { include log, getLoadBalancing from "socket://localhost:8000" on { N.scopename == "log" } do { log: client( r ) -> logger( log ); _r@logger = log( log ); if( log == "S" )@logger { search_balance@logger = getLoadBalancing( log ) }; if( log == "R" )@logger { read_balance@logger = getLoadBalancing( log ) } } } rule { include getServer from "socket://localhost:8001" include search from "socket://localhost:8002" include rSearch from "socket://localhost:8003" on { N.scopename == "search" and search_balance == true } do { ser@balancer = getServer( "S" ); if( ser )@balancer{ search: client( s ) -> server( s ); res@server = search( s ); response: server( res ) -> client( res ) } else { search: client( s ) -> rserver( s ); res@rserver = rSearch( s ); response: rserver( res ) -> client( res ) } } } rule { include getServer from "socket://localhost:8001" include read from "socket://localhost:8002" include rRead from "socket://localhost:8003" on { N.scopename == "read" and read_balance == true } do { ser@balancer = getServer( "R" ); if( ser )@balancer{ read: client( s ) -> server( s ); res@server = read( s ); response: server( res ) -> client( res ) } else { read: client( s ) -> rserver( s ); res@rserver = rRead( s ); response: rserver( res ) -> client( res ) } } } rule { include getServer from "socket://localhost:8001" include write from "socket://localhost:8002" include rWrite from "socket://localhost:8003" on { N.scopename == "write" and ( read_balance == true or search_balance == true ) } do { write: client( s ) -> server( s ); res@server = write( s ); // propagates changes to rServer write: server( s ) -> rserver( s ); res@rserver = rWrite( s ); ok: rserver() -> server(); res@server = "[Synchronised] " + res; response: server( res ) -> client( res ) } }