nDiki : Memcached
Memcached
設定ファイルいらずのハイパフォーマンス分散メモリオブジェクトキャッシュシステム。 Perl、PHP、Python、Java、Ruby、C#、C用のAPIが既に提供されている。
Memcached はメモリ上にキャッシュし特にファイルへ書き出したりしない。
拙作の WikiEngine 「WiKicker」も WikiPage の HTML 変換結果を Memcached 上にキャッシュする機能を備えている。
スポンサード リンク
Related term
2004年1月15日 (木)
■ [ WiKicker ] Memcached を使った検索結果のキャッシング

WiKicker の機能のうち、ヘビーな処理が必要なものの筆頭に検索機能がある。 今のところ単純に全ページに対してマッチング処理を行うのでページ数が増えるに従い遅くなってくる。 ロボットの総ナメが怖い*1ので NaneyOrgWiki では load average が 5 を越えたら一時的に検索機能が停止するようになっている。
そこで Memcached を使って検索結果をメモリキャッシュするようにしてみた。 本当はWikiPageのパース・レンダリング結果をキャッシュして、通常のページ表示を高速化したいと考えているのだが、今はまず影響の少ないところから(何でもいいから Memcached を使ってみたいというのが本音)。
で、実装してみた。 キャッシュがヒットすればすばやくレスポンスを返せるはずなのだが...やはり微妙だな。 速くなった気もするのだが、サーバの状態によってかなり遅い時もあるようだし。 まずはこれでしばらく運用テストしてみて、効果がありそうだったら他の部分にも適用することにしよう。
- [ WiKicker ] 古くても検索キャッシュを返す (2004-01-20)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
2004年2月1日 (日)
■ WiKicker 0.20 リリース

1ヶ月ぶりにリリース。 tDiaryテーマ対応・共有メモリ使用・Memcached使用など実験的なコードを沢山いれた。
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- [ WiKicker ] 憧れのサイドバー (2004-01-23)
- www.naney.org サーバ断続的にダウン (2006-04-30)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- [ DiKicker ] くっつき BBSをくっつけてみた。 (2004-05-04)
2004年2月14日 (土)
■ [ WiKicker ] WikiPage のHTMLレンダリング結果のキャッシュ

ようやく、HTMLレンダリング結果のキャッシュに着手。 cookie ベースでユーザ毎のカスタマイズ(名前やTZ)があるので、デフォルトのまま表示リクエストのみキャッシュが効くようにする。 キャッシュによる高速化を受けるのでは投稿してくれている常連ではなく検索エンジンから飛んできた一見さんということになるが、サーバの負荷が下がれば間接的に常連さんへのレスポンスも良くなるかと。
変換されたHTMLフラグメントをMemcachedにキャッシュ。 最初、キャッシュを有効にすると逆に遅くなってしまって「まいったな」と思ったが、リクエスト処理終了毎にdisconnect_all するようにしたら、キャッシュの効果を体感できるぐらいの速度が出るようになった。
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- [ WiKicker ] Last-Modified: 実装準備 (2003-09-17)
- DiKicker に grep 検索機能を追加 (2007-02-02)
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
2004年2月15日 (日)
■ [ WiKicker ] Memcachedのメモリ使用量

現在 NaneyOrgWiki には946のページあるのだがHTMLフラグメントをMemcachedにキャッシュさせて、メモリ使用量が 24MBぐらい(検索結果キャッシュも含まれる)。 キャッシュの expires は2時間(AutomaticLinkが無効な時にキャッシュした場合は30分)。 こんなものかな。 現在 max 32MB で Memcached を起動しているけど、20MBぐらいにして積極的に古いのは削除させてもいいかもしれない。
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] プレビューをレンダリング中も逐次出力するように (2004-05-03)
- [ WiKicker ] 古くても検索キャッシュを返す (2004-01-20)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- [ WiKicker ] 憧れのサイドバー (2004-01-23)
2004年6月5日 (土)
■ [ WiKicker ] キャッシュまわりにバグ

Memcached まわりをいじったので、キャッシュ具合をテストしていたら変な現象が。 WikiPage が表示されるべきところに、検索結果が表示されている。 あれ?
@ ページの内容が表示されるところに検索結果が
WiKicker では WikiPage のレンダリング結果も検索結果もキャッシュしているが、それぞれ別のキャッシュキーになるようにしている (WiKickerのバージョンを $V とすると、'$V:h:ページ名' と '$V:s:検索語')ので混ざるはずがないんだけれどな。 キャッシュしているデータの形式も違うし。
最初は Memcached まわりのアップデートで不具合がでたのかと思ったが、戻しても変わらない。ということは、ずっと以前からこの問題が発生していたのか。 やば。 設定でニックネームを設定している(cookie に保存している)と、その Web ブラウザに対してはキャッシュ機能が働かないようになっているので発見が遅れてしまった。
で結局コードをチェックしてみたら「WikiPage 表示と検索結果表示の View クラスを同じにしていたため、検索結果のレンダリングが WikiPage レンダリング結果と同じ領域にキャッシュされる」という風になってしまっていた。 ということで誰かがページ名で検索するとそれがキャッシュされてしまい、ページを読もうとしてもキャッシュ破棄されるまで検索結果が表示されてしまうというひどい状況になっていたと。
修正。
@ キャッシュキーのバグ
Memcached の出力をチェックしていたら、たまにエラーが起きていることを確認。 Memcached のプロトコルをチェックしたら、キーには制御文字と空白は使えないとある。 Cache::Memcached を見たらキーはそのまま through するだけ。 ということでページ名に空白が含まれている場合などの時には、まずい事になっていたようだ。 こちらは、キーを自前でエンコーディング(ページデータベースファイル名の作成に使っている base64 の亜種)するように修正。
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- [ WiKicker ] Memcached を使った検索結果のキャッシング (2004-01-15)
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] Storable 永続化データの互換性 (2005-06-06)
■ Cache::Memcached 1.13 の Perl 5.005_03 対応

WiKicker で使用しているキャッシュシステム Memcached 用の Perl API Cache::Memcached が新しくなっていたので、入れ換え。
1月に入れた時と同様、Perl 5.005_03 ではそのまま動かないので一部を修正。 前回はCVSスナップショット(Memcached.pm revision 1.8)に対する修正だったので手元で修正しただけだったが、今回はパッチも作っておく。
修正点は
- our を使わないようにする。
- fields::new を代替コードに。
- IO::Handl::blocking を代替コードに。
- use bytes を使わないようにする。
といったところ(WiKicker で使っているところのみ修正)。
以前は Use of uninitialized value がかなり出ていたのだが、 Cache::Memcached のコード自体が綺麗になったのかこれらも出なくなっていい感じ。
- Cache-Memcached-1.13-5.005_03-20040605.diff
- Cache-Memcached-1.13 ディレクトリのある場所で patch -p0 < パッチ
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- Memcached 1.1.11 (2004-06-05)
- WiKicker の Makefile.PL を Module::Inst... (2006-02-10)
■ Memcached 1.1.11

Perl API (Cache::Memcached)のアップデートのついでに、Memcached 自体もアップデート。
cd /tmp wget http://www.monkey.org/~provos/libevent-0.8.tar.gz tar zxvf libevent-0.8.tar.gz cd libevent-0.8 ./configure make cd .. wget http://www.danga.com/memcached/dist/memcached-1.1.11.tar.gz tar zxvf memcached-1.1.11.tar.gz cd memcached-1.1.11 CFLAGS='-L../libevent-0.8 -I../libevent-0.8' ./configure --prefix=$HOME/local/memcached-1.1.11 make make install
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- www.naney.org サーバ断続的にダウン (2006-04-30)
- 私的10大ニュース2004 [ comp ] (2004-12-31)
- Twitter への書き込みを自動的に Skype ムードメッセージに設定する (2008-02-25)
2004年7月3日 (土)
■ [ WiKicker ] 分あたり100アクセスオーバー

たまにあるテレビ放送後の猛烈アクセス。
RecentLogでチェックしてみたところ、1分あたりの処理数が100を超えていた。 ここ最近は、いっても40台だったから驚き。
レスポンスは悪かったものの load average は極端には上がっていなかった。SpeedyCGI のパラメータの調整がいい感じだったようだ。 ほとんど(編集ではなく)閲覧のみのアクセスだったことで、Memcached によるキャッシュもかなり有効に働いていたと思われる。
- www.naney.org サーバ断続的にダウン (2006-04-30)
- [ WiKicker ] WikiPage のHTMLレンダリング結果のキ... (2004-02-14)
- [ WiKicker ] Memcachedのメモリ使用量 (2004-02-15)
- 私的10大ニュース2004 [ web ] (2004-12-31)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
2004年7月31日 (土)
■ Cache::Memcached 1.14 の Perl 5.005_03 対応

1.14 が 7月27日にリリースされていたのでパッチ作成。 1.13 用のパッチがあたったのでそのままいけるかなと思ったが、テストしたところまたいくつかの非互換コードが増えていたのでそれらの修正を行う。
tar zxvf Cache-Memcached-1.14.tar.gz
cp -a Cache-Memcached-1.14 Cache-Memcached-1.14.orig
patch -d Cache-Memcached-1.14 -p1 \
< Cache-Memcached-1.13-5.005_03-20040605.diff
find Cache-Memcached-1.14 -name '*.orig' -exec rm {} ';'
emacs Cache-Memcached-1.14/Memcached.pm
LC_ALL=C TZ=UTC0 diff -Naur \
Cache-Memcached-1.14.orig Cache-Memcached-1.14 \
> Cache-Memcached-1.14-5.005_03-20040731.diff
新規修正点は
- Socket モジュールでのインポートで IPPROTO_TCP が追加になったところが実験環境でエラー。コードの中では利用していないので削除。
- ChangeLog 中の下記のため @+ を使うようになったようだが、5.005_03 では定義されていないのでエラー(perl.*delta のどこにものっていないのでチェックに苦労。perlretut に言及があって Perl v5.6.0 から提供されるようになった事を確認)。Cache::Memcached 1.13 で行っている pos を使った処理に戻す。
2004-07-19
* don't use pos() because it doesn't seem to work in
taint mode. use $+[0] instead. (Dave Evans <..@djce.org.uk>)
それからパッチの作り方を変更。patch の man の通り LC_ALL=C TZ=UTC0 にするのとオプションを -Naur を使うように。
また 1.14 から String::CRC32 が必要になった。
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- Time::Local::gmtime の範囲チェック (2003-12-23)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- 最新の Module::Install は Perl 5.005_03 ステ? (2006-04-29)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
2004年12月31日 (金)
■私的10大ニュース2004 [ comp ]

@ cool programs
- pdumpfs
- Memcached
- 簡単・高速なキャッシュシステム。使える。
- Firefox
- Subversion
- 将来的に CVS から移行する事を考えて試験的に導入。良い。Windows でも TortoiseSVN のおかげで簡単に利用できる(CVS にも TortoiseCVS が出て便利になった)。
- 影舞
- 今年前半のプロジェクトで活躍。
- PAR
- NSIS
- Template Toolkit
- Webアプリケーション開発プロジェクトで採用。www.naney.org の静的コンテンツの生成でも使い始めた。
@ Palm OS 生活復活
PEG-TJ25を購入し、Palm OS 生活復活。 最初はおもちゃのつもりで買ったのだが、プロジェクトマネジメントなどにシフトした仕事のスケジュール管理などで大活躍。
PDA 市場の明るい話はあまり聞かないが、末長く製品が出て続けて欲しい。
- Module::Build でソースパッケージング (2005-08-24)
- DAR で差分/増分バックアップ (2005-04-02)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- Linux で使えるデスクトップ検索ツール Beagle でローカルファイ... (2006-08-08)
- wxPerl PPM パッケージ (2006-12-13)
■ 私的10大ニュース2004 [ web ]

今年の大事件、マイブームなど。
@ Web 日記を DiKicker に。
2月22日に hns から DiKicker へ移行。 自分で開発しているので好きなように改良ができて楽しい。 比較的すんなり安定したので最近はあまりコードをいじらず。
@ WiKicker 安定。後半は spam がひどい。
WiKicker の方も安定し、(管理をのぞいて)必要な機能もだいたい実装された感じ。 秋ぐらいから NaneyOrgWiki の方にも spam 的な書き込みが多発。 パターンによる書き込み拒否の実装で年末それなりに収束しつつある感じ。
@ SNS
orkut、mixi に登録。 前者はそれほどはまらずフェードアウト。
mixi の方は結構面白い。
というのが遊んでみるのに良かった。
ついついチェックしてしまうのは
の存在。 オフィスで広まったことで楽しさも増した。
来年の今ごろも継続しているだろうか? 今後カスタマイズ機能とかが充実してくれると嬉しい。
(SNSではないが)Gmailの方は登録したけどまだ活用できていない。
@ Google AdSense
導入。 USの小切手からの入金用にシティバンクの口座を開いたものの、シティバンクには数ヶ月後に4拠点閉鎖の命令がくだるなど安心できない状況ではある。
- mixiに登録 (2004-11-19)
- 21:00 [ nDiki ] hnsからDiKickerへ (2004-02-22)
- mixi 用として DiKicker に RSS生成機能を追加 (2004-11-21)
- 私的10大ニュース2003 (2003-12-31)
- サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を... (2007-04-05)
2006年4月30日 (日)
■ www.naney.org サーバ断続的にダウン

朝 www.naney.org の過去記事を確認しつつ作業をしていたら、9:00 前に急にアクセスできなくなった。 ping も通らない。 9:20 ぐらいに 1度復帰したが、また10:00 前にダウン。
それから何度も落ちては復帰を繰り返すようになってしまっている。 SSH で接続している途中にも突然刺ささるし、傍から見ていても原因が良くわからない。
昨日 WiKicker をアップデートしたから「もしかしてうちが原因?」とちょっと心配もしたりするのだが、無限ループに入ったりメモリを使い尽すようなコードが追加してはいないはずだしなぁ(ローカルでのテストではそのような現象は見られない)。
落ちる直前まで見ていてもそれほど load average が高いわけでもないようだしなぁ。
とまぁ、しばらく様子を見ているうちに NaneyOrgWiki と nDiki が Internal Server Error。 止められた。 正確には SpeedyCGI のフロントエンド speedy コマンドの実行権限を管理者に落とされた。
- (大半はロボットによるものなのだけれども) NaneyOrgWiki と nDiki のどちらか(あるいは両方)に常にアクセスがあってスクリプトが動いている
- top すると他のユーザの CGI プログラムは 'perl' か 'perl 5.00503' と表示されるのに対し、これらは speedy、speedy_backend と表示されるため、管理者の目を引きやすい
ということもあって疑われたと推測。
一応こちらでも SpeedyCGI を使わないで直接 Perl で実行するように変更してみたり、Memcached を起動するのをやめてみたりなど設定を変更してみたりするのだけれど、関係なく落ちる落ちる。
管理者がシステムの設定を変えていないで発生するようになったのなら、ハードウェア障害が起きているんじゃないかと想像してしまうのだが、実際どうなんだろうか。
結局夜 23:00 過ぎだかに落ちたあとは復帰する様子がないので(管理者が落ちたかな?)、今日はあきらめ。
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
- サーバ高負荷状態につき DiKicker 機能修正とサーバ設定変更 (2006-03-03)
- サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を... (2007-04-05)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
2007年4月5日 (木)
■ サーバの負荷が高くなったら DiKicker が 503 を返して沈静化を待つようにした

www.naney.org を収容しているサーバの負荷が高い状態。
という対処をしたけれどそれでもなかなか負荷が落ちつかない。
傾向としては SpeedyCGI のバックエンド側(speedy_backend)が MaxBackends まで起動して処理が追いつかないと、起動しているフロントエンド側 (speedy) がどんどん増えてしまうという状況のようだ。
DiKicker の高速化も順次着手しているのだけれど追いつきそうにもないので、loave average が高い時は頑張らずに無条件に 503 を返すように修正して対応(以前 hns の時にも同じことをした)。
本当は SpeedyCGI フロントエンドの数に応じて負荷の軽い処理に切り換える等工夫したいんだけれど、フロントエンドの数を取得する方法は簡単にはなさそうなんだよなあ。
- [ DiKicker ] ロック獲得リトライをさらに減らす (2007-03-14)
- [ Perl ] Log::Log4perlのはまりどころ (2004-03-02)
- www.naney.org サーバ断続的にダウン (2006-04-30)
- 私的10大ニュース2004 [ web ] (2004-12-31)
- サーバ高負荷状態につき DiKicker 機能修正とサーバ設定変更 (2006-03-03)
Related web page
先週アメリカに行ってMySQLカンファレンスや<strong>memcached</strong> hackathonに参加してきました。そこで今回は<strong>memcached</strong>コミュニティやhackathonで行われた多くの議論に関してご報告させていただきたいと思います。 前書き ご存知の通り<strong>memcached</strong>はFacebookやWikipediaをはじめとする巨大ウェブサイトのコアテクノロジーの一つとして世界中で使われるまでに到達したソフトウェアです。mixiを支えるテクノロhttp://alpha.mixi.co.jp/blog/?p=163
Memcached 並みに速いの? そうでなければ直接 Berkeley DB 使えば。http://www.moongift.jp/2008/02/memcachedb/
みんな大好きな<strong>memcached</strong>。今日はBrian AkerのC言語用クライエントライブラリについて書きたいと思います。日本語の情報がとても少なく、ドキュメンテーションも英語だけという事で興味はあるけど手をつけていないという方のお役に立てれたらなと思います。 本題の前に why lib<strong>memcached</strong>? 既にlibmemcacheが存在するのに何故、lib<strong>memcached</strong>?かと言うと理由の一つは最近libmemcacheの開発が止まhttp://alpha.mixi.co.jp/blog/?p=119
Perlの新しい<strong>memcached</strong>クライアント「Cache::<strong>Memcached</strong>::Fast」がでていたので試してみた 結論から言うと、これは使えそう。 まず、C::M::Fastは<strong>memcached</strong>-1.2.4でサポートされた、append, prepend, cas, gets, gets_multiをサポートする唯一のPerlクライアントです。また、常に問題となるCache分散にKetama consistent hashing algorithmをサポートしているためCacheの組み替えを最小限にしてCacheサーバの追加が行えますhttp://blog.nomadscafe.jp/archives/000734.html
Jacques Caron / Cache-<strong>Memcached</strong>-XS - search.cpan.orglibmemcache を使って書かれた <strong>Memcached</strong>のインターフェース。使い方はほぼ Cache::<strong>Memcached</strong> と同じっぽい。速度にどのぐらい差が出るかベンチとってみた。 #!/usr/local/bin/perl use strict; use warnings; use Benchmark qw(timethese cmpthese); use Cache::<strong>Memcached</strong>; use Cache::<strong>Memcached</strong>::XS; my $bench = timethese(10000, { 'Cache::<strong>Memcached</strong>' => sub { my $memd = Cache::<strong>Memcached</strong>->new({ servers => ['127.0.0.1:11211'],http://d.hatena.ne.jp/spiritloose/20060909/1157767723
http://jehiah.com/projects/memcached-win32/
うーん、ちょっと微妙でしょうか。問題が先にあって<strong>memcached</strong>で解決、というケースっぽいですね。求めているのはmemchaced自体の問題やつまづきポイントです。よろしくおねがいします。 おとなり質問 日経コンピューターでEA(エンタープライズアーキテクチャー)について特集した号があるようですが、いつの・・ 数百人の中企業から数万人の大企業のマネージャーや経営者層あhttp://www.hatena.ne.jp/1136440344
Sledge::Session::<strong>Memcached</strong> 作ってみた Sledge::Session::MySQL も、もう飽きてきたよね、ってことで Sledge::Session::<strong>Memcached</strong> とか作ってみた。 {{{ package Project::Config; use strict; use vars qw(%C); *Config = \%C; $C{SESSION_<strong>MEMCACHED</strong>_OPTS} = { 'servers' => ['127.0.0.1:11211', '127.0.0.1:11212'], 'debug' => 0, }; $C{SESSION_<strong>MEMCACHED</strong>_PROJNAME} = "ProjName"; }}} みたいな感じで設定して、 {{{ package Project::Pages; use strict; sub create_session { my($self, $sid)http://tokuhirom.dnsalias.org/~tokuhirom/tokulog/1599.html
WiKicker でも使っています。手軽で高速。http://www.danga.com/memcached/
I've gone ahead and done the necessary porting to get <strong>memcached</strong> up and running on Windows. As we use it for our core platform at WhatsOnWhen in our java framework as a 'long term' serialization cache for JDO objects and general data cache, we rely on it heavily - not only for good database performance, but for good performance of the application, as it loads and manages thousands of JDO objects for our location hierarchy and related data.http://www.ctoforaday.com/archives/000039.html
■よく検索されるキーワード
torrent(201) expressions(99) 竹内まりや(76) x31(38) ドラマ(30) perl(29) ノート(22) debian(21) thinkpad(21) usb(19) mp3(17) 壁紙(17) windows(17) 手帳(16) linux(16) 動画(15) 秋葉原(14) 使い方(14) wiki(13) システム手帳(13) a6(12) ssh(11) svn(11) google(11) 方眼(10) 提案書(10) 山口日記(10) 藤倉みのり(10) 交換(10) nikon(10) 竹内(10) ダイソー(9) 画像(9) 変換(9) ヨドバシカメラ(9) tc-1(9) 竹内まりあ(9) 写真(9) 作り方(9) skype(8) 書き方(8) 無料(8) 無印良品(8) centos(8) 設定(8) ほぼ日手帳(8) dropbox(8) インストール(7) xp(7) 本名(7) subversion(7) 万年筆(7) 生年月日(7) フルハルター(7) 腕時計(7) ubuntu(7) gtd(7) 冷蔵庫(7) 修理(7) ボールペン(6) バッグインバッグ(6) 購入(6) kernel(6) 2009(6) リフィル(6) 機内持ち込み(6) the(6) xampp(6) 結婚式(6) java(6) kde(6) porter(6) ペンケース(5) cgi(5) memcached(5) cvs(5) gpt(5) ダウンロード(5) elio(5) サイズ(5)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 方法 設定 サンプル ダウンロード セール 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 最新 MP3 動画 Torrent 解説 意味 用語集 参考文献 お薦め お勧め おすすめ 便利 Blog ブログ mixi 待受画面 修理Process Time: 0.638204s / load averages: 1.43, 1.29, 0.90
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク