you21979の日記

実験ネタとか。仮想化とかnodejsで嵌った所とかおもしろかったところとかいろいろ

10Gbpsを家庭用に導入して劇的に効果があるのか?

ファイルサーバーに導入して意味があるかどうかを判断する材料になればいいかと思います。

 

まず各システムの伝送速度を知る必要があります

USB3.0(USB3.1gen1)やSATA3のインターフェイスが10Gbps以下です

 

USB3.0 = 5Gbps

SATA2 = 3Gbps

SATA3 = 6Gbps

 

どんなに高速なストレージをつないでも単体ではまずインターフェイスで頭打ちです。

 

raidでシステムを組んだ場合はこの制限を突破できます

最近のHDDは1台あたり1.2Gbpsくらいでますから

raidz1など3+1の4台構成なら3.6Gbps(450MB/s)くらいが上限の期待値として出ますね

HDDのNASなら5Gbpsでればいい方なので10Gbpsをフルで使うためにはHDDだと難しいことがわかります

 

ZFSを使っていればSSDのキャッシュが使えるのでキャッシュが埋まるまでは高速に動作することが期待できますがNVMeでなければSATA3の6Gbps制限に引っかかるのでSATA3のSSDキャッシュはraidにはそれほど効果が無いかもしれません

 

 

 NAS用途に10Gbpsを使うなら5Gbps出ればいいほう、実際は3Gbpsだと思っておけばいいです

なので家庭用に導入するかどうかはコスト的に合うか合わないかで判断すればいいと思います

(小規模のオフィスならコスト的に導入しない理由はないとおもいますね)

 

あとRJ-45の10GBASE-Tでは消費電力が大幅に上がるのも考慮したほうがいいです。

消費電力考えればRJ-45のポートは少ないほうがいいですね

 

以下のサイトが詳しいです

fefcc.net

 

10Gbpsのスイッチ Mikrotik CRS309-1G-8S+PC を購入

ポート単価が3000円切っている(1ドル110円換算)10GBpsのスイッチが発売されたのでIYHしてしまった。

他のメーカーのスイッチのポート単価は1万円くらい。

お値段はSFP+が8ポート+1GBが1ポートで210ドル=23100円(1ドル110円換算)

ファンレスなのも良い

 

その名もMikrotik CRS309-1G-8S+PC

MikroTik CRS309-1G-8S+IN | CRS | Mikrotik | EuroDK

 

 

MikroTikというメーカなんてほとんどの人は聞いたことすら無いと思うが

バルト三国ラトビアのメーカーである。

コア数たくさん乗っている製品が脆弱性でモネロのマイニングに使われたくらいとしかパブリックなニュースになってない日本ではマイナーなメーカかな。

ルーターの脆弱性のせいでPCでこっそり仮想通貨をマイニングさせられる被害が拡大中 - GIGAZINE

このメーカは新興国でシェアをとっていてWIFI製品が強いです。

 

ちなみにCRS305というモデルもありSFP+が4ポート+1GBが1ポートの製品で110〜150ドルくらいらしい

本当はこっちが欲しかったのだけど年末に海外のyoutuberが宣伝したせいかわからないけど在庫がまったくない

www.youtube.com

 

 

 

SFP+ってなんぞやって人もいると思うので

簡単に説明するとサーバー用の10Gイーサネットの規格

 

SFPという規格もありそれは1Gイーサネットの規格

紛らわしいです

 

SFP+はトランシーバーとケーブルが明確に分かれていてトランシーバーの着脱で伝送媒体を選ぶことができるというのが特徴

 

SFP+はめんどくさい問題がいくつかあって、一つはベンダーロック問題。もう一つは伝送媒体を選ぶときのケーブルの種類。

 

ベンダーロック問題は僕も詳しくはないので説明できないがHP製品を選ぶとまず間違いなく起きる。

 

HP社のネットワークカードに他社のSFP+トランシーバーを取りつけても通信できない。HP純正のトランシーバを手に入れる必要がある

他の会社の製品でもロックしている場合があるのでロックしていない製品を選ぶか互換品があり安くトランシーバーが手に入りそうな製品を選ぶのが無難

 

次はSFP+の伝送媒体の話でトランシーバーを使って繋ぐ場合はファイバーケーブルを着脱できるようになっている

この構造はケーブルの長さをあとから選べるだけじゃなく、ベンダーロックをコントロールすることにも使える。例えばHP社のスイッチとインテル社のカードをつなぐ時に両方とも違うロックがかかるのでそれぞれの端に対応したトランシーバーをつけてケーブルをつなげばよい。

 

トランシーバーとケーブルの区別がないメタルケーブル(銅線)もあってこれはDAC(ダイレクトアタッチケーブル)またはTWINAXと呼ばれている

これは安いのでベンダーロックがない製品の場合はこれを選べばいいと思う

 

伝送媒体をトランシーバーの付け替えで選べると書いたが10GBASE-Tのケーブルを扱うトランシーバーも存在している

 

MikroTik S+RJ10 | Fiber Modules | Mikrotik | EuroDK

 

これを使うと10GBASE-Tのネットワークカードとも接続できる

(SFP+のネットワークカードにつけて10GBASE-Tのスイッチにつなげられたという報告もあるようだ)

 

 

 

10GBASE-Tの普及が近そうなのになんでSFP+のスイッチなんて買ってるのと思うかもしれないが

SFP+にはいくつか利点があって、消費電力が低い、レイテンシが低いというメリットがある

 

あとは10GBASE-Tのトランシーバをつければ10GBASE-Tにもなるわけでトランシーバーの分、高くつくがつなげることはできるので10GBASE-Tが普及したあとも問題がない

 

SFP+とはいえ10Gスイッチの新製品でポート単価3000円というのは結構衝撃で以下の記事によると一万切ると普及が始まるとあるので今年あたりからNASを所有している家庭中心に普及するのではと思う。(自分がIYHしたくらいだし)

今年あたりSFP+ではなく10GBASE-Tのスイッチもポート単価がさらに下がると思うのでそれを待つのもありだと思う。

 

internet.watch.impress.co.jp

 

 

※ SFP+と似ているQSFPという規格があるけどこっちは40Gの規格でSFP+に変換するトランシーバーを使えば使える

 

 CRS309の消費電力周りが気になったら以下の記事もどうぞ

 

you21979.hateblo.jp

 

SFPモジュールの相性などが気になったら以下の記事もどうぞ

 

you21979.hateblo.jp

 

SFP+周りの情報をまとめています。

note.com

 

 

 

ACアダプタをUSBに置き換える

電源タップがACアダプタだらけの場合USB電源に置き換えるとスッキリします

dacやガジェット、スマホやストリーミングデバイスなどが増えてきたら

以下のようなUSB電源でACアダプタを一掃できます

 

usb電源

 

付属のUSBケーブルで繋げられる 

 

5vのusb電源化

 

12v昇圧ケーブルでusb電源化

 

 

2万円で作る本格ハイファイオーディオシステム

FXAUDIOのDAC兼アンプとヤマハのパッシブスピーカーでかなり安く作れます

192khz/24bitまでの光/同軸デジタルの入力

AUXアナログ入力

USBは44.1/48khz入力

ヘッドフォンは指すとスピーカーはミュートになります

バナナプラグはなくてもいいけど、あったほうが抜き差しが楽

スピーカーケーブルはスピーカに付属しているけどamazonのケーブルのほうがいい音出ます。

 

自分はPCゲームやfoobar2000で音を出していますが好みの音域を出せておすすめです

 

 

ブルートゥース機能が欲しい場合は以下のやつがusb電源/バッテリ無し/送受信切替/光デジタル/APT-X LL対応なのでオススメ 

 

10万円以内で揃える amazon fire tvとその周辺で良かった組み合わせ

4k環境は機器の相性がいろいろあるみたいなので鉄板の組み合わせをまとめてみました

 

FIRETV本体

4kモニタ

リクライニングチェア

FireTVに合体させる学習リモコン

サブウーファー付きサウンドバー

光デジタル分離器

 

日本のamazon.co.jpでお買い物

 

周辺機器はアメリカのamazon.comからお買い物がオススメ送料込みでも断然comからのほうが安い

学習リモコン Sideclick-Remotes-SC2-FT16K-Universal-Attachment

スピーカー AmazonBasics-Channel-Bluetooth-Built-Subwoofer

HDMI光デジタル分離 Avantree-Extractor-Splitter-Converter-Optical

 

4kディスプレイとスピーカーはsideclickで学習させられるのでまとめてコントロール可能です

音声分離機器は相性があるのでサポートしていると明記してあるAvantreeのやつがおすすめです

 

PS.

amazonウーファー付きサウンドバーはお手軽で日本人向けなので日本でも購入できるようになるといいな。

 

以下の切替器はfiretvをいちいち再起動しないとTVが点滅して認識しないのでオススメしない

 

 

HDMI2.0、HDCP2.2対応でもうまく対応できない機器があるのでこの辺が相性がでる。

 

keianのモニタはモニタアームで癖があるのでアームに取り付けるなら以下のものをチョイス

 

fire tvはプライムに入会するのがオススメ

 

nodejsをプロジェクトで適用してメンバーに使わせてみた話

node.jsを1からプロジェクトメンバーに教えてみて思ったことを書いていきます

 

チームのメンバーはC++使える新卒4人とPHPを扱う中堅3人といった構成です。

それぞれ知識のバックエンドが違うのでそれぞれ教える方法も変えました。

 

PHPプログラマ

 

JavaScriptについて

自分の認識ではPHPを使ってる人たちはJavaScript(jQuery)もある程度使えるという認識だったのですが

その考えは間違っていたようで文法から教えました。(マークアップとサーバで分業していたようです) 

文法だけみるとPHPJavaScriptは一対一で対応する関数が多いので対応表を用意しておいたのでそれほど大変ではなかったです。

クラスについてはクラスラッパを使って擬似的に対応させました。

 

PHPでは当たり前にやっていたノウハウを忘れさせる

apacheを使うところにこだわるので忘れさせる

 

■イベントドリブン 

ブラウザ側のJavaScriptや他のGUIライブラリを触ったことがあればよかったのですが

ないようなので概念から教えました。 

 

■非同期処理

非同期でのDBのトランザクションではパイプライン処理の概念を教えました。

asyncなどのフロー制御で非同期処理ごとに関数を分けることで対処するようにしました

やりかたをレールをしいてしっかり教えないとここで躓きます

 

■データをメモリに保持させる

PHPではデータを保持するときは選択肢がなくてシェアードメモリ、memcached、mysqlなど言語で扱うメモリの外に確保するしかないのですが

nodejsではデータをメモリ中に確保し続けられるのでデータにアクセスするコストが圧倒的に低いことを教えました

 

新卒のゲームプログラマー

 

JavaScriptについて

JavaScriptは触ったことがないようでしたがオブジェクト指向はかなりしっかりしてました

関数型について知識がなかったようなのでそのあたりを教えました

・クロージャ

高階関数

・ラムダ

 gcに慣れてないと普段アンマネージドなコード書いてるからか混乱する場合もありました。

 

■イベントドリブン 

ゲームプログラマはリアルタイム処理をやっているので簡単に覚えられるのではないかと思ってました。

サーバーのプログラムはゲームのプログラムに似ているところを伝えて、相違点を覚えてもらう方式で教えました。

メインループがありタスクシステムがあり、ゲームではすべての処理を16msで処理を終わらせれば良いのを

サーバーでは例えば1000人同時にアクセスさせる(一秒間に一回リクエスト)なら1ms以内に返せないとならない。

 

■非同期処理

 非同期についてはゲームでは普通に行なっているので特に教えることはなかったです(Nowローディング画面などでやってるから)

 

■データをメモリに保持させる

普通にやってるので教える必要がありませんでした

 

■その他 

ネットワークについてはIPとポートの概念をさらっと教えただけで適当に流しました。

データベースに馴染みがないのでSQLのクエリーやトランザクションについて重点的に教えました

 

教えてみた感想

 nodejsはゲームプログラマ向きだと思いました

必要なスキルがかぶってます

PHPプログラマでも時間をかければ覚えてもらえます。

 早い人は一週間くらいで使いこなせるようになるし、一番最初の導入の敷居が低いから

 自宅とかで勉強したりしやすいのだと思います。

 

node.jsとか求人出しても経験者はほとんどいないわけですし、本格的に普及させるには既存の人材に教えていくことも考えないといけない時期なのかなとおもい書いてみました。

 

 

node.jsのセキュリティ

nodeの脆弱性について

http://www.ustream.tv/recorded/40193490

 

node学園のLTでコレをみて思い出したのだけれどHTTPの脆弱性を直してもバックエンドが遅い場合

nodeの場合いくらでもリクエストを受けてしまってバックエンドのリクエストをキューにためてしまう場合に結局メモリ不足で落ちてしまう

それに対する一つの解として以前qiitaに記事を書いた↓

node.jsにリミッターを設定したい

 

一つのセッションあたりの秒間リクエスト数がキャパシティプランニングから導き出せていれば秒間あたりのリクエスト数を絞ることで回避できるかなと。