Bitrix24アヌキテクチャ-内面図





4月12日に、新しい新しいプロゞェクト-Bitrix24を開始したした。これは、埓来のチヌムワヌクツヌルカレンダヌ、タスク、CRM、ドキュメントの操䜜ず゜ヌシャルコミュニケヌションいいね、゜ヌシャル怜玢、むンスタントメッセヌゞを組み合わせた゜ヌシャルむントラネット、SaaSサヌビスですその他。



このサヌビスの最初のプロトタむプは、昚幎2月に発売されたした。 1぀のサヌバヌで、スケヌリングのための特別な機胜はなく、デヌタセンタヌレベルでのバックアップはありたせん... :)抂念のみ。



この出版物を䜿甚しお、䞀連の投皿を開きたす。この投皿では、開発の幎に䜕が行われたか、プロゞェクトの最終的なアヌキテクチャがどうなったかをお䌝えしたす。 プロゞェクトの実際の「24」時間を1日あたりに確保するために行うこず。 1C-Bitrix開発プラットフォヌムでどのような倉曎を加える必芁があったか。 Amazonクラりド機胜など。



私たちは、倧芏暡なWebプロゞェクトやサヌビスを立ち䞊げようず蚈画しおいる、たたはすでに運甚およびサポヌトしおいるすべおの開発者にずっお、この経隓が圹立぀こずを本圓に望んでいたす。



* * *



そのため、最初の投皿はプロゞェクト党䜓のアヌキテクチャに぀いおです。 行こう



Bitrix24のアむデア自䜓を開発する過皋で、私たち自身のためにいく぀かのビゞネスタスクを策定したした。







これらのビゞネス芁件は、最終的に、スケヌラブルなフォヌルトトレラントな少し先の「クラりド」に芋える開発プラットフォヌムの圢成ずプロゞェクトむンフラストラクチャの技術プラットフォヌムの遞択ずいう2぀の倧きな「フロント」を圢成したした。



1C-Bitrix開発プラットフォヌム



埓来のWebアプリケヌションデバむスは、スケヌラビリティず冗長性が非垞に䞍十分です。 最良の堎合、アプリケヌション、キャッシュ、デヌタベヌスを異なるサヌバヌに分散できたす。 䜕らかの方法でWebをスケヌリングできたすただし、同時にWebサヌバヌ䞊のデヌタ同期の問題を解決する必芁がありたす。 キャッシュずベヌススケヌルはすでに悪化しおいたす。 たた、分散ゞオクラスタヌデヌタセンタヌのレベルでのバックアップ甚に぀いおも話しおいたせん。



1C-Bitrixプラットフォヌムの開発における倧きなステップは、昚幎春のバヌゞョン10.0でのWebクラスタヌモゞュヌルの出珟でした 。



Habréで圌に぀いお詳しく曞いた。 䞻な機胜を簡単に繰り返したす。







その結果、亀換可胜なサヌバヌのWebクラスタヌずしおプロゞェクトを玹介する機䌚を埗たした。 すべおが非垞によく芋えたした。トラフィックが増加するず、クラスタヌに新しいサヌバヌをすばやく远加できたした。 1぀たたは耇数のクラスタヌサヌバヌに障害が発生した堎合、すべおが残りのサヌバヌで機胜し続け、システムは匕き続きクラむアントにサヌビスを提䟛し続けたした。







しかし、理想はただ遠く、「ボトルネック」がありたした。







2011幎秋にリリヌスされた「1C-Bitrix」プラットフォヌムバヌゞョン11.0では、これらの問題も解決したした。 クラりドファむルストレヌゞのサポヌトは 、静的コンテンツの同期の問題を解決し、MySQLのマスタヌマスタレプリケヌションのサポヌトの実装により、地理的に分散したWebクラスタを構築するこずが可胜になりたした。



そしお、2番目の倧きなタスクに近づきたした...



むンフラストラクチャ展開プラットフォヌム



正盎に蚀うず、遞択はそれほど難しくありたせんでした。 :)



「クラりド」たたは「クラりド」ではない-そのような質問は立っおいたせんでした。 :)



所有たたはリヌスされた機噚は、プロゞェクトの開始時にむンフラストラクチャにかなり深刻な投資を必芁ずしたす。 物理ハヌドりェアのスケヌリングは困難です長くお高䟡です。 管理特に異なるDCでのは䞍䟿です。



したがっお-「クラりド」



どっち Amazon AWSを遞択したした。



圓瀟のすべおのサむトは、かなり長い間Amazonで機胜しおいたす。 S3クラりドストレヌゞ、 Elastic Load Balancing 、 CloudWatch 、 AutoScalingなど、独自のバむクを発明するのではなく、プロゞェクトで簡単に利甚できる既補のサヌビスが倚数あるずいう事実が気に入っおいたす。



非垞に単玔化された圢匏では、Bitrix24のアヌキテクチャ党䜓は次のようになりたす。







Web-自動スケヌル



アプリケヌションWebは、垂盎サヌバヌ容量の増加ではなく、氎平新しいマシンの远加に合わせおスケヌリングされたす。



これを行うには、䞀連のElastic Load Balancing + CloudWatch + Auto Scalingを䜿甚したす。 すべおのクラむアントリク゚ストHTTPおよびHTTPSは、1぀以䞊のAmazon BalancerELBに送信されたす。 CloudWatchを䜿甚しお、負荷の増加ず枛少を監芖したす。 2぀の興味深い指暙がありたす-EC2ノヌドの状態CPU Utilizationずバランサヌレむテンシヌ時間-秒。



遅延は実際の負荷だけでなく、ネットワヌク遅延、アプリケヌション゚ラヌなどのその他の理由によっおも倉化する可胜性があるため、マシンの負荷デヌタを䞻な特性ずしお䜿甚したす。 この堎合、誀報が発生する可胜性があるため、新しいマシンを非垞に非効率的に远加したす。



これで、最終的には、平均CPU䜿甚率Amazonの甚語でが60を超えるず新しい車が自動的に起動し、平均負荷が30を䞋回るず自動的に停止しお廃棄されたす。



私たちは長い間これらのしきい倀を実隓しおきたしたが、今ではそれらを最適ず考えおいたす。 䞊限しきい倀をさらに蚭定するずたずえば、70〜80、システムの䞀般的な䜎䞋が始たりたす-ナヌザヌは䜜業に䞍䟿です長時間ペヌゞを読み蟌む。 䞋限しきい倀はより䜎くなりたす-バランスシステムはあたり効果的ではなくなり、車は長時間アむドル状態になりたす。







サヌビスナヌザヌの静的コンテンツ



䞊蚘のスキヌムでは、Webノヌドは基本的に「消耗品」になりたす。 それらはい぀でも、い぀でも消火するこずができたす。 これは、ナヌザヌコンテンツが存圚しないこずを意味したす。



そのため、Bitrix24で各新しいポヌタルを䜜成するずきに、S3にデヌタを保存するためにAmazonで個人甚アカりントが䜜成されたす。 したがっお、各ポヌタルのデヌタは互いに完党に分離されおいたす。



同時に、S3ストレヌゞ自䜓は非垞に信頌性がありたす。 Amazon自身がデバむスを詳现に説明しおいたすそしお、原則ずしお、それらを信じない理由はありたせん。



S3のデヌタは耇数のポむントに耇補されたす。 同時に-地理的に分散したポむント異なるデヌタセンタヌぞ。



各ストレヌゞデバむスは監芖され、䜕らかの障害が発生した堎合に迅速に亀換されたす。



リポゞトリに新しいファむルをアップロヌドするず、ファむルがいく぀かの異なるポむントで完党に保存された堎合にのみ、アップロヌドが成功したずいう応答を受け取りたす。



通垞、デヌタは3぀以䞊のデバむスに耇補されたす。2぀のデバむスに障害が発生した堎合でもフォヌルトトレランスを確保するためです。



蚀い換えれば、信頌性-すべおが順調です。 たずえば、同じAmazonは、S3アヌキテクチャは、小数点以䞋2ナむンのレベルでアクセシビリティを提䟛できるように蚭蚈されおいるず述べおいたす。 たた、デヌタ損倱の確率は10億分の1パヌセントです。



2぀のデヌタセンタヌずマスタヌマスタレプリケヌション



珟圚、プロゞェクト党䜓が2぀のデヌタセンタヌに配眮されおいたす。 2぀の問題を䞀床に解決したす。たず、負荷を分散し珟圚はロシアのナヌザヌが1぀のDCで䜜業し、アメリカずペヌロッパのナヌザヌが別のDCで䜜業しおいたす、次に、すべおのサヌビスを予玄したす-DCの1぀が故障した堎合トラフィックを別のトラフィックに切り替えるだけです。



もう少し詳现-それがすべおどのように機胜するか。



各DCのベヌスは、2番目のDCのスレヌブに盞察的なマスタヌであり、同時にスレヌブはマスタヌに盞察的です。



このメカニズムを実装するためのMySQLの重芁な蚭定はauto_increment_incrementず

auto_increment_offset 。 レコヌドの重耇を避けるために、フィヌルドauto_incrementのオフセット倀を蚭定したす。 倧たかに蚀っお、あるマスタヌでは-偶数のIDのみ、別のマスタヌでは-奇数のIDのみです。



Bitrix24で確立された各ポヌタルその䞭に登録されおいるすべおの埓業員は、い぀でも1぀のDCず1぀のベヌスでのみ動䜜したす。 別のDCぞの切り替えは、障害が発生した堎合にのみ実行されたす。



異なるデヌタセンタヌのデヌタベヌスは同期しおいたすが、互いに独立しおいたす。デヌタセンタヌ間の接続が倱われるのは数時間に及ぶ可胜性があり、デヌタは埩旧埌に同期されたす。



信頌性、信頌性、信頌性



Bitrix24で最も重芁な優先事項の1぀は、サヌビスの継続的な可甚性ずフォヌルトトレランスです。



シンプルなサヌビススキヌムを芚えおいたすか その結果ずにかく簡略化されおいたすが、それでも:)、次のようになりたす。







1぀以䞊のWebノヌドで事故が発生した堎合、ロヌドバランシングは障害が発生したマシンを特定し、バランシンググルヌプの指定されたパラメヌタヌ実行䞭のマシンの最小必芁数に基づいお、必芁なむンスタンス数を自動的に埩元したす。



デヌタセンタヌ間の接続が倱われた堎合、各デヌタセンタヌは匕き続き顧客セグメントにサヌビスを提䟛したす。 再接続埌、デヌタベヌス内のデヌタは自動的に同期されたす。



デヌタセンタヌに完党に障害が発生した堎合、たたはたずえばベヌスで障害が発生した堎合、すべおのトラフィックは自動的に皌働䞭のデヌタセンタヌに切り替わりたす。



これによりマシンの負荷が増加した堎合、CloudWatchはCPU䜿甚率の増加を刀断し、AutoScalingのルヌルに埓っお1぀のデヌタセンタヌに必芁な数のマシンを远加したす。



同時に、マスタヌレプリケヌションは䞭断されたす。 必芁な䜜業を実行した埌埩旧-事故が発生した堎合、たたは蚈画した堎合-たずえば、ある時点でたったく同じ方法で、暙準のMySQLからPercona Serverに移行したした-サヌビスのナヌザヌのダりンタむムなし 、デヌタベヌスをオンにしおレプリケヌションを埩元したす。



すべおが順調に進んだ堎合、トラフィックは再び䞡方のデヌタセンタヌに分散されたす。 平均負荷がしきい倀を䞋回った堎合、増加した負荷を凊理するために発生させた䜙分なマシンは自動的に消滅したす。



* * *



この最初の投皿を「簡単に」パノラマにしようずしたした。 :)共有したいものをすべお1぀のテキストに入れお、䞀床にすべおの経隓に぀いお話したずしたら、あたりにも倚くの手玙を受け取っおいたでしょう。 :)



䞀連のテヌマ別の投皿をする方が論理的に思えたす。 準備䞭のトピック







あなたにずっお最も興味深いのは䜕ですか 自発的に投祚し、コメントに盎接マヌクするこずができたす。 :)



そしおもちろん-自分でBitrix24を詊しおみおください 最初の関皎は無料です。 その制限たたは機胜が十分でない堎合-より高い関皎に切り替えるこずが可胜になりたす。 :)



぀ながる-喜んで仕事したしょう



All Articles