ホームページ  >  記事  >  php教程  >  Spider RPC 開発ガイド

Spider RPC 開発ガイド

高洛峰
高洛峰オリジナル
2016-11-21 13:55:511147ブラウズ

プロトコルと互換性

spiderはJava言語を使用して開発され、IoCコンテナとしてSpringを使用し、TCP/IPプロトコルを採用し、これに基づいてSaaSシステムモデルの特性と組み合わせて、より多くの条件を満たすためにターゲットを絞った設計が行われます。マルチテナント システム、高可用性、分散展開の要件。

シリアル化メカニズムとして JSON を使用することで、後続のバージョンでは protobuf のサポートが検討される可能性があります (java/c++/c# はクラス ライブラリでサポートされます)。

パフォーマンスと安定性を最大化するために、スパイダーは Sun JDK1.8 に基づいてコンパイルされており、非推奨の機能の使用を避ける必要があります。

さまざまな環境やインターネットアプリケーションに可能な限り適応するために、Spider は少なくとも Tomcat/jboss アプリケーションサーバーの下で実行できる必要があります。

展開モード

Spider は、いつでも集中管理モードまたは独立管理モードで実行できます。

集中管理モード: 集中モードでは、サービス センターが有効になっている必要があります。数十のノードが実行されている大規模な展開では、通常、ノードの追加または削減やサービスの分割に大量の構成ファイルが必要になります。通常、新しいノードの上流にある各ノードは、対応するルーティングおよびマッピング サーバーのパラメータを変更する必要があります。集中管理モデルを使用すると、サービス センターにログインするだけで関連する構成を変更でき、ノードの変更は対応する上流ノードに自動的にプッシュされます。集中管理モードで実行すると、プラットフォーム全体のすべてのノードの健全性ステータス、TPS、各サービスの応答時間などをサービス センターで表示できます。

独立管理モード: 独立管理モードでは、サービス センターを有効にする必要はありません。ノードの数が少ない場合、たとえばプラットフォーム全体が 10 ノードを超えない場合、通常は集中管理モードよりも独立モードを採用する方が簡単です。独立管理モードで実行している場合、スパイダーが提供する RESTful API を通じて現在のノードの実行ステータスを表示できます。

サービス識別

Spider は、2 種類のサービス公開アノテーションをサポートしています。

Spider は、スパイダー サービスを識別するための 2 つのカスタム アノテーションを定義します。

Service module

@Retention(RetentionPolicy.RUNTIME)

public @interface ServiceModule {

String subSystemId() default "0";

}

@ServiceModule は単なるクラスのアノテーションであり、このアノテーションを持つインターフェイスこのインターフェースでの定義は、スパイダーサービスとして識別されるための必須条件です。

Service インターフェース

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Service {
    String serviceId(); // 服务编号,8位ASCII字符,其中00000000-00000099为spider内部保留,00000100-00000199为服务中心保留
    String desc(); //服务描述
    int timeout() default 0; //超时时间,单位毫秒
    boolean needLog() default false; //设置是否记录日志
    int broadcast() default 0;  //设置该请求是否广播,0:不广播;1:广播但无需相应;2:广播并响应
}

@Service はメソッド アノテーションであり、スパイダー サービス番号、スパイダー サービスの説明、およびスパイダー サービスのタイムアウトを設定するために使用される 3 つの属性が含まれています。タイムアウトはオプションであり、spider.xml で定義されていない場合、デフォルトは 300 秒です。

@ServiceModule アノテーションが付けられたインターフェイスで定義された @Service でアノテーションが付けられたメソッドのみがスパイダー サービスとして識別され、インターフェイスはリモート サービスへのサービスまたはプロキシ呼び出しを提供するために使用できます。 C Broadcast = 2 のサービスの場合、その戻り値は com.ld.net.spider.pojo.BroadCastResult のデータ プロパティにパッケージ化する必要があります。このクラスの Javadoc の説明を参照してください。

環境変数

spider には、関連オプションを制御するためのいくつかの環境変数があります。現在、以下に示すように、設定可能な環境変数があります:

l SPIDER_LOG、デフォルトは /tmp/spider/stat/${nodeName}

l SPIDER_HOME、デフォルトは /usr/local/spider/${nodeName}

l SPIDER_CONFIG、spider.xml 起動ファイルを指定します、デフォルトのクラスパス: Spider.xml、構成ファイルのセクションを参照してください。

設定ファイル

設定ファイルのセクションを参照してください。

サービスの公開と代理店

サービスの公開: Spider.localService プラグインの serviceExportPackage 要素は、スパイダー ノードがサーバーとして機能するときに自動的に公開されるスパイダー サービスのパッケージ パスを、; で区切って定義します。サーバーがこのパラメーターに関連するパスを設定している限り、Java クライアントは、serviceProxyPackage パラメーターに対応するパスを設定している限り、@Autowired 依存関係挿入を通じてリモート サーバー パッケージによって提供される対応するサービスを直接呼び出すことができます。

サービス プロキシ: Java クライアントの場合、スパイダーは自動プロキシ機能を提供します。開発者は、ローカル Spring サービスを呼び出すのと同じように、spider.localService プラグの下で serviceExportPackage 要素を呼び出すだけで済みます。 in. 自動プロキシを必要とするスパイダー サービスのパッケージ パスを、; で区切って定義します。 C# クライアントや C++ クライアントなどの非 Java クライアントの場合、開発者は対応する SDK クライアントを呼び出す必要があります。

公開サービスとエージェントのサービスは重複できません。サービスをローカルで処理し、スパイダー エージェントによってダウンストリーム サーバーに転送する必要がある場合は、リリース リストで構成します。現時点では、これらのサービスをユーザー プログラミングを通じてリモートから呼び出すことはできません。通常、これらのサービスは特別な目的に使用され、ブロードキャストというラベルが付けられます。

追記: 技術的に言えば、クライアントとサーバー上の同じサービスのメソッド署名とサービス番号が同じである限り、呼び出すことができます (つまり、メソッド名は関係ありません)。これは推奨されませんが、将来のバージョンでは可能になる可能性があります。完全一致が必要です。

スパイダー ノードが NB の役割を果たしたい場合、公開パスは serviceExportPackage で構成され、サービスのルーティング エントリがローカルに解析される場合は、特定のサービスの実装も含まれることにも注意してください。処理中、サービスは NB ノードで処理され、それ以上転送されないことに注意してください。したがって、NB の役割については、ブロードキャスト サービスを除き、serviceExportPackage の下で設定しないことをお勧めします。

さまざまなデータ型のサポート

スパイダーの現在のバージョンは、一般的なオブジェクトを含む、byte[] を除くすべてのデータ型を基本的にサポートしています。

サービスインターフェース定義要件

柔軟性、パフォーマンス、開発効率を考慮すると、サービスパラメータと戻り値の両方にオブ​​ジェクトを使用することが推奨されます(gRPC、ICEなどの既存のRPCフレームワークは基本的にこのモードを採用しています) , while パラメーター SpiderBizHead クラス (動的ルーティングの設定などの関連情報が含まれます) を継承します。以下に示すように:

入力パラメータ DTO:

public class ServiceReq extends SpiderBizHead /*動的ルーティング機能が不要な場合はSpiderBizHeadを継承する必要はありません*/ {

}

サービスシグネチャ:

@ServiceModule ()

パブリック インターフェイス DemoService {

@Service()

‐ ‐ ‐ ‐ ‐ ‐ ‐ public ServiceResp addServer(ServerReq req)

}

' s 'の ‐ to ‐ ‐ public ServiceResp addServer(ServerReq req);

C# の場合は、System.Runtime.Remoting.Proxies.RealProxy クラスの実装を参照してください。

============================================= == ==========================

大規模で同時実行性の高い j2ee soa システム アーキテクチャの設計と実装が得意で、j2ee システムのパフォーマンスに熟練している分析と最適化

oltp&dss oracle&mysql データベース設計、パフォーマンス分析と最適化、HA、サブデータベース、サブテーブル アプリケーション アーキテクチャの設計と実装に精通しています
私のオープンソース プロジェクト mysqlawr、dlcache、logpool、drpcp。 https://git.oschina.net/zhjh256
各州のGSP規制要件を満たすインテリジェントテクノロジー医療機器管理システムを提供します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。