金融データ分析基盤の機材の選定

前回の記事(基板の設計):


構成

前回設計した金融データ分析基盤は長期コスト面や勉強面でオンプレ構成にすることに決めた.その基盤の構成についてだが,これは3つの案が考えられる.

下記の構成のどれかに絞って機材を探すのではなく,どの構成が適しているかなども考えながら総合的に良さそうな機材を探していく.

案1:スタンドアロン型

まず一つ目が,高スペックなサーバをひとつだけ利用し,Kubernetesクラスタをその一つのみで構成する形だ.金融データ分析基盤ではAirflowとHadoopをそれぞれ構築するが,どちらもKubernetes上で構築ができる.そのため,MinukubeやVMWareなどで一つの物理ノードでKubernetes環境を整えられれば基盤を構築することが可能となる

スタンドアロン型では,複数の低スペックのPCを買うよりも一つの高スペックなPCを買う方がスペックに対するコスパが良い場合がある.そのため,購入する機材によってはコストを抑えつつ良いスペックを実現できる.しかし,物理的なサーバは一つのため障害には弱いデメリットがある.

案2:一体クラスタ型

二つ目が一体クラスタ型で,AirflowとHadoopをどちらもKubernetesクラスタ上に構築するが,スタンドアロン型とは違い複数の物理サーバによってクラスタを組む.つまり,通常のKubernetesクラスタの構築をするのと変わらない.

スタンドアロン型とは違い複数の物理サーバが存在するため,障害に強く,拡張性にも優れている.また,Kubernetesクラスタですべてのリソースを管理するためマスターノードはそのクラスタ用のみで良いため無駄が少ない.ただ,デメリットとして複数のPCを購入するためものによってはスペックに対するコスパが悪いのと,HadoopクラスタをKubernetes上で構築するのが少し手間がかかったりする.

案3:分離クラスタ型

三つ目が分離クラスタ型で,Airflow(Kubernetes)とHadoopをそれぞれ別のクラスタとして物理的に分ける構成だ.Airflowを載せたKubernetes環境とデータの保存・処理などのHDFS(+Spark, Impala)にそれぞれ障害点を分散できる上に,性能を上げたいときなどは別々にできるというメリットもある.

最も理想的なのはこの分離クラスタ型ではあるが,用意しなくてはならないPCの数が多くなってしまうので余計にコストがかかってしまうというデメリットもある.

制約

  • 予算:10万円まで

  • 電力:100Wまで

  • 静音:必須

常時稼働をしても月で千円程度の電気代に抑えたいのでなるべく省電力なものにしたい.また,同じ部屋で寝ることも考えると静音性は必須でほしいため,ラックマウントサーバやブレードサーバなどのファンがうるさいものは選択肢に入らない(そもそも予算が足りないが…)

選択肢

1. ~2万円の新品NUC

まず選択肢として挙がるのが1万円台で安めの新品NUCだ.
Amazonで1万円台でNUC・ミニPCを探すと以下のようなものが多数見つかる.BMAXのミニPCだと2コア2スレッドのCeleron N4000(8年近く前のもの)と8GBのメモリを載せたものが1万2千円となっている.

他にもHPのものやGMKtecのものなどがある.

GMKtecのものは他より少し高いが,CPUが4コア4スレッドで最近出たN100を載せており,性能は頭一つ抜けている.予算の10万円を考えると,最大で4台まで買える(スイッチやケーブル類も買うため).

1万円台のNUCであれば,1台をKubernetesクラスタ(Minukube),3台をHadoopクラスタとして分離クラスタ構成が適していそう.

2. ~5万円の新品NUC

5万円までのNUCともなると,以下のようなある程度スペックの高いNUCも視野に入ってくる.これはCPUが8コア16スレッドのRyzen 7 5700U,メモリが16GBを搭載する中堅ノートPC程度の性能を持つ.

また,5万円ぎりぎり程度のものだとメモリが32GBになったりもする.

2万円程度のNUCでメモリが8GBだったことを考えると,5万円で32GBで8コア16スレッドCPUはスペックに対するコスパが比較的良いことが伺える.

5万円までだと予算的には2つしか購入できないが,構成としては3つの案どれでも可能となる.分離クラスタ型でも,KubernetesとHadoopどちらもスタンドアロンで構築が可能だし,一体クラスタ型でも可能.一体クラスタ型の場合はコントロールプレーンのノードを安めのラズパイなどにすることで,ワーカーNUC2台で無駄なくリソースを利用できる.

3. ~10万円程度の新品NUC

10万円までともなると,CPUはCore i7やRyzen 9などのハイエンドのものになり,メモリは32GBから64GB,ストレージはSSD1TBなどになる.

10万円までだと予算的に1台しか買えないため,構成はスタンドアロン型一択となる(一応,安めのNUCをもう一つ買って一体クラスタ型にして拡張性を上げる選択肢もあるが).CPUのコア/スレッドに対するコスパは5万円までの方が良さそうだが,メモリではコスパはとんとんのように思える.

4. 数千円の液晶割れ中古ノートPC

友人から教えてもらった案として,液晶割れのノートPCをメルカリなどで安く買い,液晶を外してしまって利用する方法がある.

ざっと調べてみると,5千円程度でCore i5 6300U,8GBのLet's noteが売られていたりする.液晶割れやバッテリー欠品などがあるが,サーバとして利用するのであればそこまで問題にはならない.もちろん,CPUはかなり昔のものではあるが,ハイパースレッディングも対応しているため4スレッドある.

このあたりであれば10台程度予算内で確保できそうなので,CPUやメモリなどのリソースに対するコスパはこれまでの案の中で抜群に良い.ただし,同種の機器を集めるのは困難な上,かなり前のPCであれば各部品の故障が多発する恐れもある.そういった場合にハードに対する深い知識がないと対処が難しいが,あいにくそういった知識は持ち合わせていない…(これを機に勉強してみるのも面白そうだが)

ただ,物理ノードの故障はクラスタ構成であれば対処が可能で,なおかつ,そういった事態への対処という意味でも面白そうだと感じる.

5. 格安の中古シンクラ

機材を探しているときにたまたま中古シンクラが格安で纏め売りされているのを見つけた.性能はかなり低く,CPUは10年前近くのAtomでメモリは2GBだった.しかし13台で1万円程度と1台あたり千円しないほどの価格となっている.

スペックに対するコスパは液晶割れノートPC同様非常によく,新品NUCを圧倒している.また,こちらは同種の機器となるため設定なども楽で,コンパクトなため置き場所にもそこまで困らない.

ただ,CPUは基盤に直接はんだ付けされているようで,加えて一般に流通しているソケット形状ではないらしいので交換が難しい.そのため,性能を上げるとしたらメモリの差し替えくらいになりそう(CPU性能も特に低いと思うので).

選定

スペックに対するコスパ

上記の選択肢でいくつかのCPUを上げたが,それらはコア/スレッド数のみで単純に比較できないため,ベンチマーク結果を調べてみる.利用したのは以下のサイト.ベンチマークは指標ごとに若干変わると思うが,そこまで正確な値ではなくてよいのでとりあえずここのを利用する.

  1. Intel Celeron N4000:0.95

  2. Intel N100:3.56

  3. Ryzen 7 5700U:10.25

  4. Ryzen 9 7940HS:19.65

  5. Ryzen 9 6900HX:16.05

  6. Intel Core i7-12650H:14.66

  7. Intel Core i5-6300U:2.09

  8. Intel Atom x5-E8000:0.62

CPUはこれらを価格で割った指標をコスパとして扱い,メモリは単純に容量を価格で割る.その二つを足し合わせた指標で各PCを比較すると以下のようになる.(小さい値になり見づらかったので,それぞれの値に10,000をかけて見やすくした)

こうしてみると,中古のノートPC・シンクラがコスパでは明らかに秀でている.しかし,この指標には表れないデメリットも以下のようなものがある.

  1. 中古のため故障のリスクが高い

  2. 台数が多いとオーバーヘッドも大きくなる

1はノートPC・シンクラどちらにも言えることで,2は主にシンクラに対してのデメリットとなる.懸念しているのはCPUが貧弱すぎてOSやノード管理のためなどに動かす処理が大きな負荷になってしまうこと.シンクラはその名の通りクライアントでは重い処理は行わない想定なため,そこは心配…

段階的な購入

上でコスパについて記載したが,やはりシンクラが頭一つ飛びぬけており,なおかつ,かなり手を出しやすい値段のため,まずはシンクラを購入することにした.

ただし,性能面での懸念が大きいため,以下のように段階的な購入をしていこうと思う.

  1. 格安シンクラ13台まとめて購入

  2. 液晶破損ノートPC or 新品NUCを適宜購入

1で実際にクラスタを組んでみて性能に対する負荷が大きすぎると判断した場合は,KubernetesクラスタやHadoopクラスタのワーカーに性能の良いPCを追加していこうと思う.その際に格安シンクラはすべて無駄になるわけではなく,そこまで高い性能が必要ないマスターノード(コントロールプレーン,ネームノード)に用いて冗長構成などをできるようにしようと思う.
ノードプールを分けて軽い処理用のワーカーとして入れてもいいかも.

まとめ

結論として,スペックに対するコスパがダントツで良かった格安シンクラをまず買ってみて,実際に基盤を構築してみることにした.そのあとに性能面で不満があればワーカーノードの入れ替え・追加などを順次行っていく予定.

格安シンクラは13台もあるため,KubernetesクラスタとHadoopクラスタをそれぞれ別々に構成しようと思う.

あと,適当にスイッチや外部ストレージなども買う予定.



この記事が気に入ったらサポートをしてみませんか?