JP5945252B2 - 分散処理システム - Google Patents
分散処理システム Download PDFInfo
- Publication number
- JP5945252B2 JP5945252B2 JP2013146854A JP2013146854A JP5945252B2 JP 5945252 B2 JP5945252 B2 JP 5945252B2 JP 2013146854 A JP2013146854 A JP 2013146854A JP 2013146854 A JP2013146854 A JP 2013146854A JP 5945252 B2 JP5945252 B2 JP 5945252B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- server
- identifier
- area
- loss
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000012545 processing Methods 0.000 title claims description 158
- 238000007726 management method Methods 0.000 claims description 69
- 238000000034 method Methods 0.000 claims description 46
- 238000013523 data management Methods 0.000 claims description 28
- 238000011084 recovery Methods 0.000 claims description 19
- 230000001174 ascending effect Effects 0.000 claims description 6
- 238000000926 separation method Methods 0.000 claims 3
- 230000008569 process Effects 0.000 description 30
- 238000010586 diagram Methods 0.000 description 14
- 230000005540 biological transmission Effects 0.000 description 10
- 230000004044 response Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 6
- 238000012790 confirmation Methods 0.000 description 4
- 239000000284 extract Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000004083 survival effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 240000002989 Euphorbia neriifolia Species 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 238000013075 data extraction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
そこで、本発明は、バックアップからのデータの復旧時において、原本データと全ての複製データとが失われた識別子空間上の領域(以下、「損失領域」とよぶ。図2参照。)に含まれるデータ(以下、損失領域にデータ識別子が配置されているデータを「損失データ」とよぶ。)のみを復旧対象としてデータ復旧することを課題とする。
このようにすることで、分散処理システムは、原本データと全ての複製データとが失われたデータである損失データのみを復旧対象とした上で、残存するサーバのうち、損失領域を担当していた離脱サーバの左隣接サーバ若しくは右隣接サーバのうち、担当領域が小さい方のサーバを損失領域の新規担当サーバとして決定する。よって、分散処理システムは、損失データのみを復旧させることができると共に、その損失データのデータ復旧時において、サーバ負荷の偏りを低減させることができる。
図3は、本実施形態に係る分散処理システム1の全体構成を示す図である。
図3に示すように、分散処理システム1は、複数のクライアント2に接続される1つ以上の負荷分散装置10と、複数のサーバ20(20A,20B,…,20N)と、外部バックアップ装置30とを含んで構成される。
サーバ20それぞれは、負荷分散装置10から受け取ったメッセージ信号を処理し、メッセージ信号に対応するデータを記憶する。また、サーバ20それぞれは、自身宛のメッセージ信号に関するデータを原本データとして記憶するとともに、他のサーバ20から受信した複製データを保存する。
外部バックアップ装置30は、各サーバ20が記憶するデータを、所定の時間間隔で各サーバ20から取得することにより、バックアップのデータを記憶する。
以下、本実施形態に係る分散処理システム1を構成する各装置に構成例について、具体的に説明する。
負荷分散装置10は、各クライアント2(図3参照)から受信したメッセージ信号の振り分け先となるサーバ20をコンシステントハッシュ法に基づき決定し、その決定したサーバ20にメッセージ信号を送信する。また、負荷分散装置10は、各サーバ20からメッセージ信号に対する処理結果である応答信号を受信し、メッセージ信号を送信してきたクライアント2に送信する。
さらに、負荷分散装置10は、大規模災害等が発生し複数のサーバ20が離脱した場合に、識別子空間上に原本データと全ての複製データとが失われた領域である損失領域が存在するか否かを判定して、損失領域が存在する場合に、その損失領域を担当する新規担当サーバを決定する。
負荷分散装置10は、図4に示すように、制御部11と、入出力部12と、記憶部13とを含んで構成される。
また、この入出力部12は、通信回線を介して情報の送受信を行う通信インタフェースと、不図示のキーボード等の入力手段やモニタ等の出力手段等との間で入出力を行う入出力インタフェースとから構成される。
また、情報受信部111は、取得したメッセージ信号を、振り分け処理部112に受け渡す。
なお、振り分け処理部112は、大規模災害発生等により複数のサーバ20が離脱し、損失領域が発生する可能性がある場合に、クライアント2から受信するメッセージ信号の振り分けを停止する(詳細は後記)。また、振り分け処理部112は、データ損失処理部114から、損失データが復旧した旨の情報を受け取った場合に、メッセージ信号の振り分けを再開する。
図5に示すように、識別子空間管理情報100は、サーバID101、サーバ識別子102、および、当該サーバのアドレス103のデータ項目を含んで構成される。
ここで、サーバID101は、メッセージ信号の振り分け先となるサーバ20を、本分散処理システム1内において特定するための固有の番号である。
サーバ識別子102は、識別子空間内において、サーバ20が担当する領域を特定するためのものであり、例えば、「0」から順に「9999」までのいずれかの値(ハッシュ値)が各サーバ20に対応付けられて格納される。
例えば、図5に示す、第1行目のサーバ識別子102が「20」の場合は、サーバID101が「1」のサーバ20の識別子空間におけるデータの担当領域が「0」〜「20」であることを示す。また、2行目のサーバ識別子102が「823」の場合は、サーバID101が「2」のサーバ20の識別子空間におけるデータの担当領域が、1つ前の行のサーバ識別子102の値に「1」をプラスした「21」〜「823」であることを示す。以下、同様である。
アドレス103は、サーバID101に示されるサーバ20についての、例えば、IP(Internet Protocol)アドレスである。
識別子管理部113は、識別子空間管理情報100を更新すると、その更新情報を各サーバ20に送信する。このようにして、分散処理システム1内の負荷分散装置10と各サーバ20とが記憶する識別子空間管理情報100には、同一の情報が格納されるようにする。
具体的には、データ損失処理部114は、例えば、分散処理システム1内の全てのサーバ20等に生存確認メッセージを送信し、その応答メッセージを各サーバ20から受信すること等により、離脱サーバを特定する。そして、データ損失処理部114は、識別子空間上において、特定した離脱サーバのうちの1つを抽出し、抽出した離脱サーバのサーバ識別子の右回りにN−1個(N:冗長数)の隣接サーバが全て離脱サーバか否かを判定する。データ損失処理部114は、N−1個の隣接サーバが全て離脱サーバである場合に、抽出した離脱サーバが担当していた領域を、損失領域として特定し、記憶部13内の損失データ管理情報150(後記する図6参照)に登録する。
次に、データ損失処理部114は、損失領域を担当していた離脱サーバの左回りに直近の残存サーバ(左隣接サーバ)の識別子空間上での担当領域の広さと、損失領域を担当していた離脱サーバの右回りに直近の残存サーバ(右隣接サーバ)の識別子空間上での担当領域の広さとを比較し、担当領域が小さい方のサーバを、その損失領域を担当する新規担当サーバとして決定する。
損失領域ID151は、本分散処理システム1内において、損失領域を特定するための固有の番号である。
識別子領域152は、識別子空間上での損失領域の範囲を示す情報であり、損失領域を担当していた離脱サーバ(サーバ20)の担当領域が格納される。
新規担当サーバ153は、データ損失処理部114により決定された当該損失領域の新規担当サーバ(損失領域を担当していた離脱サーバの右隣接サーバ若しくは左隣接サーバ)のアドレスが格納される。
また、データ損失処理部114は、図6(b)に示すように、損失領域の右隣接サーバ若しくは左隣接サーバを新規担当サーバに決定すると、そのサーバ20のアドレスを、損失データ管理情報150内の新規担当サーバ153に格納する。
なお、データ損失処理部114は、すべての新規担当サーバから、損失データの復旧が完了したことを示す損失データ復旧完了情報を受信すると、振り分け処理部112に対し、損失データが復旧した旨の情報を出力し、メッセージ信号の振り分け処理を再開させる。
次に、サーバ20の構成例について説明する。図7は、本実施形態に係るサーバ20の構成例を示す機能ブロック図である。
サーバ20は、負荷分散装置10、自身以外の他のサーバ20および外部バックアップ装置30と通信可能に接続され、制御部21と、入出力部22と、記憶部23とを含んで構成される。
また、この入出力部22は、通信回線を介して情報の送受信を行う通信インタフェースと、不図示のキーボード等の入力手段やモニタ等の出力手段等との間で入出力を行う入出力インタフェースとから構成される。
さらに、リストア処理部216は、損失データ(原本データ)の記憶部23への記憶と、冗長化処理部214による、複製データの送信が完了すると、損失データ復旧完了情報を生成し、負荷分散装置10に送信する。
次に、外部バックアップ装置30の構成例について説明する。図8は、本実施形態に係る外部バックアップ装置30の構成例を示す機能ブロック図である。
外部バックアップ装置30は、複数のサーバ20それぞれと通信可能に接続され、制御部31と、入出力部32と、記憶部33とを含んで構成される。
また、この入出力部32は、通信回線を介して情報の送受信を行う通信インタフェースと、不図示のキーボード等の入力手段やモニタ等の出力手段等との間で入出力を行う入出力インタフェースとから構成される。
バックアップデータID301は、外部バックアップ装置30内において、記憶したデータを特定するための固有の番号である。
データ識別子302には、識別子空間上においてそのデータを特定するためのデータ識別子の値(ハッシュ値)が格納される。
また、データ303には、バックアップのためのデータ(原本データ)の情報がデータ識別子302に対応付けられて格納される。
次に、本実施形態に係る分散処理システム1が実行する処理の流れについて説明する。
なお、図示は省略しているが、負荷分散装置10の識別子管理部113は、識別子空間管理情報100の更新(変更)情報を、分散処理システム1内の各サーバ20に送信し、各サーバ20の識別子空間管理情報100を更新させる。そして、各サーバ20は、更新した識別子空間管理情報100を参照し、新たに担当領域となったデータについては、そのサーバ20の冗長化処理部214が、自身が記憶する複製データを原本データとし、その原本データの複製データを生成して、識別子空間上において自身のサーバ識別子の右回りにN−1個(N:冗長数)の別サーバ識別子を持つサーバ20にその複製データを送信し保存させる。このようにすることにより、分散処理システム1内の冗長数を保つようにする。
なお、このとき、損失領域の識別子領域情報において指定された領域にデータが存在しない場合もあり得るが、その場合、バックアップデータ管理部312は、データ存在しない旨を新規担当サーバ(サーバ20)へ送信する。
また、新規担当サーバ(サーバ20)のリストア処理部216は、冗長化処理部214を起動させ、冗長化処理部214が、ステップS3において更新された識別子空間管理情報100を参照し、識別子空間上で自身の右N−1個の隣接サーバに対し、データ復旧し記憶部23に記憶した損失データ(原本データ)の複製データを作成して送信する(損失データ複製送信処理:ステップS9)。
次に、図9のステップS2において負荷分散装置10が実行する損失領域の特定処理について詳細に説明する。図10は、本実施形態に係る負荷分散装置10が実行する損失領域の特定処理の流れを示すフローチャートである。なお、ここで、冗長数は「N」であるものとする。
次に、図9のステップS3において負荷分散装置10が実行する新規担当サーバの決定処理について、図11および図12を参照して、詳細に説明する。図11は、本実施形態に係る負荷分散装置10が実行する新規担当サーバの決定処理の流れを示すフローチャートである。また、図12は、本実施形態に係る負荷分散装置10が実行する新規担当サーバの決定処理の具体例を説明するための図である。なお、図12においては、リンク状の識別子空間を、説明を容易にするため直線として表現し、冗長数N=2であるものとする。また、図12(a)に示すように、サーバ「4」,「6」,「7」が大規模災害等により離脱したサーバ20(離脱サーバ)であるものとする。
具体的には、データ損失処理部114は、まず、抽出した領域の開始識別子から左回りに直近のサーバ識別子を持つ残存するサーバ20(左隣接サーバ)と、その抽出した領域の終了識別子から右回りに直近のサーバ識別子を持つ残存するサーバ20(右隣接サーバ)とを特定する。そして、データ損失処理部114は、特定した左隣接サーバおよび右隣接サーバの両サーバについて、識別子空間管理情報100(図5)を参照し、担当領域の広さを比較する。
図12(b)に示す例においては、データ損失処理部114は、損失領域の左隣接サーバであるサーバ「5」の担当領域と、損失領域の右隣接サーバであるサーバ「8」の担当領域とを比較する。
図12(c)に示す例においては、データ損失処理部114は、左隣接サーバであるサーバ「5」の担当領域の広さが、右隣接サーバであるサーバ「8」の担当領域の広さより大きいため、より担当領域が小さい右隣接サーバのサーバ「8」を新規担当サーバとして決定する。また、識別子管理部113は、損失領域をサーバ「8」が担当するように、識別子空間管理情報100を更新する。
なお、この識別子空間管理情報100の更新の際に、識別子管理部113は、新規担当サーバとして決定した左隣接サーバのサーバ識別子102(図5参照)を、損失領域の終了識別子の値(ハッシュ値)に変更する。図12(c)の例において、仮に、担当領域が左隣接サーバの方が小さく、損失領域を左隣接サーバのサーバ「5」が担当するとした場合には、サーバ「5」のサーバ識別子102は、損失領域の終了識別子の値となる離脱したサーバ「6」のサーバ識別子102の値(ハッシュ値)に変更される。
そして、データ損失処理部114は、新規担当サーバ153に空欄がある場合には(ステップS35→Yes)、ステップS30に戻り処理を続ける。一方、データ損失処理部114は、新規担当サーバ153に空欄がない場合には(ステップS35→No)、新規担当サーバの決定処理を終了し、図9のステップS4の処理に進む。
2 クライアント
10 負荷分散装置
11,21,31 制御部
12,22,32 入出力部
13,23,33 記憶部
20 サーバ
30 外部バックアップ装置
100 識別子空間管理情報
111,211,311 情報受信部
112 振り分け処理部
113 識別子管理部
114 データ損失処理部
115,217,313 情報送信部
150 損失データ管理情報
200 データ
212 メッセージ処理部
213 識別子空間管理情報登録部
214 冗長化処理部
215 バックアップ処理部
216 リストア処理部
300 バックアップデータ情報
312 バックアップデータ管理部
Claims (2)
- クライアントから受信したメッセージ信号を、複数のサーバに振り分ける負荷分散装置と、前記負荷分散装置から受信した前記メッセージ信号に基づき、自身が記憶するデータについて処理を実行する複数の前記サーバと、前記サーバそれぞれが記憶するデータのバックアップとなるデータを記憶する外部バックアップ装置と、を備える分散処理システムであって、
前記負荷分散装置は、リング状の識別子空間上に前記サーバそれぞれに固有な識別子であるサーバ識別子を昇順に配置すると共に、受信した前記メッセージ信号に付されるデータに固有な識別子であるデータ識別子を当該識別子空間上に昇順に配置することにより、受信した前記メッセージ信号の振り分け先となる前記サーバを決定する、コンシステントハッシュによる振り分け手法を採用しており、
前記サーバそれぞれは、自身に振り分けられた前記メッセージ信号に対応するデータを原本データとして記憶しておくと共に、前記識別子空間において隣接する冗長数N−1個の他のサーバに対し、前記原本データの複製データを生成して送信することにより、当該複製データを前記他のサーバに記憶させておき、
前記負荷分散装置は、
前記識別子空間において前記サーバそれぞれが担当する識別子の領域を示す担当領域を格納する識別子空間管理情報が記憶される記憶部と、
前記識別子空間上に配置された複数の前記サーバのうちから当該分散処理システムを離脱したサーバである離脱サーバを特定し、前記特定した離脱サーバのうちから1つの前記離脱サーバを抽出し、前記識別子空間上において前記抽出した離脱サーバに隣接する前記冗長数N−1個の他のサーバが全て前記離脱サーバである場合に、前記原本データと当該原本データについての全ての前記複製データとが失われた前記識別子空間上の領域である損失領域が存在すると判定すると共に、
当該損失領域を担当していた離脱サーバの識別子空間上で左回りに直近の残存サーバの前記担当領域の広さと、当該損失領域を担当していた離脱サーバの識別子空間上で右回りに直近の残存サーバの前記担当領域の広さとを比較し、前記担当領域が小さい方のサーバを、当該損失領域の新規担当サーバに決定し、前記決定した新規担当サーバとなる前記サーバに対し、前記損失領域に配置された前記データ識別子のデータである損失データの識別子の領域を示す損失領域の識別子領域情報を付した損失データ復旧指示情報を生成して送信するデータ損失処理部と、を備え、
前記サーバそれぞれは、
前記識別子空間管理情報、前記原本データおよび前記複製データが記憶される記憶部と、
当該記憶部に記憶された前記原本データをバックアップするためのデータを、前記外部バックアップ装置に送信するバックアップ処理部と、
受信した前記損失データ復旧指示情報に付された前記損失領域の識別子領域情報を含む損失データ取得要求を前記外部バックアップ装置に送信し、前記バックアップ装置から前記損失データを受信して、当該損失データを前記原本データとして自身の記憶部に記憶するリストア処理部と、を備え、
前記外部バックアップ装置は、
前記原本データをバックアップするためのデータと、当該データのデータ識別子とを対応付けて格納するバックアップデータ情報が記憶される記憶部と、
前記原本データをバックアップするためのデータを受信し、当該データのデータ識別子に対応付けて自身の記憶部の前記バックアップデータ情報に記憶すると共に、
受信した前記損失データ取得要求に含まれる前記損失領域の識別子領域情報に基づき、前記損失領域の識別子に対応する前記データ識別子のデータを前記バックアップデータ情報から抽出し、当該抽出したデータを前記損失データとして前記損失データ取得要求を送信してきた前記サーバに送信するバックアップデータ管理部と、を備えること
を特徴とする分散処理システム。 - 前記負荷分散装置は、さらに、
前記損失領域を、前記新規担当サーバとなるサーバの前記担当領域に追加するように前記識別子空間管理情報を変更し、前記変更した識別子空間管理情報を前記サーバそれぞれに送信する識別子管理部を備え、
前記サーバそれぞれは、さらに、
前記変更した識別子空間管理情報を受信し、自身の記憶部に記憶する前記識別子空間管理情報を更新する識別子空間管理情報登録部と、
前記更新した識別子空間管理情報を参照し、自身の記憶部に記憶する原本データの複製データを生成し、前記識別子空間において隣接する冗長数N−1個の他のサーバに対し前記生成した複製データを送信する冗長化処理部と、
を備えることを特徴とする請求項1に記載の分散処理システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013146854A JP5945252B2 (ja) | 2013-07-12 | 2013-07-12 | 分散処理システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013146854A JP5945252B2 (ja) | 2013-07-12 | 2013-07-12 | 分散処理システム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015018508A JP2015018508A (ja) | 2015-01-29 |
JP5945252B2 true JP5945252B2 (ja) | 2016-07-05 |
Family
ID=52439421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2013146854A Expired - Fee Related JP5945252B2 (ja) | 2013-07-12 | 2013-07-12 | 分散処理システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5945252B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6770244B2 (ja) * | 2015-03-30 | 2020-10-14 | 日本電気株式会社 | ストレージシステム |
JP6322161B2 (ja) * | 2015-06-22 | 2018-05-09 | 日本電信電話株式会社 | ノード、データ救済方法およびプログラム |
JP6387333B2 (ja) * | 2015-09-07 | 2018-09-05 | 日本電信電話株式会社 | ノードおよびスロット最適化方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7526514B2 (en) * | 2004-12-30 | 2009-04-28 | Emc Corporation | Systems and methods for dynamic data backup |
JP2012221419A (ja) * | 2011-04-13 | 2012-11-12 | Hitachi Ltd | 情報記憶システム及びそのデータ複製方法 |
JP5544522B2 (ja) * | 2011-06-21 | 2014-07-09 | 日本電信電話株式会社 | 負荷調整方法、負荷調整サーバ、負荷調整用サーバ装置、および、負荷調整プログラム |
JP5629281B2 (ja) * | 2012-03-05 | 2014-11-19 | 日本電信電話株式会社 | 管理装置およびプログラム |
JP6055197B2 (ja) * | 2012-04-06 | 2016-12-27 | 日本電信電話株式会社 | データベースシステム |
-
2013
- 2013-07-12 JP JP2013146854A patent/JP5945252B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2015018508A (ja) | 2015-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951559B (zh) | 分布式文件系统中数据恢复方法及电子设备 | |
JP2019526106A (ja) | データ処理方法及びデバイス | |
JP5948933B2 (ja) | ジョブ継続管理装置、ジョブ継続管理方法、及び、ジョブ継続管理プログラム | |
EP3291487B1 (en) | Method for processing virtual machine cluster and computer system | |
CN104572344B (zh) | 一种多云间数据备份的方法和系统 | |
JP2009020757A (ja) | データ登録装置、データ登録方法及びプログラム | |
JP5945252B2 (ja) | 分散処理システム | |
CN111460039A (zh) | 关系型数据库处理系统、客户端、服务器及方法 | |
JP5969315B2 (ja) | データ移行処理システムおよびデータ移行処理方法 | |
EP2542976A1 (en) | Method and apparatus of backing-up subversion repository | |
JP6025679B2 (ja) | 分散データベースシステム | |
CN105323271B (zh) | 一种云计算系统以及云计算系统的处理方法和装置 | |
JP5711771B2 (ja) | ノード離脱処理システム | |
JP2015201027A (ja) | ノードおよびプログラム | |
JP6093320B2 (ja) | 分散処理システム | |
JP5658621B2 (ja) | 信号振分複製先決定システム、信号振分複製先決定方法およびプログラム | |
JP6564349B2 (ja) | 保守減設システム、ノードおよび保守減設方法 | |
JP6714547B2 (ja) | 負荷分散装置、負荷分散方法、および、負荷分散プログラム | |
JP6506156B2 (ja) | ノードおよびグラビテーション抑止方法 | |
JP5815000B2 (ja) | ノードおよびプログラム | |
JP6127005B2 (ja) | クラスタシステムのサーバ装置およびプログラム | |
JP5914267B2 (ja) | データ復旧装置 | |
JP6383338B2 (ja) | サーバ、データ一覧作成方法、および、データ一覧作成プログラム | |
JP2014146153A (ja) | クラスタシステム | |
JP6588484B2 (ja) | 復旧装置、復旧方法、および復旧プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150717 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160518 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160524 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160527 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5945252 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |