バージョン選択

フォーラム

メニュー

オンライン状況

54 人のユーザが現在オンラインです。 (50 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 54
もっと...

サイト内検索

質問 > 管理機能 > EC-CUBE2.13冗長化構成においてconstration violationが頻発する

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
dogfeet
投稿日時: 2021/9/27 17:37
対応状況: −−−
新米
登録日: 2021/9/27
居住地:
投稿: 5
EC-CUBE2.13冗長化構成においてconstration violationが頻発する
[EC-CUBE] 2.13.5
[OS] Amazon Linux AMI
[PHP] PHP5.6
[データベース] mysql5.6
[WEBサーバ] apache2.4

[現象]
現状、
ウェブサーバー × 3
DBサーバー × 1
Elasticache Redis (セッション管理)
でEC-CUBE2.13.5を動かしています。

ウェブサーバーのうち1台は、管理画面&決済(/shopping/load_payment_module.php)で使用、他の2台はそれ以外のページで使用しています。
(aws albでターゲットグループを2つ作成し、パスにて振り分け)

通常時は問題ないのですが、アクセスが集中すると
dtb_order_tempのorder_temp_idの書き込みでconstration violationが頻発し、Lock wait timeout exceeded; try restarting transactionが連続して起こり、
管理画面は閲覧できるのですが、フロント側がBad Gatewayで閲覧できなくなります。

具体的には、
LC_Page_Shopping.php > lfRegistData > $objPurchase->saveOrderTemp
の内の INSERT INTO dtb_order_temp 処理部分でconstraint violationが起こり、
LC_Page_Cart.php > lfSetCurrentCart > lfUpdateOrderTempid
の内の UPDATE dtb_order_temp 処理部分でLockがかかってしまいます。

order_temp_idの生成部分も見て、被ることはないかと思うのですが、この様な現象は起こり得るものなのでしょうか?

何か考えられる事などありましたら、お教えいただけますでしょうか。

よろしくお願い致します。
nanasess
投稿日時: 2021/9/27 18:02
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: EC-CUBE2.13冗長化構成においてconstration violationが頻発する
あまり見たことない現象ですが、 order_temp_id のもとになる uniqid() 関数に引数 prefix を指定すると良いかもしれません

https://github.com/EC-CUBE/ec-cube2/blob/master/data/class/util/SC_Utils.php#L923

https://www.php.net/uniqid

prefix に $_SERVER や環境変数から取得したホスト名を指定してみてはいかがでしょうか?
dogfeet
投稿日時: 2021/9/27 18:46
対応状況: −−−
新米
登録日: 2021/9/27
居住地:
投稿: 5
Re: EC-CUBE2.13冗長化構成においてconstration violationが頻発する
ご返信ありがとうございます。

取り急ぎ

引用:

public static function sfGetUniqRandomId($head = '')
{
// 予測されないようにランダム文字列を付与する。
$random = GC_Utils_Ex::gfMakePassword(8);
// 同一ホスト内で一意なIDを生成
$host = str_replace('.','',$_SERVER['SERVER_ADDR']);
$id = uniqid($host, true);

return $id . $random;
}


としてみました。

ただ、元のソースのままでも被る事はそうそうないと思うのですが何故でしょうかね。。

/cart/ > /shopping/index.php > /shopping/deliv.php > /shopping/payment.php > /shopping/confirm.php
と遷移する中、各ページ毎にdtb_order_tempへの書き込みが行われているようですが、
cartページから先に進むタイミングで常に新しいorder_temp_idを発行し、
/shopping/index.php
/shopping/deliv.php
/shopping/payment.php
で入力した値は全てセッションに保存し、/shopping/confirm.phpにて、次へ、または購入完了ボタンをクリックしたタイミングで保存したセッションデータを使って
初めてdtb_order_tempへの書き込みが行われるよう変更してみようと思うのですが、この手のエラーに対して効果はありそうでしょうか?
(※dtb_order_tempにたまるデータ量は増えそうですが、適宜クーロンなどで削除処理しようと思います)

また、他でもEC-CUBE2系の冗長化に関して気をつけた方がいい点などございましたらご教示いただければ幸いです。
nanasess
投稿日時: 2021/9/28 0:17
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2313
Re: EC-CUBE2.13冗長化構成においてconstration violationが頻発する
引用:

ただ、元のソースのままでも被る事はそうそうないと思うのですが何故でしょうかね。。


そうなんですよね。。。
あまり遭遇したことのない現象で、どうしたものかなと思っております。
トラフィックの多いサイトは、ほとんど PostgreSQL で運用していたため、 MySQL のナレッジが少ないこともありますが。

引用:

次へ、または購入完了ボタンをクリックしたタイミングで保存したセッションデータを使って
初めてdtb_order_tempへの書き込みが行われるよう変更してみようと思うのですが、


経験上、 セッションデータはよく不整合が発生するので、あまり依存しすぎるのは良くないと思っています。

引用:

また、他でもEC-CUBE2系の冗長化に関して気をつけた方がいい点などございましたらご教示いただければ幸いです。


2系に限りませんが、共有ストレージを使用すると性能が出ないことが多いです。
すでに対策されているかもしれませんが、Webサーバーでも速いストレージに載せることをおすすめします
(2.13の場合は composer を使用していないので、あまり問題が出ないかもしれません)
dogfeet
投稿日時: 2021/9/28 19:34
対応状況: −−−
新米
登録日: 2021/9/27
居住地:
投稿: 5
Re: EC-CUBE2.13冗長化構成においてconstration violationが頻発する
ありがとうございます!

jmeterなどでシナリオを走らせて同じ現象を再現し、何かわかったらまた報告させていただきます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,721名です
総投稿数は109,953件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1286
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.