Top / FACE-NAP 2.4.1化計画

FAACE-NAP±R 計画(SLAVA2.4.1化)

はじめに

現在のFace-NapはSLAVA2.1.1系をベースにカスタマイズを施したものですが、今後のバージョンアップにあたり

  • 安定化*1
  • ソースコードの整理*2
  • 独自機能の分離(設定ファイル等)
  • 標準SLAVAとの互換性
  • 機能の追加

を考慮し、ベースをSLAVA2.4.1にしたFACE-NAPの開発を行います。 ※予定
開発中の進捗状況もあわせて このページに記載していく予定です。  ※自分のメモ的な目的で(汗

SLAVA2.4.1と2.1.1 の比較

SLAVA2.4.1は、2.1.1から多くの改良を重ね非常に完成度の高いサーバソフトであると思います。
2.1.1系と比較する場合、特に「検索」に関する内部処理が大きく異なります。

[SLAVA2.4.1の検索]

  1. 共有ファイルを単語別に分解して、検索用データベースに格納して検索処理を行うため高速&負荷が低い
  2. 英・数・カナの検索で半角・全角両方ヒットする

[その他の違い]

  1. 高機能なリダイレクト
  2. 優れたな英語ランゲージ対応
  3. ブロックワードの所有数などを把握できる

2.1.1を選んだ理由

現在のFACE-NAPはSLAVA2.1.1をベースに作られております。
上記のメリットにもかかわらず SLAVA2.1.1を選択したのは下記の理由がありました。

  • 人数が増えると重い・・・

当サーバの下記の環境で50人未満程度では運用上問題なかったのですが、
それ以上の人数では体感的に非常に重くなってしまう状況だったため、残念ながら断念せざるをえませんでした。
(Pentium3-800MHz/256Mbyte memory/B-Flets 100Mbps) 稼動状況はこちら→近況

問題点

上記の項目で「検索に優れている」と説明しましたが、仕様を確認したところ
検索に関する "日本語特有の問題点" が存在することがわかりました。 ※想定してなかったのでちょっとショック(汗

■SLAVA2.1.1の検索

  1. 共有ファイルは各ユーザー別にフルファイル名で管理されている
  2. 検索命令があると、全ユーザーの共有ファイルのファイル名から検索文字列を検索する
  3. 結果を出力
  • 全ユーザーの共有ファイルを検索するため、それなりに負荷が高い
  • ファイル数に比例して負荷が高くなる
  • 半角・全角カナ文字を別の文字として認識するため、検索でヒットしない



■SLAVA2.4.1の検索

  1. 共有ファイルを登録するときに、文字列を単語単位で分解する(キーワード)
  2. 専用のデータベースにキーワード別に分類され、英数カナはすべて半角小文字に変換して登録される
  3. 検索命令があると、英数カナは半角小文字に変換してキーワードデータベースを検索
  4. キーワードにヒットした場合、結果を出力する
  • 全ユーザーの共有ファイルは検索しないため早い
  • ファイル数に比例しない ※キーワードに該当するファイル名の個数が集計されるため
  • 半角・全角が異なっていてもヒットする

    [具体例]
    ────────────────────────────────────────
    【映画】 大城小事 - Leaving Me Loving You - 2003香港 DVDRip 日本語字幕.avi
    ────────────────────────────────────────
      ↓
    ────────────────────────────────────────
    映画/大城小事/leaving/me/loving/you/2003/香港/dvdrip/日本語字幕
    ────────────────────────────────────────
    に分割される
      ↓
    (キーワード用データベース)
    ────────
    映画 :1234件
    ────────
    大城小事:10件
    ────────
    leaving :65件
    ────────
    you :2182件
    ────────
    ・・・
    ────────
    のように1つのデータに格納される
      ↓
    検索要求がきた場合、上記のキーワードの中から検索する

    ※わかりやすく簡略化した説明のため、実際のデータ構造とは異なります



■問題点1

┌───────
│ヒットしない
└───────
上記の例の場合、「 映画 」や「 leaving 」という単語で検索すると正常に検索結果が表示されるが、
問題となるのは、下記のような場合に発生する

  • 例)
    「 大城小事 」 や 「 日本語字幕 」 などのような完全一致の単語で検索 →→ ヒットする
    「 小事 」 や 「 字幕 」   のように登録済みの単語の一部を検索 →→ ヒットしない

という現象が発生します。
つまり、現状の仕様として「英・数・漢字・ひらがな・カタカナ」の連続した文字列の境目を判断してキーワードとして処理を行うため、
連続した漢字の一部を検索してもヒットしない現象が発生します。(ひらがな や カタカナでも同様)
たとえば、簡単な例で言うと

  • 例)「 日本語化パッチ 」というファイル名の場合
    • 「 日本語化 」 or 「 パッチ 」 or 「 パッチ 」 → ヒットする
    • 「 日本 」 or 「 日本語 」 → 1件もヒットしない

という現象が起こります。
※SLAVA2.1.1では、ファイル名の部分一致のため 上記の場合でもヒットする

SLAVAの産地でもある英語圏では、「 This is a pen 」 のように、すべて英単語(あたりまえ)のため上記のような問題も起こらず、非常に効率の良い方法だといえます。
しかし、日本語の場合ではそのメリットが生かせずにデメリットになってしまうことが仕様上おこってしまうことになります。



■問題点2

┌─────────────
│共有の読込時に非常に重い
└─────────────
上記検索の仕様で「 単語をキーワードに分解する 」という部分を説明しましたが、付随する問題点がもうひとつあります。
ファイル名→キーワード文字列の分解は、ログイン時の共有ファイルを更新するときに行われますが、その処理が非常〜〜に重いのです。
この問題も、SLAVAの産地でもある英語圏では「半角スペース」と「記号」程度を判断するだけの処理のため大きな負荷にならないですが、日本語の場合ではそうはいきません。
判断する種類が非常多いため負荷に大きな影響を与えてしまいます。

 ■英語  :半角英数+半角記号
 ■日本語 :半角英数+半角記号+全角英数+全角記号+漢字+全角ひらがな+全角カタカナ+半角カタカナ+濁点

これらの処理を、「 すべての共有ファイル名の1文字ずつ 」処理していくわけです・・・・
そのため、サーバの再起動時などでログインが集中するときには手に負えないような状態になります(汗

移行のための課題

検索に関する問題の修正

この部分は、すでに修正済みでSLAVA2.1.1と同様の方法で検索するようなコードに書き直しましたため問題が改善されます。
さらに、全角・半角のあいまい検索の場合は、キーワードデータベースを使用して検索する方法をとるため
負荷はSLAVA2.1.1と同程度になりますが、あいまい検索もヒットするようになります。

ログイン/thread*3処理の軽量化

キーワード文字列の分解処理を「 英・数・カナ 」のみに限定することで、処理の負荷を軽減する。
(※現在着手中)
また、チャットに関連する部分(自動入室・強制再入室)等で負荷の高い処理を見直し軽量化する。

旧バージョンとの互換性・リンク

旧バージョンやシェアの高い「なぷぅ」や「Lucifer」などのSLAVA2.1.1系サーバとの互換性を重視し
SLAVA2.1.1とのリンク(NetBuild18)に変更する。 ※詳細は未定
また、移行のためにはuserファイル等の下位互換も必要。

独自機能の分離

現在のバージョンは好き勝手にuserファイル等を拡張しているため、他のサーバとリンクした場合に独自に拡張したデータが欠損することがあります。
そのため、拡張した独自の設定データを別ファイルに分離することで リンク時にも欠損せずに独自の機能を利用できるような仕様とします。

その他追加(したい)機能

認証機能の個別保存および拡張

現在のバージョンで実装済みのMsgServ?を使った認証機能を拡張し、認証コードの個別保存やチャットルームへの書込で認証を行う方法を実装する

評価ポイント

人気というか、他のユーザーからの評価が記録されるようにする

サーバリンク切断時の鯖割れ防止

リンク切れのときの鯖割れを改善する。
方法としては、中継されているサーバも直接リンク状態を保っておき
中継サーバが切断された場合は直接接続に切り替える

サーバリンク時の設定項目の同期

リンクサーバ同士でポイント等の設定が異なるのも運用上よろしくないと思うので、
同期が必要だと思われる項目のみ同期させる

IRCサーバ機能

自動学習タイプのレベルの高いBOTを開発しようと思ったんですが
BOT作るよりIRCサーバ互換にしてIRCのBOT使ったほうが早そうなので。(T▽T)アハハ!

ユーザーレベルの拡張

LeechとUserレベルの中間(1.5)を拡張
使用方法はいろいろ検討していることがあるんですが、詳細は後日

マルチアカウント

一人で複数のアカウントを使い分けているユーザーの場合、転送履歴やポイント等の情報も当然別々に保存されるため運用上好ましくない。
認証や評価の管理を統一するため、親アカウントと子アカウントのデータを統一化する
(※親アカウント1つにつき子アカウント2つくらいかな? 認証や評価の管理を統一するため、親アカウントと子アカウントのデータを統一化する*4

進捗状況

  • 2004/03/20
    • ひたすら調査に没頭。とりあえず仕様の違いを洗い出してメモ
  • 2004/03/23
    • 負荷テストのためテスト鯖を立ててユーザーさんに協力を依頼(^人^)感謝♪
    • 2〜30人でも、やっぱりかなり重い・・・
  • 2004/03/25
    • 全体の動作をながめて見て、軽量化できる箇所を検討してみる。
    • 検索部分とかDBの管理方法の違いをチェック
  • 2004/03/27
    • 検索部分の軽量化検証中に問題発見!これは、、ん〜〜どうしよう。。
    • 英語圏なら問題にならない部分だけにもったいない
  • 2004/03/28
    • とりあえず、検索部分をSlava2.1.1から部分的に移植してみる
    • なんとか検索に関しては動作したようなので、次はキーワード分割処理の軽量化を。
  • 2004/03/29
    • せっかくまとめたのでHPに書き込んでみる

memo

要望 とか アイデア とか 励ましの言葉 とか ラブレター*5 とか

  • 2008-05-10 (土) 02:27:39 Guest -- I love you.
  • 2008-02-20 (水) 01:26:26 Guest -- IRC化ってことでブラウザからもチャットできる機能がつけばいいなと思ってます。
  • 2004-12-08 (水) 08:04:01 かお -- 2.4.1の機能を2.1.1に移植する方針で進めてまして、、、
  • 2004-12-04 (土) 16:17:14 N -- 2.41化、待ってます!
  • 2004-09-21 (火) 09:06:25 かお -- ユーザーデータの同期はLANかどうかに関係ないですよ
  • 2004-09-04 (土) 21:33:11 青龍 -- かおさん、これからも陰乍ら応援していますペコ↓m(_ _;)m↓ペコ
  • 2004-09-04 (土) 21:32:16 青龍 -- LAN上だと3個通して間にパスするー見たいにしたらユーザー落ちる事はないのですかね? 厨な質問すみません
  • 2004-09-04 (土) 21:30:54 青龍 -- リンク鯖だと(LAN内)ユーザー名その他個人パス等が上手く同期できないのでしょうか?
  • 2004-09-04 (土) 21:29:53 青龍 -- NET浦島ですが・・・σ(^_^;復活しましたので、よろしくお願いします・・・
  • 2004-08-21 (土) 16:17:33 かお -- あ。認証コードそうなってましたっけ?忘れてました(汗
  • 2004-08-21 (土) 07:39:09 青龍 -- 今後ともFACE-NAPの開発、頑張ってください!私は、負荷テスト参加程度しかできませんが・・・応援しています。 今度某鯖で挨拶しますので、今後ともよろしくお願いします。
  • 2004-08-21 (土) 07:36:31 青龍 -- もし宜しければ、その他、駄目文字等あるのでしたら、掲示してもらえると、大変助かるのですけど・・・
  • 2004-08-21 (土) 07:35:02 青龍 -- 認証コードの件なのですが・・・誤BANになって自爆することが多い点で、ローマ字大文字は、使えないようですね・・・認証コード返信時うたたねからだと自動で小文字に変えられてしまうようです・・・
  • 2004-08-21 (土) 07:32:34 青龍 -- 負荷テストの時から鯖接続して参加させて貰ってました・・・
  • 2004-08-21 (土) 07:31:37 青龍 -- かおさん・・・HPに書き込みするのは、初ですがいつも大変お世話になっております。(FACE-NAP)w
  • 2004-07-21 (水) 11:09:32 かお -- 2バイト文字で負荷がかからなくて有効な機能を取り込む方向で進めたいと思ってます。
  • 2004-07-21 (水) 11:07:49 かお -- いろいろ調査した限りでは、2バイト文字を使う前提では 2.4.1のほうが優れているとはどうも考えにくいんですよね・・・(素
  • 2004-07-21 (水) 11:06:26 かお -- あ。UserとModeratorの中間ですね(;´▽`A``
  • 2004-07-17 (土) 04:54:31 Cappuccino -- UserとLeechの中間だと0.5じゃないかな?
  • 2004-07-17 (土) 01:23:57 Cappuccino -- 久しぶりにカキコw 以前2.4.1ベースのFASS-NGで2.1.1とのリンクが(一応)できるようにしたことあったけど、BANリスト等の同期がうまくいかなかったので、そのへんをがんばってください(他人任せでごめん)。共有時の負荷さえなんとかなれば(別スレッドに分けてしまえばメインスレッドの流れを圧迫しないで済むかも)2.4.1の方が2.1.1よりいいですからね。がんばってください。
  • 2004-06-06 (日) 20:25:05 かお -- パスブロックにID名と同一←これはいいですね。実装する方向で検討します
  • 2004-06-06 (日) 20:24:27 かお -- 登録済みIDの再登録作業←これは管理者が本人確認のうえ再登録するべきだと思います
  • 2004-06-05 (土) 15:03:16 255 -- パスブロックにID名と同一、又はID名@utataneなパスをブロックする出来るようにと要望カキコ。
  • 2004-06-05 (土) 14:56:10 255 -- ID乗っ取り防止の為、登録済みIDの再登録作業の乱数生成⇒nuke⇒registerの登録作業を今実装されてる認証機能を強化して自動化できないかのと要望カキコ
  • 2004-06-05 (土) 14:44:21 255 -- ↓誤字スマソ>>可能性があるのでお勧めできない。
  • 2004-06-05 (土) 14:42:32 255 -- パスワードの入場制限だとIDが乗っ取られる可能性がないのでお勧めできないかと
  • 2004-06-05 (土) 07:26:40 あど -- [パスワードで入場制限]の方が安全では? ([ログイン認証]ではなく)
  • 2004-06-05 (土) 02:45:03 -- ファイル名の中のあるキーワードのみ読み取るのは不可能でしょうか
  • 2004-05-30 (日) 06:55:09 かお -- その要望は以前からあったのですが、仕組みを知ってしまうと他の人の共有を参照しただけでわかってしまうんですよね
  • 2004-05-29 (土) 14:55:13 -- 要望です、ブラックファイルよりも、あるワードのファイルを共有していないとリーチになるとか出来ませんでしょうか・・
  • 2004-05-26 (水) 14:53:39 かお -- ここであげた「追加したい機能」は、既存バージョンをベースに実装したいなぁ。。。
  • 2004-05-26 (水) 14:52:35 かお -- かなり開き直りまして、Slava2.4.1のリダイレクト・参照機能をとりあえず移植しました。
  • 2004-05-11 (火) 09:16:15 かお -- (´ヘ`;) う〜ん・・・テスト稼動もキツイ位重い・・・
  • 2004-05-08 (土) 01:20:12 Taka -- ハブ使わなくて良いのは楽ですね^^ 是非実装して頂きたいです。o(*⌒O⌒)bふぁいとっ!!
  • 2004-05-07 (金) 05:38:44 ARIOS -- うっちーそんな暇あんのか?(あ´ー`)y-~~
  • 2004-05-05 (水) 17:34:30 green -- 葱も一緒に しょわせて 貰えんか
  • 2004-04-30 (金) 03:14:50 uchi134 -- 手伝いましょっか?>以下同文
  • 2004-04-03 (土) 22:52:00 R2-D2 -- 手伝いましょっか?<心にも無い事を言ってみる
  • 2004-04-01 (木) 23:18:31 せふがど -- ご苦労様です。
  • 2004-04-01 (木) 11:16:34 sapp -- (゚д゚)ウマー 期待してます^^ リンクサーバーからのチャンネルメッセージの変更の件よろしくお願いいたしますです(*- -)(*_ _)ペコリ
  • 2004-03-31 (水) 02:55:51 かお -- お恥ずかしいものを(;´Д`A ```
  • 2004-03-30 (火) 21:05:46 u*j*2*6* -- なんかすごいですね!!

*1 ソースに慣れていないので、かなりの動作検証が必要かも
*2 差分とってなかったし(汗
*3 定期的に実行される処理のこと
*4 親アカウント1つにつき子アカウント2つくらいかな?
*5 要・写真

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Counter: 5789, today: 1, yesterday: 5
Last-modified: Mon, 22 Mar 2010 11:25:07 JST (3068d)
検索
ログイン
ユーザID または e-mail:

パスワード:

IDとパスワードを記憶

パスワード紛失

新規登録
メインメニュー
アンケート
NAP最新版の感想は?
動作が軽くなった
メモリ消費が減った
便利な機能が増えた
あまり変わらない
悪くなった