私はモバイルアプリケーションのAPIを公開するバックエンドを開発しています。ユーザーは登録、製品の追加、製品のリンクを電子メール/ SMS /どこでも共有でき、他の人はそれをクリックして製品を購入できます。これは、モバイルアプリケーションの単純なワークフローです。アプリは、画像のアップロードと取得がサードパーティのクラウドサービスによって行われる、画像集約型のアプリです。 SO画像部分は私のバックエンドで処理されません。
現在、私は開発チームの出身で、ハードウェアサーバー側の経験はほとんどありません。インフラストラクチャの要件を説明したところ、次の質問がありました。
上記の3点をどのように予測すればよいかわかりません。スループットはどのように計算されますか?最初の1か月でアプリケーションに10000人のユーザーが登録すると推定されます。そのうち5000人がアクティブユーザーになります。アプリケーションへの平均ログインでは、ユーザーあたり10 APIヒットがあり、これは5000 * 10 = 50,000ヒット/月になります。これは、1分あたり1 APIヒット、つまり最初の月に最大2つの同時接続になります。
計算はこのようになりますか?データの増加をどのように計算しますか?それは、ユーザーが製品を登録、作成し、そのために消費されたデータベースサイズを合計すると、データの増加と呼ばれることになるということですか。
この質問は悲惨に思えるかもしれませんが、サーバーの要件に対してスループットがどのように計算されるかを理解するには、本当に助けが必要です。
最初の3つのポイントは容量計画です。組織は将来のために予算を立て、予測しようとしています。残念ながら、パフォーマンスとスケーラビリティを予測する簡単な方法や受け入れられた方法はありません。アプリケーションと環境はそれぞれ異なります。したがって、これに答える最良の方法は測定することです
具体的には:
上記の要件に加えて、これは次のことに役立ちます。
最後の2つのポイント、HA要件(高可用性)とDR(災害復旧、おそらく RPO(復旧ポイント目標) および RTO(復旧時間目標) )は、これらは実際にビジネス要件であるため、予測してください。 可能性のある障害とその軽減または修正にかかる費用について、管理者または製品の所有者と話し合います。どちらもこれが初めての場合は、多くの推測と深夜を期待してください。
より客観的な根拠を提案します。既存のHTTPログに移動します。これがフィールドアプリの既存の更新であると想定して、ログをプルし、含まれているHTTPリクエストを調べます。これは、風をテストするために空中に濡れた指ではなく、負荷モデリングの絶対的な客観的な基礎を提供します。
また、QAの観点からも留意してください。要件と検証の両方を所有することはできません。そのため、ログの目的データを使用して、負荷モデルの情報を構築できますが、ビジネスの誰かが実際の定義を承認する必要があります。どうして?これまで開発者、アーキテクト、プラットフォームマネージャーなどが利用できなかった要件をストリームに注入しているため、アプリに障害が発生した場合、背後にあるビジネスで数値が正確であることが必要です。
ログは何をプルできますか?
このタイプの作業にはSplunkを使用します。ほとんどの組織では、ELKスタックを使用する場合のように6ダースほどの異なるアプリを一緒にセットアップすることを心配する必要なく、30日分のログを無料枠に取り込むことができるはずです。
要件を間違って取得すると、本番環境では決して発生せず、実際にはリスクを軽減しないエンジニアリングゴーストを追跡している可能性があります。ビジネス側の誰かが要件にサインオフすることを確認してください。そうでない場合は、欠陥のないものを追跡するための予算超過を個別に所有することができます。
私はあなたの質問が本当に好きです。その良いもの。これに対する本当の答えはないと思いますが、私は試みます。新しいサーバーを作成/設計する場合、適切なものを選択することが最も重要です
環境と方法。すべての環境がスケーラブルであるわけではなく、ほとんどが限られた方法でのみです。ハードウェアチームが計算しようとしているのは、それらが使用できるファイルシステムとインターフェースのタイプです。一部のファイルシステムは、セットアップは簡単ですが拡張するのが難しいものです。その他のセットアップは難しいですが、管理と拡張が簡単です。
私の意見で最も良いことは、これらの質問をしている質問者と連絡を取り、今すぐにこれらに答えることができない理由を説明することです。新しいアプリケーションまたはシステムを起動するとき、特に比較できる他のシステムがない場合、誰もがこれがすべてどのように進化するかを言うことはできません。しかし、あなたはあなたが設計したAPIについての知識を持っており、「ハードウェアマン」は彼の環境/サーバーがどのように機能するかについての知識を持っています。一緒にあなたは確かにこの質問を理解することができます。
これがお役に立てば幸いです。