design-doc
npx skills add https://github.com/baoruxing/code-common --skill design-doc
Agent 安装分布
Skill 文档
è®¾è®¡ææ¡£çæå¨
æ ¹æ®éæ±ææ¡£èªå¨çæç¬¦åå ¬å¸ãERDè§èææ¡£1.4ãæ åç宿´è®¾è®¡ææ¡£ã
å¿«éå¼å§
ä½¿ç¨æ¹å¼
èªå¨è§¦åï¼ å½ç¨æ·è¦æ±çææ¶æè®¾è®¡ææ¡£æè¯¦ç»è®¾è®¡ææ¡£æ¶ï¼èªå¨çæé å¥çè®¾è®¡ææ¡£ã
æå¨è§¦åï¼ ç¨æ·æä¾éæ±ææ¡£ï¼æç¡®è¦æ±çæè®¾è®¡ææ¡£ã
è¾å
¥: éæ±ææ¡£ (PRD)
â
é
ç½®: éæ©æ°æ®åºç±»å (MySQL/PostgreSQL) + å¼åè¯è¨ (Java/Python)
â
åæ: æåä¸å¡å®ä½ãæµç¨ãæ¥å£ãæ§è½è¦æ±ç
â
è¾åº: 宿´è®¾è®¡ææ¡£ï¼11ä¸ªç« èï¼
é ç½®é项
çæè®¾è®¡ææ¡£åï¼éè¦ç¡®è®¤ä»¥ä¸é ç½®ï¼
| é 置项 | é项 | 说æ |
|---|---|---|
| æ°æ®åºç±»å | MySQL / PostgreSQL | å½±åè¡¨ç»æDDLè¯æ³åæ°æ®ç±»åå®ä¹ |
| å¼åè¯è¨ | Java / Python | 影忥å£ç¤ºä¾ä»£ç åæ³¨è§£é£æ ¼ |
é»è®¤é ç½®ï¼ æ°æ®åº = MySQLï¼å¼åè¯è¨ = Java
妿ªæå®ï¼ä½¿ç¨é»è®¤é ç½®çæææ¡£ã
ææ¡£ç»æ
éµå¾ªå ¬å¸ãERDè§èææ¡£1.4ãæ åï¼è®¾è®¡ææ¡£å å«ä»¥ä¸ç« èï¼
| ç« è | 说æ | å¿ å¡« |
|---|---|---|
| 1. éæ±ææ¡£å°å | PRDææ¡£é¾æ¥æç¦ é龿¥ | æ¯ |
| 2. ææ¯æ¹æ¡è®¾è®¡å¾ | æ¶æå¾ãææ¯æµç¨å¾ãç³»ç»æ¶åºå¾ | æ¯ |
| 3. æ°æ®ç»æè®¾è®¡ | ERDå¾ãDBè¡¨ç»æè®¾è®¡ | æ¯ |
| 4. æ¥å£è®¾è®¡ | æ¥å£ææ¡£ãç¬¬ä¸æ¹æ¥å£ä¾èµ | æ¯ |
| 5. ç¸å ³æ§è½è¯ä¼° | æ§è½ç®æ ãèµæºè¯ä¼° | æ¯ |
| 6. å¼å¸¸è®¾è®¡ | æ¥è¦ãéè¯ãå¹çãé级ç | æ¯ |
| 7. ç°åº¦æ¹æ¡ | ç°åº¦è®¾è®¡å¾ï¼å¯éï¼ | æ¡ä»¶å¿ å¡« |
| 8. åå§åæ°æ® | åå§åèå´ãæ°æ®å¤çæ¹æ¡ | æ¡ä»¶å¿ å¡« |
| 9. å®å ¨åé£é©è¯ä¼° | é£é©ç¹ãå ¼å®¹æ§ãæ°æ®è±æ | æ¨è |
| 10. æ¯å¦å¢è®¾çç | ççæ°æ®è¿½è¸ªè®¾ç½® | æ¨è |
| 11. å·¥ä½éè¯ä¼° | å¼åæ¶é´ãèè°æ¶é´ãæµè¯æ¶é´ | æ¯ |
1. éæ±ææ¡£å°å
1.1 æ ¼å¼è§è
æä¾éæ±ææ¡£ç访é®å°åï¼å¯ä»¥æ¯ï¼
| ç±»å | æ ¼å¼ç¤ºä¾ | 说æ |
|---|---|---|
| ææ¡£URL | http://wiki.example.com/prd/xxx |
å é¨Wikiå°å |
| ç¦ éå°å | https://zentao.example.com/prd-view-xxx.html |
ç¦ ééæ±å°å |
| ææ¡£è·¯å¾ | docs/prd/项ç®éæ±ææ¡£.md |
ç¸å¯¹è·¯å¾ |
1.2 示ä¾
## 1. éæ±ææ¡£å°å
- **PRDææ¡£**: http://wiki.example.com/prd/订å管çç³»ç»
- **ç¦
éå°å**: https://zentao.example.com/prd-view-1001.html
- **æ¬å°ææ¡£**: `../../docs/prd/订å管çç³»ç»_v1.0.md`
2. ææ¯æ¹æ¡è®¾è®¡å¾
2.1 æ¶æå¾
ä½¿ç¨ Mermaid Flowchart ç»å¶ç³»ç»å屿¶æå¾ã
2.1.1 å屿¶æå¾
flowchart TB
subgraph "å端å±"
Web[Webå端<br/>Vue3 + ElementPlus]
Mobile[ç§»å¨ç«¯<br/>UniApp]
end
subgraph "ç½å
³å±"
Gateway[APIç½å
³<br/>Spring Cloud Gateway]
end
subgraph "åºç¨å±"
UserService[ç¨æ·æå¡<br/>user-service]
OrderService[订åæå¡<br/>order-service]
PaymentService[æ¯ä»æå¡<br/>payment-service]
end
subgraph "æ°æ®å±"
DB[(MySQLæ°æ®åº)]
Cache[(Redisç¼å)]
MQ[(RabbitMQæ¶æ¯éå)]
end
Web --> Gateway
Mobile --> Gateway
Gateway --> UserService
Gateway --> OrderService
Gateway --> PaymentService
UserService --> DB
OrderService --> DB
PaymentService --> DB
UserService --> Cache
OrderService --> Cache
OrderService --> MQ
2.1.2 å¾®æå¡æ¶æå¾
flowchart LR
subgraph "æ¥å
¥å±"
LB[è´è½½åè¡¡]
end
subgraph "ç½å
³å±"
GW[APIç½å
³]
end
subgraph "æå¡å±"
S1[ç¨æ·æå¡]
S2[订åæå¡]
S3[ååæå¡]
S4[æ¯ä»æå¡]
end
subgraph "åºç¡è®¾æ½"
Nacos[注åä¸å¿]
DB[(æ°æ®åº)]
Redis[(ç¼å)]
end
LB --> GW
GW --> S1
GW --> S2
GW --> S3
GW --> S4
S1 --> Nacos
S2 --> Nacos
S3 --> Nacos
S4 --> Nacos
S1 --> DB
S2 --> DB
S3 --> DB
S4 --> DB
S1 --> Redis
S2 --> Redis
S3 --> Redis
2.2 ææ¯æµç¨å¾
ä½¿ç¨ Mermaid Flowchart ç»å¶å模åå çä¸å¡æµç¨å¾ã
flowchart TD
A[ç¨æ·ç»å½] --> B{éªè¯ç¨æ·åå¯ç }
B -->|失败| C[è¿åé误信æ¯]
B -->|æå| D[çæToken]
D --> E[ç¼åå°Redis]
E --> F[è¿åç»å½ç»æ]
2.3 ç³»ç»æ¶åºå¾
ä½¿ç¨ Mermaid Sequence Diagram ç»å¶ç³»ç»æ¶åºå¾ã
2.3.1 ç¨æ·ç»å½æ¶åºå¾
sequenceDiagram
actor User as ç¨æ·
participant Frontend as å端
participant Gateway as APIç½å
³
participant UserService as ç¨æ·æå¡
participant DB as æ°æ®åº
participant Redis as ç¼å
User->>Frontend: è¾å
¥ç¨æ·åå¯ç
Frontend->>Gateway: POST /api/v1/auth/login
Gateway->>UserService: 转åç»å½è¯·æ±
UserService->>DB: æ¥è¯¢ç¨æ·ä¿¡æ¯
DB-->>UserService: è¿åç¨æ·æ°æ®
UserService->>UserService: éªè¯å¯ç åå¸
UserService->>Redis: çæTokenå¹¶ç¼å
UserService-->>Gateway: è¿åToken
Gateway-->>Frontend: è¿åç»å½ç»æ
Frontend-->>User: ç»å½æåæç¤º
2.3.2 订åå建æ¶åºå¾
sequenceDiagram
actor User as ç¨æ·
participant OrderService as 订åæå¡
participant StockService as åºåæå¡
participant PaymentService as æ¯ä»æå¡
participant MQ as æ¶æ¯éå
User->>OrderService: å建订å请æ±
OrderService->>StockService: æ£ååºå
StockService-->>OrderService: æ£åæå
OrderService->>OrderService: å建订åè®°å½
OrderService->>MQ: åé订åå建äºä»¶
OrderService->>PaymentService: åèµ·æ¯ä»
PaymentService-->>User: 跳转æ¯ä»é¡µé¢
3. æ°æ®ç»æè®¾è®¡
3.1 ERDå¾
ä½¿ç¨ Mermaid ER Diagram ç»å¶å®ä½å ³ç³»å¾ã
erDiagram
USERS ||--o{ ORDERS : places
USERS ||--o{ USER_ROLES : has
ORDERS ||--|{ ORDER_ITEMS : contains
PRODUCTS ||--o{ ORDER_ITEMS : in
ORDERS }|--|| PAYMENTS : paid_by
PRODUCTS ||--o{ SKU_STOCK : has
USERS {
bigint id PK
varchar username UK
varchar email UK
varchar password_hash
varchar phone
tinyint status
timestamp created_at
timestamp updated_at
}
ORDERS {
bigint id PK
bigint user_id FK
varchar order_no UK
decimal total_amount
tinyint status
timestamp created_at
timestamp updated_at
}
ORDER_ITEMS {
bigint id PK
bigint order_id FK
bigint product_id FK
bigint sku_id FK
int quantity
decimal unit_price
decimal total_price
}
PRODUCTS {
bigint id PK
varchar name
decimal price
tinyint status
timestamp created_at
}
SKU_STOCK {
bigint id PK
bigint product_id FK
bigint sku_id FK
int stock
int frozen_stock
}
PAYMENTS {
bigint id PK
bigint order_id FK
varchar payment_no
varchar payment_method
decimal amount
tinyint status
timestamp paid_at
}
USER_ROLES {
bigint id PK
bigint user_id FK
bigint role_id FK
timestamp created_at
}
3.2 DBè¡¨ç»æè®¾è®¡
åèDBAç»æè®¾è®¡è§èï¼è¯¦ç»å®ä¹æ¯ä¸ªè¡¨çç»æã
3.2.1 æ°æ®åºç±»åéæ©
æ ¹æ®é¡¹ç®é ç½®éæ©ç¸åºçæ°æ®åºè¯æ³ï¼
MySQLè¯æ³ (é»è®¤)
| æ°æ®ç±»å | 说æ | ç¤ºä¾ |
|---|---|---|
| BIGINT | å¤§æ´æ° | id BIGINT AUTO_INCREMENT |
| VARCHAR | åé¿å符串 | username VARCHAR(50) |
| DECIMAL | 精确æ°å¼ | amount DECIMAL(10,2) |
| TINYINT | å¾®æ´æ° | status TINYINT |
| TIMESTAMP | æ¶é´æ³ | created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
PostgreSQLè¯æ³
| æ°æ®ç±»å | 说æ | ç¤ºä¾ |
|---|---|---|
| BIGSERIAL | èªå¢å¤§æ´æ° | id BIGSERIAL PRIMARY KEY |
| VARCHAR | åé¿å符串 | username VARCHAR(50) |
| NUMERIC | 精确æ°å¼ | amount NUMERIC(10,2) |
| SMALLINT | å°æ´æ° | status SMALLINT |
| TIMESTAMPTZ | 带æ¶åºæ¶é´æ³ | created_at TIMESTAMPTZ DEFAULT NOW() |
3.2.2 ç¨æ·è¡¨ (users) – MySQL
表说æï¼ åå¨ç³»ç»ç¨æ·åºæ¬ä¿¡æ¯
| åæ®µå | ç±»å | é¿åº¦ | å 许NULL | é»è®¤å¼ | ç´¢å¼ | 说æ |
|---|---|---|---|---|---|---|
| id | BIGINT | – | NO | AUTO_INCREMENT | PK | 主é®ID |
| username | VARCHAR | 50 | NO | – | UK | ç¨æ·å |
| VARCHAR | 100 | NO | – | UK | é®ç®± | |
| password_hash | VARCHAR | 255 | NO | – | – | å¯ç åå¸ |
| phone | VARCHAR | 20 | YES | – | IDX | ææºå· |
| status | TINYINT | – | NO | 0 | IDX | ç¶æï¼0-æ£å¸¸ 1-ç¦ç¨ |
| created_at | TIMESTAMP | – | NO | CURRENT_TIMESTAMP | IDX | å建æ¶é´ |
| updated_at | TIMESTAMP | – | NO | CURRENT_TIMESTAMP ON UPDATE | – | æ´æ°æ¶é´ |
ç´¢å¼è®¾è®¡ï¼
-- 主é®
PRIMARY KEY (id)
-- å¯ä¸ç´¢å¼
CREATE UNIQUE INDEX uk_username ON users(username);
CREATE UNIQUE INDEX uk_email ON users(email);
-- æ®éç´¢å¼
CREATE INDEX idx_phone ON users(phone);
CREATE INDEX idx_status ON users(status);
CREATE INDEX idx_created_at ON users(created_at);
3.2.3 ç¨æ·è¡¨ (users) – PostgreSQL
表说æï¼ åå¨ç³»ç»ç¨æ·åºæ¬ä¿¡æ¯
| åæ®µå | ç±»å | é¿åº¦ | å 许NULL | é»è®¤å¼ | ç´¢å¼ | 说æ |
|---|---|---|---|---|---|---|
| id | BIGSERIAL | – | NO | NEXTVAL | PK | 主é®ID |
| username | VARCHAR | 50 | NO | – | UK | ç¨æ·å |
| VARCHAR | 100 | NO | – | UK | é®ç®± | |
| password_hash | VARCHAR | 255 | NO | – | – | å¯ç åå¸ |
| phone | VARCHAR | 20 | YES | – | IDX | ææºå· |
| status | SMALLINT | – | NO | 0 | IDX | ç¶æï¼0-æ£å¸¸ 1-ç¦ç¨ |
| created_at | TIMESTAMPTZ | – | NO | NOW() | IDX | å建æ¶é´ |
| updated_at | TIMESTAMPTZ | – | NO | NOW() | – | æ´æ°æ¶é´ |
DDLè¯å¥ï¼
-- 建表è¯å¥
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
phone VARCHAR(20),
status SMALLINT NOT NULL DEFAULT 0,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- ç´¢å¼
CREATE INDEX idx_users_phone ON users(phone);
CREATE INDEX idx_users_status ON users(status);
CREATE INDEX idx_users_created_at ON users(created_at);
-- èªå¨æ´æ°updated_at触åå¨
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
3.2.4 订å表 (orders) – MySQL
表说æï¼ åå¨è®¢ååºæ¬ä¿¡æ¯
| åæ®µå | ç±»å | é¿åº¦ | å 许NULL | é»è®¤å¼ | ç´¢å¼ | 说æ |
|---|---|---|---|---|---|---|
| id | BIGINT | – | NO | AUTO_INCREMENT | PK | 主é®ID |
| user_id | BIGINT | – | NO | – | FK, IDX | ç¨æ·ID |
| order_no | VARCHAR | 32 | NO | – | UK | 订åå· |
| total_amount | DECIMAL | 10,2 | NO | – | – | è®¢åæ»éé¢ |
| status | TINYINT | – | NO | 0 | IDX | ç¶æï¼0-å¾ æ¯ä» 1-å·²æ¯ä» 2-已忶 |
| created_at | TIMESTAMP | – | NO | CURRENT_TIMESTAMP | IDX | å建æ¶é´ |
| updated_at | TIMESTAMP | – | NO | CURRENT_TIMESTAMP ON UPDATE | – | æ´æ°æ¶é´ |
ç´¢å¼è®¾è®¡ï¼
-- 主é®
PRIMARY KEY (id)
-- å¯ä¸ç´¢å¼
CREATE UNIQUE INDEX uk_order_no ON orders(order_no);
-- æ®éç´¢å¼
CREATE INDEX idx_user_id ON orders(user_id);
CREATE INDEX idx_status ON orders(status);
CREATE INDEX idx_created_at ON orders(created_at);
-- å¤åç´¢å¼
CREATE INDEX idx_user_status ON orders(user_id, status);
3.3 设计注æäºé¡¹
åèDBAç»æè®¾è®¡è§èï¼
-
ä¸å¯è¿è¡¨æ¥è¯¢
- é¿å è·¨åºè¿è¡¨æ¥è¯¢
- å¿ è¦æ¶ä½¿ç¨åºç¨å±èå
-
ç´¢å¼å建
- å¤é®å段èªå¨å建索å¼
- é¢ç¹æ¥è¯¢å段å建索å¼
- å¯ä¸çº¦æå段å建å¯ä¸ç´¢å¼
-
åæ®µé»è®¤å¼
- æ°å¼ç±»åé»è®¤å¼ï¼0
- å符串类åé»è®¤å¼ï¼”
- ç¶æåæ®µé»è®¤å¼æ ¹æ®ä¸å¡å®ä¹
-
åæ®µå½åè§è
- 使ç¨ä¸å线å½åæ³ï¼
user_id,order_no - å¸å°ç±»åä½¿ç¨ tinyint(1)ï¼0-å¦ 1-æ¯
- æ¶é´å段使ç¨ï¼created_at, updated_at, deleted_at
- 使ç¨ä¸å线å½åæ³ï¼
4. æ¥å£è®¾è®¡
4.1 å¼åè¯è¨éæ©
æ ¹æ®é¡¹ç®é ç½®éæ©ç¸åºçå¼åè¯è¨é£æ ¼ï¼
Java飿 ¼ (é»è®¤)
| ç¹æ§ | 说æ | ç¤ºä¾ |
|---|---|---|
| æ³¨è§£é£æ ¼ | Spring注解 | @RestController, @RequestMapping |
| å½åè§è | 驼峰å½å | userName, orderNo |
| ååºæ ¼å¼ | ç»ä¸Result | Result<T> å
è£
è¿åæ°æ® |
| åæ°æ ¡éª | JSR-303 | @NotNull, @Valid |
Python飿 ¼
| ç¹æ§ | 说æ | ç¤ºä¾ |
|---|---|---|
| æ¡æ¶ | FastAPI/Flask | @app.get(), @app.post() |
| å½åè§è | ä¸å线å½å | user_name, order_no |
| ååºæ ¼å¼ | JSONååº | ç´æ¥è¿ådictæPydantic模å |
| åæ°æ ¡éª | Pydantic | Field(), validator() |
4.2 æ¥å£ææ¡£
éµå¾ªRTæ¥å£ææ¡£è§èã
4.2.1 RESTful API è§è
åºç¡URLï¼ https://api.example.com/v1
éç¨ååºæ ¼å¼ï¼
{
"code": 0,
"message": "success",
"data": {},
"request_id": "req-123456789",
"timestamp": "2026-02-25T14:32:00Z"
}
é误ç è§èï¼
| é误ç | 说æ |
|---|---|
| 0 | æå |
| 1000-1999 | 客æ·ç«¯é误 |
| 2000-2999 | è®¤è¯ææé误 |
| 3000-3999 | èµæºä¸åå¨ |
| 4000-4999 | ä¸å¡é误 |
| 5000-5999 | æå¡ç«¯é误 |
4.2.2 æ¥å£å®ä¹ç¤ºä¾
ç¨æ·ç»å½æ¥å£
POST /api/v1/auth/login
请æ±å¤´ï¼
Content-Type: application/json
请æ±ä½ï¼
{
"username": "user@example.com",
"password": "password123"
}
ååºï¼
{
"code": 0,
"message": "success",
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"user": {
"id": 1,
"username": "user",
"email": "user@example.com",
"phone": "13800138000"
}
},
"request_id": "req-123456789",
"timestamp": "2026-02-25T14:32:00Z"
}
4.2.3 代ç å®ç°ç¤ºä¾
Javaå®ç° (Spring Boot)
@RestController
@RequestMapping("/api/v1/auth")
public class AuthController {
@Autowired
private AuthService authService;
@PostMapping("/login")
public Result<LoginResponse> login(@Valid @RequestBody LoginRequest request) {
LoginResponse response = authService.login(request);
return Result.success(response);
}
}
// 请æ±DTO
@Data
public class LoginRequest {
@NotBlank(message = "ç¨æ·åä¸è½ä¸ºç©º")
private String username;
@NotBlank(message = "å¯ç ä¸è½ä¸ºç©º")
private String password;
}
// ååºDTO
@Data
public class LoginResponse {
private String accessToken;
private String tokenType;
private Long expiresIn;
private UserInfo user;
}
Pythonå®ç° (FastAPI)
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel, Field, validator
router = APIRouter(prefix="/api/v1/auth", tags=["认è¯"])
class LoginRequest(BaseModel):
username: str = Field(..., description="ç¨æ·å")
password: str = Field(..., description="å¯ç ")
@validator('username')
def username_not_empty(cls, v):
if not v:
raise ValueError('ç¨æ·åä¸è½ä¸ºç©º')
return v
class LoginResponse(BaseModel):
access_token: str
token_type: str = "Bearer"
expires_in: int
user: UserInfo
@router.post("/login", response_model=LoginResponse)
async def login(request: LoginRequest):
"""ç¨æ·ç»å½"""
response = await auth_service.login(request)
return response
4.3 ä¾èµç¬¬ä¸æ¹æ¥å£
è®°å½é¡¹ç®ä¾èµçç¬¬ä¸æ¹æ¥å£ã
4.3.1 ç¬¬ä¸æ¹æ¥å£å表
| æ¥å£åç§° | æä¾æ¹ | ç¨é | ææ¡£å°å |
|---|---|---|---|
| æ¯ä»æ¥å£ | æ¯ä»å®/微信 | æ¯ä»å¤ç | https://docs.alipay.com/ |
| çä¿¡æ¥å£ | é¿éäº | çä¿¡éªè¯ç | https://help.aliyun.com/ |
| ç©æµæ¥å£ | 顺丰 | ç©æµæ¥è¯¢ | https://sf-express.com/ |
4.3.2 ç¬¬ä¸æ¹æ¥å£ç¤ºä¾
æ¯ä»å®æ¯ä»æ¥å£
POST https://openapi.alipay.com/gateway.do
请æ±åæ°ï¼
{
"app_id": "2021001234567890",
"method": "alipay.trade.page.pay",
"charset": "utf-8",
"sign_type": "RSA2",
"timestamp": "2026-02-25 14:32:00",
"version": "1.0",
"biz_content": {
"out_trade_no": "ORDER_20260225001",
"total_amount": "88.88",
"subject": "è®¢åæ é¢"
}
}
5. ç¸å ³æ§è½è¯ä¼°
5.1 æ§è½ç®æ è¯ä¼°
5.1.1 æ§è½ææ å®ä¹
| ææ | 计ç®å ¬å¼ | ç¤ºä¾ |
|---|---|---|
| æ¥å¹³å请æ±é | å®é ç»è®¡æ°æ®æé¢ä¼° | 100,000次/天 |
| å¹³åQPS | æ¥å¹³å请æ±é / 40,000ç§ | 100,000 / 40,000 = 2.5 QPS |
| å³°å¼QPS | å¹³åQPS à 2~4å | 2.5 à 3 = 7.5 QPS |
说æï¼ 24å°æ¶å为86,400ç§ï¼åç¨æ·æ´»è·æ¶é´ä¸ºç½å¤©ç®ï¼é¤ä»¥2å¾40,000ç§ã
5.1.2 ååºæ¶é´è¦æ±
| æ¥å£ç±»å | ç®æ ååºæ¶é´ | 说æ |
|---|---|---|
| é¦é¡µå è½½ | < 2ç§ | ç¨æ·æç¥ |
| APIæ¥å£ | P95 < 200ms | æ¥å£ååº |
| æ¥è¯¢æ¥å£ | P95 < 500ms | æ°æ®æ¥è¯¢ |
5.2 æ§è½èµæºè¯ä¼°
5.2.1 åæºæ§è½è¯ä¼°
| èµæºç±»å | åæºå¹¶åé | åæºå®¹é | é¢ä¼°æ°é |
|---|---|---|---|
| åºç¨æå¡å¨ | 500å¹¶å | 1000 QPS | æ ¹æ®å³°å¼QPSè®¡ç® |
| MySQL | 1000å¹¶å | 5000 QPS | æ ¹æ®è¯»åæ¯ä¾è®¡ç® |
| Redis | 10000å¹¶å | 50000 QPS | æ ¹æ®ç¼åå½ä¸çè®¡ç® |
| RabbitMQ | 5000å¹¶å | 10000 QPS | æ ¹æ®æ¶æ¯éè®¡ç® |
5.2.2 èµæºé¢ä¼°
| èµæºç±»å | é ç½® | æ°é | 说æ |
|---|---|---|---|
| åºç¨æå¡å¨ | 4æ ¸8G | 2å° | é«å¯ç¨é¨ç½² |
| MySQL | 8æ ¸16G | 1主1ä» | 读åå离 |
| Redis | 4æ ¸8G | 1主2ä» | å¨å µæ¨¡å¼ |
| RabbitMQ | 4æ ¸8G | 2å° | éåéå |
6. å¼å¸¸è®¾è®¡
å¼å¸¸è®¾è®¡é常éè¦ï¼çº¿ä¸é®é¢å¤§é¨å齿¯å¼å¸¸æ åµå¯¼è´ã
6.1 æ¥è¦æºå¶
| çæ§é¡¹ | éå¼ | æ¥è¦æ¹å¼ | è´è´£äºº |
|---|---|---|---|
| æ¥å£é误ç | > 5% | çç+éé | å¼å |
| ååºæ¶é´ | P95 > 1s | çç+éé | å¼å |
| QPSå¼å¸¸ | ä¸é50% | çç+çµè¯ | è¿ç»´ |
| æ°æ®åºè¿æ¥ | 使ç¨ç > 80% | çç+éé | DBA |
6.2 å¼å¸¸éè¯æºå¶
| åºæ¯ | éè¯çç¥ | æå¤§éè¯æ¬¡æ° | éé¿çç¥ |
|---|---|---|---|
| æ¥å£è°ç¨å¤±è´¥ | ææ°éé¿ | 3次 | 1s, 2s, 4s |
| æ°æ®åºè¿æ¥å¤±è´¥ | ç«å³éè¯ | 2次 | 100ms, 200ms |
| æ¶æ¯éååé失败 | å»¶è¿éè¯ | 5次 | ææ°éé¿ |
éè¯å¹³å°ï¼ 使ç¨å ¬å¸ç»ä¸éè¯å¹³å°æèªå»ºéè¯æºå¶ã
6.3 æ¥å£æå¡å¹ç
| æ¥å£ç±»å | å¹çæ¹æ¡ | å®ç°æ¹å¼ |
|---|---|---|
| å建订å | å¹çToken | Redisåå¨Tokenï¼æ¶è´¹å³å é¤ |
| æ¯ä»æ¥å£ | 订åå·å¯ä¸æ§ | æ°æ®åºå¯ä¸çº¦æ |
| åºåæ£å | åå¸å¼é | Redisåå¸å¼é |
6.4 ä¸å¡é级æå¡
| åºæ¯ | éçº§æ¹æ¡ | è§¦åæ¡ä»¶ |
|---|---|---|
| æ¨èæå¡ | è¿åé»è®¤æ¨è | ååºæ¶é´ > 500ms |
| æç´¢æå¡ | éçº§ä¸ºæ°æ®åºæç´¢ | æç´¢æå¡å¼å¸¸ |
| ç¬¬ä¸æ¹æ¥å£ | 使ç¨å¤ç¨æ¥å£ | 主æ¥å£è¿ç»å¤±è´¥ |
6.5 å ¼å®¹å岿°æ®
| åºæ¯ | å ¼å®¹æ¹æ¡ | å®ç°æ¹å¼ |
|---|---|---|
| æ¥å£åæ®µåæ´ | æ°æ§å段并å | åæ¶è¿åæ°æ§å段 |
| æä¸¾å¼åæ´ | æ å°è½¬æ¢ | ç»´æ¤æ°æ§å¼æ å°è¡¨ |
| è¡¨ç»æåæ´ | è§å¾å ¼å®¹ | åå»ºå ¼å®¹è§å¾ |
6.6 å¼å¸¸è®¾è®¡å¾
flowchart TD
A[请æ±å°è¾¾] --> B{æ£å¸¸å¤ç?}
B -->|æ¯| C[æ£å¸¸ååº]
B -->|å¦| D{å¼å¸¸ç±»å}
D -->|è¶
æ¶| E[è®°å½æ¥å¿]
D -->|åæ°é误| F[è¿ååæ°é误]
D -->|ä¸å¡å¼å¸¸| G[è¿åä¸å¡é误ç ]
D -->|ç³»ç»å¼å¸¸| H[è§¦åæ¥è¦]
E --> I{éè¦éè¯?}
I -->|æ¯| J[æ§è¡éè¯]
I -->|å¦| K[è¿åè¶
æ¶é误]
J --> L{éè¯æå?}
L -->|æ¯| C
L -->|å¦| M[è¿åéçº§ç»æ]
7. ç°åº¦æ¹æ¡
7.1 ç°åº¦æ¹æ¡è®¾è®¡å¾
flowchart LR
subgraph "ç°åº¦å"
A[å
¨éç¨æ·] --> B[æ§çæ¬æå¡]
end
subgraph "ç°åº¦ä¸"
A --> C{ç°åº¦è§å}
C -->|ç°åº¦ç¨æ·| D[æ°çæ¬æå¡]
C -->|æ®éç¨æ·| B
end
subgraph "ç°åº¦å"
A --> D
end
7.2 ç°åº¦çç¥
| ç°åº¦é¶æ®µ | ç°åº¦æ¯ä¾ | ç°åº¦è§å | éªè¯ææ |
|---|---|---|---|
| 第ä¸é¶æ®µ | 5% | æç¨æ·IDåå¸ | é误çãååºæ¶é´ |
| 第äºé¶æ®µ | 20% | æç¨æ·IDåå¸ | é误çãååºæ¶é´ |
| 第ä¸é¶æ®µ | 50% | æç¨æ·IDåå¸ | é误çãååºæ¶é´ |
| 第åé¶æ®µ | 100% | å ¨é | æ£å¸¸è¿è¡ |
7.3 åæ»æ¹æ¡
| è§¦åæ¡ä»¶ | åæ»æä½ | åæ»æ¶é´ |
|---|---|---|
| é误ç > 5% | åæ¢åæ§çæ¬ | < 5åé |
| ååºæ¶é´ P95 > 2s | åæ¢åæ§çæ¬ | < 5åé |
| æ°æ®å¼å¸¸ | ç«å³åæ»å¹¶æ¥è¦ | < 1åé |
8. åå§åæ°æ®
8.1 åå§åèå´
| æ°æ®ç±»å | 说æ | ç¤ºä¾ |
|---|---|---|
| åºç¡é ç½®æ°æ® | ç³»ç»å¯å¨å¿ éçé ç½® | åå ¸æ°æ®ãæä¸¾å¼ |
| æµè¯æ°æ® | å¼åæµè¯ç¨æ°æ® | æµè¯ç¨æ·ãæµè¯åå |
| å岿°æ® | 仿§ç³»ç»è¿ç§»çæ°æ® | åå²è®¢åæ°æ® |
8.2 æ°æ®å¤çæ¹æ¡
8.2.1 æ°æ®å¯¼å ¥æµç¨
sequenceDiagram
actor å¼å as å¼å人å
participant æ§ç³»ç» as æ§ç³»ç»æ°æ®åº
participant ETL as ETLå·¥å
·
participant æ°ç³»ç» as æ°ç³»ç»æ°æ®åº
å¼å->>æ§ç³»ç»: å¯¼åºæ°æ®
æ§ç³»ç»-->>ETL: CSV/Excelæä»¶
ETL->>ETL: æ°æ®æ¸
æ´è½¬æ¢
ETL->>æ°ç³»ç»: 导å
¥æ°æ®
æ°ç³»ç»-->>å¼å: 导å
¥ç»æç¡®è®¤
8.2.2 æ°æ®æ å°è¡¨
| æ§å段 | æ°å段 | 转æ¢è§å | ç¤ºä¾ |
|---|---|---|---|
| user_name | username | ç´æ¥æ å° | “å¼ ä¸” â “å¼ ä¸” |
| user_type | role | æä¸¾æ å° | “1” â “admin” |
| create_time | created_at | æ ¼å¼è½¬æ¢ | “2026-02-25 14:32:00” |
9. å®å ¨åé£é©è¯ä¼°
9.1 é£é©ç¹è¯å«
| é£é©ç±»å | é£é©æè¿° | é£é©ç级 | åºå¯¹æªæ½ |
|---|---|---|---|
| SQLæ³¨å ¥ | è¾å ¥æªè¿æ»¤å¯¼è´SQLæ³¨å ¥ | é« | åæ°åæ¥è¯¢ãè¾å ¥æ ¡éª |
| XSSæ»å» | å端æªè½¬ä¹å¯¼è´XSS | ä¸ | è¾åºè½¬ä¹ãCSPçç¥ |
| æ°æ®æ³é² | æææ°æ®ææåå¨ | é« | å å¯åå¨ãè±æå±ç¤º |
| è¶æè®¿é® | æéæ ¡éªä¸ä¸¥æ ¼ | ä¸ | RBACæéæ§å¶ |
9.2 å ¼å®¹æ§åæ
| åæ´ç¹ | å½±åèå´ | å ¼å®¹æ§æ¹æ¡ |
|---|---|---|
| æ¥å£å段æ°å¢ | å端è°ç¨æ¹ | æ°æ§å段并å |
| æ¥å£å段å é¤ | å端è°ç¨æ¹ | æ 记为deprecatedåä¸çº¿ |
| æ°æ®ç±»ååæ´ | æ°æ®åå¨ | æ°æ®è¿ç§»èæ¬ |
| æ¥å£è·¯å¾åæ´ | è°ç¨æ¹ | ä¿çæ§è·¯å¾ï¼éå®åå°æ°è·¯å¾ |
9.3 æ°æ®è±æ
| æ°æ®ç±»å | è±æè§å | ç¤ºä¾ |
|---|---|---|
| ææºå· | ä¿çå3å4ä½ | 138****8000 |
| 身份è¯å· | ä¿çå6å4ä½ | 110101********1234 |
| é¶è¡å¡å· | ä¿çå4ä½ | **** **** **** 1234 |
| é®ç®± | ä¿çé¦å°¾å符 | a***@example.com |
确认æ¹å¼ï¼ ä¸å®å ¨ç»äººåç¡®è®¤è±ææ¹æ¡
10. æ¯å¦å¢è®¾çç
10.1 ççæ°æ®è¿½è¸ª
| 追踪类å | 追踪å 容 | 追踪ç®ç |
|---|---|---|
| æ¥å£è°ç¨ | 请æ±åæ°ãååºç»æãèæ¶ | é®é¢ææ¥ãæ§è½åæ |
| å¼å¸¸æ¥å¿ | å¼å¸¸å æ ãä¸å¡ä¸ä¸æ | æ éå®ä½ |
| ä¸å¡æ¥å¿ | å ³é®ä¸å¡æä½ | 审计追溯 |
10.2 ççé ç½®
| é 置项 | é ç½®å¼ | 说æ |
|---|---|---|
| éæ ·ç | 100% | å¼åç¯å¢100%ï¼ç产ç¯å¢10% |
| æ¥å¿çº§å« | INFO | ç产ç¯å¢ä½¿ç¨INFOçº§å« |
| æ¥å¿ä¿çæ¶é´ | 30天 | æ ¹æ®åè§è¦æ±è°æ´ |
11. å·¥ä½éè¯ä¼°
11.1 è¯ä¼°æ¨¡æ¿
| 模å/æ¥å£ | å¼åæ¶é´ | èè°æ¶é´ | æµè¯æ¶é´ | æ»è®¡ | è´è´£äºº |
|---|---|---|---|---|---|
| ç¨æ·æ¨¡å | 5人天 | 2人天 | 2人天 | 9人天 | å¼ ä¸ |
| è®¢åæ¨¡å | 8人天 | 3人天 | 3人天 | 14人天 | æå |
| æ¯ä»æ¨¡å | 6人天 | 3人天 | 2人天 | 11人天 | çäº |
| å计 | 19人天 | 8人天 | 7人天 | 34人天 | – |
11.2 è¯ä¼°è¯´æ
- å¼åæ¶é´ï¼å æ¬éæ±çè§£ãç¼ç ãåå æµè¯
- èè°æ¶é´ï¼æ¨¡åé´èè°ãç¬¬ä¸æ¹æ¥å£èè°
- æµè¯æ¶é´ï¼åè½æµè¯ãéææµè¯ãæ§è½æµè¯
- æ»è®¡ï¼å¼å + èè° + æµè¯æ¶é´ä¹å
11.3 æ¶é´è®¡ç®æ¹å¼
æ»å·¥ä½é = å¼åæ¶é´ + èè°æ¶é´ + æµè¯æ¶é´
人æ = æ»å·¥ä½é / 22天
宿´ææ¡£æ¨¡æ¿
# {项ç®åç§°} - è®¾è®¡ææ¡£
| ææ¡£çæ¬ | v1.0 |
|---------|------|
| åå»ºæ¥æ | {YYYY-MM-DD} |
| ææ¡£ç¶æ | è稿 |
| ä½è
| {ä½è
å} |
| æ°æ®åºç±»å | MySQL / PostgreSQL |
| å¼åè¯è¨ | Java / Python |
---
## åæ´è®°å½
| çæ¬ | æ¥æ | ä½è
| åæ´å
容 |
|------|------|------|----------|
| v1.0 | {YYYY-MM-DD} | {ä½è
} | åå§çæ¬ |
---
## ç®å½
1. [éæ±ææ¡£å°å](#1-éæ±ææ¡£å°å)
2. [ææ¯æ¹æ¡è®¾è®¡å¾](#2-ææ¯æ¹æ¡è®¾è®¡å¾)
3. [æ°æ®ç»æè®¾è®¡](#3-æ°æ®ç»æè®¾è®¡)
4. [æ¥å£è®¾è®¡](#4-æ¥å£è®¾è®¡)
5. [ç¸å
³æ§è½è¯ä¼°](#5-ç¸å
³æ§è½è¯ä¼°)
6. [å¼å¸¸è®¾è®¡](#6-å¼å¸¸è®¾è®¡)
7. [ç°åº¦æ¹æ¡](#7-ç°åº¦æ¹æ¡)
8. [åå§åæ°æ®](#8-åå§åæ°æ®)
9. [å®å
¨åé£é©è¯ä¼°](#9-å®å
¨åé£é©è¯ä¼°)
10. [æ¯å¦å¢è®¾çç](#10-æ¯å¦å¢è®¾çç)
11. [å·¥ä½éè¯ä¼°](#11-å·¥ä½éè¯ä¼°)
---
## 1. éæ±ææ¡£å°å
- **PRDææ¡£**: {PRDææ¡£URL}
- **ç¦
éå°å**: {ç¦
éURL}
---
## 2. ææ¯æ¹æ¡è®¾è®¡å¾
### 2.1 æ¶æå¾
{卿¤ç»å¶æ¶æå¾}
### 2.2 ææ¯æµç¨å¾
{卿¤ç»å¶ææ¯æµç¨å¾}
### 2.3 ç³»ç»æ¶åºå¾
{卿¤ç»å¶æ¶åºå¾}
---
## 3. æ°æ®ç»æè®¾è®¡
### 3.1 ERDå¾
{卿¤ç»å¶ERDå¾}
### 3.2 DBè¡¨ç»æè®¾è®¡
{卿¤å®ä¹è¡¨ç»æ}
---
## 4. æ¥å£è®¾è®¡
### 4.1 æ¥å£ææ¡£
{卿¤å®ä¹æ¥å£}
### 4.3 ä¾èµç¬¬ä¸æ¹æ¥å£
{卿¤ååºç¬¬ä¸æ¹æ¥å£}
---
## 5. ç¸å
³æ§è½è¯ä¼°
### 5.1 æ§è½ç®æ è¯ä¼°
{卿¤å®ä¹æ§è½ææ }
### 5.2 æ§è½èµæºè¯ä¼°
{卿¤è¯ä¼°èµæºéæ±}
---
## 6. å¼å¸¸è®¾è®¡
### 6.1 æ¥è¦æºå¶
{卿¤å®ä¹æ¥è¦è§å}
### 6.2 å¼å¸¸éè¯æºå¶
{卿¤å®ä¹éè¯çç¥}
### 6.3 æ¥å£æå¡å¹ç
{卿¤å®ä¹å¹çæ¹æ¡}
### 6.4 ä¸å¡é级æå¡
{卿¤å®ä¹éçº§æ¹æ¡}
### 6.5 å
¼å®¹å岿°æ®
{卿¤å®ä¹å
¼å®¹æ¹æ¡}
---
## 7. ç°åº¦æ¹æ¡
### 7.1 ç°åº¦æ¹æ¡è®¾è®¡å¾
{卿¤ç»å¶ç°åº¦è®¾è®¡å¾}
### 7.2 ç°åº¦çç¥
{卿¤å®ä¹ç°åº¦çç¥}
### 7.3 åæ»æ¹æ¡
{卿¤å®ä¹åæ»æ¹æ¡}
---
## 8. åå§åæ°æ®
### 8.1 åå§åèå´
{卿¤å®ä¹åå§åèå´}
### 8.2 æ°æ®å¤çæ¹æ¡
{卿¤å®ä¹æ°æ®å¤çæ¹æ¡}
---
## 9. å®å
¨åé£é©è¯ä¼°
### 9.1 é£é©ç¹è¯å«
{卿¤è¯å«é£é©ç¹}
### 9.2 å
¼å®¹æ§åæ
{卿¤åæå
¼å®¹æ§}
### 9.3 æ°æ®è±æ
{卿¤å®ä¹è±æè§å}
---
## 10. æ¯å¦å¢è®¾çç
### 10.1 ççæ°æ®è¿½è¸ª
{卿¤å®ä¹è¿½è¸ªå
容}
### 10.2 ççé
ç½®
{卿¤å®ä¹ççé
ç½®}
---
## 11. å·¥ä½éè¯ä¼°
### 11.1 è¯ä¼°è¡¨æ ¼
{卿¤è¯ä¼°å·¥ä½é}
### 11.2 è¯ä¼°è¯´æ
{卿¤è¯´æè¯ä¼°æ¹æ³}
---
**ææ¡£ç»æ**
使ç¨ç¤ºä¾
示ä¾ï¼è®¢å管çç³»ç»è®¾è®¡ææ¡£
è¾å ¥éæ±ï¼
订å管çç³»ç»éè¦æ¯æç¨æ·ä¸åãæ¯ä»ãæ¥è¯¢è®¢åçåè½ã
é¢è®¡æ¥è®¢åé10ä¸ï¼å³°å¼QPS约30ã
çæå 容ï¼
- éæ±ææ¡£å°å – 龿¥å°PRDææ¡£
- æ¶æå¾ – ç¨æ·æå¡ã订åæå¡ãæ¯ä»æå¡çå屿¶æ
- ERDå¾ – usersãordersãorder_itemsãpayments表åå ³ç³»
- æ¶åºå¾ – ç»å½ãä¸åãæ¯ä»æµç¨
- æ¥å£å®ä¹ – 宿´çRESTful APIå®ä¹
- æ§è½è¯ä¼° – QPSé¢ä¼°ãèµæºè¯ä¼°
- å¼å¸¸è®¾è®¡ – éè¯ãé级ãå¹çæ¹æ¡
- ç°åº¦æ¹æ¡ – ç°åº¦è®¾è®¡å¾
- åå§åæ°æ® – åºç¡é ç½®æ°æ®
- å®å ¨è¯ä¼° – é£é©è¯å«ãæ°æ®è±æ
- å·¥ä½éè¯ä¼° – 忍¡åå·¥æ¶è¯ä¼°