AZオーディオレビュー

耳を澄まし、クリアな音を聞いて感動し涙した
オーディオ関連製品のレビュー、電子製品評価等

ラグナロクオンラインのワールド倉庫実装後の不具合について考えた

2018年09月23日 | 俺の価値観
ラグナロクオンラインのワールド倉庫実装後の不具合について考えた
---
もういい加減見てられん
プログラマー歴20年の俺が原因を語ってみる
まあ、あくまで推測の域を超えないけどね

W倉庫の前はワールド毎にサーバーがあって(仮想か物理かはさておき)
鯖ごとにDBサーバーが内蔵され、キャラと装備は完全にスタンドアロンで各鯖に存在する

ここでW倉庫実装、何かできたというと多分三点
1、各鯖から繋げるW倉庫用のDB鯖ができた
2、各鯖と鯖専用DBは同じイントラに置く(相互繋げられる)
3、装備アイテムのトランザクション履歴と照合

例えば装備XがプレイヤーAから購入すると取引トランザクションがDBに書き込み、追跡できるようにする
で、例えばこの状態で装備XがV鯖(適当、俺の出身鯖)からB鯖に持ち込むと
V鯖にも、B鯖にも、W倉庫DB鯖にもトランザクション履歴ができる(装備がそこにあるかどうかは関係ない)

例えばこのような履歴があるとして
1: [V鯖]装備XをプレイヤーAから取得、アイテムID:0001
2: [V鯖]装備XをW倉庫に移行によって消滅、アイテムID:0001
3: [W倉庫DB]装備XはV鯖から転移、V鯖アイテムID:0001、W倉庫アイテムID:0002
4: [W倉庫DB]装備XはB鯖で取り出し、V鯖アイテムID:0001、W倉庫アイテムID:0002、B鯖アイテムID:0003
5: [B鯖]プレイヤーB(V鯖のA)が装備X(ID:0003)を売り、プレイヤーCが取得

多分、マップ遷移する度に、手持ちの装備のすべてのトランザクションを検証する
3%回復アイテムが期限切れの状態でマップ移動すると消えるのもこのため
W倉庫が出来る前には同じ鯖のDBでSQL一行で内部処理で済ませる作業だが、W倉庫になるとそうはいかなくなる
よって
1: B鯖→W倉庫DB鯖へSQLリクエ、W倉庫DB鯖所持のトランザクション情報を取得(情報A)
2:(情報A)を見て、B鯖→V鯖へSQLリクエ、アイテムトランザクション情報の一致性を検証
1と2共鯖間のTCP通信と思われ、DBにそれぞれの負荷も同期時間も要する
そして1と2は因果関係があってパラレル処理できない
つまりログがタコ足で絡んだ重力入り毒アイテムの出来上がり

これで同じ装備をV鯖←→B鯖で繰り返していどうすると、検証の時間もかさむ
だからinの人数にも関係があって、アイテム移動履歴の多さ(≒W倉庫稼働時間の長さ)にも関係する
トランザクションはマップ遷移する度に検証するため、キャラがインするかぎりメモリからリリースできない
各DBにも新しいトランザクションの関連レコードをバッファに保持されるはず
ここで止まる原因は多分前にも言われた「同期待ち」になるではないかと推測する
アイテムが増え取引が増え鯖間アイテム移動が増えると、DBへの負担があり得ない程増えて行き
B鯖はもちろんだが持ち出しのアイテム数が多い鯖ほど巻き込まれる、もう人数分散の話じゃなくなる
再起動によって得られた余裕タイムもどんどん減り
今回再起動した直後in人数が200程だけでもう重くなるのはまさにこれ

---
>>349-350の者だが
補足すると、鯖の負荷はROサーバープログラムの負荷とDBサーバの負荷の二種類
調べらる側のDB(例えば出身鯖)の負荷が大きいと、いわば毒アイテムを持てなくても多少影響も出てくるはず
B鯖の負荷はROプログラムの負荷+各鯖DB負荷xN回+LAN通信遅延のためさらにひどい

アイテムロストについては確かにログの整合性が取れないと自動消滅するかもしれない
DBは接続許容コネクション数を超えるとConnection Timeoutなり接続拒否されたりするので
もしこれだけでアイテムが消滅すると本当に笑うしかない

アイテムDBを調べるプロセスとメインプロセスは別々のはずだがなぜ張重力になるのはシステム構造を全体的に見ないと分からない

マップ超える度に鯖キャンとラグが起きるのもやはり裏で履歴を照合しているだろう...検証は簡単だ、何も持たず装備せずにマップ移動してみれば分かる...俺もあとためしてみる

あと、仮にアイテム履歴が本当に原因なら解決案は簡単だ
一度検証した結果を信頼するだけ
例えば所持アイテムを一日最初にログインする時と取引する時だけ履歴を照合する
照合した時のタイムスタンプを鯖アイテムDBに書き込む(つまりフラグ立て)
フラグがあるかぎり(または24時間経過してない)ならフラグの前の履歴を調べない
これで長引くことはなくなるはず


最新の画像もっと見る

コメントを投稿