http://www.asyura2.com/13/kanri21/msg/533.html
Tweet |
(回答先: 『阿修羅掲示板のアクセス・ランキングは、阿修羅掲示板の「管理人さん」が操作している』説についての管理人の説明 投稿者 管理人さん 日時 2018 年 8 月 16 日 08:31:24)
http://www.asyura2.com/18/senkyo249/msg/287.html#c80
に書いてある件についての説明
> 通常、阿修羅掲示板の過去の記事は、非常に低い値に設定され直されます。
ランキングデータベースが過去何度かぶっ壊れた時にリセットされました。
最近はぶっ壊れてないのでそのままです。
> また、阿修羅掲示板のアクセスランキングのページで表示されるアクセス数は、記事本文に表示されるアクセス・カウンタに表示されるアクセス数よりも、大きい数である場合があります。
これは1日に一度合わせてます、アクセスランキングの数にアクセス・カウンタに表示される数が上書きされます。要するに朝には同じになってます。
何を言ってるのか不明だと思いますので説明します。
アクセスランキングプログラムの処理は非常に膨大で、管理人も何をどうやって処理しているのか難しくてよくわかりません。
スーパーな技術者にお願いして1年くらいかけて作っていただいたものです。
何が難しいのかの項目だけ書いてみます。
・毎日大量のアクセスがある。
・記事も大量にある。
・それぞれの記事のアクセス数を数えている。
・それぞれの記事の1時間、24時間、3・7・30・90・365日と全期間のアクセス数をランキングに出す。★これが一番難しそう。
・それぞれの板ごとのアクセスランキングを作る。
★これが一番難しそう、なところを説明します。
阿修羅掲示板の全ページ数は100万ページ以上あります。
全期間のアクセス数を数えるためにはカウンターが100万個だけ必要です。
365日のアクセス数を数えるためには、366日目になったら其の分のアクセス数を差し引いて処理するのでアクセスカウンターには数だけで無く日付の情報が必要です。さらに板ごとの情報も。
このため、あるページについての情報は直近1年分の毎日のアクセス数が必要となります。
すると100万ページx365日=365万の情報が必要。
情報がここまで多くなると、適当に作ったプログラムでは時間がかかって処理時間がパンクして運用できません。
1日の処理で24時間のランキング、3日間ランキング、7,30,90,365日ランキングを毎日稼働するように短時間で処理が必要です。
ランキングですからソートして大きい順に並べますが、全データ数365万あるので処理が大変。
とまぁ、いろいろと処理があるのですが、さらに毎秒ページアクセスの情報がいくつも加算されていきます。
それらの処理でアクセスランキングのCPUが手一杯になっています。
毎回のページアクセスで、そのページのそれまでの総アクセス数をアクセスランキングサーバーに問い合わせしているとサーバーの処理が限界になってアクセスカウントができなくなる可能性が出てきたのです。
そこで、毎回のアクセスではアクセスランキングサーバーにはページアクセスを加算するだけにして(1行加算するだけなのでCPU負担は少ない)、アクセスランキングサーバーではそれまでのアクセス数の数字は戻さない(今までの総アクセス数を戻す処理はCPU負担が大きい)。
その代わりに、別のサーバーで超簡単な仕組みでアクセス数を数えてそれを表示する。
おおよそ同じ数になるはずだけど違ってくる場合もあるだろう。
そのためにそのページの1日の最初のアクセスで、アクセスランキングサーバーからアクセス数を1回だけ取得して、それを仮アクセス数に上書きする。ということをやっています。
まぁ、要するに、アクセスランキングサーバーの数字を正として使うんだけど、アクセスランキングサーバーは忙しいので仮に別のサーバーで数えておいて1日一回リセットしてます。
参考:阿修羅のサーバー構成
asyura2.com メインサーバー。記事がある。専用サーバー:1台まるごと借りてる
asyura3.com ランキングサーバー。専用サーバー:1台まるごと借りてる
asyura.us 拍手サーバー。ホスティングサーバー。間借り。超簡単なアクセスカウンタはここで動いてます。
▲上へ ★阿修羅♪ > お知らせ・管理21掲示板 次へ 前へ
投稿コメント全ログ コメント即時配信 スレ建て依頼 削除コメント確認方法
▲上へ ★阿修羅♪ > お知らせ・管理21掲示板 次へ 前へ
スパムメールの中から見つけ出すためにメールのタイトルには必ず「阿修羅さんへ」と記述してください。
すべてのページの引用、転載、リンクを許可します。確認メールは不要です。引用元リンクを表示してください。