Go in Corporate Solutions Engineering @fivestar
PeopleProduct(人事)
AccountingProduct(会計、経理とか)
Communication&knowledge(Wikiメンテ)
PeopleProduct(人事)
Teams(人事DB)
Reviews(人事評価システム)
Benefits(インセンティブマネジメント)
Frontend / Backend
Frontend: React + Redux
Backend: Go RESTAPI
担当領域: ある程度流動的
技術領域: 一通り触る
Frontend/Backendそれぞれアーキテクトが1人
一部TechLeadのロールを兼務
プロダクト横断でアーキテクチャに責任を持つ
コードもめちゃくちゃ書く
Dev/Day
月に1度、2日に渡って技術的課題解決に注力する
リファクタリングやドキュメンと作成など
PMではなくエンジニアがオーバーシップを持つ
EngeeneringManagerも参加
Backend基本構成
Go製のAPI
インフラ
メルカリのMicroserviceプラットフォーム
MySQL
Backendアーキテクチャ
RESTAPI
EntryModel
Repository
Service
Clean Architectureぽく
RESTフレームワーク
オレオレフレームワーク
BEAR.Sunday respected
HandlerをResource単位を管理
HALフォーマットをサポート
オレオレフレームワーク
Reource志向ハンドラ
On{HttpMethod}ハンドラー
ViewModel JSON定義はこちら
resource.Base State管理
使ってるモジュール
APIRoleの仕組みを導入 -> TeamsIAM
データ暗号化基盤の導入
Slack通知の仕組みをCloudFunctionを用いて実装
Benefitesリリース
技術的課題
ORM導入せずSQLをベタ書き
カラム追加時など、ソースコードの変更箇所が多いため、効率的にスキーマ変更が多い
テストの書き方が統一されていない
testifyが導入された...testingパッケージで十分だと思っている
モックどうするか
バックエンドも肥大化しつつある
アプリケーションドメインごとにコードをわけたい
Goのスペシャリスト不在、本体側の人たちと交流したい
俺たちのmicroserviceはまだ始まったばかり @kokukuma
マイクロサービス化の現状
プラットフォームが共通機能の準備
gatewayサービス、テンプレートサービス、プロダクションレディチェックリスト
モニタリング、エラーレポーティング、Oncall対応
バックエンドチームが既存機能のマイクロサービス化を実施
API単位で進められている
MercariAPIの互換性を保ちつつ、既存ロジックを分割...
サービスについて
GCPに置かれている
DBにつなぐ必要があるサービスはSakura(石狩)に置かれてる。
現状、Client(APIの種類)と、DBは変更されていない
チームについて
1サービスにバックエンドエンジニアが1,2人
QA、Client、SREは含まれていない。まだFeatureチームにはなっていない
物理的な距離は近い
開発、運用プロセスについて
開発、デプロイは各サービスで独立している
QAやリリースはAPI単位で実行している状況
運用プロセスは実質まで未経験、準備はしているという感じ。
コード/データについて
コードは、各チームにもっている
共通して使用するPackageはある
marcariのDBに関しては1テーブルには1オーナー
サービスの数増えすぎてしまう問題
1つのAPIで、10−20テーブルを利用する
最初からすべてを分割すると...
mercari DBをつなぐマイクロサービスを作った -> Legacy db service
Legacy db serviceとは
mercariのDBに対するCRUDを提供
一時的対処 -> 分散モノリスを助長する危険性がある
一時的なものにするために...
アクセス出来るテーブル/テーブルを制限
シンプルなCRUDのみ提供
API単位でマイクロサービス化を進めたために、一気に数10サービスリリースする必要が出てきた
もし、データ側からサービスを1つづつ作っていったら、LegacyDBはいらなかったかも。
問題点と今後
サービスのQAがうまく回っていない
* QA環境が安定していない
* 低コストでQA環境を準備出来ない
Keep watching and extending features of gRPC @kazegusuri
https://github.com/grpc/grpc-go
https://github.com/grpc/proposal
https://grpc.io/docs/