🎃
小規模開発APIを支える技術
商業登記簿PDFを取得・解析できるAPIサーバーを開発しており、採用している技術について記載する。
前提
- B2Bかつニッチなサービスなのでスケールは求めていない
- ReadもWriteも重くない
- レイテンシはそれほど重要ではない。外部が律速
- 可用性を損なわない範囲で安く済むことを重視
- サービスにとってコアではないところには時間をかけず、OSSやサービスを利用させてもらう
- 無料で使うためのハックなどはしない
- 運用コストをできるだけ下げる
- 時雨堂クラウドサービスを支える技術にかなり影響されている
Backend
- Goを利用
- Ubuntu 22.04を利用
-
labstack/echo/v4
- Cloudflareでhttps化するのでhttpで利用
-
PuerkitoBio/goquery
- 登記簿取得に利用
- DOM解析
-
sqlc-dev/sqlc
- シンプルで良い
-
mailgun/mailgun-go/v4
- アカウント登録時のメール送信に利用
- シンプルかつ基本料金無料プランがあるのがよい
-
minio-go/v7
- Cloudflare R2のクライアントとして利用している
- S3のSDKはパッケージのバージョンのテトリスが辛くてやめた
- ファイルの読み書きだけできればよかったので十分
-
newrelic/go-agent/v3
- Datadogが高すぎるのでNewRelicを採用
- あまり使いやすくはないが、一人ならAPMも無料なので重宝している
-
testcontainers-go
- テストではモックを使いたくないので利用
- sqlcのテスト、e2eテストに利用している
-
tychy/toukibo_parser
- 自分で作った登記簿パーサーライブラリ
インフラ
Cloudflare LB → Cloudflare Tunnel → APIサーバーの構成
- Cloudflare LB
- とにかく安い
- TLS終端させている
- Cloudflare Tunnel
- Tailscale FunnelはCPUを食いすぎたのでやめた
- ngrokはかなり有力だったが、Cloudflare Tunnelで十分だった
- SakuraとDigital Ocean + ローカルのサーバー
- Digital Oceanはシンガポールなので比較的遅い。乗り換え検討中
- ローカルのサーバーもcloudflare tunnelを使えば簡単にLBにぶら下げられるので満足している
- Cloudflare R2
- とにかく安い
- S3 SDKと微妙に互換性がなくてかなり困ったがminioにしたら問題なくなった
- とにかく安い
- PostgreSQL 15
- Digital OceanのマネージドDBが心配になるくらい安かったので採用
- 最悪DBが飛んでもなんとかなる類のサービスなのでユーザーが増えてきたらちゃんとしたところにマイグレーション予定
デリバリー
- 手
- makeファイルとsupervisorctlを利用している
- makeをAnsibleに乗り換えることは検討中だが、そんなに困っていない
Discussion