プロトコルと互換性
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規制要件を満たすインテリジェントテクノロジー医療機器管理システムを提供します