From 8f8e38e72e8513db27dfb3d60e33f859f73831f5 Mon Sep 17 00:00:00 2001 From: Yan0613 <1020303879@qq.com> Date: Thu, 25 Jan 2024 15:15:49 +0800 Subject: [PATCH] UPDATE-READEME --- README.md | 3 +++ ...273\344\275\223\346\236\266\346\236\204.png" | Bin 0 -> 16049 bytes 2 files changed, 3 insertions(+) create mode 100644 "images/\346\200\273\344\275\223\346\236\266\346\236\204.png" diff --git a/README.md b/README.md index 97c8c8a..47dc3f8 100644 --- a/README.md +++ b/README.md @@ -84,3 +84,6 @@ persister.go , 一个简易版的持久化器,用于保存Raft协议状态和K raft.go , Raft 共识算法的主要逻辑实现。 raft_test.go , 测试用例。 util.go , 一些工具函数。 + +## Lab3 +![Alt text](images/总体架构.png) \ No newline at end of file diff --git "a/images/\346\200\273\344\275\223\346\236\266\346\236\204.png" "b/images/\346\200\273\344\275\223\346\236\266\346\236\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..9f507fe6d0e73711e5a91606e507b18f09e8c21b GIT binary patch literal 16049 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 literal 0 HcmV?d00001