高效能銀行交易系統專案,旨在展示對作業系統機制 (Process/Thread/IPC) 與軟體架構設計的掌握。本系統具備高併發處理能力、自定義應用層協定以及容錯機制。
- 高併發伺服器 (High Concurrency Server): 採用 Multi-process (Preforking) 架構,結合 IPC (Shared Memory) 實現高效能請求處理與資源共享。
- 安全性 (Security):
- 支援 TLS/SSL 加密連線。
- 整合 OTP (One-Time Password) 雙因子驗證機制,透過獨立的 OTP Microservice 處理。
- 自定義協定 (Custom Protocol): 設計專屬應用層協定 (Application Layer Protocol),包含 Header, OpCode, Checksum 與 Payload。
- 壓力測試 (Stress Testing): 內建 Multi-threaded 壓力測試客戶端,可模擬 100+ 併發連線進行負載測試。
- 模組化設計: 核心功能封裝於靜態函式庫 (
libcommon.a)。
- Banking Server: 主伺服器,負責帳務邏輯。使用 Prefork 模式預先建立 Worker Processes。
- OTP Server: 獨立運行的微服務,負責產生與驗證一次性密碼。
- Account DB: 透過 Shared Memory 實作的 In-memory 資料庫,並使用 Mutex/Semaphore 確保資料一致性。
- Clients: 包含一般互動式客戶端 (
banking_client) 與壓力測試客戶端 (stress_client)。
- Operating System: Linux (or WSL)
- Compiler: GCC
- Libraries: OpenSSL (
libssl-dev)
所有元件皆已透過 Makefile 整合。
- 安裝相依套件 (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install libssl-dev- 生成 SSL 憑證 (Certificates): 為了啟動 TLS 加密連線,請先執行腳本產生測試憑證:
./gen_certs.sh如果有錯誤 可以先試試dos2unix gen_certs.sh
Warning
本專案產生的憑證與金鑰 (Private Keys) 僅供測試用途,並非安全的生產環境金鑰,請勿用於真實機敏場景。
- 編譯所有目標:
# 清理並編譯所有目標
make clean && make all編譯產出物將位於 bin/ 目錄:
bin/banking_serverbin/banking_clientbin/stress_clientbin/otp_serverbin/libcommon.a
請依序開啟終端機執行各項服務:
首先啟動 OTP 服務 (Port 8889)。
./bin/otp_server啟動主要銀行伺服器 (Port 8888)。
# Usage: ./banking_server <port> <verify_client>
./bin/banking_server 8888 0模擬高併發交易 (預設 100 執行緒)。
# Usage: ./stress_client <ip> <port> <threads> <requests> <verify_cert>
./bin/stress_client 127.0.0.1 8888 100 100 0手動操作各項功能。
./bin/banking_client 127.0.0.1 8888 0server/: Banking Server 核心實作client/: 互動式 Client 實作 (包含組員實作部分)stress_test/: 壓力測試 Client 實作otp_server/: OTP 服務實作common/: 共用 Header 與 Source Code (封裝為 libcommon)
Note: 本專案為系統程式設計期末專案實作。
Note: 分工如下:
114c75016 : OTP Server & SSL Certificate
113c53026 : Banking Server & Account DB
114c75035 : Banking Client & Stress Test Client