ネットワーキング
 Computer >> コンピューター >  >> ネットワーキング >> ネットワーキング

シリアル化とは

最近のプロジェクト更新会議で、私のチームは、シリアライゼーションを使用してこのアプリケーションとの間でデータをやり取りする方法について話しました。

ソフトウェア プロジェクトにもっと関わりたいと考えていたあるエンジニアは、この用語になじみがないと言っていました。

より大規模なプロジェクトに飛び込むまで発生しない、このような重要なプロセスを見落としがちです。ある時点で私がそうであったように、これはこの人に当てはまりました。

だからそれについて書きたかった。その日、私は同僚がシリアライゼーションについて学ぶのを手伝いました。あなたは今日それについて学ぶことになります.

シリアライゼーションとは?

シリアライゼーションとは、1 つのサービスがデータ構造 (Python の辞書など) を取り込み、それをラップして、読み取りのために別のサービスに送信するプロセスです。それが簡単な定義です。

誰かにメッセージを送る必要があると想像してください。それで、組み立て済みのパズルにテキストを書き留めます。私はピースを分解し、パズルを組み立て直す方法についていくつかの説明を追加し、一緒に送ります.

メッセージの受信者はパズルのピースを手に入れ、それらをすべて元に戻すと、私のメッセージが届きます.

シリアル化とは
イベントの基本的なシリアル化の流れ

技術的な定義はもう少し楽しいです。つまり、シリアライゼーションとは、データ オブジェクトをバイト ストリームに変換し、オブジェクトの状態を保存して、ディスクに格納したり、ネットワーク経由で送信したりするプロセスです。これにより、必要なストレージ サイズが削減され、ネットワーク経由での情報の転送が容易になります。

シリアル化とは
シリアル化プロセス

マーシャリングとシリアライゼーション - 違いは何ですか?

マーシャリングのプロセスが頭に浮かぶかもしれません。マーシャリングは、オブジェクトのメモリ表現を送信に適した形式に変換するプロセスです。

マーシャリングとシリアル化は 緩い ですが、 同義ですが、決定的な違いがあります。たとえば、JSON データを Golang データ構造に読み込む Golang プログラムを作成する場合、マーシャリングを使用して JSON キー値を Golang キー値に変換できます。

違いは、マーシャリングを使用してデータを変換できることです。対照的に、シリアライゼーションでは、データをバイト ストリームで送信または格納し、元の形式に再構成します。どちらもシリアル化を行いますが、これら 2 つのプロセスの意図には違いがあります。

実際のマーシャリングの例として、Twitter データを操作するために作成したこの構造体を以下に示します。 Golang では、タグと呼ばれるヒントを与えることができ、Golang の組み込みマーシャリング サービスを使用して、このオブジェクトを簡単に JSON データに変換できます。

シリアル化とは
JSON タグを使用した Golang 構造体

エンディアンとは?

また、エンディアンについても軽く触れたいと思います。エンディアンとは、メモリ内のバイトの順序を表すために使用される用語です。

メモリは、データのバイトが格納されるブロックと考えることができます。シリアライゼーションが機能するためには、バイト ストリームは、システム間でのエンディアンの変更に関係なく、データ型を転送する必要があります。

以下に、リトル エンディアンとビッグ エンディアンの違いを示します。すべてのシステムが同じようにビットを並べ替えるわけではないため、エンディアンがシステム間で一致するか、何らかの形で変換されることが不可欠です。

シリアル化とは
リトルエンディアンとビッグエンディアン https://pvs-studio.com/en/blog 提供/lessons/0019/

シリアライゼーションの使用例

私たちのユースケースでは、これらの機能を最大限に活用しています。スキャンしているハードウェアからいくつかの情報を取得し、その情報をバイト ストリームにパッケージ化して、データを再構築する別のサービスにネットワークと共に送信する予定です。

シリアライゼーション プロセスを逆にしてデータを元の形式に再構築するプロセスは、デシリアライゼーションと呼ばれます。 .

これには他の使用例があります。たとえば、REST API または AMQP などのメッセージング プロトコルは、シリアル化を使用してデータを圧縮して送信できます。

AMQP はメッセージを AMQP ブローカーに送信するメッセージング プロトコルであり、受信サービスはこのブローカーからメッセージを「リッスン」します。これは分散システム内でデータをやり取りするためによく使用されるため、バックエンド エンジニアはこれをよく知っているかもしれません。

多くのプログラミング言語には、シリアライゼーションを簡単に開始する機能が含まれています。したがって、これは言語にとらわれないトピックです。

シリアル化の例

簡単な例を挙げましょう。このコードはライブラリ kombu を使用して、AMQP 経由でメッセージを送信します。これを使用して、あるソフトウェア パッケージからネットワーク経由で別のソフトウェア パッケージにメッセージを送信します。このコードは、AMQP ブローカーにメッセージを送信するサービス用です:

def send_message(self, payload, sender_serializer):
...
    try:
        producer.publish(
            {'payload': message},
            ...
            serializer = 'json',
            ...
        )
        return

publish に注意してください 方法。シリアル化メソッドを引数として渡しているため、ライブラリは、渡すデータをシリアル化する方法を認識しています。

データ メッセージはバイト ストリームに変換されます。これを見ると、文字と数字の長い文字列のように見えます。メッセージを送信します。

対応するサービスは、同じシリアル化方法を使用して、元の状態でデータを再構築します。相互にメッセージを送信して機能させる必要がある一連のツールを作成しているため、これは重要な機能です。

シリアル化データ形式

目の前のタスクで必要になるときはいつでも、シリアライゼーションに JSON を使用します。ただし、他のいくつかを使用することもできます。

JSON には多くのオーバーヘッドがありますが、人間が読みやすいので、私にとっては理想的です。 Protobufs、YAML、または XML も使用できます。これらは、使用できるデータ オブジェクト形式のほんの一部です。

結論

これを自分のシステムから取り出してよかったです。私はこれについて考えるのをやめなければなりませんでした、そしてうまくいけば、誰かがそれから何かを学びました.

通信パイプラインをまとめるとき、シリアライゼーションは不可欠になります。このトピックについて知っておくと、適切な背景知識があれば、使用しているツールに自信を持って取り組むことができます。

-ジョージ


  1. データセンターとは何ですか?

    datacenterと綴られることもあるデータセンター (一言)は、多数のコンピュータサーバーと関連機器を含む施設に付けられた名前です。 データセンターは、壁を超えた「コンピュータールーム」と考えてください。会社のユーザー宛てのメール、財務記録、ウェブサイトのデータなど、あらゆる種類のデータを保存できます。 データセンターは何に使用されますか? 一部のオンラインサービスは非常に大きいため、1台または2台のサーバーから実行できません。代わりに、これらのサービスを機能させるために必要なすべてのデータを保存および処理するために、数千または数百万台の接続されたコンピューターが必要です。 たと

  2. STREAMとは何ですか?

    STREAMは、k-中央値問題のために作成された個別パスの定数要素近似アルゴリズムです。 k-medians問題は、ポイントとそれらが割り当てられているクラスター中心との間の二乗和誤差(SSQ)が最小になるように、N個のデータポイントをk個のクラスターまたはグループにクラスター化することです。アイデアは、同じクラスターに同様のポイントを割り当てることです。これらのポイントは、他のクラスターのポイントとは異なります。 ストリームデータモデルでは、データポイントは1回しか表示できず、メモリと時間は制限されています。高品質のクラスタリングを実装できます。STREAMアルゴリズムは、データストリーム