🦁

誰も教えてくれない、SRE流マイクロサービスの開発方法:はじめに

2022/11/19に公開

はじめに

みなさま、こんばんは
SREのKazです。
SREはSuper Rare Engineerの事です。

すいません、嘘です。
Site Reliability Engineeringのことです。

私は、これまでCI/CDに関する書籍の執筆や、大規模なマイクロサービスの開発に関与してきて、またそれらのプロジェクトをスピーディに変革し、達成してきました。
SREは、インフラエンジニアと同列に扱われることも多いのですが、実際はソフトウェアを書くシーンも多いです。
ソフトウェアの中身がわからないと、どの様にSite Reliabilityを担保すればよいのか?を考えることができないからです。
また、DevOpsに造形も深く、スピーディにシステムの改善を行われることが多いです。

世のユーザーたちは、待ってはくれず、サービスをいち早く改善していくことが、ロスを削減させたり、売上を向上させたり、またモチベーションを低下させずにプロジェクトを遂行させていく必要があります。

私は普段からPythonを使って膨大な量のプログラムを作っていて、「なぜそんなにプログラムを作るのが早いのか?」
「なぜゼロからプロジェクトを立ち上げるのが得意なのか?」
と驚かれることも多いので、その秘訣の一つであるPythonのプロジェクトテンプレートを公開します。
(と言いつつ、頭の中にテンプレートがある状態なので、暇を見つけて書き出していく形です)

開発システムの全体像

スピーディな開発をするためには、開発システムの全体像を先に置くのが良いでしょう。
ここで言う開発システムというのは、ローカルの開発環境であったり、実際に商用で動作する環境のことを指します。

最近では、DockerやKubernetesといった、ツールを使うことで、ローカルと商用環境の差異が非常に少なくなってきています。
こういったに関しても、簡単に利用可能なテンプレート化を行っています。

サポートするアプリケーションのパターン

アプリとしては、以下3つのパターンを紹介します

  1. CLI App
  2. REST API
  3. asyncio daemon

使用するツール・ライブラリ

Tools

  1. Multi Repository Handling Tool: tsrc
  2. Python Dependecy Management and Packaging Tool: Poetry
  3. Environment Variable Management Tool: Direnv
  4. Task Runner: Invoke

Framework Library

Service

  1. Dependency Injector
  2. FastAPI
  3. asyncio
  4. click

Test

  1. pytest
  2. pytest-watch
  3. pytest-incremental

この後の流れ

まずは、サンプルを作っているところです
もくもく会などに参加しつつ、書いていきたいな、と考えているので、おすすめのDiscordやSlackなど有ればおしえてください。

Discussion