makotan _at_ gmail dot com

マルチサービスデータベース

年の瀬にぼんやり考えてた


Aurora、Redshift、Athena・・・
と色々とSQLを使うサービスが登場してるわけですが
それぞれ特性が異なってるためにデータを入れ替えつつ使い分けをするそんな日常


これらの上位にSQL対応のDB Proxyサービスを設置
データは種類に応じて定期的に各々のサービスにコピーされていく(マスターはAurora)
SQLを投げると、その対象期間とかSQLの内容に応じて自動的に実行するサービスを切り替えて実行
通常は普通にAurora or PostgreSQL、沢山の集計処理とかが入る場合はRedshift、Auroraに無い古いデータを見る時はAthena、対象が古くて且つ沢山の集計処理の場合はRedshift Spectrum
みたいなのを自動的に判断して実行


って言うのがあれば良いのにな


このサービスいつAWSが出すのか教えて!エライ人!

2017年振り返り

総括すると良い一年でした



趣味でwebなアプリ作ろうとしてたけど、結局画面の無いアプリ作ってる
webアプリ作ろうとするとめんどくせぇ〜ってなってそのめんどくささを解消したくなるので致し方ないw



比較的健康な1年、比較対象は周りの人w
周りが頭痛とか腰痛とか何かと痛そうな人が多いのでそれに比べるとアレルギーくらいだし健康だなと
過去の経験から、あとは健康的に瘦せれば小さい問題も片付く


お仕事大変
色んな想定外がいっぱいの1年
あと、昔仕事で作ったサービスが想定外のところで使われててびっくりした


勉強がすすまなかった
年始に色々勉強しようとしてたのがあんまり進んでない
ゲームに時間吸い取られすぎた気がしてる。来年はGTとエースコンバット位しかしないつもり


片付け進んだ
10年ほど続いてる断捨離ブームの結果、家の片付けがだいぶ進んだ。
ゴールはさらに荷物を数割減なのでもうちょい先だけど、大きなマイルストーンまではあと少し!
この後がなかなか大変そう・・・

だいぶ前にぼんやり考えてたメールサービス


細かいの端折ってまとめると
相互認証をした間とその派生の間で信頼性と秘匿性の高いメールネットワークを構築する
ドメインはサーバも独立してて、ドメインの信頼と公開鍵をブロックチェーンで管理する
あるドメインから大量のゴミメールが流れてきた場合にはブロックチェーンに記録して全メールサービスでブラックリストを共有
A-B, B-Cで相互認証をした場合、A-Cの相互通信も可能
Cが大量のゴミメールを送ってブラックリスト入りした場合、Bの信頼が低下する
ある程度信頼が低下したドメインブラックリスト入りする
メールの送受信の時には宛先情報は相手の公開鍵で暗号化、本文は自分の秘密鍵を使ってキーを暗号化する
鍵を変更したい場合はブロックチェーンに記録する
これを今のSMTPの上に載っける(=これを使わなければ普通のメールになる)


こんな風にやればだいぶ安全なメールサービス作れそうだけどなぁ〜
ってぼんやり考えてた


コンセンサス・アルゴリズムどうするかってところで思考停止したのは秘密
プルーフ・オブ・ステークになるだろうけど、コインじゃ無いしメール配信に採掘が必要ってのもなぁ・・・

HTTPベンチマークを見ながら思うこと

注:今年感じた個人的感想です

HTTPな各種サーバを大きく分けると


純粋な非同期サーバの開発言語として有名なのはGoとNodeの2つ
色んなベンチマークで優秀な結果を残してるので最近の高トラフィックな環境でもよく使われてる感じ
特徴的なのはランタイムも非同期がベースに構成されててCPUを生かし切る為に生まれてるような言語とランタイムになってる
特にコネクション数が増えたときの安定性は抜群


純粋なブロッキングサーバは最近減ってきたけど、まだ多少残ってる感じ
各種ベンチマークでボロクソに比較されて悲しい感じになる
問題はソケットの処理のためにスレッドを立てる必要があるのでコネクション数=スレッド数になってC10K問題にキッチリぶち当たる
ただし、コネクションが少ない状態でのレスポンスの安定性は抜群だし、プログラムが凄く楽


非同期とブロッキングのハイブリッド
新しめのTomcatとか含めて純粋な非同期の前の主流な感じ
ソケットの処理そのものは非同期でやっておいて、メインの処理はブロッキングで書くみたいな感じ
特徴もやっぱり間くらいw
同時処理数+コネクション管理用スレッド=スレッド数になるので実はC10K問題はそんなに起きない


HTTPなベンチマークの特徴

  • 同時コネクション数をどのくらい処理出来るのかをひたすら試す
  • コネクションを張ってからレスポンスを受けるまでの時間の測定
  • コネクションを再利用しつつ、レスポンスを受けるまでの時間の測定
  • コネクションの再利用無しでレスポンスを受けるまでの時間の測定


この4種類くらいがあって、同時コネクション数が優秀な場合最初の1個しかやってないパターンが多い気がした
実際には実用的なコネクション数でレスポンスの良さを測定する必要があると思ってる
というのは、HTTPサーバの場合に限って言えば1台のマシンでC10Kを処理するWebサーバを作る事は世の中的に滅多に無くて、複数台使って秒間で1000reqの処理が安定して出来ていれば良いことの方が圧倒的に多いから。(CDNに逃がせる画像とかを除いて1000req/sは相当大きめの数値だと思ってる)


絶対的なコネクション数を試すベンチマークより、適当な数のコネクション数でどの程度のパフォーマンスが出るかの方が結構大事な気がする


そんなことを思った2017年もあと少し
今年は紅と白どっちが勝つんでしょう・・・

若手が平均的に優秀に感じる理由を考えてみた

最近(といっても10年以上経ってる気がする)、10代、20代のレベルが高くて40代前後のレベルが低い気がしててその理由をぼんやり考えてみた(若手を圧倒する能力を常に維持してる人も普通に居るので、これが誰にでも当てはまる常に有効な結論だと言ってるわけじゃない)

高速道路説

若手は高速道路に乗ってサクッとレベルを上げれるので優秀っていう説
おじさんたちも高速道路に乗ればさらにレベルアップするって事だよね?
高速道路は知ってる範囲でこの20年ほど常に整備されてたので40代のレベルが低く感じる理由としては弱い気がする

年齢的な限界説

40代といえば既にソフトウェアエンジニアの定年説の定年を超えてるから、後ろから高速道路に乗った人に一気に追い越されたっていう説
年齢が学習効果を低くするのは事実だけど、一般道で凄く先行してる人が高速道路に乗ってる人に数年で追いつくかなぁ〜っていう疑問は残るので、年齢的なものは他の理由も関係していそうな気がする

年代的な原因説

40代と言えば通常子育てとかに時間を取られる世代なので、後ろから技術面でショートカットして来るエンジニアに追いつかれて追い越される説
周りのエンジニアを見てると一般的にはこの可能性が凄く大きい気がする

逃げ切り希望説

20代で仕事を始めて20年ほど経って色々な仕事を経験したのでもうこのまま逃げ切りたい説
20代で覚えたことをギリギリで使いながら新しい世代を部下に持って新規の事に対して積極的にならなくてもあと20数年で定年を迎えれるし、このまま逃げ切りたい感じになってる
っていう人も一部居そうだなぁ〜って思う

若手スポンジ説

実は若手はスポンジみたいに周りにある物を吸収していく説
スポンジがスカスカの若手とスポンジに要らないもの含めていっぱい入った状態の40代とは比較することすらおかしいのではないか
時代に応じてスポンジに詰まった古い物を捨てていかない40代が居たら一瞬で若手に追い越されるのは当たり前な気がする

個人的に感じてる結論

年代的な原因説が重要な要因だとおもうけど、個人差も大きいな〜って感じるので
若手スポンジ説と逃げ切り希望説その次の大きな要因な気がした
ということで、純粋な年齢は無関係だと思ってる

だいぶ前から考えてる理想的なPC環境

用意するもの

  • 軽くて液晶が綺麗で使いやすいノートPC
  • とにかくハイスペックなマシン

とにかくハイスペックなマシンにノートPCからリモートデスクトップを使って操作する


って言う風に考えて色々探してたんだけど・・・
ハイスペックなマシンって高いな〜とw
クラウドならインスタンス起動分のお金しかかからないのになぁ〜


ハッ!(゜∇゜;)


クラウドでハイスペックなマシンを用意して軽くて液晶が綺麗で使いやすいノートPCから繋げば良いのでは!?
って思ったら、クラウドでハイスペックなマシンの選択肢はWindows(しかもサーバ)かLinuxのいずれかしかない
Windowsにするとライセンス費用分値段が上がるので理想はLinuxだなと
Linuxを他のマシンから操作するのにVNCとか使いたくないし
Xそのままが良いなぁ・・・


XRDP!?
キタ━(・∀・)━!!!! <いまここ



ということで試算してみた
Core i9/32GB メモリ/512GB SSD+3TB HDD/GTX1080Ti搭載モデルが約40万
これに対抗出来るAWSはっとg2.8xlargeかな
週に16時間ほど動かしてディスクをSSDだけ同容量にして、付きに500GほどI/Oするとして・・・月に$373で大体4万円
10ヶ月ほどでAWS費用が本体費用を上回る事が判った
電気代とか入ってないのでその辺含めても1年か・・・(その頃にはもっとハイスペックなマシンに乗り換えたくなったりしてるかな〜)
(そもそもネットワークの遅延を考えてないので微妙なのはあるけどw)


ちなみに、GPU無しでc4.4xlargeにすると$195とかなので、やることによってマシンスペック変えていけばもっと安い値段で済みそうな気がしてる
だれかやってないかな・・・(他人任せ)