10億人のユーザー向けのWebサービスを作成するとき

BeSmart.netプロジェクトのITディレクターであるグローバルモデルのトレーニングサービスに関するMaxim Model



画像



私たちのチームはBeSmartプロジェクトに取り組んでいます。 現在、ITディレクターを含む9人のプログラマー、つまり私(もちろん、デザイナー、マーケティング担当者、およびその他の専門家がいます-全部で20人以上)がいます。 ロシアのフェスティバル「スラブバザール」で知られるベラルーシのヴィテプスクで活動しています。



BeSmart.netは、ビデオ、オーディオ、PDF形式のトレーニング講義を投稿するためのサービスであり、最終的には世界中で視聴されることを期待しています。 多くの野望がありますが、ここではそれらを脇に置き、私たちが直面している2つの目標、開発者、およびそれらをどのように達成するかについて説明します。





私たちの最初の目標は、講義をダウンロードしたり購入したりする何百万人ものユーザーの要求に耐える高負荷のシステムを作成することです。 同時に、私たちは非常に困難な仕事を引き受けていることを理解しているため、すべてを徹底的に行いたいと考えています。



2番目の目標は、コンテンツを最大限に保護することです。 もちろん、インターネット上の情報を保護することは、可能な限り非常に難しいことを理解しています。 それでも、可能な限り複雑にし、可能であれば、システムに投稿された講義への不正アクセスを防止するつもりです。



次に、両方の問題を解決するために適用したテクノロジーについて説明します。



どのプログラミング言語を選択しましたか



システムのコアをC ++で開発します。これは、他の言語と同様に、欠陥がないわけではありません。 主なものは、長い開発時間です。 C ++プログラムは書かれていませんが、設計されています。 最初に、将来のアプリケーションのアーキテクチャが開発され、この後初めて開発段階が始まります。 もちろん、このアプローチは必須ではありませんが、将来のプロジェクトのサポートと開発を大いに促進します。



C ++は非常に強力なツールであり、この機能を使用するには注意が必要です。 C ++で書くプログラマは、プロジェクトをサポートする人にとってコードが明確で理解しやすいように、高度な資格を持っている必要があります。



2番目の欠点(1番目にも影響します)は、特にWeb開発の分野で既製のソリューションが不足していることです。 たとえば、PHPでそれらが多数ある場合、C ++の場合はほとんどありません。 あなたはゼロから多くのことをしなければなりません、そして、BeSmart.netは90%の自作の製品です。



働くのに2年以上かかりました。 2012年3月にToRの準備が始まり、5月まで続きました。 その後、プロジェクトの中核の開発が開始され、2012年11月まで続きました。 2013年5月、女性は独自のファイルサーバーの開発を開始しました。 そして、2013年10月になってようやくプロジェクトが商業利用のポイントに達しました。サイトを完全に使用することが可能になりました。



私たちとFacebookの共通点



すでに理解しているように、C ++でコードを記述することは非常に難しく、時間がかかることを認識しています。 しかし、今度はこの言語を選択したC ++の利点を見てみましょう。 まず第一に、これは既成の効率的なコンパイル済みコードを取得する機会であり、他のプラットフォームでは不可能または非常に困難です。 これは、負荷の高いプロジェクトにとって非常に重要です。



コードは、コンパイラプログラム(GCCコンパイラを使用)によって、コンピューターのみが理解できるマシンに変換され、その後コンピューターが実行します。 ユーザー要求の処理速度が速くなります。 数千または数百万の人々が同時にサービスを使用する場合、彼らは情報を迅速に受信し、サーバーの物理容量は必要以上に少なくなります。



FacebookはPHPで作成されましたが、後にZuckerbergはサーバーの負荷を減らす必要がありました。何百万人ものユーザーがいる場合、これは大幅な節約になります。 その後、Facebookが独自のソフトウェア-HipHopを作成しました。これはPHPをC ++に変換し、すぐにマシンコードにコンパイルします。 ただし、すべてのPHPスクリプトを翻訳できるわけではなく、Facebookは部分的にのみC ++に切り替えました。



Vkontakteプログラマーは、私たちが知る限り、PHPでコードを記述しますが、意識的にそれを行います。 最初に、新しいVkontakte関数はすぐにPHPで記述され、テストされ、機能する場合はコンパイルされたプログラミング言語で記述されます(1年前、Pavel Durovは自分の開発-KPHPを発表しました)。



最初はすべてC ++で記述されており、これは深刻なプロジェクトの指標です。 BeSmart.netの開発を始めたとき、他のプロジェクトのIT担当者と会いましたが、そのうちの1人が私に尋ねました。 あなたは何をしていますか?「私は言います:「今、C ++でアプリケーションを作成します」。 私の友人はそれに答えた:「あなたは10億人に奉仕するつもりですか?」と私は言いました:「はい、私たちは10億人に奉仕するつもりです。」



ユーザーデータはどこに保存しますか



10億人の講師と学生はいません(ちなみに、目標を近づけて、BeSmart.netに講義をアップロードできます)。 しかし、私たちはすでに大量のマルチメディア情報を保存する準備をしています。 ストレージは安全にする必要があり、これが2番目の大きな目標です。 このために、ソフトウェアとハ​​ードウェアの両方のソリューションがあります。



サーバーを2つのデータセンターでレンタルしています。1つはモスクワにあり、2つ目は香港にあります。 現在、別のヨーロッパの国でサーバーのレンタルについて交渉しています。 サーバー上の情報が重複しています。 世界のどこでリクエストが行われるかに応じて、コンテンツはユーザーに最も近いサーバーから配信されます。

もちろん、CDNサービスを提供する会社が存在することは承知しています。CDNサービスは同じことを行いますが、外部委託しています。 しかし、問題の事実は、当社が他社のサービスを使用していないことです。 結局のところ、サイト上のすべてのデータの安全性を保証します。



また、C ++で独自の非同期ファイルサーバー(ソフトウェアの保存を担当)を作成しました。 その特徴は、サーバーからではなく、ローカルネットワークからコンテンツをユーザーに提供することです。

ここで明確にする必要があります。BeSmart.netサービスのソフトウェア部分を持つサーバーに加えて、ユーザーデータを持つ別個のサーバーがあります。 これらは、インターネットに直接接続されていないローカルネットワークに結合されます。 ファイルサーバーは、サイトユーザーにコンテンツを発行するときに、このローカルネットワークにもアクセスします。 実際、これは別の内部のサーバーの束です。 したがって、データはハッキングから保護されます。



これは、データがBesmart.netに保存される方法です



画像



DC-データセンター。

クラスターWeb-ユーザーからの注文を受信および処理するためのWebサーバーのクラスター。

クラスターFS-プロジェクトファイルリソースにアクセスするためのサーバーのクラスター(コンテンツのダウンロードとアップロード)。

GWは、異なるBesmart.netデータセンターの内部ネットワークを単一のネットワークに結合するための安全なチャネルを形成するゲートウェイです(分散データストレージネットワークの作成と複製に使用)。



著作権で保護されたコンテンツを保護する方法



このサイトは、すべての一般的なビデオ形式のユーザーからの講義を受け入れます。 しかし、それらはMP4形式で保存され、表示されると、ユーザーはAppleが開発したHLSプロトコル(HTTP Live Streaming)を介してそれらを受け取ります。 ストリーミングビデオはファイル全体としては提供されず、キャッシュからコンピューターで徐々に再生されますが、10秒の断片で再生されます。 ビデオを表示するときに、これらの断片をキャッシュに保存するブラウザもあれば、保存しないブラウザもありますが、いずれにしても、この技術は海賊の仕事を複雑にします。



ユーザーがサイトにアップロードするすべてのコンテンツに透かし(「透かし」)を付けます。 もちろん、それを使用してもビデオの違法な配布からあなたを救うことはできませんが、一般的に、そのビデオに対するあなたの権利を特定することはそれほど意味のない仕事ではありません。 少なくとも、法的分野にあるサイトから講義を削除することは確かに簡単です。



海賊が簡単に「透かし」を取り除くことができないように、私たちはそれを動的にしました-BeSmart.netのロゴはゆっくりと画像に浮かび、その経路を変えます。 サーバーへのクリップの保存中に処理が行われます。レコードがオーディオトラックとビデオトラックに分類され、透かしがスーパーインポーズされた後、トラックが再び収集されます。 その結果、フレーム内の透かし軌跡は常に異なります。 オーディオトラックとビデオトラックを分離して結合するために、独自のソフトウェアを作成しました。 また、フレームごとの「透かし」情報とビデオストリームにはFFmpegを使用します。



ビデオファイルとオーディオファイルに加えて、PDFをサイトにアップロードできます。 これらのファイルにも透かしが付いています。 ダウンロードするとき、これらのファイルを個別のページに分割し、特別に作成されたプログラムがそれぞれに透かしを入れます。 同時に、テキストが読書には適していますが、印刷には適さないように、意図的に画像の品質を低下させます。



次に起こること



毎日、2つの主な目標を常に追求するわけではなく、何らかの形でサービスを改善する新しいタスクが登場します。 最近、私たちは相互に通信したいシステムのユーザーのために、いわゆる「名刺の交換」を行いました-ソーシャルネットワーク上の「友情」の類似物。 さらに、ブログを作成し、コメントを残し、講義を評価することが可能になりました。 コードを書くのに2週間かかりました。



私たちのプロジェクトは若いため、欠陥がないわけではありませんが、現在取り組んでいます。 開発プロセスは完了していません、私たちは道の始まりにいます。 不可能なことはありません-それらの実装にはタスクと期限のみがあります。



All Articles