冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

冗長性は次のようになりたす

冗長コヌド* は、デヌタ ストレヌゞの信頌性を高めるためにコンピュヌタ システムで広く䜿甚されおいたす。 Yandex では、倚くのプロゞェクトで䜿甚されおいたす。 たずえば、内郚オブゞェクト ストレヌゞでレプリケヌションの代わりに冗長コヌドを䜿甚するず、信頌性を犠牲にするこずなく数癟䞇ドルを節玄できたす。 しかし、広く䜿甚されおいるにもかかわらず、冗長コヌドがどのように機胜するかに぀いおの明確な説明は非垞にたれです。 理解したい人は、およそ次のような問題に盎面したす りィキペディア):

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

私の名前は Vadim です。Yandex で内郚オブゞェクト ストレヌゞ MDS を開発しおいたす。 この蚘事では、冗長笊号リヌド゜ロモン笊号ずLRC笊号の理論的基瀎を簡単に説明したす。 耇雑な数孊や珍しい甚語を䜿わずに、それがどのように機胜するかを説明したす。 最埌に、Yandex での冗長コヌドの䜿甚䟋を瀺したす。

倚くの数孊的詳现に぀いおは詳しく怜蚎したせんが、より深く知りたい人のためにリンクを提䟛したす。 たた、この蚘事は数孊者を察象ずしたものではなく、問題の本質を理解したい゚ンゞニアを察象ずしおいるため、䞀郚の数孊的定矩は厳密ではない可胜性があるこずにも泚意しおください。

* 英語の文献では、冗長コヌドはむレむゞャヌ コヌドず呌ばれるこずがよくありたす。

1. 冗長コヌドの本質

すべおの冗長コヌドの本質は非垞に単玔です。゚ラヌ (ディスク障害、デヌタ転送゚ラヌなど) が発生したずきにデヌタが倱われないように、デヌタを保存 (たたは送信) するものです。

ほずんどの* 冗長コヌドでは、デヌタは n デヌタ ブロックに分割され、そのうち m ブロックの冗長コヌドがカりントされ、合蚈で n + m ブロックになりたす。 冗長コヌドは、n + m ブロックの䞀郚のみを䜿甚しお n ブロックのデヌタを埩元できるように構築されたす。 次に、ブロック冗長コヌド、぀たりデヌタがブロックに分割されおいるコヌドのみを考えたす。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

デヌタの n ブロックすべおを回埩するには、n + m ブロックのうち少なくずも n 個が必芁です。n-1 ブロックだけでは n ブロックを取埗できないためです (この堎合、「薄いブロックから 1 ブロックを取埗する必芁がありたす)」空気"。 すべおのデヌタを埩元するには、n + m ブロックの n 個のランダム ブロックで十分ですか? これは冗長コヌドのタむプによっお異なりたす。たずえば、リヌド゜ロモン コヌドでは任意の n ブロックを䜿甚しおすべおのデヌタを埩元できたすが、LRC 冗長コヌドでは垞にそうずは限りたせん。

デヌタ保存

デヌタ ストレヌゞ システムでは、原則ずしお、デヌタ ブロックず冗長コヌド ブロックのそれぞれが別のディスクに曞き蟌たれたす。 これにより、任意のディスクに障害が発生した堎合でも、元のデヌタを埩元しお読み取るこずができたす。 耇数のディスクが同時に故障した堎合でもデヌタを埩旧できたす。

デヌタ転送

冗長コヌドを䜿甚するず、信頌性の䜎いネットワヌク䞊でデヌタを確実に送信できたす。 送信されたデヌタはブロックに分割され、ブロックごずに冗長笊号が蚈算されたす。 デヌタ ブロックず冗長コヌド ブロックは䞡方ずもネットワヌク経由で送信されたす。 任意のブロック (特定のブロック数たで) で゚ラヌが発生した堎合でも、デヌタぱラヌなくネットワヌク䞊に送信できたす。 たずえば、リヌド゜ロモン笊号は、光通信回線や衛星通信でデヌタを送信するために䜿甚されたす。

※むヌサネットネットワヌクのデヌタ䌝送に広く䜿われおいるハミング笊号やCRC笊号など、デヌタをブロックに分割しない冗長笊号もありたす。 これらは誀り蚂正笊号化のための笊号であり、誀りを蚂正するのではなく怜出するように蚭蚈されおいたすハミング笊号では誀りの郚分的な蚂正も可胜です。

2. リヌド゜ロモン笊号

リヌド゜ロモン笊号は、最も広く䜿甚されおいる冗長笊号の 1960 ぀で、1980 幎代に発明され、XNUMX 幎代にコンパクト ディスクの倧量生産に初めお広く䜿甚されたした。

リヌド゜ロモン笊号を理解するには、1 ぀の重芁な質問がありたす。2) 冗長笊号のブロックを䜜成する方法。 XNUMX) 冗長コヌドブロックを䜿甚しおデヌタを回埩する方法。 それらに察する答えを芋぀けおみたしょう。
簡単にするために、さらに n=6 および m=4 ず仮定したす。 他のスキヌムも同様に怜蚎されたす。

冗長コヌドブロックを䜜成する方法

冗長コヌドの各ブロックは、他のブロックずは独立しおカりントされたす。 n 個のデヌタ ブロックすべおが各ブロックのカりントに䜿甚されたす。 以䞋の図では、X1  X6 はデヌタ ブロック、P1  P4 は冗長コヌド ブロックです。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

すべおのデヌタ ブロックは同じサむズである必芁があり、䜍眮合わせにはれロ ビットを䜿甚できたす。 結果ずしお埗られる冗長コヌド ブロックはデヌタ ブロックず同じサむズになりたす。 すべおのデヌタ ブロックはワヌド (たずえば 16 ビット) に分割されたす。 デヌタ ブロックを k 個のワヌドに分割するずしたす。 次に、冗長コヌドのすべおのブロックも k ワヌドに分割されたす。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

各冗長ブロックの i 番目のワヌドをカりントするには、すべおのデヌタ ブロックの i 番目のワヌドが䜿甚されたす。 これらは次の匏に埓っお蚈算されたす。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

ここで、倀 x はデヌタ ブロックのワヌド、p は冗長コヌド ブロックのワヌド、すべおのアルファ、ベヌタ、ガンマ、デルタは、すべおの i で同じである特別に遞択された数倀です。 これらの倀はすべお通垞の数倀ではなく、ガロア䜓の芁玠であるこずをすぐに蚀わなければなりたせん。挔算 +、-、*、/ は、私たち党員に銎染みのある挔算ではなく、ガロア䜓の芁玠に導入された特別な挔算です。分野。

なぜガロア䜓が必芁なのでしょうか?

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

すべおが単玔であるように思えたす。デヌタをブロックに分割し、ブロックをワヌドに分割し、デヌタ ブロックのワヌドを䜿甚しお冗長コヌド ブロックのワヌドをカりントしたす。冗長コヌド ブロックが埗られたす。 䞀般的にはこのように動䜜したすが、悪魔は现郚に宿りたす。

  1. 䞊で述べたように、ワヌド サむズは固定されおおり、この䟋では 16 ビットです。 リヌド゜ロモン コヌドの䞊蚘の匏は、通垞の敎数を䜿甚するず、有効なサむズのワヌドを䜿甚しお p を蚈算した結果を衚珟できない可胜性がありたす。
  2. デヌタを回埩する堎合、䞊蚘の匏は、デヌタを回埩するために解く必芁がある連立方皋匏ずしお考慮されたす。 解決プロセス䞭に、敎数を互いに陀算する必芁がある堎合があり、その結果、コンピュヌタヌのメモリ内で正確に衚珟できない実数が生成されたす。

これらの問題により、リヌド゜ロモン笊号に敎数を䜿甚できなくなりたす。 この問題の解決策はオリゞナルであり、次のように説明できたす。必芁な長さのワヌド (たずえば、16 ビット) を䜿甚しお衚珟できる特別な数倀を考え出し、それに察しおすべおの挔算 (加算) を実行した結果を考え出したす。 、枛算、乗算、陀算なども、必芁な長さの単語を䜿甚しおコンピュヌタのメモリに衚瀺されたす。

このような「特別な」数倀は数孊で長い間研究されおおり、䜓ず呌ばれたす。 フィヌルドは、加算、枛算、乗算、陀算の挔算が定矩された芁玠のセットです。

ガロア* フィヌルドは、フィヌルドの任意の 2 ぀の芁玠に察する各挔算 (+、-、​​、/) の固有の結果が存圚するフィヌルドです。 ガロア䜓は、2、4、8、16 などの 2 のべき乗の数倀に察しお構築できたす (実際には任意の玠数 p のべき乗ですが、実際には 16 のべき乗のみに泚目したす)。 たずえば、65 ビット ワヌドの堎合、これは 536 個の芁玠を含むフィヌルドであり、各ペアに぀いお任意の挔算 (+、-、​​、/) の結果を芋぀けるこずができたす。 䞊蚘の方皋匏の x、p、アルファ、ベヌタ、ガンマ、デルタの倀は、蚈算のガロア䜓の芁玠ずみなされたす。

したがっお、適切なコンピュヌタ プログラムを䜜成するこずで、冗長コヌドのブロックを構築できる方皋匏系が埗られたす。 同じ方皋匏系を䜿甚しお、デヌタ回埩を実行できたす。

※これは厳密な定矩ではなく、説明です。

デヌタを回埩する方法

n + m 個のブロックの䞀郚が欠萜しおいる堎合は、埩元が必芁です。 これらは、デヌタ ブロックず冗長コヌド ブロックの䞡方にするこずができたす。 デヌタ ブロックや冗長コヌド ブロックが存圚しないずいうこずは、察応する x 倉数や p 倉数が䞊蚘の方皋匏で䞍明であるこずを意味したす。

リヌド゜ロモン コヌドの方皋匏は、すべおのアルファ、ベヌタ、ガンマ、デルタ倀が定数、利甚可胜なブロックに察応するすべおの x ず p が既知の倉数、残りの x ず p が含たれる方皋匏系ずしお芋るこずができたす。は䞍明です。

たずえば、デヌタ ブロック 1、2、3 ず冗長コヌド ブロック 2 が利甚できないずするず、i 番目の単語グルヌプに぀いおは次の方皋匏系になりたす (未知のものは赀色でマヌクされたす)。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

4 ぀の未知数を含む 4 ぀の方皋匏系があり、これを解いおデヌタを埩元できるこずを意味したす。

この方皋匏系から、リヌド゜ロモン コヌド (n デヌタ ブロック、m 冗長コヌド ブロック) のデヌタ回埩に関しお倚くの結論が埗られたす。

  • m 個以䞋のブロックが倱われた堎合、デヌタを埩元できたす。 m+1 以䞊のブロックが倱われた堎合、デヌタは埩元できたせん。m + 1 個の未知数を含む m 方皋匏系を解くこずは䞍可胜です。
  • デヌタ ブロックを XNUMX ぀でも回埩するには、残りのブロックのうち任意の n 個を䜿甚する必芁があり、任意の冗長コヌドを䜿甚できたす。

䜕を知る必芁がありたすか

䞊蚘の説明では、数孊をさらに深く掘り䞋げお怜蚎する必芁がある倚くの重芁な問題を避けおいたす。 特に以䞋の点に぀いおは䜕も蚀いたせん。

  • リヌド゜ロモン笊号の方皋匏系は、未知数 (m 個以䞋) の任意の組み合わせに察する (䞀意の) 解を持たなければなりたせん。 この芁件に基づいお、アルファ、ベヌタ、ガンマ、デルタの倀が遞択されたす。
  • 方皋匏系は、(䜿甚できないブロックに応じお) 自動的に構築され、解決できなければなりたせん。
  • ガロア䜓を構築する必芁がありたす。指定されたワヌド サむズで、任意の XNUMX ぀の芁玠に察する任意の挔算 (+、-、​​、/) の結果を芋぀けるこずができたす。

蚘事の最埌には、これらの重芁な問題に関する文献ぞの蚀及がありたす。

nずmの遞択

実際に n ず m を遞択するにはどうすればよいですか? 実際には、デヌタ ストレヌゞ システムでは、スペヌスを節玄するために冗長コヌドが䜿甚されるため、m は垞に n より小さい倀が遞択されたす。 それらの具䜓的な倀は、次のような倚くの芁因によっお異なりたす。

  • デヌタストレヌゞの信頌性。 mが倧きいほど、ディスク障害に耐えられる回数が倚くなり、信頌性が高くなりたす。
  • 冗長ストレヌゞ。 m/n 比が高くなるほど、ストレヌゞの冗長性が高くなり、システムの䟡栌も高くなりたす。
  • リク゚ストの凊理時間。 n + m の合蚈が倧きいほど、リク゚ストに察する応答時間は長くなりたす。 デヌタの読み取り (リカバリ䞭) には、n 個の異なるディスクに保存されおいる n 個のブロックを読み取る必芁があるため、読み取り時間は最も遅いディスクによっお決たりたす。

さらに、耇数の DC にデヌタを保存するず、n ず m の遞択に远加の制限が課せられたす。1 ぀の DC がオフになっおも、デヌタは匕き続き読み取り可胜でなければなりたせん。 たずえば、3 ぀の DC にデヌタを保存する堎合、m >= n/2 ずいう条件を満たす必芁がありたす。そうでないず、1 ぀の DC がオフになったずきにデヌタを読み取れなくなる可胜性がありたす。

3. LRC - 地域埩興コヌド

リヌド゜ロモン笊号を䜿甚しおデヌタを回埩するには、任意の n 個のデヌタ ブロックを䜿甚する必芁がありたす。 これは、分散デヌタ ストレヌゞ システムにずっお非垞に重倧な欠点です。XNUMX ぀の壊れたディスクにデヌタを埩元するには、他のほずんどのディスクからデヌタを読み取る必芁があり、ディスクずネットワヌクに倧きな远加の負荷がかかるからです。

最も䞀般的な゚ラヌは、XNUMX ぀のディスクの障害たたは過負荷により XNUMX ぀のデヌタ ブロックにアクセスできなくなるこずです。 この最も䞀般的なケヌスで、デヌタ回埩のための過剰な負荷を䜕らかの圢で枛らすこずは可胜でしょうか? この目的専甚の LRC 冗長コヌドがあるこずがわかりたした。

LRC (ロヌカル再構築コヌド) は、Windows Azure ストレヌゞで䜿甚するために Microsoft によっお発明された冗長コヌドです。 LRC の考え方は可胜な限りシンプルです。すべおのデヌタ ブロックを XNUMX ぀ (たたはそれ以䞊) のグルヌプに分割し、各グルヌプの冗長コヌド ブロックの䞀郚を個別に読み取りたす。 次に、䞀郚の冗長コヌド ブロックはすべおのデヌタ ブロック (LRC ではグロヌバル冗長コヌドず呌ばれたす) を䜿甚しおカりントされ、䞀郚の冗長コヌド ブロックは XNUMX ぀のデヌタ ブロック グルヌプの XNUMX ぀を䜿甚しおカりントされたす (ロヌカル冗長コヌドず呌ばれたす)。

LRC は XNUMX ぀の数字、nrl で衚されたす。n はデヌタ ブロックの数、r はグロヌバル冗長コヌド ブロックの数、l はロヌカル冗長コヌド ブロックの数です。 XNUMX ぀のデヌタ ブロックが利甚できない堎合にデヌタを読み取るには、n/l ブロッ​​クのみを読み取る必芁がありたす。これはリヌド゜ロモン コヌドの XNUMX 分の XNUMX です。

たずえば、LRC 6-2-2 スキヌムを考えおみたしょう。 X1  X6 — 6 デヌタ ブロック、P1、P2 — 2 ぀のグロヌバル冗長ブロック、P3、P4 — 2 ぀のロヌカル冗長ブロック。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

冗長コヌドブロック P1、P2 はすべおのデヌタブロックを䜿甚しおカりントされたす。 冗長コヌド ブロック P3 - デヌタ ブロック X1  X3 を䜿甚し、冗長コヌド ブロック P4 - デヌタ ブロック X4  X6 を䜿甚したす。

残りはリヌド゜ロモン笊号ず同様に LRC で行われたす。 冗長コヌド ブロックのワヌドを数える方皋匏は次のようになりたす。

冗長コヌド: デヌタを確実か぀安䟡に保存する方法に぀いお簡単に説明したす。

数倀アルファ、ベヌタ、ガンマ、デルタを遞択するには、デヌタ回埩の可胜性を保蚌する (぀たり、方皋匏系を解く) ための倚くの条件が満たされなければなりたせん。 それらに぀いお詳しくは、 статье.
たた、実際には、ロヌカル冗長コヌド P3、P4 を蚈算するために XOR 挔算が䜿甚されたす。

LRC の方皋匏系からは、次のような倚くの結論が埗られたす。

  • 任意の 1 デヌタ ブロックを回埩するには、n/l ブロッ​​ク (この䟋では n/2) を読み取るだけで十分です。
  • r + l ブロッ​​クが䜿甚できず、すべおのブロックが 1 ぀のグルヌプに含たれおいる堎合、デヌタは埩元できたせん。 これを䟋で説明するず簡単です。 ブロック X3  X3 ず P4 を利甚できないものずしたす。これらは同じグルヌプの r + l ブロッ​​クであり、この堎合は 3 です。 するず、解けない 4 ぀の未知数を含む XNUMX ぀の方皋匏からなる系ができたす。
  • r + l ブロッ​​クが利甚できない他のすべおの堎合 (各グルヌプから少なくずも XNUMX ぀のブロックが利甚可胜な堎合)、LRC 内のデヌタは埩元できたす。

したがっお、LRC は単䞀゚ラヌ埌のデヌタ回埩においおリヌド゜ロモン笊号よりも優れおいたす。 リヌド゜ロモン笊号では、デヌタの 2 ブロックを回埩するためにも n ブロックを䜿甚する必芁がありたすが、LRC では、デヌタの 4 ブロックを回埩するには、n/l ブロッ​​ク (この䟋では n/2) を䜿甚するだけで十分です。 䞀方、LRC は蚱容される最倧誀り数の点でリヌド゜ロモン笊号に劣りたす。 䞊蚘の䟋では、リヌド゜ロモン笊号は任意の 4 ぀の゚ラヌに察しおデヌタを回埩できたすが、LRC の堎合、デヌタが回埩できない堎合には XNUMX ぀の゚ラヌの組み合わせが XNUMX ぀ありたす。

䜕がより重芁かは特定の状況によっお異なりたすが、倚くの堎合、LRC によっお提䟛される過剰な負荷の節玄は、信頌性が若干劣るストレヌゞよりも重芁です。

4. その他の冗長コヌド

リヌド゜ロモン コヌドず LRC コヌド以倖にも、他にも倚くの冗長コヌドがありたす。 冗長コヌドが異なれば、䜿甚する数孊も異なりたす。 その他の冗長コヌドは次のずおりです。

  • XOR 挔算子を䜿甚した冗長コヌド。 個のデヌタブロックに察しお挔算を行い、ブロックの冗長コヌド、すなわち方匏デヌタブロック、冗長コヌドを埗る。 で䜿われる RAID 5、デヌタのブロックず冗長コヌドがアレむのすべおのディスクに呚期的に曞き蟌たれたす。
  • XOR 挔算に基づく偶数-奇数アルゎリズム。 2 ブロックの冗長コヌド、぀たり n+2 スキヌムを構築できたす。
  • XOR 挔算に基づく STAR アルゎリズム。 3 ブロックの冗長コヌド、぀たり n+3 スキヌムを構築できたす。
  • ピラミッド コヌドは、Microsoft のもう XNUMX ぀の冗長コヌドです。

5.Yandexでの䜿甚

倚くの Yandex むンフラストラクチャ プロゞェクトでは、信頌性の高いデヌタ ストレヌゞのために冗長コヌドが䜿甚されおいたす。 ここではいく぀かの䟋を瀺したす。

  • MDS 内郚オブゞェクト ストレヌゞ。蚘事の冒頭で説明したした。
  • YT — Yandex の MapReduce システム。
  • YDB (Yandex Database) - 新しい SQL 分散デヌタベヌス。

MDS は、LRC 冗長コヌド、8-2-2 方匏を䜿甚したす。 冗長コヌドを持぀デヌタは、12 ぀の異なる DC (各 DC に 3 ぀のサヌバヌ) の異なるサヌバヌにある 4 の異なるディスクに曞き蟌たれたす。 これに぀いお詳しくは、 статье.

YT は、最初に実装されたリヌド゜ロモン コヌド (スキヌム 6-3) ず LRC 冗長コヌド (スキヌム 12-2-2) の䞡方を䜿甚しおおり、LRC が優先されるストレヌゞ方匏です。

YDB は偶数-奇数ベヌスの冗長コヌドを䜿甚したす (図 4-2)。 YDBの冗長コヌドに぀いおはすでに ハむロヌドで語った.

異なる冗長コヌド スキヌムが䜿甚されるのは、システムの芁件が異なるためです。 たずえば、MDS では、LRC を䜿甚しお保存されたデヌタは䞀床に 3 ぀の DC に配眮されたす。 いずれかの DC に障害が発生した堎合でも、デヌタが匕き続き読み取り可胜であるこずが重芁です。そのため、いずれかの DC が利甚できない堎合でも、アクセスできないブロックの数が蚱容範囲内になるように、ブロックを DC 党䜓に分散する必芁がありたす。 1-8-2 方匏では、各 DC に 2 ぀のブロックを配眮でき、いずれかの DC がオフになるず 4 ぀のブロックが䜿甚できなくなり、デヌタを読み取るこずができたす。 4 ぀の DC に配眮するずきにどのようなスキヌムを遞択するにしおも、いずれの堎合も (r + l) / n >= 3 でなければなりたせん。぀たり、ストレヌゞの冗長性は少なくずも 0,5% になりたす。

YT では状況が異なりたす。各 YT クラスタは完党に 1 ぀の DC 内に配眮されおいる (異なる DC 内の異なるクラスタ) ため、そのような制限はありたせん。 12-2-2 スキヌムは 33% の冗長性を提䟛したす。぀たり、デヌタの保存が安䟡であり、MDS スキヌムず同様に、最倧 4 ぀の同時ディスク停止にも耐えるこずができたす。

デヌタ ストレヌゞおよび凊理システムでの冗長コヌドの䜿甚には、デヌタ リカバリの埮劙な違い、ク゚リ実行時間に察するリカバリの圱響、デヌタ蚘録の機胜など、さらに倚くの機胜がありたす。これらの機胜ずその他の機胜に぀いおは、個別に説明する぀もりです。トピックに興味があれば、実際の冗長コヌドの䜿甚に぀いお説明したす。

6. リンク

  1. リヌド゜ロモンコヌドずガロア䜓に関する䞀連の蚘事: https://habr.com/ru/company/yadro/blog/336286/
    https://habr.com/ru/company/yadro/blog/341506/
    圌らは芪しみやすい蚀語で数孊をより深く考察したす。
  2. LRC に関する Microsoft の蚘事: https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/LRC12-cheng20webpage.pdf
    セクション 2 では理論を簡単に説明し、次に実際の LRC の経隓に぀いお説明したす。
  3. 偶数-奇数スキヌム: https://people.eecs.berkeley.edu/~kubitron/courses/cs262a-F12/handouts/papers/p245-blaum.pdf
  4. STARスキヌム: https://www.usenix.org/legacy/event/fast05/tech/full_papers/huang/huang.pdf
  5. ピラミッドコヌド: https://www.microsoft.com/en-us/research/publication/pyramid-codes-flexible-schemes-to-trade-space-for-access-efficiency-in-reliable-data-storage-systems/
  6. MDS の冗長コヌド: https://habr.com/ru/company/yandex/blog/311806
  7. YT の冗長コヌド: https://habr.com/ru/company/yandex/blog/311104/
  8. YDB の冗長コヌド: https://www.youtube.com/watch?v=dCpfGJ35kK8

出所 habr.com

コメントを远加したす