Codesign.io-機能するアーキテクチャ

みなさん、こんにちは。 私の名前はPavelです。私はCodesignサービスの共同設立者であり、その技術的コンポーネントを担当しています。 Codesignは、Webサイト、デザインレイアウト、およびプレゼンテーションの作業中にフィードバックを作成して議論するためのWebサービスです。 デザイナーがまだ手紙で全文を編集している場合は、それをまとめてCodesignに切り替えましょう。



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に完全に基づいています。

  1. 最初に、開発者は変更を行い、コードをGithubの開発ブランチにアップロードします。 Githubのmasterブランチにコードを直接プッシュすることはできません。これはリポジトリ設定で禁止されています。
  2. この時点で、webhookがトリガーされ、リポジトリコードがHeroku開発サーバーに再デプロイされます。
  3. コードが適切に機能することを確認した後、マスターブランチでプルリクエストを作成します。プルリクエストが受け入れられると、コードがHeroku本番サーバーに自動的に送信されます。 何かがうまくいかず、何らかのエラーが見つかった場合、Herokuは以前のバージョンへのロールバックを非常に簡単にします。






未来



さらに、次のツールを導入する予定です。





おわりに



この記事は、さまざまなサードパーティサービスを統合して、独自の製品での作業を簡素化する方法の例です。 この記事で見たアーキテクチャにすぐにではなく、徐々に試行錯誤していきました。 このアーキテクチャが理想的であるというふりや動揺はしません。 私たちは議論を受け入れており、私たちが使用しているアーキテクチャに関するフィードバックを喜んで聞きます。



Codesignが気に入った(または気に入らないので変更したい)場合は、ご連絡ください- 削除された4つの空室があります。



All Articles