いがにんのぼやき

若手WEBエンジニアのブログ。IT、WEB、バンド、アニメ。

【一休 × bitFlyer】C#を使ったサービス開発の裏側に参加してきた

ikyu.connpass.com

C#を使ったサービス開発の裏側に参加してきました。
その時の雑な自分用メモを公開します。

新メール配信基盤とその移行の話

一休から

新メール配信基盤への移行 /ikyu-mail-platform // Speaker Deck

背景

全てのサービスをオンプレからクラウドへ移行中
トランザクションメールを対象
マーケティングは対象外

課題

メール送信処理が同期処理
メールである必要のないものをメールしていたり(SaaS)を使っていたので料金が・・・

対応

Masil SaasはSendGridに
送信ログはDynamoDB

appサーバーからSendGridへ
SendGridからWebhookでLamda、DynamoDBに

送信履歴検索

送信できてないものを見るときは前はVPNにつないでWindowsServerのRDPで確認
社内管理ツールでWEBから閲覧可能に

移行方針

送信量の少ないサービスから移行
AWS側のリソース調整
IPウォームアップ
送信量の少ないサービスは一括、他は徐々に
添付ファイルはなるべくやめる

AWS API Gateway + Lamda

部分移行
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の使用を推奨する
明示的な型指定に起因するバグが発生する

LINQSQLに関しては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を経由するなどを行なった

※この度過去に参加したイベントのメモなどを公開することにしたので、投稿日時をイベント当日に変更してあります。