10Xが提供する「開発不要でネットスーパーアプリを立ち上げられるシステム」です。バックエンドとそれにつなげるアプリ(iOSとAndroid)を提供しています。10Xではよりよいチームを目指しエンジニアも含めメンバーを募っています。エンジニアが気になるどのような技術を使っているかに関して今回このブログで紹介しようと思います。チームに興味を持ってもらえたら採用ページがあるのでぜひぜひこちらからご応募ください。MonitoringアーキテクチャStailerは主なサービスはGCP上に構築されています。認証やログなどでFirebaseを使っています。Cloudを使っています。Engine(GKE)を使っています。タベリーのときに学んだ資産を活かし各種改善したアーキテクチャになっています。クライアントアプリはFlutter(Dart)で書かれており、クライアントと通信するサーバもDartで書かれています。クライアントもサーバも同じコードでかけます。クライアントとサーバはgRPCで通信しています。Runもマイクロサービスのような形で走っておりこちらはスクレイピングのようにブラウザを操作するコードが動いているのでTypeScriptで動いています。サーバからアクセスされますがこちらもgRPCで通信しています。Triggersを利用します。同期する必要のあるデータだけFirestoreからElasticsearchに書き込むようになっています。Firebaseはユーザ認証・プッシュ通知・行動ログなど幅広くつかっており、ログをBigQueryにエクスポートして分析しやすくしてあります。Traceを使っています。MonitoringはGKE内にあるPrometheusを通してメトリックスを取得しサービスの状態をグラフィカルに表示します。MonitoringとPrometheusでちゃんと監視するで詳細を書きました。Loggingにはありとあらゆるログが入っています。Loggingにログが送られるので便利です。フィルタしてBigQueryにエクスポートすることもできるので見つけにくいエラーがあったときはログをBigQueryに送り統計的にあたりをつけてデバッグしたりしています。Runで走っているサービスをともにTraceできるのでデバッグに役立っています。サービスアーキテクチャクライアント(iOS/Android)に関わる部分のサービスのアーキテクチャはシンプルに表すとこのようになっています。今回は複数のサービスが連携しているのでIstioを入れました。Istioを使うというよりかは薄く必要なものだけ使っています。Istioは結構複雑で管理するのが大変なので軽めにしてあります。Istioはレスポンスヘッダの値を変えたり監視メトリックスも設定すれば自動でとれるので結構便利です。クライアントとサーバはgRPCで通信します。Bufferを変換したコードが同じなのですんなりクライアント・サーバのコードがかけて楽ちんです。DartのgRPCライブラリであるgrpc-dartがいまいちコミットされていないのでインターセプターの機能が弱くて辛いところもあります。他にも辛いところとしてGCPのサービスのSDKがない場合が多いです。Bufferをコンパイルしてそれをパッケージとして取り込みサービスを呼び出します。Firestoreを始め多くのものがそのように呼び出しているのでなかなか面倒ですがそこが楽しくもあります。Runにリクエストを投げることもあります。Bufferで定義できて楽です。RunはECサイトにつなぎにいき各種情報を取得してサーバに返します。数秒以上にわたってリクエストが投げれることもあるのでタイムアウトの値に気をつける必要があります。Endpointsの設定で以下のように記載する必要があります。役立ちそうなひとはいない気がしますがひとまず共有まで。60CronJobsはさまざまなcronがあるのですが主なものとして、ECサイトの商品のスクレイピングをしています。KubernetesではCronJobsのメトリックスも取りやすいので楽に管理できます。PubSubを購読して処理をします。分析系は以下のサービスをKubernetes上で動かしています。Monitoringへのメトリックス転送のため使っています。Monitoringに送っていないやつはGrafanaで確認できるようにしています。HTTPSにするための証明書を取得するために使っています。challengeでできるので楽です。GCPのリソースをk8s上で管理できます。k8sのリソースを定義するとGCSのバケットを作れたりします。Connectorが便利です。これによりステージング環境では作ったけど本番では作るの忘れていたみたいなことがなくなります。Managerと連携してその値をk8s上のSecretとして扱うことができます。他にもSecretを生成するサービスはいろいろありましたがこれが一番シンプルで使いやすかったです。その他、固定IPを利用できるようにkubeIPを入れています。IPで固定するためのものです。ノードが数台しかないときはこれが便利です。ECサイトの業者と連携しており固定IPでフィルタされているときに使えます。まとめリリースしたばかりのStailerのアーキテクチャを紹介しました。紹介したいところとしてソースコードはどのように書かれているかなどありますが、もし知りたい場合は採用ページがあるのでぜひぜひこちらからご応募ください。実際に入社を検討するまえに一緒に働く機会もつくれるのでそこでソースコードについて実際に見たり議論したりできます。blogHomeAboutTool。