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はbtc2usdtなどのトランザクションペアの名前です。symbolはクライアントの呼び出しと一致している必要があります。 -
コンシューマー起動スクリプトの一致結果RabbitMQキュー:
go run match_notice.go symbol
。
説明
-
ゴメディレクトリの説明:
api、RPCインターフェイス定義ディレクトリ、ProtoBuf3バージョンを使用
エンジン、マッチングエンジンは論理カタログを実現します
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はシンボル名を注文キューとして使用し、マッチングエンジンはこのキューを消費し、マッチング結果はnotice:+ symbolにプッシュされます(notice:btc2usdtなど)。
-
現在、トランザクション結果キューを使用する場合はデータのみが出力され、他の機能はありません。ユーザーはこのキューを自分で使用して、データベースの更新やユーザーへの通知などの後続のロジックを実装できます。将来的には設定に応じてアドレスプッシュ機能を追加し、ユーザーが結果を受信して処理するために受信アドレスを設定するだけで済むようにします
-
このプロジェクトは私の以前のPHPプロジェクトに基づいており、キューをRabbitMQに置き換え、Redisはキャッシュとしてのみ機能し、GolangとgRPCを使用してマイクロサービスを実現します
-
マッチングサービスプロジェクトのLaravelに基づいて、アイデアのゴメ具体的な実現とデータ構造設計を見ることができます
-
このプロジェクトは他の環境に依存する必要はありません。dockerを使用して環境を実行した後、次のような他のプロジェクトを接続して呼び出すことができます。
- PHPクライアント、コンポーザーのインストール、箱から出して
-
APIのOrderRequestで、uuid(ユーザーID)とoid(注文ID)はシステム内で一意である必要があります。つまり、2つはシステム内で重複しないようにする必要があります。文字列タイプを定義しました。これは、非インクリメンタルである主キー。データベースの使用法
総括する
-
Docker環境を使用する場合は、対応する操作を実行するためにgomeコンテナーに入るか、コンテナーの開始時にスーパーバイザーを使用して関連するスクリプトを自動的に開始する必要があります。
-
、rabbitmqコンテナに入り、
docker exec -it rabbitmq bash
既存のキューを表示します:rabbitmqctl list_queues
、キューを削除します:rabbitmqctl delete_queue queuename