encached:キャッシュサーバー

キャッシュサーバーを作成するというアイデアは長い間思いつきましたが、適切な理由とツールを使用して作業を開始することはできませんでした。 キャッシュサーバーを作成したい理由は2つあります。 経験 、必要な機能を簡単に追加できる機能(memcachedコードを見た人なら誰でも私を理解できるでしょう)。 私にとっての主な問題はC ++でした。 私はしばしば彼に出くわすという事実にもかかわらず、私は彼がまったく好きではありません。 私はホリバーを始めず、その欠点について書きません。 私は彼が子供の頃からケフィアほど好きではありません。私たちは彼と相容れません。 私にとって、大きなニュースはFreePascalの存在でした。 むかしむかし、Delphiでの仕事の経験があったので、Pascalで私は「あなた」でした。 FreePascalがクロスプラットフォームであることが判明したことに特に驚きました(Delphiはまったく輝きませんでした)。

キャッシュサーバーには何が必要ですか? 基本的にはハッシュテーブル 、それへのネットワークアクセスおよび時代遅れのレコード削除する手段。

ハッシュテーブルを実装するために、 チェーンベースの衝突解決を備えたバイナリツリー(最良の方法ではないかもしれません)を選択しました。 ネットワークインターフェイスは、ノンブロッキングソケットを使用して実装されました。

サーバーを操作するために、GET、PUT、REMOVEの3つのコマンドの単純なテキストプロトコルを投げました。

キーデータのリクエスト:
GET <key-len> <key> \ r \ n
回答オプション:サーバーにデータを配置します。
PUT <key-len> <key> <data-len> \ r \ n
<データ> \ r \ n
回答オプション:データを削除する:
<key-len> <key>を削除 \ r \ n
回答オプション:削除で始まった問題:バイナリツリーへのマルチスレッドアクセスにより、データが破損する可能性があります。 ここでは、興味深い解決策を考えて考える必要があります。

刺激的な共同開発を期待して、私は自分の開発をgithubに投稿しました。 Habrのユーザーの中に有能なプログラマを見つけることを本当に期待しています。 githubのプロジェクトアドレス: github.com/mdevils/encached

スレッドセーフハッシュテーブルを整理するための良い方法を教えていただければ幸いです。

サーバー開発計画

新しいチーム:APPEND、PREPEND、INC、DEC、CAS(比較と交換)、STAT、TAG(タグ入力)。
ロックなしのマルチスレッド書き込み/読み取りの完全サポート。
占有メモリの制御。
Windowsで動作します。

これで、デーモンはLinux(x86、x86_64)、Mac OS X(x86、x86_64)のポート2332で実行されます。 おそらくBSDで動作しますが、テストする方法はありません。

サーバーは通常どおりに作成されます-makeコマンドを使用します。 引数「-r」で始まります。 マシンには、FreePascalバージョン2.4.0がインストールされている必要があります。

PS明けましておめでとうございます!

Source: https://habr.com/ru/post/J80065/


All Articles