Gome高性能撮合エンジンマイクロサービス
2236 ワード
Gome高性能撮合エンジンマイクロサービス Golangを使用して計算し、gRPCをサービスし、ProtoBufをデータ交換し、RabbitMQをキューにし、Redisをキャッシュして実現する高性能撮合エンジンマイクロサービス に頼る特定の依存情報はdocker-composerファイル を表示することができる.
クイックスタート dockerキーを使用して実行環境を配置しgomeコンテナに入り、 apiインタフェース定義ディレクトリに入り、gRPCインタフェース定義ファイルを生成する: プロジェクトディレクトリにアクセスし、構成をコピーして変更します: 起動gRPCサービス: 起動スクリプト撮合消費RabbitMQキュー: 起動スクリプト消費撮合結果RabbitMQキュー:
説明 gomeディレクトリの説明:
api,RPCインタフェース定義ディレクトリ,ProtoBuf 3バージョンを使用
Engine,撮合エンジン実装論理ディレクトリ
grpc,gRPCサービススクリプト
redis,redisクライアント
utils,ツールスクリプトディレクトリ
main.goエントリファイル
match.go撮合スクリプト
match_notice.go撮合結果消費シナリオ
test.goテストスクリプト、コマンドは次のとおりです. 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 gome bash
cd /go/src/gome/api && protoc --go_out=plugins=grpc:. *.proto
cd /go/src/gome && copy config.example.yaml config.yaml
go run main.go
go run match.go symbol
、symbolは取引ペア名、例えばbtc 2 usdt、symbolはクライアント呼び出し時と一致するgo run match_notice.go symbol
.説明
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`
まとめ
docker exec -it rabbitmq bash
、既存のキューを表示:rabbitmqctl list_queues
、削除キュー:rabbitmqctl delete_queue queuename