ホームページ システムチュートリアル Linux Pika: 大容量 Redis ストレージに適用可能なシナリオを補足します

Pika: 大容量 Redis ストレージに適用可能なシナリオを補足します

Jan 08, 2024 pm 10:14 PM
linux Linuxチュートリアル レッドハット Linuxシステム Linuxコマンド Linux 認定 レッドハットリナックス Linuxビデオ

###導入### 「大容量Redisストレージ - Pikaのすべて」では、pikaの誕生、pikaの特徴、pikaの核心、pikaの使い方について紹介しました。この記事では、pika 同期ロジックの重要なファイル、つまり「write2file」のデータ保存方法と実装原理について詳細に分析しており、非常に読む価値があります。 ピカ

pika は、360 Web プラットフォーム部門の DBA とインフラストラクチャ チームによって開発された大容量 Redis ライク ストレージです。pika の登場は、Redis を置き換えるものではなく、Redis シナリオを補完するものです。 Pika は、Redis プロトコルとの完全互換を前提とし、Redis の利便性の高い運用保守設計を継承し、大容量シナリオにおける Redis の課題である復旧時間の遅さ、マスター/スレーブのコストの高さなどを永続ストレージによって解決することを目指しています。同期、比較的壊れやすいシングルスレッド、耐荷重性、データ制限、メモリコストの高さなど。

pika マスター/スレーブ レプリケーション原則の binlog

Binlog 関連ファイルには、マニフェストと write2file の 2 つの部分が含まれています。マニフェストは、現在のログ ファイル番号と現在のログ ファイル オフセットを含むログ メタ情報を記録します。write2file num は、pika が受信したすべての redis 書き込みコマンドとパラメータを記録します。

ファイル形式

マニフェスト ファイル形式:

ログ オフセット (8 バイト)|con_offset (8 バイト、未使用)|要素数 (4 バイト、未使用)|ログ ファイル番号 (4 バイト)。

バイログ ファイル形式:

Binlog ファイルの固定サイズは 100MB です。各 Binlog ファイルは複数のブロックで構成されています。各ブロックのサイズは 64KB に固定されています。各書き込み redis コマンドはレコードと呼ばれます。レコードは複数のブロックに分散できますが、1 つの Binlog ファイルにのみ分散されるため、Binlog ファイルは 100MB より大きくなる可能性があります。

レコード形式: Header|Cmd

ヘッダー: レコード長 (3 バイト) | タイムスタンプ (4 バイト) | レコード タイプ (1 バイト)。

Cmd: 現在のブロックの残りのスペースにレコードを保存できるかどうかに応じて、redis コマンドの一部またはすべて。

実装クラス

ベーシッククラス

バージョン: mmap およびマニフェスト ファイルを通じてマップされたメタ情報クラス。

Binlog: mmap および write2file ファイルを通じてマップされたログ クラス。

PikaBinlogSenderThread: ログ消費クラス。ログ ファイルの内容を順次読み取り、ログを消費します。

基本操作

Binlog の構築

//file_size は構成ファイルで指定できます。デフォルトは 100MBです。

Binlog::Binlog(const std::string& binlog_path, const int file_size)

1.1binlog ファイルのディレクトリを作成します。

1.2 ログディレクトリにマニフェストファイルが存在するか確認し、存在しない場合は新規作成してください。

1.3 マニフェスト ファイルに従って Version クラスを初期化します。

1.4 マニフェスト内の filenum に従って対応するログ ファイルを検索し、pro_offset に従ってファイルの追加位置を特定し、ログ ポインタを初期化し、ログの内容の長さとブロック ブロックの数を記録します。

現在のログ生成ステータスを更新します

//pro_num: ログファイル番号

//pro_offset: ログ ファイルのオフセット

//完全同期が必要な場合に、スレーブ インスタンスに対応するバイナリログ情報を更新するために使用されます

ステータス Binlog::SetProducerStatus(uint32_t pro_num, uint64_t pro_offset)

2.1 write2file0 を削除します。

2.2 write2file pro_num を削除します。

2.3 新しい write2file pro_num ファイルを構築し、pro_offset スペースを埋め、version->pro_num を pro_num に、version->pro_offset を pro_offset に初期化し、それをマニフェスト ファイルに更新します。

2.4 現在のファイルサイズと block_offset を初期化します。

現在のログ生成ステータスを更新します

//filenum: 現在のログ番号

//pro_offset: 現在のログ オフセット

ステータス Binlog::GetProducerStatus(uint32_t* filenum, uint64_t* pro_offset)

3.1 version の pro_num と pro_offset を読み取って返します。

制作記録

//Put->Produce->EmitPhysicalRecord

ステータス Binlog::Put(const std::string &item)

4.1 現在のログファイルがカット条件を満たしているか確認し、満たしている場合はカットします。

4.1.1 pro_num は 1 増加し、新しいログ ファイルを初期化します (version->pro_num=pro_num、version->pro_offset = 0、binlog->filesize = 0、binlog->block_offset = 0)。

4.1.2 現在のブロックの残りのサイズが 4.1.3 Produce はループであり、アイテムのサイズが kBlockSize を超えたときに、EmitPhysicalRecord を複数回実行でき、アイテムのすべてのデータが binlog ファイルにドロップされることを保証します。ループが正常に終了するための条件左==0です。

4.1.3.1 left

4.1.3.2 左 > が利用可能な場合は、項目を保存するために複数のブロックが必要であることを意味し、初回 Type=kFirstType で EmitPhysicalRecord を複数回呼び出します。

4.1.3.3 左 > が利用可能で、EmitPhysicalRecord が初めてではない場合、Type=kMiddleType で、EmitPhysicalRecord を複数回呼び出します。

4.1.4物理レコードを送信します。

4.1.4.1 RecordHeader (長さ 3 バイト、時間 4 バイト、タイプ 1 バイト) を結合し、データを書き込み、block_offset と pro_offset を更新します。

消費ログ

//スクラッチ: 消費結果は完全な redis cmd を返します

//Consume->ReadPhysicalRecord、ReadPhysicalRecord は毎回完全なレコードを読み取り、複数のレコードで完全な redis cmd を構成します

ステータス PikaBinlogSenderThread::Consume(std::string &scratch)

5.1Consume はループであり、ReadPhysicalRecord を複数回呼び出す可能性があります。ループ終了の条件は、read Record_type==kFullType または Record_type==kLastType であることです。

5.1.1 読み取られた kBlockSize-last_record_offset_

5.1.2 データを読み取り、last_record_offset_、con_offset を更新します。

以上がPika: 大容量 Redis ストレージに適用可能なシナリオを補足しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CentosとUbuntuの違い CentosとUbuntuの違い Apr 14, 2025 pm 09:09 PM

Centosとubuntuの重要な違いは次のとおりです。起源(CentosはRed Hat、for Enterprises、UbuntuはDebianに由来します。個人用のDebianに由来します)、パッケージ管理(CentosはYumを使用し、安定性に焦点を当てます。チュートリアルとドキュメント)、使用(Centosはサーバーに偏っています。Ubuntuはサーバーやデスクトップに適しています)、その他の違いにはインストールのシンプルさが含まれます(Centos is Thin)

Centosをインストールする方法 Centosをインストールする方法 Apr 14, 2025 pm 09:03 PM

Centosのインストール手順:ISO画像をダウンロードし、起動可能なメディアを燃やします。起動してインストールソースを選択します。言語とキーボードのレイアウトを選択します。ネットワークを構成します。ハードディスクをパーティション化します。システムクロックを設定します。ルートユーザーを作成します。ソフトウェアパッケージを選択します。インストールを開始します。インストールが完了した後、ハードディスクから再起動して起動します。

Centosはメンテナンスを停止します2024 Centosはメンテナンスを停止します2024 Apr 14, 2025 pm 08:39 PM

Centosは、上流の分布であるRhel 8が閉鎖されたため、2024年に閉鎖されます。このシャットダウンはCentos 8システムに影響を与え、更新を継続し続けることができません。ユーザーは移行を計画する必要があり、提案されたオプションには、Centos Stream、Almalinux、およびRocky Linuxが含まれ、システムを安全で安定させます。

Centosのgitlabのバックアップ方法は何ですか Centosのgitlabのバックアップ方法は何ですか Apr 14, 2025 pm 05:33 PM

Centosシステムの下でのGitlabのバックアップと回復ポリシーデータセキュリティと回復可能性を確保するために、Gitlab on Centosはさまざまなバックアップ方法を提供します。この記事では、いくつかの一般的なバックアップ方法、構成パラメーター、リカバリプロセスを詳細に紹介し、完全なGitLabバックアップと回復戦略を確立するのに役立ちます。 1.手動バックアップGitlab-RakeGitlabを使用:バックアップ:コマンドを作成して、マニュアルバックアップを実行します。このコマンドは、gitlabリポジトリ、データベース、ユーザー、ユーザーグループ、キー、アクセスなどのキー情報をバックアップします。デフォルトのバックアップファイルは、/var/opt/gitlab/backupsディレクトリに保存されます。 /etc /gitlabを変更できます

Dockerの原則の詳細な説明 Dockerの原則の詳細な説明 Apr 14, 2025 pm 11:57 PM

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

セントスにハードディスクをマウントする方法 セントスにハードディスクをマウントする方法 Apr 14, 2025 pm 08:15 PM

CentOSハードディスクマウントは、次の手順に分割されます。ハードディスクデバイス名(/dev/sdx)を決定します。マウントポイントを作成します( /mnt /newdiskを使用することをお勧めします);マウントコマンド(Mount /dev /sdx1 /mnt /newdisk)を実行します。 /etc /fstabファイルを編集して、永続的なマウント構成を追加します。 Umountコマンドを使用して、デバイスをアンインストールして、プロセスがデバイスを使用しないことを確認します。

Dockerデスクトップの使用方法 Dockerデスクトップの使用方法 Apr 15, 2025 am 11:45 AM

Dockerデスクトップの使用方法は? Dockerデスクトップは、ローカルマシンでDockerコンテナを実行するためのツールです。使用する手順には次のものがあります。1。Dockerデスクトップをインストールします。 2。Dockerデスクトップを開始します。 3。Docker Imageを作成します(DockerFileを使用); 4. Docker画像をビルド(Docker Buildを使用); 5。Dockerコンテナを実行します(Docker Runを使用)。

メンテナンスを停止した後のCentosの選択 メンテナンスを停止した後のCentosの選択 Apr 14, 2025 pm 08:51 PM

Centosは廃止されました、代替品には次のものが含まれます。1。RockyLinux(最高の互換性)。 2。アルマリン(Centosと互換性); 3。Ubuntuサーバー(設定が必要); 4。RedHat Enterprise Linux(コマーシャルバージョン、有料ライセンス); 5。OracleLinux(CentosとRhelと互換性があります)。移行する場合、考慮事項は次のとおりです。互換性、可用性、サポート、コスト、およびコミュニティサポート。

See all articles