2015年7月22日にサービスを開始し、それ以来3,500人の登録ユーザーを募集し、36時間で10,000人が来場したProductHuntでのローンチを生き延び、最初の有料ユーザーを受け取り、ヨーロッパ( イタリアに住んでいる )投資家からの資金調達について議論しています。 この記事では、サービスアーキテクチャをどのように構築し、開発プロセスを編成したかを説明します。
フレームワーク
Codesignを開発するとき、この場合は変更を行い、あるブロックを別のブロックに置き換える方が簡単であることを考慮して、モジュール性を追求しました。 最初の重大な決定は、APIとWebアプリケーションを完全に分離して、異なるサーバーで動作するようにすることでした。 チームはPython / Djangoの経験があるため、 Django Rest Frameworkに基づいてAPIを構築することにしました。 当初、 AngularJSでWebアプリケーションを作成する予定でしたが、雇われたフロントエンド開発者は、 Reactでそれを実装するように説得しました。 Webアプリケーションのサーバー側は、Node.jsのExpressフレームワークを使用して実装されます。
展開
サーバーの設定と迅速なスケーリングにできるだけ時間をかけたくないという事実のために(たとえば、人気のあるリソースで公開した後、トラフィックの大幅な増加が予想される場合)、 Herokuにコードをデプロイすることにしました。 したがって、Herokuには、API用の2つのサーバー(本番/開発)とWebアプリケーション用の2つのサーバー(本番/開発)があります。 Herokuでは、 無料のレートで、サーバーは1時間ごとにスリープ状態になり、1日6時間以上非アクティブになります。 新しい関税が発生する数ヶ月前に複数のサーバーを調達しましたが、そのような制限はありません。 WebアプリケーションとAPIは無料のサーバーで実行され、トラフィックの流入が予想される場合は定期的にスケーリングします。 Herokuの主な利点は、Githubからコードを自動的にデプロイできるGITベースのデプロイの単純さです。 このプロセスについては、以下で詳しく説明します。
データベース
Herokuには多数の異なるプラグインがあり 、その中にはデータベース管理システム(DBMS)もあります。 7月22日のリリースの前に、MySQLを使用したプロトタイプがあり、このDBMSと接続されたClearDBのフレームワーク内で作業を続けることにしました 。 無料の料金表には5MBのデータベース制限があるため、最初にPunchの料金表に切り替え、次に月額50ドルでドリフトします。 現在、ClearDBはテクノロジーサービスの最も高価なコンポーネントです( Intercomのみがより高価ですが、この記事では説明しません)。 月額50ドルは高価だと思い、 Amazon RDSでは同じお金でより良いパフォーマンスが得られると考えました。 一連の実験を行った後、50ドルを超えるRDSインスタンスで同様のクエリ実行速度しか受け取れないため、これはそうではないことに気付きました。したがって、ClearDBに留まりました。
保管
Codesignは、ユーザーがさらなる議論のためにダウンロードするグラフィックファイルに基づいています。 ここでは長い議論はせず、 Amazon S3で停止しました。そこでは、トラフィックと保存されている画像の数により、1か月あたり3〜4ドルを支払います。 低速のインターネットでは、4MBを超える画像のダウンロードに30秒以上かかり、Herokuからタイムアウトエラーが発生しました 。 この問題を解決するために、ブラウザーからAmazon S3に直接写真をアップロードできる特別なリンクをサーバー上で生成することのみを開始しました。 それで問題は解決しました。
通知
1人のユーザーがCodesignのボード(ディスカッション用の写真のコレクション)を変更すると、このボードの他の参加者が通知を受け取ります。 これらの通知を実装するために、2つのサービスを使用します。1時間ごとに通知の送信を開始するHerokuタスクスケジューラーと、電子メールを送信するMandrillです。
モニタリング
Django自体では 、サーバーで発生した500エラーのレポートを送信できます。 これは便利です。 しかし、 Opbeatサービスはさらに便利であることがわかりました。 エラーに関する情報を収集し、発生の統計を表示し、エラーの各グループを、このエラーが発生したコードをコミットした人に割り当てます。 さらに、Opbeatはサーバー要求を監視し、パフォーマンスのボトルネックを示します。 同様のサービスは数多くありますが、Opbeatはそのシンプルさと最大3ユーザーの無料で賄いました。 フォルダー内のボードのリストを受信するエンドポイントが4秒かかるという事実に問題が発生した場合。 問題が何であるかを正確に理解できませんでした。 Opbeatは、ユーザーの権利を確認するリクエストを行うことは非常に最適ではないことを示しました。 コードを最適化し、エンドポイントの実行を20倍高速化しました。
開発
現在、開発はGITに完全に基づいています。
- 最初に、開発者は変更を行い、コードをGithubの開発ブランチにアップロードします。 Githubのmasterブランチにコードを直接プッシュすることはできません。これはリポジトリ設定で禁止されています。
- この時点で、webhookがトリガーされ、リポジトリコードがHeroku開発サーバーに再デプロイされます。
- コードが適切に機能することを確認した後、マスターブランチでプルリクエストを作成します。プルリクエストが受け入れられると、コードがHeroku本番サーバーに自動的に送信されます。 何かがうまくいかず、何らかのエラーが見つかった場合、Herokuは以前のバージョンへのロールバックを非常に簡単にします。
未来
さらに、次のツールを導入する予定です。
- Herokuレビューアプリ -gitフローに従って個別に異なる機能を並行してテストするために(現在、開発サーバーは1つしかありません)
- Travis -Githubを押すたびにユニットテストを実行する
- CodeClimate-自動コード分析用(高品質のコードにつながります)
- Amazon RDS -ClearDBが提供する十分な関税がない場合、より強力なRDSインスタンスをデプロイする必要があります
- Firebase-いくつかのブロックのリアルタイム更新を実装する
- ストライプ -支払いを受け入れる(現在Gumroadを使用)
おわりに
この記事は、さまざまなサードパーティサービスを統合して、独自の製品での作業を簡素化する方法の例です。 この記事で見たアーキテクチャにすぐにではなく、徐々に試行錯誤していきました。 このアーキテクチャが理想的であるというふりや動揺はしません。 私たちは議論を受け入れており、私たちが使用しているアーキテクチャに関するフィードバックを喜んで聞きます。
Codesignが気に入った(または気に入らないので変更したい)場合は、ご連絡ください- 削除された4つの空室があります。