キャッシュサーバーを作成
するというアイデアは長い間思いつきましたが、適切な理由とツールを使用して作業を開始することはできませんでした。 キャッシュサーバーを作成したい理由は2つあります。
経験 、必要な機能を簡単に追加できる機能(memcachedコードを見た人なら誰でも私を理解できるでしょう)。 私にとっての主な問題はC ++でした。 私はしばしば彼に出くわすという事実にもかかわらず、私は彼がまったく好きではありません。 私はホリバーを始めず、その欠点について書きません。 私は彼が子供の頃からケフィアほど好きではありません。私たちは彼と相容れません。 私にとって、大きなニュースは
FreePascalの存在でした。 むかしむかし、Delphiでの仕事の経験があったので、Pascalで私は「あなた」でした。 FreePascalがクロスプラットフォームであることが判明したことに特に驚きました(Delphiはまったく輝きませんでした)。
キャッシュサーバーには何が必要ですか? 基本的には
ハッシュテーブル 、それ
へのネットワークアクセスおよび
時代遅れのレコードを
削除する手段。
ハッシュテーブルを実装するために、
チェーンベースの衝突解決を備えたバイナリツリー(最良の方法ではないかもしれません)を選択しました。 ネットワークインターフェイスは、ノンブロッキングソケットを使用して実装されました。
サーバーを操作するために、GET、PUT、REMOVEの3つのコマンドの単純なテキストプロトコルを投げました。
キーデータのリクエスト:
GET <key-len> <key> \ r \ n回答オプション:
- NODATA \ r \ n
- DATA <data-len> <data> \ r \ n
サーバーにデータを配置します。
PUT <key-len> <key> <data-len> \ r \ n
<データ> \ r \ n回答オプション:
- 成功\ r \ n
- HIT \ 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明けましておめでとうございます!