Webサービス・サーバーの無停止化を試行(2)

Webサービス・サーバーの無停止化を試行(2)
■ 店頭より得で、予約しやすいオンラインショップ。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、最大6万円のキャッシュバックがある
→ SMARTPHONE STORE

前回に続いて、今回は「Webサービス・サーバーの無停止化を試行」について作業内容を書いていきたいと思います。

作業

設定

fluentdのインストールは省きます。
先にnginxにてlog_formatを以下のようにしました。

デフォルトの半角スペース区切りだったのでパースしやすいようにタブ区切りに変更してます。
また、なんのデータなのかわかるようにもなりました。

次にflunetdの設定

source箇所でアクセスログをチェックしていて設定項目は既存のものだけだと思います。
match箇所で実際の処理を行っていて以下になります。

※本当はもっとスマートにまとまるんだと思いますが、不慣れなのでこんな感じになってしまった。

作成

phpとpluginの作成になります。

phpの改修
単純に空だが今は確認用に文字列を出している

旧:index.php

 ※〜は記述を省略してます

新:index_new.php

plugin作成
rubyはよくわかってないが既存のpluginを参考にすればさくっと出来ると思ってたけど、
思ったより時間がかかってしまった。。。

out_xml.rb

common_hbasepost.rb ※抜粋
タイプは大きく分けると2パターン
1.サービスは異なっても通知先のPHPが共通している
2.サービス間でURL形式に差がある
※2番がネックでいろいろ用意するハメになった。。。

内部の処理は簡単に以下

  • 初期化
  • クエリパース
  • XML作成
  • XML通知

確認

確認方法としてはいくつかURLパターンを抜粋して新旧で実行し、
DB上のデータに差異がないことを確認した。

データフロー(サンプル)
1〜4の流れで4番のデータを新旧で差分確認。
 ※timestampに関しては実行時間で違いがでるので大きくずれがなければ問題ないとした

1.実行URL
http://www.test.com/?k=20150524200644603qtcpaOL5ZyADgWuSu&f=data&c=employ_number&v=2&t=asplog&tmp=1432675386977

2.アクセスログ

3.通知XML

4.実際のデータ

この流れをサービス毎、URLタイプごと抜粋データで確認した。

まとめ

内部向けっぽくなったけど、残すことは大事かなと思いました。
また、メインの処理はclassにしたのでテストも用意できそうだし、結果としては悪くなかったかもしれないです。

データの性質上、本番のデータを拝借しても問題ないと思うので、
並行稼動っぽい感じにしてデータ差異が無いことを確認したら切り替えていこうかなと思ってます。

■最新のiPhoneの購入・機種変更なら店頭より得で、予約しやすいオンラインショップ。
機種の頭金や使わないオプションパックをつけて年間何万円も損していませんか?
オンラインショップなら故障のサポートもしっかりしていて最低限の費用。待たされることもありません。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、最大6万円のキャッシュバックがある
→ SMARTPHONE STORE
がお得です。