【一休 × bitFlyer】C#を使ったサービス開発の裏側に参加してきた
C#を使ったサービス開発の裏側に参加してきました。
その時の雑な自分用メモを公開します。
新メール配信基盤とその移行の話
一休から
新メール配信基盤への移行 /ikyu-mail-platform // Speaker Deck
背景
全てのサービスをオンプレからクラウドへ移行中
トランザクションメールを対象
マーケティングは対象外
課題
メール送信処理が同期処理
メールである必要のないものをメールしていたり(SaaS)を使っていたので料金が・・・
対応
Masil SaasはSendGridに
送信ログはDynamoDB
appサーバーからSendGridへ
SendGridからWebhookでLamda、DynamoDBに
送信履歴検索
送信できてないものを見るときは前はVPNにつないでWindowsServerのRDPで確認
社内管理ツールでWEBから閲覧可能に
移行方針
送信量の少ないサービスから移行
AWS側のリソース調整
IPウォームアップ
送信量の少ないサービスは一括、他は徐々に
添付ファイルはなるべくやめる
部分移行
1%, 10%, 50%, 100%と徐々に新APIに移行
テストしてるけどやっぱり戻るなら少ない方がいい
宿泊だけで3万通
前
バッチ処理結果や特定の例外をメールで送っていた
GASでメールを振り分けてSlackにアラートしていた
後
Log Saas(Logentries)へ流すように
アラート条件変更が簡単だが、Slack通知機能は微妙
Azure FunctionsでWebhookを受けとってSlackに通知するようにした
AWSだとGatewayとLamdaの二つを管理しないといけないのでAzure Functionsを使用した
バッチ処理でメールにファイルを添付していたのをS3に保存し、ダウンロードURLに変更
docomo/au/yahooのバウンス率が高い
Yahooは一定期間が使わないとSuspendされるようになる
DynamoDB
読み書きの性能を予約しておくスタイル、超過すると例外が発生
負荷が途中で止まるようにバッチを調整
Office365のBlacklist入り
SendGrid、エヴァンジェリストサポートが強い
今後の課題
ブラックリスト検知
HTMLメール対応
ビットコイン取引所の裏側、開発者の苦労話あれこれ
ワーカー
bitflyerから
同時接続数数千くらい
WEBページもSignalRも同一サーバー
ワーカー
取引所のエンジンとしては最大1台で直列に処理しなければいけない
ダウンタイムは最小限に、アクティブ・スタンバイ構成で
Azure Cloud Services
東日本、西日本の切り替えも考慮しなければいけない
SignalR
複数サーバーでデータを共有するためのbackplaneという機能を使用している
Service busを使っていたが台数が増えると不安定になる、Azure上のtopicが増える??
Redisに移行した
通信料が多すぎるのでSignalRでデータを垂れ流すのはそろそろ無理がある?
モバイルではバッテリーの問題も
クライアントサイド
SPAではない
RxJSでのデータフロー管理
Vue.jsを使用
LINQを使える
サーバー側ではRxJSは使っていない
今はロジックが増えてきて複雑度が上がってきているので適切な設計が必要
TypeScriptを検討していたが、まだ実施できておらず
Effective C#新版(LT)
varの使用を推奨する
明示的な型指定に起因するバグが発生する
LINQのSQLに関してはWhereでIEnumerableだと全件取得することになってしまい、SQLのWhereを使えなくなってしまう場合があるので注意
数値はvarを使わない方がいい
補完文字列
$で文字を変換できる
null条件演算子
.NET Coreに最適なクラウドサービスとは(LT)
Windows Server + IIS
安定感・Visual Studio 統合
Linux(Docker)
軽量・高速・ポータビリティ
AWS
Elastic Beanstalk
Visual Studioからデプロイできる
EC2 ~~~~~~
Azure
App Service Web Apps
Azure Container Service
Windowsはbeta
GCP
App Engine Flexible Environment
Docker対応
Container Engine
Hyper.sh
めっちゃ安い
一休の新データ分析基盤におけるC#の役割(LT)
データサイエンティスト部門が分析
メール経由でのプライスダウンお知らせ
fastly
athena
Lamdaは全てC#
バグを踏んだため、一度Windowsを経由するなどを行なった
※この度過去に参加したイベントのメモなどを公開することにしたので、投稿日時をイベント当日に変更してあります。