// rust/01-async-performance.rs/*Async performance patterns and best practices*/usestd::sync::Arc;usetokio::sync::{Semaphore,RwLock};usetokio::time::{Duration,Instant};useserde::{Deserialize,Serialize};/// High-performance async service.pubstructAsyncService{semaphore:Arc<Semaphore>,cache:Arc<RwLock<std::collections::HashMap<String,CachedValue>>>,max_concurrent:usize,}#[derive(Debug, Clone, Serialize, Deserialize)]pubstructCachedValue{pubdata:String,pubexpires_at:Instant,}implAsyncService{pubfnnew(max_concurrent:usize)->Self{Self{semaphore:Arc::new(Semaphore::new(max_concurrent)),cache:Arc::new(RwLock::new(std::collections::HashMap::new())),max_concurrent,}}/// Process request with concurrency control.pubasyncfnprocess_request(&self,key:String)->Result<String,String>{let_permit=self.semaphore.acquire().await.map_err(|e|e.to_string())?;// Check cache firstifletSome(cached)=self.get_from_cache(&key).await{returnOk(cached);}// Simulate expensive operationletresult=self.expensive_operation(&key).await?;// Cache the resultself.cache_result(key,result.clone()).await;Ok(result)}/// Get value from cache.asyncfnget_from_cache(&self,key:&str)->Option<String>{letcache=self.cache.read().await;ifletSome(cached)=cache.get(key){ifcached.expires_at>Instant::now(){returnSome(cached.data.clone());}}None}/// Cache a result.asyncfncache_result(&self,key:String,data:String){letmutcache=self.cache.write().await;letexpires_at=Instant::now()+Duration::from_secs(300);// 5 minutescache.insert(key,CachedValue{data,expires_at});}/// Simulate expensive operation.asyncfnexpensive_operation(&self,key:&str)->Result<String,String>{// Simulate network delaytokio::time::sleep(Duration::from_millis(100)).await;Ok(format!("Processed: {}",key))}/// Process multiple requests concurrently.pubasyncfnprocess_batch(&self,keys:Vec<String>)->Vec<Result<String,String>>{letfutures:Vec<_>=keys.into_iter().map(|key|self.process_request(key)).collect();futures::future::join_all(futures).await}/// Process requests with timeout.pubasyncfnprocess_with_timeout(&self,key:String,timeout:Duration)->Result<String,String>{tokio::time::timeout(timeout,self.process_request(key)).await.map_err(|_|"Request timeout".to_string())?}}/// Connection pool for database connections.pubstructConnectionPool{connections:Arc<RwLock<Vec<DatabaseConnection>>>,max_connections:usize,semaphore:Arc<Semaphore>,}pubstructDatabaseConnection{pubid:u32,pubis_available:bool,}implConnectionPool{pubfnnew(max_connections:usize)->Self{Self{connections:Arc::new(RwLock::new(Vec::new())),max_connections,semaphore:Arc::new(Semaphore::new(max_connections)),}}/// Get a connection from the pool.pubasyncfnget_connection(&self)->Result<PooledConnection,String>{let_permit=self.semaphore.acquire().await.map_err(|e|e.to_string())?;letmutconnections=self.connections.write().await;// Find available connectionforconnectioninconnections.iter_mut(){ifconnection.is_available{connection.is_available=false;returnOk(PooledConnection{connection:connection.id,pool:self.clone(),});}}// Create new connection if under limitifconnections.len()<self.max_connections{letconnection_id=connections.len()asu32;letconnection=DatabaseConnection{id:connection_id,is_available:false,};connections.push(connection);returnOk(PooledConnection{connection:connection_id,pool:self.clone(),});}Err("No connections available".to_string())}}implCloneforConnectionPool{fnclone(&self)->Self{Self{connections:Arc::clone(&self.connections),max_connections:self.max_connections,semaphore:Arc::clone(&self.semaphore),}}}/// Pooled connection wrapper.pubstructPooledConnection{connection:u32,pool:ConnectionPool,}implPooledConnection{/// Execute a query using the connection.pubasyncfnexecute_query(&self,query:&str)->Result<String,String>{// Simulate database querytokio::time::sleep(Duration::from_millis(50)).await;Ok(format!("Result for query: {}",query))}}implDropforPooledConnection{fndrop(&mutself){letpool=self.pool.clone();letconnection_id=self.connection;tokio::spawn(asyncmove{letmutconnections=pool.connections.write().await;ifletSome(conn)=connections.iter_mut().find(|c|c.id==connection_id){conn.is_available=true;}});}}#[cfg(test)]modtests{usesuper::*;#[tokio::test]asyncfntest_async_service(){letservice=AsyncService::new(10);letresult=service.process_request("test-key".to_string()).await;assert!(result.is_ok());assert!(result.unwrap().contains("Processed"));}#[tokio::test]asyncfntest_batch_processing(){letservice=AsyncService::new(10);letkeys=vec!["key1".to_string(),"key2".to_string(),"key3".to_string()];letresults=service.process_batch(keys).await;assert_eq!(results.len(),3);assert!(results.iter().all(|r|r.is_ok()));}#[tokio::test]asyncfntest_connection_pool(){letpool=ConnectionPool::new(5);letconnection=pool.get_connection().await.unwrap();letresult=connection.execute_query("SELECT * FROM users").await;assert!(result.is_ok());}}
// rust/02-caching-strategies.rs/*Caching strategies and best practices*/usestd::collections::HashMap;usestd::sync::Arc;usestd::time::{Duration,Instant};usetokio::sync::RwLock;useserde::{Deserialize,Serialize};/// Multi-level cache implementation.pubstructMultiLevelCache{l1_cache:Arc<RwLock<HashMap<String,CachedValue>>>,l2_cache:Arc<RwLock<HashMap<String,CachedValue>>>,l1_capacity:usize,l2_capacity:usize,}#[derive(Debug, Clone, Serialize, Deserialize)]pubstructCachedValue{pubdata:String,pubexpires_at:Instant,pubaccess_count:u64,publast_accessed:Instant,}implMultiLevelCache{pubfnnew(l1_capacity:usize,l2_capacity:usize)->Self{Self{l1_cache:Arc::new(RwLock::new(HashMap::new())),l2_cache:Arc::new(RwLock::new(HashMap::new())),l1_capacity,l2_capacity,}}/// Get value from cache.pubasyncfnget(&self,key:&str)->Option<String>{// Check L1 cache firstifletSome(value)=self.get_from_l1(key).await{returnSome(value);}// Check L2 cacheifletSome(value)=self.get_from_l2(key).await{// Promote to L1 cacheself.set_l1(key,value.clone()).await;returnSome(value);}None}/// Set value in cache.pubasyncfnset(&self,key:String,value:String,ttl:Duration){letexpires_at=Instant::now()+ttl;letcached_value=CachedValue{data:value.clone(),expires_at,access_count:1,last_accessed:Instant::now(),};// Set in L1 cacheself.set_l1(&key,value).await;// Set in L2 cacheself.set_l2(&key,cached_value).await;}/// Get from L1 cache.asyncfnget_from_l1(&self,key:&str)->Option<String>{letmutcache=self.l1_cache.write().await;ifletSome(cached)=cache.get_mut(key){ifcached.expires_at>Instant::now(){cached.access_count+=1;cached.last_accessed=Instant::now();returnSome(cached.data.clone());}else{cache.remove(key);}}None}/// Get from L2 cache.asyncfnget_from_l2(&self,key:&str)->Option<String>{letmutcache=self.l2_cache.write().await;ifletSome(cached)=cache.get_mut(key){ifcached.expires_at>Instant::now(){cached.access_count+=1;cached.last_accessed=Instant::now();returnSome(cached.data.clone());}else{cache.remove(key);}}None}/// Set in L1 cache.asyncfnset_l1(&self,key:&str,value:String){letmutcache=self.l1_cache.write().await;// Evict if at capacityifcache.len()>=self.l1_capacity{self.evict_l1(&mutcache).await;}letexpires_at=Instant::now()+Duration::from_secs(300);letcached_value=CachedValue{data:value,expires_at,access_count:1,last_accessed:Instant::now(),};cache.insert(key.to_string(),cached_value);}/// Set in L2 cache.asyncfnset_l2(&self,key:&str,value:CachedValue){letmutcache=self.l2_cache.write().await;// Evict if at capacityifcache.len()>=self.l2_capacity{self.evict_l2(&mutcache).await;}cache.insert(key.to_string(),value);}/// Evict from L1 cache using LRU.asyncfnevict_l1(&self,cache:&mutHashMap<String,CachedValue>){letmutoldest_key=None;letmutoldest_time=Instant::now();for(key,value)incache.iter(){ifvalue.last_accessed<oldest_time{oldest_time=value.last_accessed;oldest_key=Some(key.clone());}}ifletSome(key)=oldest_key{cache.remove(&key);}}/// Evict from L2 cache using LRU.asyncfnevict_l2(&self,cache:&mutHashMap<String,CachedValue>){letmutoldest_key=None;letmutoldest_time=Instant::now();for(key,value)incache.iter(){ifvalue.last_accessed<oldest_time{oldest_time=value.last_accessed;oldest_key=Some(key.clone());}}ifletSome(key)=oldest_key{cache.remove(&key);}}}/// Cache warming service.pubstructCacheWarmingService{cache:Arc<MultiLevelCache>,data_source:Arc<dynDataSource>,}pubtraitDataSource:Send+Sync{asyncfnget_data(&self,key:&str)->Result<String,String>;}pubstructDatabaseDataSource;implDataSourceforDatabaseDataSource{asyncfnget_data(&self,key:&str)->Result<String,String>{// Simulate database querytokio::time::sleep(Duration::from_millis(100)).await;Ok(format!("Data for key: {}",key))}}implCacheWarmingService{pubfnnew(cache:Arc<MultiLevelCache>,data_source:Arc<dynDataSource>)->Self{Self{cache,data_source}}/// Warm cache with frequently accessed data.pubasyncfnwarm_cache(&self,keys:Vec<String>)->Result<(),String>{forkeyinkeys{ifself.cache.get(&key).await.is_none(){letdata=self.data_source.get_data(&key).await?;self.cache.set(key,data,Duration::from_secs(300)).await;}}Ok(())}/// Preload cache with predicted data.pubasyncfnpreload_cache(&self,key:String)->Result<(),String>{letdata=self.data_source.get_data(&key).await?;self.cache.set(key,data,Duration::from_secs(300)).await;Ok(())}}#[cfg(test)]modtests{usesuper::*;#[tokio::test]asyncfntest_multi_level_cache(){letcache=MultiLevelCache::new(10,100);cache.set("key1".to_string(),"value1".to_string(),Duration::from_secs(60)).await;letvalue=cache.get("key1").await;assert_eq!(value,Some("value1".to_string()));}#[tokio::test]asyncfntest_cache_warming(){letcache=Arc::new(MultiLevelCache::new(10,100));letdata_source=Arc::new(DatabaseDataSource);letservice=CacheWarmingService::new(cache,data_source);letkeys=vec!["key1".to_string(),"key2".to_string()];letresult=service.warm_cache(keys).await;assert!(result.is_ok());}}
// rust/03-load-balancing.rs/*Load balancing patterns and best practices*/usestd::collections::HashMap;usestd::sync::Arc;usestd::sync::atomic::{AtomicUsize,Ordering};usetokio::sync::RwLock;useserde::{Deserialize,Serialize};/// Load balancer implementation.pubstructLoadBalancer{servers:Arc<RwLock<Vec<Server>>>,strategy:LoadBalancingStrategy,current_index:AtomicUsize,}#[derive(Debug, Clone, Serialize, Deserialize)]pubstructServer{pubid:String,pubhost:String,pubport:u16,pubweight:u32,pubis_healthy:bool,pubresponse_time:u64,pubactive_connections:u32,}#[derive(Debug, Clone)]pubenumLoadBalancingStrategy{RoundRobin,WeightedRoundRobin,LeastConnections,LeastResponseTime,Random,}implLoadBalancer{pubfnnew(strategy:LoadBalancingStrategy)->Self{Self{servers:Arc::new(RwLock::new(Vec::new())),strategy,current_index:AtomicUsize::new(0),}}/// Add a server to the load balancer.pubasyncfnadd_server(&self,server:Server){letmutservers=self.servers.write().await;servers.push(server);}/// Remove a server from the load balancer.pubasyncfnremove_server(&self,server_id:&str){letmutservers=self.servers.write().await;servers.retain(|s|s.id!=server_id);}/// Get the next server based on the strategy.pubasyncfnget_next_server(&self)->Option<Server>{letservers=self.servers.read().await;lethealthy_servers:Vec<Server>=servers.iter().filter(|s|s.is_healthy).cloned().collect();ifhealthy_servers.is_empty(){returnNone;}matchself.strategy{LoadBalancingStrategy::RoundRobin=>{letindex=self.current_index.fetch_add(1,Ordering::Relaxed);Some(healthy_servers[index%healthy_servers.len()].clone())}LoadBalancingStrategy::WeightedRoundRobin=>{self.get_weighted_server(&healthy_servers).await}LoadBalancingStrategy::LeastConnections=>{self.get_least_connections_server(&healthy_servers)}LoadBalancingStrategy::LeastResponseTime=>{self.get_least_response_time_server(&healthy_servers)}LoadBalancingStrategy::Random=>{letindex=fastrand::usize(..healthy_servers.len());Some(healthy_servers[index].clone())}}}/// Get server with weighted round-robin.asyncfnget_weighted_server(&self,servers:&[Server])->Option<Server>{lettotal_weight:u32=servers.iter().map(|s|s.weight).sum();iftotal_weight==0{returnNone;}letmutcurrent_weight=0;letmutselected_server=None;forserverinservers{current_weight+=server.weight;ifcurrent_weight>=total_weight{selected_server=Some(server.clone());break;}}selected_server}/// Get server with least connections.fnget_least_connections_server(&self,servers:&[Server])->Option<Server>{servers.iter().min_by_key(|s|s.active_connections).cloned()}/// Get server with least response time.fnget_least_response_time_server(&self,servers:&[Server])->Option<Server>{servers.iter().min_by_key(|s|s.response_time).cloned()}/// Update server health status.pubasyncfnupdate_server_health(&self,server_id:&str,is_healthy:bool){letmutservers=self.servers.write().await;ifletSome(server)=servers.iter_mut().find(|s|s.id==server_id){server.is_healthy=is_healthy;}}/// Update server metrics.pubasyncfnupdate_server_metrics(&self,server_id:&str,response_time:u64,active_connections:u32){letmutservers=self.servers.write().await;ifletSome(server)=servers.iter_mut().find(|s|s.id==server_id){server.response_time=response_time;server.active_connections=active_connections;}}}/// Health check service.pubstructHealthCheckService{load_balancer:Arc<LoadBalancer>,check_interval:std::time::Duration,}implHealthCheckService{pubfnnew(load_balancer:Arc<LoadBalancer>,check_interval:std::time::Duration)->Self{Self{load_balancer,check_interval,}}/// Start health checking.pubasyncfnstart(&self){letload_balancer=Arc::clone(&self.load_balancer);letinterval=self.check_interval;tokio::spawn(asyncmove{letmutinterval_timer=tokio::time::interval(interval);loop{interval_timer.tick().await;load_balancer.check_health().await;}});}/// Check health of all servers.asyncfncheck_health(&self){letservers=self.load_balancer.servers.read().await;letserver_ids:Vec<String>=servers.iter().map(|s|s.id.clone()).collect();drop(servers);forserver_idinserver_ids{letis_healthy=self.check_server_health(&server_id).await;self.load_balancer.update_server_health(&server_id,is_healthy).await;}}/// Check health of a specific server.asyncfncheck_server_health(&self,server_id:&str)->bool{// Simulate health checktokio::time::sleep(std::time::Duration::from_millis(10)).await;true}}implLoadBalancer{/// Check health of all servers.pubasyncfncheck_health(&self){letservers=self.servers.read().await;letserver_ids:Vec<String>=servers.iter().map(|s|s.id.clone()).collect();drop(servers);forserver_idinserver_ids{letis_healthy=self.check_server_health(&server_id).await;self.update_server_health(&server_id,is_healthy).await;}}/// Check health of a specific server.asyncfncheck_server_health(&self,server_id:&str)->bool{// Simulate health checktokio::time::sleep(std::time::Duration::from_millis(10)).await;true}}#[cfg(test)]modtests{usesuper::*;#[tokio::test]asyncfntest_load_balancer(){letload_balancer=LoadBalancer::new(LoadBalancingStrategy::RoundRobin);letserver=Server{id:"server1".to_string(),host:"localhost".to_string(),port:8080,weight:1,is_healthy:true,response_time:100,active_connections:0,};load_balancer.add_server(server).await;letselected_server=load_balancer.get_next_server().await;assert!(selected_server.is_some());assert_eq!(selected_server.unwrap().id,"server1");}#[tokio::test]asyncfntest_health_check(){letload_balancer=Arc::new(LoadBalancer::new(LoadBalancingStrategy::RoundRobin));lethealth_service=HealthCheckService::new(Arc::clone(&load_balancer),std::time::Duration::from_secs(1),);letserver=Server{id:"server1".to_string(),host:"localhost".to_string(),port:8080,weight:1,is_healthy:true,response_time:100,active_connections:0,};load_balancer.add_server(server).await;// Start health checkinghealth_service.start().await;// Wait a bit for health check to runtokio::time::sleep(std::time::Duration::from_millis(100)).await;}}