プロジェクト

全般

プロフィール

ロールバックについて » 履歴 » バージョン 1

. Kisaragi, 2022/07/09 18:08

1 1 . Kisaragi
h1. ロールバックについて
2
3
概要: ***ロールバックが必要になった時は、基本的に全てのサーバーで行います。一部のサーバーのみで行うことはありません。***
4
まず、大前提として:データの不整合は可能な限り起こすべきではないと私は考えています。
5
6
h2. 理由
7
8
h3. アイテムの不整合が生じるリスクがある
9
10
アルカディアでロールバックが必要なことが起きたとしましょう。
11
!https://cdn.discordapp.com/attachments/288536178419040260/995241535480275014/fig1.png!
12
13
そして、アルカディアだけロールバックすることにしましょう。
14
!https://cdn.discordapp.com/attachments/288536178419040260/995241535807438888/fig2.png!
15
16
しかし、最終バックアップからロールバックされるまでの間に、アイテムなどその存在が「一意」であることが期待されるものがサーバーをまたいで移動していたら、どうなるでしょうか?少し考えてみてください。
17
!https://cdn.discordapp.com/attachments/288536178419040260/995241536231047189/fig3.png!
18
19
. . .
20
21
. . .
22
23
結果としてアイテムの複製が生じます。その様子を下の図に示します。アイテムが存在しているタイムラインは色付き太線で示しています。
24
!https://cdn.discordapp.com/attachments/288536178419040260/995241536524664862/fig4.png!
25
26
なお、アイテムの移動する向きが逆向きであれば、またいだアイテムが消失する事態も発生します。
27
28
h3. 共有データベースと実際の状態に不整合が起きる
29
30
整地鯖は、全てのサーバーで進捗を同期するために、共有のデータベースを使用しています。単純にした図を以下に示します。
31
32
!https://cdn.discordapp.com/attachments/288536178419040260/995241536738558023/fig5.png!
33
34
代表的な例としては整地量が増えたのにブロックが残っているという事態が起きることが考えられます。そのため、共有データベースサーバーもロールバックする必要があります。
35
しかし、共有データベースと不具合が起きたサーバー *のみ* をロールバックすると、影響を受けていないサーバーが正当に行った操作までなかったことになってしまいます。
36
そうすると、例えばマインスタックに格納したはずのアイテムが消えたり、あるいは出したはずのアイテムが消えたりする危険性があります。