セコイアカーネル・ノート|セッション(セッション)

SequoiaDBセコイア・データベースは、リレーショナルデータベース、分散金融レベルで、分散型のオープンソースのデータベースエンジンを構築するためにゼロからスタートして付着します。コミュニティは原則SequoiaDBのユーザー深い理解を達成するのを助ける、オープンソースとオープンな技術エコシステムのデータベースを構築するために、デザインのアイデアやコード分析交換SequoiaDBジャイアントセコイアのデータベースエンジンを共有するように設計された「カーネルノートシリーズ」。

01基本概念

セッション接続は、2つの概念を混同することは容易です。セッション(セッション)を通信するための通信を開始してから通信相手の終了時に文脈(コンテキスト)を指します。このコンテキストは、サーバー側のメモリの一部である、クライアント・マシンは、上などの情報を介してアプリケーションとユーザがログインこの接続を、記録します。これは、クライアント・データベース・インスタンスから物理パスへの一端に接続を意味します。IPCメカニズムは機械に確立することができるを通じてネットワーク接続を確立することができます。通常、専用のサーバまたはクライアント・プロセスとディスパッチャの間の接続を確立します。

セッション02 SequoiaDBのデザイン

分散データベースSequoiaDBは、通常、クラスタデータノードから成り、コーディネータ・ノードとカタログ・ノードは、クラスタ内のノード間の接続の様々な種類があります。したがって、いくつかのセッションSequoiaDB、および異なるサービスに対応したさまざまなセッションがあります。セッション終了要求のための主なタスクは、通信プロセスに送信されます。

典型的なセッションクラスター構造を以下に示します。

セコイアカーネル・ノート|セッション(セッション)

調整ノードは、このセッションは、クライアントによって開始され、対応するプロセスによって、これらすべての要求の後に、コーディネーター・ノード・セッションで、クライアントは接続がCOORDセッションを作成するために確立された接続要求を、開始リッスンします。実行するノードを送信する必要性を確認し、要求を処理するために、クライアントを受け取った後、分析のための情報をカタログ結合するCOORDセッションでは、カタログは、ノードへの1つの以上のデータ・ノードに送信することができます。コーディネータノードによって送信されたメッセージを受信するデータノードは、断片セッションが要求を処理するために作成され、指定された動作を実行し、データを返します。

03 通信平面

通信チャネルのクラスタSequoiaDBの複数のノード間で、ノードの異なる種類が異なるサービスを提供します。これらのサービスの各々が正しく機能することを保証するために、SequoiaDBは、通信ノード平面の複数を提供します。簡潔には、サービスポートに対応する一方の通信プレーンは、異なるポートの範囲内で予約されたポート番号に必要な理由インストールSequoiaDB、ある異なるタイプのサービスを提供します。

SequoiaDBは現在、次のいくつかの通信プレーンを提供します。

local 平面(local service): 使用节点配置文件中指定的基础服务端口号 svcname

repl 平面(repl service): 使用端口号svcname+1

shard 平面(shard service): 使用端口号svcname+2

cat 平面(cat service): 使用端口号svcname+3

rest 平面(rest service): 使用端口号svcname+4

om 平面(om service): 使用端口号svcname+5

04ローカルセッション

直接ノードを接続したときにローカルセッション(すなわち、構成SVCNAME)が作成されます。ローカル・サービス・ポートに接続された任意のノードを参照すると、比較的広い意味を導きます。クライアントは、コーディネーター・ノードに接続すると、コーディネータノード上のローカルセッションを作成します。モニターがローカルポートに新しい接続要求を受信すると、新しいセッション(メモリ構造)とサービススレッド(実行ユニット)を作成し、一緒に(添付)にバインドします。この新しいサービススレッドと直接対話するクライアントに従ってください。
コードガイド

図以下継承セッションSequoiaDBの様々なタイプ。

セコイアカーネル・ノート|セッション(セッション)

それが図、ローカルセッション、同期セッション、セッション複製の増加/総量からわかるように、同じ基本クラス_ISessionから継承されています。以下はでいくつかの重要な導入、主にセッションの確立/時間セッションの構造、及び操作を破壊するネットワークセッションと組み合わされます。

セッションを終了しようとするまで、データ構造に対応するローカルセッションがクラス_pmdLocalSessionであり、スレッドの主な機能は、_pmdLocalSession ::ラン()はこの関数の内部で循環させるように、会話スレッドの後に開始し、メッセージが受信され、処理は、ループを抜けます。

ローカルセッションは、異なるプロセスを実行するために、異なるプロセッサをバインドすることができます。コーディネータ・ノードは、バインディングは_pmdCoordProcessorあります。ノードとデータノードをカタログ化するために、結合は_pmdDataProcessorです。それは、要求のタイプを識別できない場合、コーディネータ・ノードは最初、メッセージ処理のため_pmdCoordProcessorインタフェースを呼び出すためには、処理のために再び_pmdDataProcessorインタフェースと呼ぶことにします。

セコイアカーネル・ノート|セッション(セッション)

05シンク(またはコピー)セッションREPLセッション

分区组内的节点之间,通过同步动作来保证数据的一致性。同步分为两种,一种是正常运行状态下的增量同步,一种是异常情况下的全量同步。同步是通过对应的同步会话与同步线程来处理的,它涉及到两个节点,在数据生产方称为源端,在数据消费方称为目标端。由于只有数据节点和编目节点上会进行数据复制,所以只有在这两种类型的节点上,才存在同步会话。
1)增量同步会话

增量同步会话分为增量同步源端会话和目标端会话,且存在于复制组正常运行期间。在数据节点和编目节点的启动过程中,主节点或从节点都会开启增量同步的监听。同时,它也会主动启动一个增量复制目标端会话,并向它选定的源端发送同步请求。源端节点上会被动创建一个增量同步源端会话,这两个会话后续会开始进行交互,以完成数据同步。

2)全量同步会话

全量同步会话存在于全量同步期间,在集群正常运行期间及全量同步完成后不存在。与增量同步会话一样,全量同步会话也分为源端和目标端。

需要全量同步的场景有三种:

备节点的重放速度跟不上主节点,主节点上复制日志绕接,导致备节点还未获取到的复制日志被覆盖,备节点无法继续增量同步 

节点异常重启,启动后节点根据读取到的异常启动状态决定全量同步

节点正常停止后正常重启,但停止时间较长,期间其它节点上的日志已经发生了绕接

而无论是上述哪种情况,都会先发生增量复制会话。当这些原因导致增量同步无法继续进行的时候,目标节点上会主动创建一个全量同步会话(以及对应的线程),并退出当前的增量复制线程。当全量同步会话启动时,会向源端发送一个全量同步开始的消息。此时源端上会被动创建一个全量同步源端会话。至此,全量同步的会话创建完成,后续这两个会话之间会开始进行交互,完成数据同步。
代码导读

四种会话对应的类为: _clsReplSrcSession,  _clsReplDstSession,  _clsF***cSession,  _clsFSDstSession。

同步相关的会话都是异步会话,上述四种会话使用同一个会话管理器:_clsReplSessionMgr 来进行管理。

异步会话响应的消息类型及对应的处理函数,一般在对应的类中通过 OBJ_MSG_MAP 等宏进行定义,请参考代码。 

06 会话的查看

用户可通过 db.snapshot ( SDB_SNAP_SESSIONS ) 命令列出当前数据库节点中的所有会话,或通过 db.snapshot ( SDB_SNAP_SESSIONS_CURRENT ) 命令列出当前数据库节点中的当前会话。
代码导读

INITを調製関数データのクラスに実装され、_monSessionFetcher操作セッション派生クラス()。ユーザーは、現在のセッション(現在のスレッドeduCBエクスポート・インターフェース)または(エクスポートする_pmdEDUMgrインターフェイスを使用して)すべてのセッションを表示するように選択することができます。コンテキストの上位クラスの統一されたフレームワークによって呼び出されたデータを、調製後のデータを取得するためのインタフェースをフェッチ。

おすすめ

転載: blog.51cto.com/13722387/2433500