システムの安定運用のための取り組み
(3)
cpanfileによるモジュールのバージョン管理
fluctではCartonとcpanfile
によるモジュール管理を行っています。
fluctでは、cpanfile
に明示的なバージョン指定の記述をしていません。
# 2016年11月現在で最新の1.0042がインストールされる
requires 'Plack';
これは、
最新バージョンを選択する功罪
ただし、
前述のとおり、format
型が追加され、
広告配信サーバのライブラリ管理はプロセスごとに異なっており、cartoninstall
を実行してからプロセスを立ち上げています。このため、
バージョン指定による選択管理
上記障害の対応としては、cpanfile
にインストールするバージョン指定のオプションを追加しました。
# 0.49がインストールされる
requires 'Data::MessagePack', '== 0.49';
cpanfile
は等号のほかに不等号による指定もできます。Data::MessagePackは0.
# 1.00以降がインストールされる
requires 'Data::MessagePack', '>= 1.00';
バージョン指定の詳しい設定は、
アクセスログの取得
Webサーバを運用するうえで、plackup
で立ち上げていて、
アドサーバでは少し前まで、
障害の件を踏まえ、psgi
ファイルに次の設定をしています。
use strict;
use warnings;
use Plack::Builder;
use File::RotateLogs;
use Fluct::Adsever;
my $adserver = Fluct::Adserver->new();
my $rotatelogs = File::RotateLogs->new(
logfile =>
'/var/log/adserver/%Y/%m/%d/%H/access_log',
rotationtime => (60 * 60)
);
builder {
enable 'AxsLog',
combined => 1,
response_time => 1,
logger => sub {
$rotatelogs->print(@_)
};
mount '/' => sub {
$adserver->top(shift)
},
mount '/other' => sub{ ... }, # 別のエンドポイントの処理
};
このアクセスログの出力は、
複数のログの一括確認
ここまではアドサーバのプロダクトとしてのPerlの紹介でしたが、
リリース時の動作確認では、
このときの確認対象は、tail
するのは面倒です。こういった
CPANにはFile::Tailモジュールがあり、
このコードは汎用化した形で公開しています。みなさんのケースにそのままは当てはまらないかと思いますが、
こういった改善に終わりはありません。たとえば、
まとめ
本稿では広告配信の運用を、
さて、
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現! - 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう - 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT