ブートストラップSaaSスタートアップでのWindows Azureの使用

Habrazhitelへのご挨拶! これはここでの私の最初の投稿です、あなたがそれを気に入ってくれることを願っていますが、誰かがそれを役に立つと思うでしょう。 投稿では、Windows AzureをSaaSプロジェクトのホスティングとして使用するプラクティスについて説明します。 この記事は、.NETを使用して「クラウド」への移行を検討している人に役立ちます。



UPD:この記事では技術的な側面について説明していますが、金銭的な問題については次の記事で検討します。



サービスとチームについて


初めに、サービス自体について少し説明します。 SportFortは、スポーツチームの公式Webサイトを作成するプロセスを自動化します。 私たちのプラットフォームは、アマチュアとプロの両方が使用しています。 おそらく、SportFortは小さなスタジオやフリーランサーがチームやリーグのウェブサイトを構築するのに役立つでしょう。 私たちのプロジェクトは、CIS市場での最初のプロジェクトです。





チームサイトの外観



よくあることですが、資金調達に出くわすので、私たちのチームは小さく、各メンバーは「刈り取り機、スイス人、そしてパイプのゲーマー」です。 私たちは3人です。私は製品開発、プログラミングに携わっており、資金調達や管理上の問題の調査に携わっている人、セールスマネージャーもいます。 他の人が私たちを助け、デザインにペイントし、広告キャンペーンをカスタマイズし、ビデオを作成します。



サービス技術詳細


Windows Azureは本当に役に立ちました。 特に、最初はBizSparkプログラムで使用したことを考慮してください。 WAに移行する前に、定期的にホスティングを行っていたため、しばしばがっかりさせられました。 チームの誰もサーバー管理スキルを持たず、新しいスペシャリストに予算を割り当てる方法がありませんでした。 場合によっては、ホスティング業者が1日中クラッシュし、まったく何もできませんでした。サポートサービスは、すべての着信メッセージを単に無視し、Twitterでのみがらくたをすることができました。 私は自分のサーバーを編成するオプションを検討しましたが、これは財政的にも時間的にも高価です。 WAにより、ハードウェアインフラストラクチャに気を取られることなく、製品に集中することができました。 すべてが信頼性があり、スケーリングに大きな変更が必要ないことがわかっている場合は、はるかに快適に動作します。



Azureアーキテクチャでは、機能コンポーネントはロールであり、外部リクエストを処理するWebロール、または内部タスクのワーカーロールになります。 各役割には、負荷に対応する計算能力を割り当てることができます。 たとえば、Webロール以外のビデオ処理サイトは、サイトを直接管理しますが、ビデオ処理用の1つのワーカーロールが含まれます。 また、一度に多くのリクエストがある場合、WAはこのWorkerロールにパワーを追加できます。



私たちの場合、サービスは、MS SQLデータベースを使用し、ファイルシステムにユーザーファイル(主に写真)を保存する通常のASP.NET MVC 3 Webサイトでした。 したがって、Azure SQL Databaseを備えたASP.NET MVC 3のWebロールと、バイナリファイル用の特別なクラウドストレージであるBlob Storageのイメージストレージになりました。 Blob Storageに加えて、WAにはテーブルストレージとキューストレージの2つのタイプのストレージがあります。 テーブルストレージは非リレーショナルデータベースであり、ログの保存に使用します。キューストレージは、まだ使用していないメッセージキューを操作するための組み込みメカニズムです。



Windows Azureのすべてのサービスを制御するために、ブラウザーを介して機能するコントロールパネルがあります。 ここでは、両方の技術パラメーターを構成し、使用統計を表示できます。





Azure管理パネル、これはホストされたサービス、ストレージとデータベースです



Windows Azureでの展開は、通常のホスティングでの展開とは異なります。 新しいバージョンを投稿するには、特別なパッケージを作成し、管理パネルからダウンロードする必要があります。 この場合、更新は自動的に行われます-すべてのサーバーが順番に更新され、サービスはオフラインになりません。 単一ファイルの置換は失敗します。 ただし、SQL Studioを使用して、通常のSQL Serverと同様にSQL Azureでの作業が実行されます。 キーに関連するわずかな違いがありますが、私には関係ありませんでした。



展開の違いに加えて、テストプロセスが変更されました。 Azureでは、これがより便利になります。まず、新しいバージョンをいわゆる「ステージング環境」に予備環境にアップロードし、次にテストを行い、すべてが正常であれば、現在のバージョンを新しいバージョンに変更します。 これはワンクリックで非常に迅速に行われます。 Azureの他の機能についてはまだ検討していませんが、負荷が増加すると新しいリソースが自動的に割り当てられることを知っています。 将来的には必要になります。 主に通常のホスティングとしてWAを使用していますが、展開とテスト以外は何も変わっていません。



最近、サービスの開発と新しい機能の出現に伴い、Azureの他の機能を使用する必要があります。 特に、ワ​​ーカーロールとキューストレージは、WAでの緊急ではない長時間のタスクに最適です。 通知を送信するための別のワーカーロールを作成し、キューストレージキューを使用してこのロールにメッセージを送信する予定です。 一般に、良い方法では、リモートサービスに関連する多くの機能をキューを使用して動作するようにやり直す必要がありますが、まだ手が届きません。



WAへの切り替えは非常に簡単でした。 当初は、急いでいるにも関わらず、サービスは「正しい」パターンを使用してプログラムされていました。 まず、Dependency Injectionを意味します。これを使用すると、たとえば、IPictureStorageインターフェイスの実装として、FileSystemPictureStorageをAzurePictureStorageに1か所で置き換えることができます。 もちろん、移行スクリプトを作成します。 したがって、WAの永続ストレージとして使用できないファイルシステムの代わりに、クラウドストレージの使用に切り替えました。



ローカル開発者のマシンでは、Windows AzureエミュレーションとSDKは非常に簡単にデプロイされ、データベースはローカルです(この場合、SQL Server 2008 R2)。



私の結論


私にとって最も重要な利点は信頼性です。 ホストに何か問題があるときに、ユーザーの前で顔を赤らめる必要はもうありません。 もちろん、ユーザーは安定性も気に入っています。 開発環境の革新のスピードに満足しています。 AzureでMSのSQLサポートを作成する場合、データベースプロジェクトは一般的にスーパーになります)。 また、大きなプラスは、「クラウド」に簡単に切り替えることができるという事実でした。主要なものを何もやり直す必要がなく、自分でそれを把握することができました。 また、スケーラブルなアーキテクチャを構築するために高度な資格を持つスペシャリストを雇う必要はありませんでした。



記事に興味がある場合は、問題の財務面について説明します。

ご清聴ありがとうございました!



All Articles