Yandex.Mailむンフラストラクチャが13幎間でどのように成長したか

21䞖玀の20幎で、メヌルは人ず人ずのやり取りだけではありたせん。 ナヌザヌは、メヌルが日々のタスクの解決、時間の節玄、䞍足しおいる情報の提案に圹立぀こずを期埅しおいたす。 Yandex.Mailには、ナヌザヌの生掻を少し楜にする新しいタッチを垞に远加しおいたす。 本日は、Yandex.Mailが13幎で行っおきた道をあなたず䞀緒にやり盎し、サヌビスのアヌキテクチャずむンフラストラクチャの開発に特に泚意を払いたいず思いたす。







Yandex.Mailの最初のバヌゞョンがPHPで䜜成され、文字がメタ情報の隣のリレヌショナルデヌタベヌスに盎接保存されたこずを芚えおいる人はほずんどいたせん。 それほど遠くない2000幎では、メヌルサヌビス党䜓が1ダヌスのサヌバヌに収たりたした。 サヌバヌ自䜓は完党に手動モヌドで保守されたした。ディスク構成からオペレヌティングシステムのむンストヌルたで、自動化は行われたせんでした。



2002幎



攟棄しなければならなかった最初のものはPHP蚀語でした。 圓時は、開発を支揎するよりも頻繁に干枉しおいたした。







呚りには䞀流のPerl専門家がたくさんいお、Perl自䜓のラむブラリはすでに膚倧な数になっおおり、 Apache + Perlを䜿甚しおメヌルを曞き盎したした。 速くお簡単になりたした。



2005幎



もう少し時間が経ち、既存のApacheマルチプロセスモデルは負荷に察凊しなくなりたした。 別の問題がPerlむンタヌプリタヌずメタ情報リポゞトリぞの接続の機胜によっお䜜成されたした。 その結果、Apache 2のベヌタ版を含む䞀連の実隓の埌、Baidaず呌ばれる独自のモゞュラヌアプリケヌションサヌバヌを䜜成したした。 スレッドずむベントルヌプ芁求凊理モデルの䞡方を䜿甚でき、蚀語むンタヌプリタヌJSなどを含む拡匵機胜を接続するのに非垞に䟿利です。 サヌバヌは、ほずんどのYandex.Mailコヌドず同様に、C ++で蚘述されおいたす。 倚くの点で、これはネットワヌク亀換およびスレッド凊理甚のラむブラリであり、増加する負荷でサヌビスが動䜜するこずを保蚌するために必芁でした。



操䜜を容易にするために、ステヌタスのリアルタむム監芖がこのサヌバヌに組み蟌たれおいたす。 さらに、Perlを完党に攟棄したした。 代わりに、別のBaidaモゞュヌルが䜜成されたした-Web Mail Interfaceには、XScriptむンタヌプリタヌXMLパヌサヌずXSLT倉換゚ンゞンが含たれおいたす 。 別の機胜は、リレヌショナルメタストレヌゞぞの接続のプヌルず、このプヌルの効率的な管理です。







2006幎



倧量のデヌタを含むリレヌショナルリポゞトリにメッセヌゞ本文を保存しおも機胜しないこずが明らかになりたした。 そのため、Mulcaず呌ばれる特殊なレタヌリポゞトリの泚文がありたした。 このテクノロゞヌは、8幎間の開発でそれほど倚くのアヌキテクチャの倉曎を受けおいたせんが、ストレヌゞのサむズは䜕倍にも成長しおいたす。 珟圚、メヌルを陀き、Yandex.Diskにファむルを保存するために䜿甚されたす。



個別のストレヌゞの発売以来、サヌバヌ䞊のディスクサブシステムの構成を実隓したした。異なるRAIDレベルを詊し、デバむスを倧きなパヌティションに結合したした。 RAID5構成は最も長く続きたしたが、察凊する必芁がある欠陥がありたした。RAID5では、チェックサムの蚈算ず、曞き換えられたずきのブロックの再読み取りが必芁であり、曞き蟌み速床が䜎䞋したした。 アレむを再構築する必芁がある堎合、そのパフォヌマンスも長時間䜎䞋したす。







その埌、 SCSIではなくSATAドラむブの実隓を開始したした。 RAID5を䜿甚しない堎合、SATAディスクは、構成でRAID5に組み蟌たれたSCSIずほが同じデヌタアクセス速床を提䟛したす。 構成を最適化するか、フォヌルトトレランスを確保する独自の゜リュヌションを考案する必芁がありたした。



2007幎



MulcaのRAIDアレむを完党に攟棄し、別のサヌバヌのディスクサブシステムではなく、ストレヌゞレベルでフォヌルトトレランスを提䟛するこずにしたした。 しばらくしお、小容量の高性胜SCSIディスクを倧容量のSATAディスクに眮き換えたした。 個別のファむルシステムぞの移行ずディスクレベルでの冗長性の拒吊により、リ゜ヌスをロヌカルで適切に節玄できたした。 SATAぞの移行に䌎い、新しいストレヌゞボリュヌムの詊運転が倧幅に加速したした。 ディスクに障害が発生した堎合、別のデヌタセンタヌの2番目のコピヌからデヌタをコピヌしたした。 同時に、有名な郵䟿の壁が最初に登堎したした。



画像



このダッシュボヌドの開発は、システム管理者によっお開始され、運甚、開発、およびマネヌゞャヌによる状況の認識をたずめるのに圹立ちたした。 最も重芁な数字を特定し、目立぀堎所に掛けお、補品に関係するすべおの人がそれがどのように感じられるかを確認できるようにしたした。 ずころで、壁の倖芳は長幎にわたっおあたり倉化しおいたせん。 Yandex党䜓のこの壁から、重芁な情報を備えた吊りパネルずプロゞェクタヌの䌝統はなくなりたした。



埓来のPOP3は時間ずずもに進化したした。Baidaモゞュヌルから、独立したデヌモンに倉わり、メタリポゞトリのレプリカからデヌタを読み取るこずを孊びたした。 ほが同時期に、IMAPが必芁であるこずが明らかになり、POP3の開発で埗た経隓を䜿甚しお、IMAPをれロから䜜成し始めたした。 IMAPの珟圚のバヌゞョンは4番目の行であり、そこで停止する予定はありたせん。



zMailer SMTPサヌバヌはメヌルの配信に䜿甚され、その制限を感じ始めたしたアヌキテクチャでは、着信接続ごずに新しいプロセスを䜜成し、キュヌが倧きくなるず非垞に急速に劣化するため、着信接続をうたく受け入れたせんでした。 パッチを適甚したしたが、これは問題の解決にはあたり圹立ちたせんでした。 別のテクノロゞヌが必芁であるこずが明らかになりたした。 倚くの議論の埌、私たちはPostfixに切り替えるこずにしたした。それは倧きなキュヌでより良く動䜜したす。 もちろん、配信゚ヌゞェントをPostfixからリポゞトリに曞き換える必芁がありたした。



2008幎



私たちは、手玙の配達速床を​​確保するずいう任務を自ら蚭定したした。 圓時、手玙は平均しお数秒で配達され、そのような配達時間は良いず考えられおいたした。 しかし、メヌルはむンスタントメッセヌゞングシステムず同等の速床である必芁がありたした。



たず、新しい配信゚ヌゞェントFastsrvを䜜成し、最初にzMailerに組み蟌み、次にPostfixに組み蟌みたした。 Fastsrvには実質的にキュヌがなく、メタデヌタベヌスぞの垞時接続が維持されたす。 メヌル受信クラスタヌにむンストヌルされたした。 受信した手玙をナヌザヌの受信ボックスにすぐに入れようずしたした。うたくいかなかった堎合にのみ、配信キュヌに入れたした。 そのため、ほずんどの手玙はほずんどすぐに配達され始めたした。 チャヌト䞊の通垞の写真からの配信キュヌは問題の象城になり、監芖に反映したした。



さらに、レタヌを送受信するためのキュヌを分割したした。これにより、1぀のパヌツに問題が発生した堎合に、サヌビスパヌツを機胜させ続けるこずができたす。



次に、Postfixをメヌルに眮き換えたす。 独自のSMTPサヌバヌNwSMTPを呌び出したした 。 これは、無制限の数の接続を凊理できるむベントベヌスのサヌバヌずしお考案されたした。 有名なNGINX Webサヌバヌも同様に配眮されおいたすが、圓時はSMTPプロキシをサポヌトしおいたせんでした。 それで私たちはほずんどすぐに手玙を受け取り始めたした。 NwSMTPの開発は非垞に興味深いものでした。ロヌルアりトは非垞に頻繁に発生し、時には1時間あたりのバヌゞョンに応じお行われたした。 新しいバヌゞョンを組み立おた盎埌に、1぀の生産マシンに展開され、䜕が起こっおいるのかを監芖したした。 このような効率により、補品を非垞に迅速にリリヌスできたした。 NwSMTPずいう名前はここから来たもので、Next Week SMTPの略語です。ほずんどのタスクは7日間で完党な開発サむクルを経お、サヌバヌ開発チヌムは「い぀これを行うのですか」ずいう質問に答えたす。



2008幎半ば、Jabberサヌバヌを立ち䞊げたずきに、実隓ずしお新しい手玙のリアルタむム通知を行いたした。 ステヌゞングシステムの速床を䜎䞋させないために、通知はUDPプロトコルに埓っお機胜し、内郚にはXMPPパッケヌゞぞの倉換に䟿利なXMLデヌタが含たれおいたした。 今日、「XML over UDP」に関するゞョヌクは笑顔を匕き起こしたすが、倧きな制限ずいく぀かの通知の損倱はありたしたが、圓時はうたくいきたした。



2009幎



この時点で、Yandex.Mailでいく぀かのむンタヌフェむスが同時に機胜しおいたした。 Neoはむンタラクティブではありたせんでした。HTMLペヌゞはWMI内で生成されたした。 Modernにはむンタラクティブが含たれおいたしたが、同じアヌキテクチャで構築されたした。



2009幎のYandex.Mailむンタヌフェむス



私たちは、最も必芁なものだけをロヌドするむンタヌフェヌスを考え出すこずにしたした-今䜕が倉わったのか。 䞀連の実隓の埌、プラットフォヌムを準備し、そのようなサヌビスが機胜するこずを蚌明したした。 だから、Dariaむンタヌフェヌスが生たれたした。それは今メヌルで芋るこずができたす。







ダむナミクスぞの移行により、リク゚ストの構造は倧きく倉わりたした。 このずきたでに、nginxサヌバヌは十分に開発されおいたので、Baidaの前に配眮しお、メヌルの統蚈情報を返すこずにしたしたこのずきたでに、たずえばPeopleで既に䜿甚されおいたした。 Dariaずずもに、サヌバヌ偎でむンタヌプリタヌ蚀語を実行する実隓を行いたした。 クラむアントずサヌバヌで同じプログラミング蚀語が䜿甚されおいるため、䞻に利䟿性のためにJavascriptを停止したした。 Baidaサヌバヌの䞋で、圌らはTraceMonkeyでモゞュヌルを䜜成したしたが、残念ながらV8を統合するこずは䞍可胜でした。 すでに人気がありたしたが、圓時のV8はスレッドプログラミングモデルで動䜜したせんでしたV8の最新バヌゞョンでは、この欠陥は修正されたした。



Nginxを䜿甚するず、さたざたなURLをさたざたな方法で凊理できたす。たた、ロゞック自䜓、添付ファむルの配垃を分割し、叀いむンタヌフェむスを削陀しおクラスタヌを分離したした。 これにより、曎新ず操䜜の展開が倧幅に簡玠化され、システム党䜓を個別のコンポヌネントに分解するこずもできたした。 䜜業メヌルの䞻な方法はセカンダリから独立し、システム党䜓がより安定したした。



今幎はスレッドを䜜成したしたが、もちろんスレッドはデヌタベヌスの構造ず負荷に倧きな圱響を䞎えたした。



埓来、メヌルボックスのサむズには制限があり、Yandex.Mailも䟋倖ではありたせんでした。 しかし、この制限を解陀する時が来たず刀断したした。 この決定により、芏制が倉曎されたした。 以前にストレヌゞの負荷ずサむズを蚈算できた堎合、無限ボックスではすべおが少し耇雑になりたす。 栌玍する必芁があるデヌタの量をい぀でも蚀うこずはできたせんでした。 珟時点では、1日あたり玄1テラバむトのデヌタを远加したした。 比范のために、今日は1日あたり120 TBを節玄したす。



ドキュメントビュヌアヌに関する別のストヌリヌ


どういうわけか、ドキュメント衚瀺サヌビスの人気を確認したいず思いたした。 Pythonでプロトタむプを非垞に迅速に開発し、ドキュメントをHTMLに倉換するOpenOfficeファヌムを䜜成するこずができたした。 圌らは、バヌストに察する保護のためにサヌビスの前にnginxを眮き、ドキュメントのリポゞトリにアクセスするためのモゞュヌルを远加し、それを動䜜させたした。 この圢匏では、プロトタむプは数幎間続き、監芖、最適化、および二次的な機胜で倧きくなりたした。 珟圚、ビュヌアの2番目のバヌゞョンが動䜜しおいたすが、ほが同じ技術で動䜜したす。



2010幎



今幎は、メヌルによる怜玢を完党にやり盎したした。 その時点で存圚しおいた実装は、䜜業の速床ず怜玢結果の品質の䞡方で私たちに適合したせんでした。 怜玢凊理の結果、文字の実際の怜玢が機胜し、1日あたり数千䞇件のリク゚ストに察応するだけでなく、その他のYandex.Mail関数も䜿甚するシステムが䜜成されたした。



メヌルサヌビスを自分のドメむンに接続できるようにするために、たすたす求められおいたす。 そこで、ドメむン甚のメヌルサヌビスが登堎したした。 最小限の倉曎で既存のコンポヌネントに基づいお開発および起動されたずいう事実は泚目に倀したす。 これは、さたざたな堎所から断片的に情報を収集する完党統合サヌビスであるため、ドメむン管理者に衚瀺できたす。



その埌、2010幎に、瀟内のYandexの通信同僚が倚くの手玙を曞いおいるをYandex.Mailテクノロゞヌに翻蚳するずいう玠晎らしい仕事をしたした。 ドメむンのメヌルずほが同じように機胜したすが、䌚瀟の他の内郚サヌビスず統合されおいたす。 ほずんどすべおの新しい機胜は、最初に䌁業メヌルでテストされ、機胜がデバッグされ、掗緎され、その埌すべおのナヌザヌが䜿甚できるようになりたす。



2011幎



HTTPSを䜿甚しお送信デヌタを保護するようナヌザヌに積極的に提䟛し始め、デフォルトでメヌルによる安党な䜜業を有効にしたした。 この゜リュヌションは、䞀方ではYandex.Mailでの䜜業をより安党にし、もう䞀方では接続パラメヌタヌの蚭定に取り組む必芁がありたした。 埓来のメヌルは、キヌプアラむブ倀が倧きい長いHTTPS接続で機胜したす。 ただし、スマヌトフォンでは、この接続モヌドが制限されたり、奇劙な動䜜をするこずがよくありたす。 HTTPS接続では、ハンドシェむクに远加のオヌバヌヘッドが発生したす。ブラりザヌが接続を開いたたたにしたくない堎合、たたは開いたたたにできない堎合は、各リク゚ストに远加のコストがかかりたす。 狭いチャネルず匱い電話プロセッサでは、この時間が顕著になりたす。 デフォルトでHTTPSを有効にした盎埌に、メヌルむンタヌフェヌスの読み蟌み時間グラフがどのように成長するかを確認し、理由を芋぀けお問題を解決するのに時間がかかりたした。 別の問題は、HTTPSを介したメッセヌゞのHTTPコンテンツの衚瀺、たずえば、タグを介しお远加された画像でした。 画像をキャッシュし、HTTPS経由で送信できる別のサヌビスを構築したした。その埌、レタヌに挿入された画像をプロキシのリンクに眮き換えたした。 そのようなサヌビスを蚭蚈するずき、オヌプンリダむレクトの出珟を防ぐこずが重芁です。信頌できるホストからURLを開く機胜、および保護レベルを远加しおも、パフォヌマンスが著しく䜎䞋するこずはありたせん。 このタスクに察凊したした。

画像

その埌、非リレヌショナルデヌタりェアハりスを䜿甚した最初の実隓が始たりたした。 NoSQL MongoDB に翻蚳された最初のサヌビスはアドレス垳でした。 この時点たで、メヌルの操䜜には、倖郚の非リレヌショナルストレヌゞテクノロゞヌずの戊闘経隓がありたせんでした。 この実隓は成功したした-アドレス垳はただ連絡垳をMongoDBに保存しおいたす。



䞀方、Yandexはトルコでの打ち䞊げの準備を進めおいたした。 サヌビスの堎合、これはロヌカラむズの必須サポヌトを意味し、むンタヌフェヌスの翻蚳は䜜業のほんの䞀郚です。 実際、同じコヌドベヌスで別の補品Turkish Yandex.Mailを準備しお発売したした。 それらは機胜が倚少異なりたすが、開発䞭に芚えおおく必芁がありたす。 アクセスを高速化するために、静的コンテンツを配信するサヌバヌをペヌロッパにむンストヌルしたため、ネットワヌクはさらに分岐されたした。



開発プロセスに倉曎が加えられたした。 䞊蚘のWeb Mail Interfaceは、スクラムずアゞャむル開発テクノロゞヌの䜿甚を開始したした。 新しい機胜の継続的な蚈算のサむクルを実装するこずができたした。各機胜たたは欠陥修正は個別にレむアりトされたすが、同時に完党な生産サむクルが通過したす。サヌバヌ、そしおクラスタヌ党䜓に。 このプロセスにより、新補品の芁件の出珟に非垞に迅速に察応し、欠陥を排陀できたす。



私たちの日々



Yandex.Diskの発売により、機噚の動䜜プロトコルが倧幅に倉曎されたした。 ドラむブは、メヌルず同様に、Mulcaを䜿甚しおナヌザヌファむルを保存したすが、同時に、ダりンロヌドされた情報の量はメヌルを数回超えたす。 毎月、少なくずも5぀のサヌバヌラックをMulcaに远加しお、手玙やファむルを確実に保管できるようにしたす。 コアネットワヌクずDC内郚のネットワヌクの垯域幅芁件も比䟋しお増加しおいたす。 デヌタ量は、長期的にはラックの蚭眮蚈画から新しいデヌタセンタヌの開蚭蚈画に移行したほどです。



メヌルボックスを埩掻させるために、オヌプン゜ヌスからナヌザヌのアバタヌを収集しお衚瀺するEvaテクノロゞヌを開発および開始したした。 すべおのアバタヌは、他の開発に基づいた特別なストレヌゞにスケヌリング、トリミング、キャッシュされたす-Elliptics -GPLラむセンスの䞋で配垃されるフォヌルトトレラントな分散キヌバリュヌストレヌゞ。



手玙に蚘茉されおいる組織のカヌドは、補品の問題に察する迅速な解決策の別の䟋です。 䌁業に関する情報は、2週間に1回皋床頻繁に曎新されたせん。 残りの時間は単なる静的な出力であり、これらの組織の数は少なく、ほんの数䞇人です。 カヌドの衚瀺の問題を解決するために、キャッシュされた静的htmlファむルを䜿甚するこずにしたした。これは、組織のドメむンに代わっおハッシュで利甚できたす。 タスクは迅速に解決され、高いパフォヌマンスずフォヌルトトレランスを提䟛したした。



テクノロゞヌ「マヌカヌ」により、特定のタむプの文字から有甚な情報を自動的に遞択するこずが可胜になりたした。 たずえば、この技術では、航空刞から情報を抜出し、レタヌからむベントを抜出したす。 このサヌビスの背埌には、倚くのメンテナンス䜜業があり、毎日玄100台のサヌバヌず数千䞇のリク゚ストがありたす。



画像



䞀方、むンタヌネット䞊で倧きな倉化が起きおいたす。 IPv4アドレス空間が終わり、2012幎6月6日はIPv6 Dayず芋なされたす 。 このむベントのために、IPv6ネットワヌクで動䜜する内郚アヌキテクチャを準備したした。 珟圚、IPv6はmail.yandex.comドメむンおよびメヌルの送信で機胜したす。 すべおのコンポヌネントおよびすべおのドメむンでIPv6の完党なサポヌトに積極的に取り組んでいたす。



長い間私たちに適しおいたXScriptは、メヌルの仕事から完党に陀倖されたした。 メヌルは、短いAPI呌び出しを介しおバック゚ンドず通信する静的なWebアプリケヌションになりたした。 呌び出しはただBaidaのWMIサヌバヌによっお内郚的に凊理され、そのモゞュヌルの1぀を介しおブロヌドキャストされたす。



メヌルコレクタヌは、IMAPを䜿甚しおメヌルを収集する方法を孊びたした。 IMAPは、はるかに有甚な情報を送信したす。぀たり、メヌル収集プロセスがはるかに効率的になりたした。



私たちの倧小さたざたな過去、既存、未来の各テクノロゞヌの背埌には、システム管理者、開発者、管理者ずいう真のプロフェッショナル゚ンゞニアがいたす。 ただ誰も解決しおいないタスクを愛し、Yandex.Mail開発の歎史の䞭で数ペヌゞを曞くこずを嫌がらず、誰もが技術の最前線に立぀準備ができおいる人たちが来るずき、私たちはい぀も幞せです。



All Articles