Go gRPC 和微服務架構的基礎與設計與實戰

微服務架構是一種將單體應用分解成一組獨立的小服務的架構模式,服務之間通過輕量級協議(如 HTTP 或 RPC)進行通信。相比傳統的單體架構,微服務架構具有高靈活性和擴展性,使團隊可以在開發、測試和部署上實現高度的自治。要深度理解微服務架構的基礎和設計。

一. 微服務基礎

1. 微服務架構的核心基礎

2. 微服務架構的設計原則

3. 微服務架構的常見模式

4. 微服務架構的挑戰

5. 總結

微服務架構通過解耦應用中的不同功能模塊來提升靈活性和擴展性,允許開發團隊更快地響應業務需求。然而,微服務架構也增加了系統複雜性,需要依賴分佈式系統的設計原則和服務治理機制來確保系統的可靠性和可維護性。在設計和實現微服務架構時,需綜合考慮業務需求、技術能力和團隊規模,並靈活應用各類架構模式和工具。

二.  DappLink 一鍵發錢包服務架構設計

1. 系統架構設計

2. 功能模塊設計

2.1 統一 RPC Service 項目

2.1.1 現在的版本

2.1.2 本次開發版本

2.2 統一簽名機服務

2.3 統一錢包業務平臺 (含掃鏈功能)

2.3.1 業務配置流程

2.3.2 批量地址生成

2.3.3 充值業務

2.3.4 提現業務流程

3. Account 數據庫設計

3.1 業務表

CREATE TABLE IF NOT EXISTS business
(
    guid            VARCHAR PRIMARY KEY,
    business_uid    VARCHAR NOT NULL,
    deposit_notify  VARCHAR NOT NULL,
    withdraw_notify VARCHAR NOT NULL,
    tx_flow_notify  VARCHAR NOT NULL,
    timestamp       INTEGER  NOT NULL CHECK (timestamp > 0)
);
CREATE INDEX IF NOT EXISTS tokens_timestamp ON business (timestamp);
CREATE INDEX IF NOT EXISTS business_uid ON business (business_uid);

3.2 區塊表

CREATE TABLE IF NOT EXISTS blocks (
    hash  VARCHAR PRIMARY KEY,
    parent_hash VARCHAR  NOT NULL UNIQUE,
    number UINT256 NOT NULL UNIQUE CHECK(number>0),
    timestamp INTEGER NOT NULL CHECK(timestamp>0)
);
CREATE INDEX IF NOT EXISTS blocks_number ON blocks(number);
CREATE INDEX IF NOT EXISTS blocks_timestamp ON blocks(timestamp);

3.3 Token 配置表

CREATE TABLE IF NOT EXISTS tokens
(
    guid             VARCHAR PRIMARY KEY,
    token_address    VARCHAR  NOT NULL,
    decimals         SMALLINT NOT NULL DEFAULT 18,
    token_name       VARCHAR  NOT NULL,
    collect_amount   UINT256 NOT NULL,
    cold_amount      UINT256 NOT NULL,
    timestamp        INTEGER  NOT NULL CHECK (timestamp > 0)
);
CREATE INDEX IF NOT EXISTS tokens_timestamp ON tokens (timestamp);
CREATE INDEX IF NOT EXISTS tokens_token_address ON tokens (token_address);

3.4 地址表

CREATE TABLE IF NOT EXISTS addresses (
    guid  VARCHAR PRIMARY KEY,
    address VARCHAR UNIQUE NOT NULL,
    address_type SMALLINT NOT NULL DEFAULT 0,
    public_key VARCHAR NOT NULL,
    timestamp INTEGER NOT NULL CHECK(timestamp>0)
);
CREATE INDEX IF NOT EXISTS addresses_address ON addresses(address);
CREATE INDEX IF NOT EXISTS addresses_timestamp ON addresses(timestamp);

3.5 賬戶表

CREATE TABLE IF NOT EXISTS balances (
    guid          VARCHAR PRIMARY KEY,
    address       VARCHAR NOT NULL,
    token_address VARCHAR NOT NULL,
    balance       UINT256 NOT NULL CHECK(balance>=0),
    lock_balance  UINT256 NOT NULL,
    timestamp INTEGER NOT NULL CHECK(timestamp>0)
);
CREATE INDEX IF NOT EXISTS balances_address_uuid ON balances(address_uuid);
CREATE INDEX IF NOT EXISTS balances_timestamp ON balances(timestamp);

3.6 充值表

CREATE TABLE IF NOT EXISTS deposits (
    guid  VARCHAR PRIMARY KEY,
    block_hash VARCHAR NOT NULL,
    block_number UINT256 NOT NULL CHECK(block_number>0),
    hash VARCHAR NOT NULL,
    from_address VARCHAR NOT NULL,
    to_address VARCHAR NOT NULL,
    token_address VARCHAR NOT NULL,
    token_id VARCHAR NOT NULL,
    token_meta VARCHAR NOT NULL,
    fee UINT256 NOT NULL,
    amount UINT256 NOT NULL,
    status SMALLINT NOT NULL DEFAULT 0,
    timestamp INTEGER NOT NULL CHECK(timestamp>0)
);
CREATE INDEX IF NOT EXISTS deposits_hash ON deposits(hash);
CREATE INDEX IF NOT EXISTS deposits_timestamp ON deposits(timestamp);

3.7 提現表

CREATE TABLE IF NOT EXISTS withdraws (
     guid  VARCHAR PRIMARY KEY,
     block_hash VARCHAR NOT NULL,
     block_number UINT256 NOT NULL CHECK(block_number>0),
     hash VARCHAR NOT NULL,
     from_address VARCHAR NOT NULL,
     to_address VARCHAR NOT NULL,
     token_address VARCHAR NOT NULL,
     token_id VARCHAR NOT NULL,
     token_meta VARCHAR NOT NULL,
     fee UINT256 NOT NULL,
     amount UINT256 NOT NULL,
     status SMALLINT NOT NULL DEFAULT 0,
     transaction_index UINT256 NOT NULL,
     timestamp INTEGER NOT NULL CHECK(timestamp>0),
     tx_sign_hex VARCHAR NOT NULL
);
CREATE INDEX IF NOT EXISTS withdraws_hash ON withdraws(hash);
CREATE INDEX IF NOT EXISTS withdraws_timestamp ON withdraws(timestamp);

3.8 交易流水錶

CREATE TABLE IF NOT EXISTS transactions (
    guid VARCHAR PRIMARY KEY,
    block_hash VARCHAR NOT NULL,
    block_number UINT256 NOT NULL CHECK(block_number>0),
    hash VARCHAR NOT NULL,
    from_address VARCHAR NOT NULL,
    to_address VARCHAR NOT NULL,
    token_address VARCHAR NOT NULL,
    token_id VARCHAR NOT NULL,
    token_meta VARCHAR NOT NULL,
    fee UINT256 NOT NULL,
    amount UINT256 NOT NULL,
    status SMALLINT NOT NULL DEFAULT 0,
    tx_type SMALLINT NOT NULL DEFAULT 0,
    timestamp INTEGER NOT NULL CHECK(timestamp>0)
);
CREATE INDEX IF NOT EXISTS transactions_hash ON transactions(hash);
CREATE INDEX IF NOT EXISTS transactions_timestamp ON transactions(timestamp);
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/joSeoC0rZSU1lz0mV7WGdA