2021/10 PyCon JP 2021 のトークネタメモ
トーク概要1
タイトル
OpenTelemetryでWebシステムの処理を追跡しよう
概要
OpenTelemetryは、複数のプロセス、システムをまたがってアプリケーションの処理を追跡する分散トレースの仕組みを提供するフレームワークで、今年2021年春に1.0.0 がリリースされました。分散トレースの仕組みは、イマドキの複数コンテナ構成ではないモノリシックな構成に適用することでも、トラブルシューティングやデバッグ、テストの役に立ちます。このライブラリを活用し、Webアプリおよび周辺システムの処理を追跡する方法について紹介します。 エレベーターピッチ(アピール)
OpenTelemetryは、OpenTracingとOpenCensusが合流して生まれ、Cloud Native Computing Foundation(CNCF)配下のIncubatingプロジェクトとして活発に開発が進められています。分散トレースは複数サーバ・複数コンテナ時代になって難しくなった、通信の流れの把握や、ボトルネック把握、プロファイリングをサポートする、クラウド上で多数のシステムが協調動作する現代のソフトウェア開発の現場では重要な技術です。 オーディエンスに求める前提知識
最近のWebアプリ開発や、そのデバッグで苦労した経験
オーディエンスが持って帰れる具体的な知識やノウハウ
分散トレースの仕組みを導入することで、どのようなメリットがあるのかを具体的な動作例を見て理解できる。
この題材を話すのに自分がふさわしいと考える理由やこのトークをするモチベーション
分散トレースはまだ新しい技術で、複数のフレームワークが作られたり合流したりしている黎明期です。そのため、この仕組み自体がまだあまり知られていません。あるいは、目に触れることがあっても、自分には関係無い技術、と思われています。また、この技術自体はPythonとは関係ないレイヤーにあるため、私がPythonの文脈で紹介することによって、多くの人に興味を持ってもらい、導入・活用する事例が増えるきっかけとなり、翌年以降、より詳しい事例を紹介する方が現れる呼び水となると考えています。
ネタ
Cloud Native Computing Foundation(CNCF)は、Linux Foundationのプロジェクトの1つで、コンテナ技術の推進と、その進化を取り巻くテクノロジー業界の足並みを揃えるために2015年に創設された財団
OpenTelemetryは、CNCFによるOpenTracingおよびOpenCensusプロジェクトの統合によって作られたオープンソースの可観測性フレームワーク。
このような仕組みを提供するフレームワークは以前ありました
OpenTelemetryはアプリケーション内の情報を収集(インストルメント)するためのライブラリを提供します。 Djangoアプリおよび周辺システムの処理を収集・プロファイリングする方法について紹介
トーク概要2
タイトル
Python + Row Level Security によるマルチテナント実装
CFP概要
マルチテナントは、複数のテナント(チーム・組織)向けにサービスを提供するシステムで、テナント相互の情報を分離して扱う仕組みです。 マルチテナントを使わなくても、ユーザーが所属するチームの情報だけにアクセスできるような実装は可能ですが、そのような「各プログラマが努力して解決する」方法では、プログラミングミスや設定間違いによるデータ混濁が高確率で発生します。その可能性を可能な限り無くすために、複数の マルチテナントアーキテクチャが考えられます。 このトークでは、データ分離アプローチのひとつ「共有アプローチ」をPythonのWebアプリケーションで実現する方法を紹介します。共有アプローチはテナント相互の情報を分離して扱いつつ、サーバーリソースを最大限効率的に利用する戦略です。これを、アプリケーションレイヤではなく、データベースレイヤで実現するために、PostgresのRow Level Security (RLS) 機能を使用します。この仕組みを他のマルチテナントアーキテクチャとの比較し、メリット、デメリットを紹介します。 概要
マルチテナントアーキテクチャにおけるデータ分割アプローチのひとつ「共有アプローチ」を、PostgresのRow Level Security (RLS)を用いて、PythonのWebアプリケーションでマルチテナントを安全に実現する方法を紹介します。またこの方法のメリット、デメリットを紹介します。
エレベーターピッチ(アピール)
そもそもマルチテナントとはなにか、どのような課題があるのか、PythonのWebアプリケーションでどのように実現するのかを体系的にまとめて紹介します。特に、Pythonレイヤーだけでなくデータベースレイヤーでの課題解決によってシンプルな結果が得られることをお伝えします。DBにあまり興味を持ってこなかった方が、これを機に興味を持ってもらえると思います。
オーディエンスに求める前提知識
Webアプリ開発を行っている
オーディエンスが持って帰れる具体的な知識やノウハウ
マルチテナントとはなにか、どのような課題があるのか、Pythonで具体的にどのように実装するのか、データベースレイヤーでどのようにデータ混濁を防ぐのか。
この題材を話すのに自分がふさわしいと考える理由やこのトークをするモチベーション
このトークは DjangoCongress JP 2021 でDjango利用者向けに紹介したスライドを元にし、Pythonの他のWebアプリケーションフレームワークにも触れていきます。DjangoCongressでは「マルチテナントのようなことを独自に実装している」「レイヤー各層で調査することが多く情報が体系化されていることが嬉しい」といったフィードバックをいただきました。このため、この知識をDjangoに限らないPython一般の知識としてアップデートしたものを紹介したいと思います。 このトピックについて過去の登壇で使った資料やソースコードのURL
トーク概要3