巨大で無停止の決済サービスを作るアーキテクチャをぼんやり考えてみた
昭和の最後の正月まであと少しなので、巨大で無停止で超高負荷に耐えれる低コストな決済機能を作るアーキテクチャを考えてた
前提
日本の決済サービスとかじゃなく、アリペイを1から作るならって考えた(決済ルールが似てる奴・・・ACHとか・・・ならこれでいける気がする)。
アクティブなユーザが相当数いないとベースのコストが高くて大変そう
アリペイ並の低コスト決済サービスが出来るとは一言も言ってない
サーバ構成
A群:全体をコントロールする為のサーバ群、単時間ならダウンしても良い程度
B群:DB,MQ,APサーバ,LBから構成されるサーバ群、通常B群はユーザと1:Nで紐付く
C群:基本的にWebベースのサーバ群、フロントアプリから呼ばれたりする
D群:巨大ストレージサーバ
ポイント
全サーバをダウンする前提にすること
独立したB群を必要なだけM個配置すること
B群のフェイルオーバーを各レイヤでやること
B群のDBサーバを含むサーバ群をOSSで固めることで低コスト化
バージョンアップとかサーバの入れ替えはまるっと落とせる!(ダウン前提なので)
ソフトウェア的な事
C群がB群にアクセスするときA群(のキャッシュ)に問い合わせて宛先を決める
B群はフェイルオーバーに備えてフェイルオーバー先のMQにデータのコピーを送り込み続ける
A群はB群をかなりの高頻度で動作確認して問い合わせ先テーブルを更新する
C群はB群のサーバから一定時間レスポンスがなければ再処理する
B群のサーバは同じリクエストIDの情報が複数来たら必ずパスする
感想
なんか作れる気はする。
作りたいかどうかは別だし、ビジネス的な所の方が面倒だけどw
サンタの配送の仕組みをふんわり考えた
あるクリスマスイブの日にサンタの配送は一体どのくらいの人数でやってるのか気になったので計算してみた
一戸の配達に20分かかって、6時間以内に配達を完了する必要がある場合
サンタの人数は国内だけで15,000人弱(ただしトナカイ除く)
世界規模でやるとサンタの人数はさらに激増しそうだなぁ〜って思った
ただ、国内に限っていえば多分ヤマト運輸の方が凄いので、ヤマトの仕組みをそのまま使えばサンタは楽になりそう
ちなみに、子供のプレゼントの平均の値段を5000円としたところサンタが贈るプレゼントの国内での総額は452億円になったので、このプレゼント+配送を世界規模でやれるって相当(以降自主規制
メリークリスマス!
だいぶ前から型がある気がしてたことに今頃気がついた事
ソフトウエア開発をやってると色んな「型」があって、適用対象の得手不得手とか色々あるなぁと。
複数の「型」を使い分けれる人もいれば、一つの「型」でなんとかしようとする人も居たりして、色々だなぁと。
ソフトウエア開発を始めた頃に知った比較的優秀な「型」から離れなくて原理主義的な人が居ると思えばあっさり離れて次の「型」をマスターしちゃう人とか居て、人それぞれ違ってて面白いなぁと
じゃあ自分がよく使う「型」ってなんだろうって思っってぼんやり考えたら
- 業務フロー
- データモデル
- ルール
ってこの3つしかなくて、相変わらずシンプルだなぁと(まぁおかげでUIが苦手なんですけどw)
他の人をみてると各自いろんなやり方を工夫してるんだけどまだ「型」って呼べるほど確立した状態じゃない人も居て、苦労してるなぁ〜って見てて思ったり
そんなこと言わずに教えろよって言われそうだけど、自分もどうやって覚えたのか既に覚えてないし(割としっかりナビゲーションはしてもらった気がする)、ドメイン嗜好指向な人たちと話がずれるし(むちゃドメイン指向だと思うんだけど用語が違うらしい)ということで諦めてる
今年のある日そんな事を考えてた
若手に勧めてるこれ勉強した方が良いよネタ
周りに居る自分より若い人に時々勧めてる(別に強制はしてない)のでメモとして
SQL
今主流の言語とかライブラリが完全に廃れても安定して使われてそうだから
LISP
これがちゃんと理解で来てれば多分今後出てくる言語も対応できるはずっていう言語なので。たまに例外があるっぽいけど・・・しゃーないw
TCPとUDPとその上のプロトコル
ネットワーク周りから離れられない悲しい僕たちの基礎知識
計算量とアルゴリズムとCPUとかコンピュータの構成
XXXをすると速くなるっていうのがCPUの進化で変わる現象が良くあるので基礎は大事
各種設計手法
設計手法も10年単位で変わっているので基礎として複数勉強した方が良い
各種開発プロセス
開発プロセスも20年単位で変わっているので基礎として複数勉強した方が良い
まとめ
この辺一通り理解してるぜ!っていう若手エンジニアは是非連絡してください
良さそうな転職先紹介出来ると思います
iPadで仕事をするために必要そうだなと思ったもの
目的
プログラミング以外の作業をiPadに変更する
プログラミングも出来れば・・・でも無理はしない
何故やりたいのか
- パソコンが重い(開発用なら1.5kg~、iPadならキーボード込みでも0.5kg程度)
- iPadは動作が軽い
- 電源が大抵何処にでもある(iPhoneと同じだし!)
- 緊急時の電源はモバイルバッテリーでもOK
- 実は結構セキュア(指紋認証がデフォルト、忘れても何処にあるのかも探せる)
- 開発の周辺で必要なコミュニケーションツールの殆どがiOS用で出てる
用意するもの
パソコンとのデータの共有の為のソフトウェア
ここが最大の関門だった
簡単に思いつく選択肢はいくつか
dropbox,iCloud drive,box,onedrive,google drive...
iCloudだけは要注意でiCloud driveを全くの別アカウントにしたい場合、AppleIDが別になってしまい既に使ってるアプリが使えなくなるのでこの対策が必要(ファミリー共有とか)
googleのツールは複数アカウントに標準対応してるのでアカウントの切替で
あとはこの中で会社的に利用可能な奴を選ぶ
・・・無い場合・・・MacとiPadなら仕方ないので最終手段としてAirDropを使う。知らない人との共有はOFFにしましょう!
それ以外のアプリケーション
迷った結果選んだ物リスト
テキストエディタ
.txtしか編集できないけど動作的にTextor
terminal
あんまり使ったこと無いけど、Termius
zip解凍ツール
iZip pro(何故かproを持ってた)
iOSの標準アプリ
ファイル(これがないiOSのバージョンだと多分無理)
iOSに対応してるファイル共有ソフトならファイルからの各種操作ができるので便利(なんだけどAirDropだと関係ない)
ブログ移行
集中しててできない・・・集中しそうなのは想定できたのでは・・・。
そんな事をふと思った