๐ŸŽฏ

rust-distributed

๐ŸŽฏSkill

from huiali/rust-skills

VibeIndex|
What it does

Enables robust distributed systems development in Rust by implementing consensus algorithms, distributed transactions, and coordination mechanisms.

๐Ÿ“ฆ

Part of

huiali/rust-skills(30 items)

rust-distributed

Installation

๐Ÿ“‹ No install commands found in docs. Showing default command. Check GitHub for actual instructions.
Quick InstallInstall with npx
npx skills add huiali/rust-skills --skill rust-distributed
2Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"ๅˆ†ๅธƒๅผ็ณป็ปŸไธ“ๅฎถใ€‚ๅค„็† Raft, 2PC, ๅ…ฑ่ฏ†็ฎ—ๆณ•, ๅˆ†ๅธƒๅผไบ‹ๅŠก, ๅˆ†ๅธƒๅผไธ€่‡ดๆ€ง, ๅˆ†ๅธƒๅผๅ่ฐƒ"

Overview

# ๅˆ†ๅธƒๅผ็ณป็ปŸ

ๆ ธๅฟƒ้—ฎ้ข˜

ๅฆ‚ไฝ•ๅœจๅˆ†ๅธƒๅผ็Žฏๅขƒไธญๅฎž็Žฐๆ•ฐๆฎไธ€่‡ดๆ€งๅ’Œ้ซ˜ๅฏ็”จ๏ผŸ

ๅˆ†ๅธƒๅผ็ณป็ปŸ้œ€่ฆๅœจCAP็†่ฎบไธญๅšๅ‡บๆƒ่กกใ€‚

---

Raft ๅ…ฑ่ฏ†็ฎ—ๆณ•

Raft ๆ ธๅฟƒๆฆ‚ๅฟต

```

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”

โ”‚ Raft ้›†็พค โ”‚

โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค

โ”‚ โ”‚

โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚

โ”‚ โ”‚ Leader โ”‚ โ—„โ”€โ”€โ–บโ”‚ Followerโ”‚ โ—„โ”€โ”€โ–บโ”‚ Followerโ”‚ โ”‚

โ”‚ โ”‚ ่Š‚็‚น โ”‚ โ”‚ ่Š‚็‚น โ”‚ โ”‚ ่Š‚็‚น โ”‚ โ”‚

โ”‚ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚

โ”‚ โ”‚ โ”‚

โ”‚ - ๅค„็†ๅฎขๆˆท็ซฏ่ฏทๆฑ‚ โ”‚

โ”‚ - ๅคๅˆถๆ—ฅๅฟ—ๅˆฐ Follower โ”‚

โ”‚ - ็ฎก็†ๅฟƒ่ทณๅ’Œ้€‰ไธพ โ”‚

โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

```

็Šถๆ€ๆœบ

```rust

// Raft ่Š‚็‚น็Šถๆ€

enum RaftState {

Follower,

Candidate,

Leader,

}

struct RaftNode {

state: RaftState,

current_term: u64,

voted_for: Option,

log: Vec,

commit_index: usize,

last_applied: usize,

// ้€‰ไธพ็›ธๅ…ณ

election_timeout: Duration,

last_heartbeat: Instant,

// ้›†็พค้…็ฝฎ

node_id: u64,

peers: Vec,

}

```

ๆ—ฅๅฟ—ๅคๅˆถ

```rust

struct LogEntry {

term: u64,

index: usize,

command: Vec,

}

impl RaftNode {

// Leader ๅคๅˆถๆ—ฅๅฟ—ๅˆฐ Follower

fn replicate_log(&mut self, peer: u64) {

let prev_log_index = self.get_last_log_index_for(peer);

let prev_log_term = self.get_last_log_term_for(peer);

let entries: Vec = self.log

[(prev_log_index + 1)..]

.to_vec();

let rpc = AppendEntriesRequest {

term: self.current_term,

leader_id: self.node_id,

prev_log_index,

prev_log_term,

entries,

leader_commit: self.commit_index,

};

self.send_append_entries(peer, rpc);

}

}

```

้€‰ไธพๆœบๅˆถ

```rust

impl RaftNode {

fn start_election(&mut self) {

self.state = RaftState::Candidate;

self.current_term += 1;

self.voted_for = Some(self.node_id);

let mut votes = 1;

// ๅ‘ๆ‰€ๆœ‰่Š‚็‚น่ฏทๆฑ‚ๆŠ•็ฅจ

for peer in &self.peers {

let request = RequestVoteRequest {

term: self.current_term,

candidate_id: self.node_id,

last_log_index: self.log.len(),

last_log_term: self.get_last_log_term(),

};

if let Some(response) = self.send_request_vote(peer, request) {

if response.vote_granted {

votes += 1;

if votes > self.peers.len() / 2 {

self.become_leader();

return;

}

}

}

}

// ้€‰ไธพๅคฑ่ดฅ๏ผŒๅ›žๅˆฐ Follower

self.state = RaftState::Follower;

}

}

```

---

ไธค้˜ถๆฎตๆไบค (2PC)

ๅ่ฐƒ่€…

```rust

struct TwoPhaseCommitCoordinator {

transaction_id: u128,

participants: Vec,

state: TwoPCState,

}

enum TwoPCState {

Init,

WaitingPrepare,

WaitingCommit,

Committed,

Aborted,

}

impl TwoPhaseCommitCoordinator {

pub fn start_transaction(&mut self) {

self.state = TwoPCState::WaitingPrepare;

// ็ฌฌไธ€้˜ถๆฎต๏ผšๅ‘้€ prepare

for participant in &self.participants {

participant.send(PrepareMessage {

transaction_id: self.transaction_id,

});

}

}

pub fn handle_prepare_response(&mut self, response: PrepareResponse) {

if response.vote == Vote::Abort {

self.abort();

} else if self.all_prepared() {

self.state = TwoPCState::WaitingCommit;

// ็ฌฌไบŒ้˜ถๆฎต๏ผšๅ‘้€ commit

for participant in &self.participants {

participant.send(CommitMessage {

transaction_id: self.transaction_id,

});

}

}

}

}

```

ๅ‚ไธŽ่€…

```rust

struct Participant {

transaction_manager: TransactionManager,

state: ParticipantState,

}

enum ParticipantState {

Init,

Prepared,

Committed,

Aborted,

}

impl Participant {

pub fn handle_prepare(&mut self, msg: PrepareMessage) {

// ๆ‰ง่กŒๆœฌๅœฐไบ‹ๅŠกๆ“ไฝœ

let result = self.transaction_manager.execute();

match result {

Ok(_) => {

self.state = ParticipantState::Prepared;

self.send(PrepareResponse {

vote: Vote::Commit,

..msg

});

}

Err(_) => {

self.send(PrepareResponse {

vote: Vote::Abort,

..msg

});

}

}

}

}

```

2PC ้—ฎ้ข˜ไธŽ่งฃๅ†ณๆ–นๆกˆ

| ้—ฎ้ข˜ | ๅŽŸๅ›  | ่งฃๅ†ณๆ–นๆกˆ |

|-----|------|---------|

| ้˜ปๅกž | ๅ่ฐƒ่€…ๆ•…้šœ | ่ถ…ๆ—ถๆœบๅˆถใ€ๅค‡ไปฝๅ่ฐƒ่€… |

| ๅ•็‚นๆ•…้šœ | ไพ่ต–ๅ่ฐƒ่€… | ๅˆ†ๅธƒๅผๅ่ฐƒ่€… (etcd/ZooKeeper) |

| ๆ€ง่ƒฝ | ๅคšๆฌก็ฝ‘็ปœๅพ€่ฟ” | ๆ‰น้‡ๆไบคใ€ไผ˜ๅŒ–่ถ…ๆ—ถ |

---

ๅˆ†ๅธƒๅผไธ€่‡ดๆ€งๆจกๅž‹

```rust

// ๆœ€็ปˆไธ€่‡ดๆ€ง

trait EventuallyConsistent {

fn put(&self, key: &str, value: &str);

fn get(&self, key: &str) -> Option;

}

// ๅผบไธ€่‡ดๆ€ง๏ผˆ็บฟๆ€งๅŒ–๏ผ‰

trait Linearizable {

fn put(&self, key: &str, value: &str) -> Result<()>;

fn get(&self, key: &str) -> Result;

}

// ้กบๅบไธ€่‡ดๆ€ง

trait SequentialConsistent {

fn put(&self, key: &str, value: &str);

fn get(&self, key: &str) -> Vec; // ่ฟ”ๅ›žๅކๅฒ็‰ˆๆœฌ

}

```

---

ๅˆ†ๅธƒๅผ ID ็”Ÿๆˆ

```rust

// Snowflake ็ฎ—ๆณ•

struct SnowflakeGenerator {

worker_id: u64,

datacenter_id: u64,

sequence: u64,

last_timestamp: u64,

}

impl SnowflakeGenerator {

pub fn generate(&mut self) -> u64 {

let timestamp = current_timestamp();

if timestamp == self.last_timestamp {

self.sequence = (self.sequence + 1) & 0xFFF; // 12ไฝ

if self.sequence == 0 {

// ็ญ‰ๅพ…ไธ‹ไธ€ๆฏซ็ง’

while current_timestamp() == timestamp {}

}

} else {

self.sequence = 0;

}

self.last_timestamp = timestamp;

(timestamp << 22) // 41ไฝๆ—ถ้—ดๆˆณ

| (self.datacenter_id << 17) // 5ไฝๆ•ฐๆฎไธญๅฟƒ

| (self.worker_id << 12) // 5ไฝๅทฅไฝœ่Š‚็‚น

| self.sequence // 12ไฝๅบๅˆ—ๅท

}

}

```

---

ๅˆ†ๅธƒๅผ้”

```rust

use std::sync::{Arc, atomic::{AtomicU64, Ordering}};

use std::time::Duration;

struct DistributedLock {

key: String,

ttl: Duration,

owner: u64,

}

impl DistributedLock {

// ๅŸบไบŽ etcd ็š„ๅˆ†ๅธƒๅผ้”

pub async fn try_lock(&self, owner: u64, ttl: Duration) -> Result {

let response = etcd_client.put(

format!("/lock/{}", self.key),

owner.to_string(),

Some(PutOptions::new().with_ttl(ttl))

).await?;

// ๅฆ‚ๆžœๆ˜ฏ็ฌฌไธ€ไธช่ฎพ็ฝฎ่€…๏ผŒ่Žทๅพ—้”

Ok(response.prev_key().is_none())

}

pub async fn unlock(&self, owner: u64) -> Result<(), LockError> {

// ๅช่ƒฝ็”ฑ้”็š„ๆŒๆœ‰่€…้‡Šๆ”พ

let response = etcd_client.get(format!("/lock/{}", self.key)).await?;

if response.value() == owner.to_string() {

etcd_client.delete(format!("/lock/{}", self.key)).await?;

}

Ok(())

}

}

```

---

ๅˆ†ๅธƒๅผไบ‹ไปถๆบฏๆบ

```rust

// ไบ‹ไปถๆบฏๆบๆจกๅผ

trait EventSourced {

type Event;

fn apply(&mut self, event: Self::Event);

fn snapshot(&self) -> Self;

}

struct Aggregate {

version: u64,

events: Vec,

state: AggregateState,

}

impl Aggregate {

pub fn new() -> Self {

Self {

version: 0,

events: Vec::new(),

state: AggregateState::Init,

}

}

pub fn apply_event(&mut self, event: Event) {

self.state.transition(&event);

self.events.push(event);

self.version += 1;

}

pub fn snapshot(&self) -> EventSourcedSnapshot {

EventSourcedSnapshot {

version: self.version,

state: self.state.clone(),

}

}

}

```

---

ๅธธ่ง้—ฎ้ข˜

| ้—ฎ้ข˜ | ๅŽŸๅ›  | ่งฃๅ†ณ |

|-----|------|-----|

| ่„‘่ฃ‚ | ็ฝ‘็ปœๅˆ†ๅŒบ | ๆณ•ๅฎšไบบๆ•ฐใ€ไปปๆœŸๆœบๅˆถ |

| ๆดป้” | ้€‰ไธพ่ถ…ๆ—ถๅ†ฒ็ช | ้šๆœบๅŒ–่ถ…ๆ—ถ |

| ๆ•ฐๆฎไธไธ€่‡ด | ๅนถๅ‘ๅ†™ๅ…ฅ | ๅ†ฒ็ช่งฃๅ†ณ็ญ–็•ฅ |

| ๆ€ง่ƒฝ็“ถ้ขˆ | ๅ•็‚นๅ†™ๅ…ฅ | ๅˆ†็‰‡ใ€ๅคๅˆถ |

---

ไธŽๅ…ถไป–ๆŠ€่ƒฝๅ…ณ่”

```

rust-distributed

โ”‚

โ”œโ”€โ–บ rust-concurrency โ†’ ๅนถๅ‘ๆŽงๅˆถ

โ”œโ”€โ–บ rust-performance โ†’ ๆ€ง่ƒฝไผ˜ๅŒ–

โ””โ”€โ–บ rust-async โ†’ ๅผ‚ๆญฅ้€šไฟก

```

More from this repository10

๐ŸŽฏ
rust-skill๐ŸŽฏSkill

Provides expert Rust programming assistance, solving compilation errors, ownership, lifetimes, concurrency, and performance optimization challenges.

๐ŸŽฏ
rust-skill-index๐ŸŽฏSkill

Indexes and provides quick navigation for 35 Rust skills across core, advanced, and expert categories.

๐ŸŽฏ
rust-error๐ŸŽฏSkill

Expertly handles Rust error scenarios by providing comprehensive guidance on Result, Option, error types, propagation, and panic strategies.

๐ŸŽฏ
rust-async๐ŸŽฏSkill

Handles advanced Rust async patterns like Stream processing, backpressure, select, cancellation, and concurrency management with Tokio.

๐ŸŽฏ
rust-concurrency๐ŸŽฏSkill

Expertly handles Rust concurrency challenges by safely managing threads, async operations, and preventing race conditions and deadlocks.

๐ŸŽฏ
rust-anti-pattern๐ŸŽฏSkill

Identifies and helps refactor Rust anti-patterns like unnecessary cloning, unwrapping, and inefficient iterations to improve code quality.

๐ŸŽฏ
rust-web๐ŸŽฏSkill

Builds robust Rust web services using frameworks like axum and actix, handling routing, database interactions, and API design with type-safe, performant code.

๐ŸŽฏ
rust-ownership๐ŸŽฏSkill

Skill

๐ŸŽฏ
rust-zero-cost๐ŸŽฏSkill

Analyzes and optimizes Rust generic abstractions and dispatch strategies for zero-cost performance and compile-time flexibility.

๐ŸŽฏ
rust-mutability๐ŸŽฏSkill

Expertly manages Rust mutability challenges, resolving borrowing conflicts and providing safe interior mutability strategies across different contexts.