耇雑なマむクロサヌビスの䞖界でのむベント、バス、デヌタ統合





Valentin Gogichashviliがマむクロサヌビスに぀いお説明したす。 Highload ++を䜿甚したレポヌトのトランスクリプトを次に瀺したす 。



こんにちは、バレンティン・ゎギチャシビリです。 私はすべおのスラむドをラテン語で䜜成したした。問題がないこずを願っおいたす。 私はザランド出身です。



ザランドずは䜕ですか あなたはおそらくラモダを知っおいたす、ザランドは圌の時代のラモダのお父さんでした。 Zalandoが䜕であるかを理解するには、Lamodaを導入し、数回増やす必芁がありたす。



Zalandoは衣料品店です、私たちは靎を販売し始めたした、ずころで非垞に良いです。 たすたす拡倧し始めたした。 倖では、サむトは非垞にシンプルに芋えたす。 Zalandoで6幎間働いおおり、8幎間存圚しおいたこの䌚瀟は、ペヌロッパで最も急速に成長した䌚瀟の1぀でした。 6幎前、私がZalandoに来たずき、それはおよそ100成長したした。



私が6幎前に始めたずき、それは小さなスタヌトアップでした、私はかなり遅く到着したした、すでにそこに40人がいたした。 私たちはベルリンでスタヌトし、6幎以䞊にわたり、Zalando Technologyをヘルシンキやダブリンを含む倚くの郜垂に拡倧しおきたした。 デヌタサむ゚ンスはダブリンにあり、モバむル開発者はヘルシンキにいたす。



Zalando Technologyは成長しおいたす。 珟時点では、月に玄50人を雇甚しおいたすが、これはひどいこずです。 なんで 䞖界で最もクヌルなファッションプラットフォヌムを構築したいからです。 非垞に野心的な、䜕が起こるか芋おみたしょう。



少し歎史に戻っお、あなたがキャリアのある時点であった可胜性が最も高い叀い䞖界を玹介したいず思いたす。



Zalandoは、Webアプリケヌション、バック゚ンド、デヌタベヌスの3぀のレベルを持぀小さなサヌビスずしお始たりたした。 Magentoを䜿甚したした。 私がZalandoに電話されたずき、私たちは䞖界最倧のMagentoナヌザヌでした。 MySQLには倧きな頭痛の皮がありたした。



REBOOTプロゞェクトを開始したした。 私はこのプロゞェクトに6幎前に来たした。



私たちは䜕をしたしたか



Javaを知っおいたので、Javaですべおを曞き盎したした。 PostgreSQLを知っおいたので、どこにでもPostgreSQLをむンストヌルしたした。 Pythonは技術的な問題です。 ほずんどすべおの普通の人が、ツヌル甚のPythonが唯䞀の正しい解決策であるず私を支持したすPerlの䞖界の人々、私を殺さないでください。 Pythonは、ツヌルを曞くための良いゞョヌクです。



このようなスキヌムの開発を開始したした。







マクロサヌビスシステムがありたした。 Javaバック゚ンド、PostgreSQLシャヌディングを䜿甚したPostgreSQLストレヌゞ。 2幎前、同じ䌚議で、PostgreSQLシャヌディングの方法、回路の管理方法、ダりンタむムなしでのバヌゞョンの展開方法に぀いお話したしたが、非垞に面癜かったです。



私が蚀ったように、Javaは皆知っおいたした。 SOAPは、マクロサヌビスを盞互に結合するために䜿甚されたした。 PostgreSQLは、非垞にクリヌンなデヌタを持぀機䌚を䞎えおくれたした。 スキヌマ、クリヌンデヌタ、トランザクション、ストアドプロシヌゞャがあり、すべおのJava開発者や、PHPの䞖界から残った人々にJavaずストアドプロシヌゞャを教えたした。



1぀のヒント1か月あたり1,500䞇人未満のナヌザヌモヌドの堎合、Java SProc Wrapperシステムを䜿甚しお、JavaからPostgreSQLを自動的にシャヌドできたす。 PostgreSQLがRSPシステムに組み蟌たれおいるこずは、本質的に非垞に興味深いこずです。



すべおが順調で、すべおを曞き盎したした。 最初に倉庫の管理システムを賌入しおから、すべおを曞き盎したした。 システムを賌入した人がこれを行うよりもはるかに速く移動しなければならなかったからです。



スタッフずの問題が始たるたで、すべおが完璧に機胜したした。 私たちの矎しい䞖界は目の前で厩れ始めたした。 Javaレベルで導入した暙準化システム、そのレベル、SOAPは厩れ始めたした。 人々は䞍平を蚀い始め、去るか、たたは来ない。



私たちは圌らに蚀いたしたあなたがJavaで曞かなければならない、あなたが去るならば、我々は䜕をしたすか HaskellたたはClojureに䜕かを曞いお出お行ったら、どうしたすか そしお、圌らは私たちにあなたをファックず答えた。



私たちはこの問題を真剣に考えるこずにしたした。 アヌキテクチャだけでなく、組織党䜓を再構築するこずにしたした。 ドむツの業界には芋られなかった組織の再構築プロセスを開始したした。私たちは、持っおいたものをすべお完党に砎壊するず蚀いたした。 それは玄900人の人がいた組織でした、私たちはそれがあった圢で階局構造を砎壊しおいたす。 Radical Agilityを発衚したす。



これはどういう意味ですか



自埋的で有意矩に前進するチヌムがあるこずを発衚したす。 もちろん、私たちはビゞネスに埓事しおいた人々が欲しいのです。圌らはスキルを持っおこのビゞネスをしたした。



自埋チヌム。



独自の技術スタックを遞択できたす。 チヌムがHaskellたたはClojureで曞くこずを決定した堎合、それもそうです。 しかし、あなたはそれを支払う必芁がありたす。 チヌムは自分で曞いたサヌビスをサポヌトし、倜間に目を芚たす必芁がありたす。 氞続スタックの遞択を含む。 MongoDBを遞択する堎合は、PostgreSQLを教えたしたが、停止するこずはありたせん。MongoDBはロックされおいたす。 テクノロゞヌレヌダヌを䜿甚しお、危険ず芋なされ、赀のセクタヌに眮かれおいる月次調査ずテクノロゞヌを実斜しおいたす。 これは、チヌムがこれらのテクノロゞヌを遞択できるこずを意味したすが、䜕か問題が発生した堎合は完党に責任を負いたす。



チヌムはAWSアカりントによっお分離されるず述べたした。 それ以前は、AWSを遞択しお独自のデヌタセンタヌにいたしたが、悪魔ず取匕をしたした。 私たちは蚀った、それはもっず費甚がかかるこずは知っおいるが、もっず速く動くだろう。 独自のデヌタセンタヌでは、以前のような状況は発生したせん。1台のハヌドドラむブを泚文するのに6週間かかりたした。 それは耐えられず、䞍可胜でした。 前進できたせんでした。



自治は無秩序であるず信じる人が倚すぎたす。 自埋は無秩序ではありたせん。 自埋性には、特に䞊堎䌁業であるZalandoにずっお倚くの責任が䌎いたす。 私たちは蚌刞取匕所にいたす。公開䌚瀟ず同様に、監査人が私たちのずころに来お、私たちのシステムの仕組みをチェックしたす。 開発者がAWSで䜜業できるようにする䜕らかの構造を䜜成する必芁がありたしたが、それでもレベルの監査人の質問に答えるこずができたした。



結果はそのようなシステムです







できるだけシンプルにしたかったのですが、本圓にシンプルです。 しかし、誰もが圌女を芋るず誓いたす。



このスピヌドずオヌプンさで、リマむンダヌであるAWSにアクセスする堎合、およびマむクロサヌビスたたは公共サヌビスでアむデアを遞択する堎合、料金を支払う必芁がありたす。 安党なシステムを䜜りたい堎合など、監査人が尋ねるこずができる質問に答えたす。



もちろん、さたざたなテクノロゞヌスタックをサポヌトするために、JavaずPostgreSQLの暙準化レベルをより高いレベルに匕き䞊げるず述べたした。 暙準化レベルをREST APIのレベルに匕き䞊げおいたす。



これはどういう意味ですか これは以前のレポヌトで、API蚘述システムが必芁であるず曞きたした。 マむクロサヌビスが盞互に通信する方法の説明。 泚文が必芁です。 あるレベルでは、暙準化する必芁がありたす。 APIの最初のシステムがあるず発衚したした。 そしお、各サヌビスは䜜成を開始する前に、ギルドAPIにアクセスし、承認されたAPIの䞀郚ずしおAPIを受け入れるように説埗する必芁がありたす。 非垞に興味深いREST APIガむドラむンを䜜成したした。 䞀郚のリ゜ヌスでも参照されおいたした。 サヌバヌのルヌトずしおSwaggerOpenAPIを䜿甚できるようにするAPI最初のラむブラリ。 たずえば、接続はPythonのフラスコのルヌトであり、play-swaggerはScalaのプレむシステムのルヌトです。 Clojureには同じルヌトがあり、非垞に䟿利です。 Swaggerファむルを最初に蚘述し、マむクロサヌビスから䜕を達成したいのかを蚘述しおから、システム䞊のどの関数がAPIで特定の操䜜を実行するかを単に指定したす。



しかし、問題はマむクロサヌビスにありたす。 このフレヌズを数回繰り返したいです。 マむクロサヌビスは組織の問題ぞの察応であり、これは技術的な答えではありたせん。 小さい人にはマむクロサヌビスを勧めたせん。 Scalaで1぀のサヌビスを䜜成し、PythonたたはHaskellで別のサヌビスを䜜成する必芁がない、倚様な技術基盀に問題がない人にはマむクロサヌビスを勧めたせん。 マむクロサヌビスに関する問題の数は非垞に倚いです。 この障壁。 それを克服するためには、私たちがやったように、この前に倚くの痛みを経隓する必芁がありたす。



ワヌルドサヌビスの最倧の問題の1぀定矩によるマむクロサヌビスは、デヌタ氞続性システムぞのアクセスをブロックしたす。 ベヌスはマむクロサヌビス内に隠されおいたす。



したがっお、埓来の抜出倉換ロヌドプロセスは機胜したせん。



䞀歩戻っお、クラシックの䞖界で私たちがどのように働いおいるかを思い出したしょう。 䜕がありたすか 私たちには叀兞的な䞖界があり、開発者、ゞュニア開発者、シニア開発者、DBA、ビゞネスむンテリゞェンスがいたす。



どのように機胜したすか



単玔なケヌスでは、ビゞネスロゞック、デヌタベヌスがあり、ETLプロセスはデヌタベヌスから盎接デヌタを取埗し、Date WarehouseDWHにプッシュしたす。



倧芏暡には、倚くのサヌビス、倚くのデヌタベヌス、1぀のプロセスがあり、これらはほずんどペンで曞かれおいたす。 デヌタはこれらのデヌタベヌスから取埗され、ビゞネスアナリスト向けの特別なデヌタベヌスに栌玍されたす。 それは非垞によく構成されおおり、ビゞネスアナリストは圌らが䜕をしおいるかを理解しおいたす。



もちろんそれだけです-問題がないわけではありたせん。 自動化するこずはすべお非垞に困難です。 マむクロサヌビスの䞖界では、すべおが私たちずは異なりたす。



マむクロサヌビスを発衚したずき、Radical Agilityを発衚したずき、開発者向けにこれらすべおの玠晎らしいむノベヌションを発衚したずき、ビゞネスアナリストは非垞に䞍満でした。



膚倧な数のマむクロサヌビスからデヌタを収集する方法は



これは数十個ではなく、数癟個たたは数千個です。 それから、バレンタむンは銬に乗っお蚀いたす私たちはすべおをストリヌムに、キュヌに曞きたす。 それから建築家は蚀うなぜキュヌ 誰かがKafkaを䜿甚し、誰かがRabbitを䜿甚したす。これらすべおをどのように統合したすか 私たちの譊備員は蚀った決しお人生では、私たちは蚱可したせん。 私たちのビゞネスアナリストは、図がない堎合、私たちはハングアップし、䜕が起こっおいるのか理解できない、それは単なるデヌタ転送システムではなく溝であるず蚀いたした。



私たちは座っお䜕をすべきかを協議し、決定し始めたした。 私たちの䞻な目暙システムの䜿いやすさ、単䞀障害点がないこず、それが萜ちた堎合にすべおが萜ちるようなモンスタヌがないこずを望みたす。 安党なシステムが必芁であり、このシステムはビゞネスむンテリゞェンスのニヌズを満たす必芁があり、システムはデヌタサむ゚ンスを満たす必芁がありたす。 良い堎合には、バスを流れるこのデヌタを他のサヌビスが䜿甚できるようにする必芁がありたす。



ずおも簡単です。 むベントバス。



むベントむンテリゞェンスをむベントバスから、たたはデヌタ量の倚いサヌビスに取り蟌むこずができたす。 DDDMは最近、お気に入りのコンセプトになっおいたす。 これは、デヌタ駆動型の意思決定システムです。 どんなマネヌゞャヌもそのような蚀葉に喜んでいるでしょう。 機械孊習ずDDDM。



䜕を思い぀きたしたか



ナカディ。 あなたはおそらく私の姓がかなりグルゞア人であるこずを理解したでしょう。 グルゞア語のナカディは流れを意味したす。 たずえば、枓流。



私たちはそのようなストリヌムを䜜り始めたした。 私たちがそこに眮いた基本原則は、少し繰り返したす。



暙準のHTTP APIを甚意するず述べたした。 可胜であれば-安らかな。 集䞭型たたはおそらく集䞭型ではないむベントタむプレゞストリを䜜成したす。 さたざたなクラスのむベントタむプを玹介したす。 たずえば、珟時点では2぀のクラスがサポヌトされおいたす。 これらは、デヌタキャプチャずビゞネスむベントです。 ぀たり、゚ンティティが倉曎された堎合、必芁なすべおのメタ情報ずずもにむベントキャプチャを蚘録できたす。 ビゞネスプロセスで䜕かが発生したずいう情報がある堎合、これは通垞、はるかに単玔なケヌスであり、より単玔なむベントを蚘述できたす。 それでも、ビゞネスアナリストは、自動的に解析できる組織化された構造を持぀こずを求めおいたす。



PostgreSQLずスキヌマの豊富な経隓により、バヌゞョン管理スキヌマのサポヌトなしでは䜕も機胜しないこずがわかっおいたす。 ぀たり、プログラマが䜜成された順序を蚘述し、次に䜜成された順序を蚘述する必芁があるレベルたでスラむドダりンするず、基本的にMicrosoft Windowsに䌌たシステムを䜜成し、特に理解するために非垞に困難になりたす゚ンティティの開発方法、゚ンティティのバヌゞョン管理方法。 メッセヌゞの到着にできるだけ早く応答し、メッセヌゞの到着を垌望するすべおの人に通知できるように、このむンタヌフェむスでデヌタをストリヌミングできるこずが非垞に重芁です。



車茪を再発明したくありたせんでした。 私たちの目暙は、既存のシステムを䜿甚する最小のシステムを䜜成するこずです。 したがっお、珟時点では、Kafkをアンダヌラむンシステムずしお、PostgreSQLをメタデヌタずスキヌマを保存するために䜿甚しおいたす。



Nakadi Clusterは私たちが持っおいるものです。 オヌプン゜ヌスプロゞェクトの圢で存圚したす。 珟時点では、圌は以前に登録されたスキヌムを怜蚌しおいたす。 圌は、むベントのメタフィヌルドに远加情報を蚘録できたす。 たずえば、到着時刻、たたはクラむアントがむベントの䞀意のIDを䜜成しなかった堎合、䞀意のIDをそこにプッシュできたす。



たた、オフセットを制埡する必芁があるず感じたした。 カフカの仕組みを知っおいる人。 誰もが知っおいたすか 良いが、ほずんどではない。 Kafkaは、プロデュヌサヌがデヌタを順番に曞き蟌む叀兞的なpub /サブシステムですが、クラシカルメッセヌゞシステムのように、クラむアントはデヌタを保存したせん。



クラむアント甚にメッセヌゞの個別のコピヌは䜜成されたせん。クラむアントが必芁ずするのはオフセットのみです。 ぀たり、この無限のストリヌムのシフトです。 Kafkaは、各行に番号が付けられたデヌタの無限のストリヌムであるず想像できたす。 クラむアントがデヌタを収集する堎合、ポゞションXから読み取りたす。カフカはポゞションXからこのデヌタを提䟛したす。これにより、デヌタの順序付けが保蚌され、通垞のメッセヌゞで通垞行われるように、倚くの情報がサヌバヌに保存されなくなりたす読み取りむベントの䞀郚をコミットできるシステム。 この状況では、読み取りブロックの䞀郚をコミットするこずができないずいう問題がありたす。 オフテキストが開始されたした。Kafk'yに぀いお話したくありたせんでした。



高レベルのむンタヌフェヌスにより、クラむアントはkafkからの読み取りが非垞に簡単になりたす。 クラむアントは、読み蟌むセクション、保存するオフセットに関する情報を亀換しないでください。 クラむアントは単にシステムから必芁なものを受け取りたす。 抵抗が最小になる経路を決定したした。 ZookeeperはKafkにすでに存圚したす。Zookeeperがどれほどひどいものであっおも、すでに所有しおいるので、管理する必芁があり、オフず远加情報を保存するために䜿甚したす。 PostgreSQL-メタデヌタおよびスキヌマストレヌゞ甚。



今、私たちがどの方向に進んでいるのかをお話ししたいず思いたす。



私たちはずおも速く動いおいたす。 したがっお、ベルリンに戻るず、いく぀かの郚品がすでに䜜られおいたす。



珟時点では、Nakadi Clusterがあり、Nakadi UIがありたす。NakadiUIは、他の人の興味を匕くためにElmで曞き始めたした。 ゚ルムはクヌルだ、圌を愛しおいる。



次のステップでは、耇数のクラスタヌを管理できるようにしたす。 新しいプロデュヌサヌが到着し、䜕も譊告せずに毎秒1䞇件のむベントを曞き始めたずきに、すでに劚害を確認したした。



クラスタヌには、拡匵する時間がありたせん。 デヌタの皮類ごずに異なるクラスタヌが必芁です。 Kafk'yぞの接続がないように、むンタヌフェむスの暙準化を具䜓的に行いたした。



Kafk'iからRedisに切り替えるこずができたす。 そしお、RedisからKinesisたで。 基本的に、アむデアは、サヌビスの必芁性ずそれらが曞き蟌むむベントのプロパティに応じお、誰かが順序や順序に興味がない堎合、順序をサポヌトせず、Kafkaよりも効率的なシステムを䜿甚できるずいうこずです。 珟時点では、むンタヌフェむスを䜿甚しおこれを抜象化する機䌚がありたす。



Nakadi Scheme Managerは、ベむクする必芁があるため、クラスタヌから匕き出す必芁がありたす。 次のステップは、回路が怜出されるようなアむデアです。 ぀たり、マむクロサヌビスが䞊昇し、そのswaggerファむルを発行し、むベントのリストをswaggerず同じ圢匏で発行したす。 自動的に、クロヌラヌはそれをすべお取り陀き、開発者がそれを展開する前に回路をメッセヌゞバスに远加で挿入する必芁性を排陀したす。



そしおもちろん、トポロゞヌ・マネヌゞャヌ。これにより、䜕らかの方法でプロデュヌサヌずコンシュヌマヌを異なるクラスタヌにルヌトできたす。 圌らはカフカが象のように働くず蚀った。 いいえ、象のようではなく、蒞気機関車のようです。 私たちの状況では、この゚ンゞンは垞に壊れおいたす。 この゚ンゞンを誰が䜜ったのかわかりたせんが、AWSでKafkを管理するために、それほど簡単ではないこずがわかりたした。



私たちは非垞に良い名前で非垞にロシア語のブブクシステムを曞きたした。



ぶぶくは䜕をしたすか



ブブクが䜕をしおいたかを瀺す倧きなスラむドがありたしたが、非垞に倧きいこずがわかりたした。 ここですべおを芋るこずができたす 。



予告線では、ブブクは他の人がカフクでやらないこずをするずいう目暙を持っおいたす。 䞻なアむデアは、自動的に報告、自動スケヌリング、萜雷、むンスタンスを殺す狂った猿を生き残る胜力です。



ちなみに、Chaos Monkeyはシステムをテストしおおり、すべおうたく機胜しおいたす。 マむクロサヌビスを䜜成する堎合は、このシステムがChaos Monkeyをどのように生き残るかを垞に考えおください。 これは、ノヌドをランダムに削陀したり、ネットワヌクを切断したり、システムを台無しにするNetflixシステムです。



構築するシステムが䜕であれ、それをテストしないず、䜕かが壊れおも機胜したせん。



衚面的な話を締めくくりたいず思いたす。私が話したこずは、私たちは珟圚オヌプン゜ヌスで開発しおいたす。 なぜオヌプン゜ヌスなのですか Zalandoがなぜオヌプン゜ヌスをするのかを曞いた。



人々がオヌプン゜ヌスで曞くずき、圌らは䌚瀟のためではなく、自分自身のために郚分的に曞く。 したがっお、補品の品質が向䞊し、むンフラストラクチャからの補品の分離が向䞊するこずがわかりたす。 zalando.de内で曞き蟌みを行ったり、キヌを線集したり、Gitでコミットしたりする人はいたせん。



゜ヌスをオヌプンする方法に関する原則がありたす。 ゜ヌスをオヌプンすべきかどうか、䌚瀟に質問はありたすか オヌプン゜ヌスの第䞀原則がありたす。 プロゞェクトを開始する前に、オヌプン゜ヌスの䟡倀があるかどうかを考えたす。 この質問を理解しお回答するには、質問に回答する必芁がありたす。





オヌプン゜ヌスを必芁ずしない堎合がありたす





これが最埌のスラむドです。今日蚀及されたプロゞェクトは次のずおりです。







zalando.github.ioにアクセスするず、膚倧な数のPostgreSQLプロゞェクトがあり、バック゚ンドずフロント゚ンドの䞡方に倚くのラむブラリがあるため、お勧めしたす。



時間切れです。





レポヌトマむクロサヌビスの困難な䞖界におけるむベント、バス、およびデヌタ統合



All Articles