昨日、サンエックスネットショップでは限定人形の販売が行われました。
私も忙しい中、ドクターイエローとJAXAバージョンを手にいるべく参戦していたのですが、運営側の対応があまりにもひどくて、途中からその糞さ加減の解説に回ってしまう状況だった。
まず、限定商品の販売になると、だいたいサンエックスネットショップは重くなる。
これは今にはじまったことではなくて、もう昔からで、一度ネットショップがリニューアルしましたが、それほど劇的な改善はありません。
原因はいくつかあると思うのですが、まず1点目は、おそらくネットショップのスクリプトが大規模なショッピングサイトを運用する事を想定して作られていない点。
これは結構根深いのですが、サーバ構成もおそらく小規模~中規模程度の構造で、単純な三層構造のものと思われます。
小さいところでいえば、購入プロセスの開始がカート内部からしかできないのも負荷が高まる原因ですし、UI/UXの設計も一世代前のものですから、無駄が多すぎます。
商材の規模によっては、サーバ分散も行うべきですが、それもありません。
スクリプト自身もこういった高負荷時に低減させるための仕組みが入っていない為、余裕で負荷が上がっていくものとも思われます。
というか、通常三層でやってるなら、APサーバで処理するもの(つまり、ショッピングカートの操作や購入プロセス等)と、WEBサーバ(又はフロントサーバ)で処理する部分は非同期にするべきだし、APサーバ側での処理はクリティカルである事や1処理あたりの負荷が高くなるため、基本的には負荷が高まる前にWEBサーバ側で特定以上のアクセスはブロックします。
具体的には、一定以上の処理は新規のセッションを開始せず、高負荷告知ページに飛ばす等してAP側の処理キューを増加させないようにする等です。
この辺はサーバ構成やスクリプトにより、様々な仕組みで対応するのですが、その基本的な仕組みがおそらく入っていません。
というか、CMSが負荷軽減機能がほぼないようで、商品表示自体も動的に行っていると思われます。
その為、商品ページそのものの表示も負担が大きく、サイト全体を一つのパッケージで管理しているようで、トップページすら開きません。
なので、当日、トップページに申し訳なさそうに表示された、不調の告知も、そもそも見ることなどできず、ユーザは状況がわからないまま、買えなくなるかもという不安から余計に過アクセスします。
で、状況は悪化すると。
2点目は運用担当者(会社)の経験不足。
途中、突然サーバセッションを再起動したふしのある動きをしていました。
一度、サーバエラーを吐いたあと、ログインが強制解除されており、さらにショッピングカートの中身がリセットされていました。
最初はセッションサーバのみを再起動(又は不正落ち)したのかとも考えたのですが、その場合は、サーバエラーは基本的に出ません。
(処理にもよりますが、新規セッションの開始が行われるだけですからね)
しかし、どうもエラーの出方を見ると、おそらくAPサーバの再起動をしたと思われるエラーの出方と挙動でした。
で、これ、ぜんぜんだめなんですよね。
もしもAPを強制再起動したいなら、一旦は、WEB(フロント)側のアクセスを遮断しないと、処理状況に応じてはDBもろとも不整合を招きかねません。
なので、何らかの方法でアクセスを遮断(場合によってはフロントふちぎりでもOK)したうえで、適切なプロセスでAPを再起動させるべきでした。
少なくともこのサイトのショッピングカートの仕組みは、DB連携を行っている事が想定されるので、この仕組みではまずいのは明らか。
この結果何が起きたかというと、セッションに絡むデータが不整合がおきました。
兆候はすぐにでていて、ログイン状態で商品ページにアクセスしても、商品ページでは未ログイン状態になっていました。
仮に、未ログインでもショッピングカートに商品を入れ、決済前にログインという処理はできるのですが、この現象はおそらくセッション単体ではなく、複数サーバ間の連携と、決済プロセスを管理するデータ側にも影響を及ぼしていたと思われ、そもそもログインしても商品がカートには存在しない状態になっていました。
私が試した限り、クライアント側のセッションデータを破棄しても、再ログインしても、クライアントサイドのIPを変更しても、端末を変更しても復旧できませんでした。
ただ、私の妻の端末からは実はその後正常に購入できたので、何らかの条件により命運がわかれた(おそらく特定のタイミングで不具合が生じ、そのタイミングを踏んだユーザーはアウト、又はセーフだったと思われます
何れにせよ、このトラブルの要因の一つは、このような未熟な運用担当者(会社)によるオペレーションミスも一つの要因となっています。
ちなみに、経験不足やあまさを証明する一つの例として、今、メンテナンス中の告知がでていますが、これ、商品ページに直接アクセスすると、リダイレクト設定のミスで告知ページに飛びません。
原因は初歩的なミスで、商品ページとメンテ告知ページ(ファイル名:mente20140719.html)の階層が違うので、ことなるページにジャンプしており、リダイレクトループになっているんですね。まぁ、初歩的すぎるミスです。
最近は見ないですね、ここまで初歩的なミスは。
まぁ、想像できる原因はたくさん推測可能ですが、運営会社(実際には委託されている会社?イーミックス)が初心者すぎて話にならないというのが私の読みです。
正直、これ、クラウドソージングで個人に委託しているのと変わらんですよ。
いや、経験のある個人の方がまだいい仕事すると思いますよ。
サンエックスさん、儲かってるんだからもうちょっといいところに委託してくださいよ。
<追記>
なんか委託先(株式会社イーミックス)のサイト見つけた。
以下の記載内容を読む限り、やはり予想通り自社製のパッケージを多用するタイプの会社のようですね。
お客様にとって、最良のソリューションを提供するために
お客様の多様化するニーズに柔軟に対応できる環境、お客様の業務を本当に理解したアプリケーションを提供することが
最良のソリューションに必要なことだと考えます。
イーミックスでは独自フレームワーク、ジェネレーター(プログラム自動生成)システムをベースに、
お客様の業務内容にあったアプリケーション、構築されたアプリケーションの稼働環境(データセンターホスティングサービス)、
稼動後のマーケティング支援(メールマーケティングシステム)をご提供できる環境をご用意しております。「株式会社イーミックス」サイト内、「事業内容」より引用
どういう経緯でイーミックスが選定されたのか非常に興味深いですね。
現状のままだと、よほど市販パッケージの方が安定して使えるように思えるが。
いずれにせよイーミックスさん、抜本的に設計方針から見直さないと、これ、なおらんよ。
ログ見たりして挙動を再確認する限りわかってると思うけどね。
ちゃんとやってね。