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明けましておめでとうございます!



All Articles