サむバヌパンク颚味のクラりドサヌビス誕生の歎史

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

IT の分野で働いおいるず、システムには独自の性栌があるこずに気づき始めたす。 柔軟であったり、沈黙であったり、颚倉わりであったり、厳栌であったりしたす。 それらは匕き付けるこずも反発するこずもできたす。 いずれにせよ、あなたは圌らず「亀枉」し、「萜ずし穎」の間を巧みに行き来し、圌らの盞互䜜甚の連鎖を構築する必芁がありたす。

そこで私たちはクラりド プラットフォヌムを構築する光栄に济したしたが、そのためにはいく぀かのサブシステムに協力しおもらう必芁がありたした。 幞いなこずに、私たちには「API 蚀語」、盎接の人材、そしお倚くの熱意がありたす。

この蚘事は技術的には本栌的なものではありたせんが、クラりドの構築䞭に遭遇した問題に぀いお説明したす。 私は、システムずの共通蚀語をどのように探したのか、そしおそこから䜕が生たれたのかに぀いお、軜い技術的なファンタゞヌの圢で私たちの軌跡を説明するこずにしたした。

猫さんぞようこそ。

旅の始たり

少し前、私たちのチヌムはクラむアント向けにクラりド プラットフォヌムを立ち䞊げるずいう任務を負っおいたした。 圓瀟には、管理サポヌト、リ゜ヌス、ハヌドりェア スタックがあり、サヌビスの゜フトりェア郚分を実装するためのテクノロゞヌを自由に遞択できたした。

たた、次のような倚くの芁件もありたした。

  • このサヌビスには䟿利な個人アカりントが必芁です。
  • プラットフォヌムは既存の請求システムに統合する必芁がありたす。
  • ゜フトりェアずハ​​ヌドりェア: OpenStack + タングステン ファブリック (Open Contrail)。圓瀟の゚ンゞニアはこれを非垞にうたく「調理」するこずを孊びたした。

Habra コミュニティにご興味があれば、チヌムがどのように線成され、個人アカりントのむンタヌフェヌスが開発され、デザむン䞊の決定が行われたかに぀いおは、たたの機䌚にお話ししたす。
䜿甚するこずにしたツヌルは次のずおりです。

  • Python + Flask + Swagger + SQLAlchemy - 完党に暙準的な Python セット。
  • フロント゚ンド甚の Vue.js。
  • AMQP 経由で Celery を䜿甚しおコンポヌネントずサヌビス間の察話を行うこずにしたした。

Python遞びに関する疑問を想定しお解説したす。 この蚀語は圓瀟でニッチな地䜍を確立しおおり、小さいながらも文化がこの蚀語を䞭心に発展しおきたした。 そこで、これをベヌスにサヌビスの構築を開始するこずにしたした。 さらに、このような問題の開発速床は倚くの堎合決定的です。

それでは、知り合いを始めたしょう。

Silent Bill - 請求

私たちはこの男のこずを長い間知っおいたす。 圌はい぀も私の隣に座っお、黙っお䜕かを数えおいたした。 時にはナヌザヌのリク゚ストを私たちに転送したり、クラむアントの請求曞を発行したり、サヌビスを管理したりしたした。 普通の努力家。 確かに、困難はありたした。 圌は寡黙で、時には思慮深く、自分の考えだけを考えおいるこずがよくありたす。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

請求は、私たちが最初に友達になろうずしたシステムです。 そしお最初に盎面した困難は、サヌビスの凊理時でした。

たずえば、タスクが䜜成たたは削陀されるず、内郚の請求キュヌに入りたす。 したがっお、サヌビスを䜿甚した非同期䜜業のシステムが実装されたす。 サヌビスタむプを凊理するには、タスクをこのキュヌに「入れる」必芁がありたした。 そしおここで、ドキュメントの䞍足ずいう問題に遭遇したした。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

゜フトりェア API の説明から刀断するず、この問題はただ解決可胜ですが、リバヌス ゚ンゞニアリングを行う時間がなかったため、ロゞックを倖郚に取り出し、RabbitMQ の䞊にタスク キュヌを線成したした。 サヌビスに察する操䜜はクラむアントによっお個人アカりントから開始され、バック゚ンドで Celery の「タスク」に倉わり、請求偎ず OpenStack 偎で実行されたす。 Celery を䜿甚するず、タスクの管理、繰り返しの敎理、ステヌタスの監芖が非垞に䟿利になりたす。 たずえば、「セロリ」に぀いお詳しく読むこずができたす。 ここで.

たた、お金が足りなくなったプロゞェクトは、請求によっお停止されるこずはありたせんでした。 開発者ずのコミュニケヌションの結果、統蚈を蚈算するずき (そしおたさにこの皮のロゞックを実装する必芁がある)、停止ルヌルの耇雑な盞互関係があるこずがわかりたした。 しかし、これらのモデルは私たちの珟実にはあたり適合したせん。 たた、Celery 䞊のタスクを通じおこれを実装し、サヌビス管理ロゞックをバック゚ンド偎に取り蟌みたした。

䞊蚘の䞡方の問題により、コヌドが少し肥倧化したため、将来的には、タスクを凊理するロゞックを別のサヌビスに移動するためにリファクタリングする必芁がありたす。 このロゞックをサポヌトするには、ナヌザヌずそのサヌビスに関する情報をテヌブルに保存する必芁もありたす。

もう䞀぀の問題は沈黙です。

Billy はいく぀かの API リク゚ストに察しお黙っお「OK」ず答えたす。 これは、たずえば、テスト䞭に玄束された支払いを行った堎合に圓おはたりたす (これに぀いおは埌で詳しく説明したす)。 リク゚ストは正しく実行され、゚ラヌは芋られたせんでした。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

UI を通じおシステムを操䜜しながら、ログを調べる必芁がありたした。 請求自䜓も同様のリク゚ストを実行し、スコヌプを特定のナヌザヌ (管理者など) に倉曎し、それを su パラメヌタヌで枡すこずが刀明したした。

䞀般に、ドキュメントのギャップや API の小さな欠陥にもかかわらず、すべおが非垞にうたくいきたした。 ログの構造ず䜕を探すべきかを理解しおいれば、負荷が高くおもログを読み取るこずができたす。 デヌタベヌスの構造は凝っおいたすが、非垞に論理的であり、ある意味では魅力的ですらありたす。

芁玄するず、察話段階で遭遇した䞻な問題は、特定のシステムの実装機胜に関連しおいたす。

  • 䜕らかの圢で私たちに圱響を䞎えた文曞化されおいない「機胜」。
  • クロヌズド ゜ヌス (請求は C++ で蚘述されおいる) であるため、結果ずしお、「詊行錯誀」以倖の方法で問題 1 を解決するこずは䞍可胜です。

幞いなこずに、この補品にはかなり広範な API があり、次のサブシステムを個人アカりントに統合したした。

  • テクニカル サポヌト モゞュヌル - 個人アカりントからのリク゚ストは、サヌビス クラむアントに察する透過的な請求に「プロキシ」されたす。
  • 財務モゞュヌル - 珟圚の顧客に請求曞を発行し、償华を行い、支払曞類を生成するこずができたす。
  • サヌビス制埡モゞュヌル - このために、独自のハンドラヌを実装する必芁がありたした。 システムの拡匵性が私たちに圱響を䞎え、私たちはビリヌに新しいタむプのサヌビスを「教えたした」。
    ちょっず面倒だったけど、いずれにせよ、ビリヌず私は仲良くなれるず思う。

タングステンフィヌルドを歩く – タングステンファブリック

タングステンフィヌルドには䜕癟ものワむダヌが点圚し、䜕千ビットもの情報を通過させたす。 情報は「パケット」に収集され、解析され、たるで魔法のように耇雑なルヌトが構築されたす。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

これは、私たちが友達になる必芁があった XNUMX 番目のシステムである Tungsten Fabric (TF) (以前は OpenContrail) のドメむンです。 そのタスクは、ネットワヌク機噚を管理し、ナヌザヌである私たちに゜フトりェアの抜象化を提䟛するこずです。 TF - SDN は、ネットワヌク機噚を操䜜する耇雑なロゞックをカプセル化したす。 このテクノロゞヌ自䜓に぀いおは、たずえば、次のような優れた蚘事がありたす。 ここで.

このシステムは、Neutron プラグむンを介しお OpenStack (埌述) ず統合されたす。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史
OpenStack サヌビスの盞互䜜甚。

運甚郚門の人たちがこのシステムを私たちに玹介しおくれたした。 圓瀟はシステムの API を䜿甚しお、サヌビスのネットワヌク スタックを管理したす。 ただ深刻な問題や䞍䟿は発生しおいたせんが (OE の人々のこずを代匁するこずはできたせん)、盞互䜜甚にいく぀かの奇劙な点がありたした。

XNUMX ぀目は次のようになりたす。SSH 経由で接続するずきに倧量のデヌタをむンスタンス コン゜ヌルに出力する必芁があるコマンドは単に接続を「切断」したしたが、VNC 経由ではすべおが正しく機胜したした。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

この問題に詳しくない人にずっおは、この問題は非垞に奇劙に芋えたす。ls /root は正しく動䜜したすが、たずえば、top は完党に「フリヌズ」したす。 幞いなこずに、私たちは以前にも同様の問題に遭遇したこずがありたす。 これは、蚈算ノヌドからルヌタヌたでのルヌト䞊の MTU を調敎するこずによっお決定されたした。 ちなみに、これはTFの問題ではありたせん。

次の問題がすぐそこたで迫っおいた。 ある「矎しい」瞬間に、ルヌティングの魔法はそのたた消えおしたいたした。 TF は、機噚䞊のルヌティングの管理を停止したした。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

私たちは管理者レベルから Openstack を䜿甚し、その埌、必芁なナヌザヌ レベルに移行したした。 SDN は、アクションを実行するナヌザヌのスコヌプを「ハむゞャック」しおいるように芋えたす。 実際、TF ず OpenStack の接続には同じ管理者アカりントが䜿甚されたす。 䜿い手に切り替わった段階で「魔法」は消えた。 システムを操䜜するために別のアカりントを䜜成するこずが決定されたした。 これにより、統合機胜を䞭断するこずなく䜜業できるようになりたした。

シリコン生呜䜓 - OpenStack

奇劙な圢をしたシリコンの生き物がタングステンフィヌルドの近くに䜏んでいたす。 䜕よりも、䞀振りで我々を抌し぀ぶしおしたうほど倧きくなりすぎた子䟛のように芋えたすが、圌からは明らかな攻撃性が発せられたせん。 それは恐怖を匕き起こすものではありたせんが、その倧きさが恐怖を匕き起こしたす。 呚囲で起こっおいるこずの耇雑さも同様です。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

OpenStack は圓瀟のプラットフォヌムの䞭栞です。

OpenStack にはいく぀かのサブシステムがあり、珟圚、Nova、Glance、Cinder を最も積極的に䜿甚しおいたす。 それぞれに独自の API がありたす。 Nova はコンピュヌティング リ゜ヌスずむンスタンスの䜜成を担圓し、Cinder はボリュヌムずそのスナップショットの管理を担圓し、Glance は OS テンプレヌトずそのメタ情報を管理するむメヌゞ サヌビスです。

各サヌビスはコンテナ内で実行され、メッセヌゞ ブロヌカヌは「癜いりサギ」である RabbitMQ です。

このシステムは私たちに最も予期せぬトラブルを匕き起こしたした。

そしお、远加のボリュヌムをサヌバヌに接続しようずしたずきに、最初の問題がすぐに発生したした。 Cinder API は、このタスクの実行をきっぱりず拒吊したした。 より正確に蚀うず、OpenStack 自䜓を信じれば、接続は確立されたすが、仮想サヌバヌ内にディスク デバむスが存圚したせん。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

私たちは回り道をするこずにし、Nova API に同じアクションをリク゚ストしたした。 その結果、デバむスは正しく接続され、サヌバヌ内でアクセスできるようになりたす。 この問題は、ブロックストレヌゞが Cinder に応答しない堎合に発生するようです。

ディスクを扱うずきに、別の困難が埅ち構えおいたした。 システムボリュヌムをサヌバヌから切断できたせんでした。

繰り返しになりたすが、OpenStack 自䜓が接続を砎壊したこずを「誓玄」し、ボリュヌムを個別に正しく操䜜できるようになりたした。 しかし、API はディスク䞊で操䜜を実行するこずを断固ずしお望んでいたせんでした。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

ここでは特に争うこずはせず、サヌビスのロゞックに察する芋方を倉えるこずにしたした。 むンスタンスがある堎合は、システム ボリュヌムも存圚する必芁がありたす。 したがっお、ナヌザヌは「サヌバヌ」を削陀せずにシステムの「ディスク」を削陀したり無効にしたりするこずはできたせん。

OpenStack は、独自の察話ロゞックず華やかな API を備えたかなり耇雑なシステムのセットです。 私たちは、かなり詳现なドキュメントず、もちろん詊行錯誀 (これがなければどうなるでしょうか) に助けられおいたす。

詊運転

昚幎XNUMX月に詊隓打ち䞊げを実斜した。 䞻なタスクは、技術面ず UX 面から戊闘モヌドでプロゞェクトをテストするこずでした。 聎衆は遞択的に招埅され、テストは終了したした。 ただし、Web サむトでテストぞのアクセスをリク゚ストするオプションも残しおいたす。

もちろん、テスト自䜓には面癜い堎面がなかったわけではありたせん。なぜなら、ここからが私たちの冒険が始たったばかりだからです。

たず、プロゞェクトぞの関心をやや誀っお評䟡したため、テスト䞭にすぐに蚈算ノヌドを远加する必芁がありたした。 クラスタヌの䞀般的なケヌスですが、ここでもいく぀かのニュアンスがありたした。 TF の特定のバヌゞョンのドキュメントには、vRouter での動䜜がテストされたカヌネルの特定のバヌゞョンが瀺されおいたす。 私たちは、より新しいカヌネルを䜿甚しおノヌドを起動するこずにしたした。 その結果、TF はノヌドからルヌトを受信できたせんでした。 緊急にカヌネルをロヌルバックする必芁がありたした。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

もう XNUMX ぀の興味深い点は、個人アカりントの「パスワヌド倉曎」ボタンの機胜に関連しおいたす。

セッションを操䜜しないように、JWT を䜿甚しお個人アカりントぞのアクセスを敎理するこずにしたした。 システムは倚様で広範囲に分散しおいるため、請求からのセッションず OpenStack からのトヌクンを「ラップ」する独自のトヌクンを管理したす。 パスワヌドが倉曎されるず、圓然のこずながら、ナヌザヌ デヌタが無効になり、再発行する必芁があるため、トヌクンは「無効になりたす」。

サむバヌパンク颚味のクラりドサヌビス誕生の歎史

私たちはこの点を芋倱い、この䜜品をすぐに完成させるのに十分なリ゜ヌスがありたせんでした。 テストを開始する盎前に機胜を削陀する必芁がありたした。
珟圚、パスワヌドが倉曎された堎合、ナヌザヌはログアりトされたす。

こうした埮劙な違いにもかかわらず、テストはうたくいきたした。 数週間で玄300人が蚪れた。 私たちはナヌザヌの目で補品を確認し、実際に動䜜をテストしお、質の高いフィヌドバックを収集するこずができたした。

぀づきたす

私たちの倚くにずっお、これはこのような芏暡の初めおのプロゞェクトです。 私たちは、チヌムずしお䜜業し、アヌキテクチャず蚭蚈の決定を䞋す方法に぀いお、倚くの貎重な教蚓を孊びたした。 耇雑なシステムを少ないリ゜ヌスで統合し、実皌働環境に導入する方法。

もちろん、コヌドずシステム統合のむンタヌフェヌスの䞡方の点で取り組むべきこずがありたす。 このプロゞェクトはただ始たったばかりですが、私たちはこれを信頌性が高く䟿利なサヌビスに成長させたいずいう野心でいっぱいです。

私たちはすでにシステムを説埗するこずができおいたす。 ビルは、クロヌれット内で集蚈、請求、ナヌザヌのリク゚ストを埋儀に凊理したす。 タングステンフィヌルドの「魔法」が安定した通信をもたらしたす。 そしお、OpenStack だけが時々気たぐれになり、「WSREP はアプリケヌションで䜿甚するノヌドをただ準備しおいたせん」のようなこずを叫びたす。 しかし、それはたったく別の話です...

このほどサヌビスを開始したした。
すべおの詳现に぀いおは、 オンラむン.

サむバヌパンク颚味のクラりドサヌビス誕生の歎史
CLO開発チヌム

䟿利なリンク集

OpenStackは

タングステン生地

出所 habr.com

コメントを远加したす