Gome高性能撮合エンジンマイクロサービス


Gome高性能撮合エンジンマイクロサービス
  • Golangを使用して計算し、gRPCをサービスし、ProtoBufをデータ交換し、RabbitMQをキューにし、Redisをキャッシュして実現する高性能撮合エンジンマイクロサービス
  • に頼る
  • 特定の依存情報はdocker-composerファイル
  • を表示することができる.
    クイックスタート
  • dockerキーを使用して実行環境を配置しgomeコンテナに入り、docker exec -it gome bash
  • apiインタフェース定義ディレクトリに入り、gRPCインタフェース定義ファイルを生成する:cd /go/src/gome/api && protoc --go_out=plugins=grpc:. *.proto
  • プロジェクトディレクトリにアクセスし、構成をコピーして変更します:cd /go/src/gome && copy config.example.yaml config.yaml
  • 起動gRPCサービス:go run main.go
  • 起動スクリプト撮合消費RabbitMQキュー:go run match.go symbol、symbolは取引ペア名、例えばbtc 2 usdt、symbolはクライアント呼び出し時と一致する
  • 起動スクリプト消費撮合結果RabbitMQキュー:go run match_notice.go symbol.

  • 説明
  • gomeディレクトリの説明:
    api,RPCインタフェース定義ディレクトリ,ProtoBuf 3バージョンを使用
    Engine,撮合エンジン実装論理ディレクトリ
    grpc,gRPCサービススクリプト
    redis,redisクライアント
    utils,ツールスクリプトディレクトリ
    main.goエントリファイル
    match.go撮合スクリプト
    match_notice.go撮合結果消費シナリオ
    test.goテストスクリプト、コマンドは次のとおりです.
      1.   :`go run test.go doOrder`
      2.   :`go run test.go delOrder`
      3.        :`go run test.go getDepth symbol transaction`
      4.       :`go run test.go help`
    
  • gomeはsymbol名を単一キューとして使用し、撮合エンジンはこのキューを消費し、撮合成約結果はnotice:+symbolを名前のキューとしてpushする.例えばnotice:btc 2 usdt
  • 現在、消費成約結果キューにはデータのみが印刷されているが、他の機能はない.利用者は自分でこのキューを消費することができ、データベースの更新、ユーザーへの通知などの後続論理を実現することができる.gomeの後続には、構成によるアドレスプッシュ機能が追加され、使用者は受信アドレスを構成するだけで結果を受信し、
  • を処理することができる.
  • 本プロジェクトは私の前のPHPプロジェクトに基づいて、キューをRabbitMQに置き換え、Redisはキャッシュとしてのみ使用し、GolangとgRPCを使用してマイクロサービス化
  • を実現しました.
  • gomeの具体的な実装思想とデータ構造設計はLaravelベースの撮合サービスプロジェクト
  • を表示することができる.
  • 本プロジェクトは他の環境に依存する必要はありません.dockerを使用して環境を走ると、他のプロジェクトがドッキングして呼び出されます.
  • PHPクライアント、composerインストール、開梱すぐ
  • apiのOrderRequestでは、uuid(ユーザーID)とoid(注文ID)はシステム一意性を持つべきであり、そもそも、この2つはシステムでも繰り返すべきではなく、stringタイプを定義し、プライマリ・キーが非自己拡張型データベースで
  • を使用するのに便利である.
    まとめ
  • docker環境を使用する場合、gomeコンテナにアクセスして対応する操作を実行するか、Supervisorを使用してコンテナを起動するときに関連スクリプト
  • を自動的に起動する必要がある.
  • rabbitmqコンテナ、docker exec -it rabbitmq bash、既存のキューを表示:rabbitmqctl list_queues、削除キュー:rabbitmqctl delete_queue queuename