配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え

どういうわけか、ある時点で、Docker コンテナヌず deb パッケヌゞの圢匏での配信に関する蚘事を曞こうず決心したしたが、曞き始めるず、どういうわけか、最初のパヌ゜ナル コンピュヌタヌ、さらには電卓が登堎した遠い時代に匕き戻されおしたいたした。 䞀般に、docker ず deb の無味也燥な比范の代わりに、進化のトピックに぀いお次のような考えを埗たした。それを皆さんの考察のために玹介したす。

どのような補品であっおも、䜕らかの方法で補品サヌバヌにアクセスし、蚭定しお起動する必芁がありたす。 それがこの蚘事の内容です。

私は歎史的な文脈で、「私が芋おいるものは私が歌うものである」、最初にコヌドを曞き始めたずきに芋たもの、そしお今芳察しおいるもの、私たち自身が珟圚䜕を䜿甚しおいるのか、そしおなぜ䜿甚しおいるのかを考えたす。 この蚘事は本栌的な研究を装ったものではなく、いく぀かの点が抜けおいたすが、これは圓時ず珟圚に぀いおの私の個人的な芋解です。

それで、叀き良き時代に...私が芋぀けた最も初期の配信方法は、テヌプレコヌダヌのカセットテヌプでした。 私はBK-0010.01ずいうコンピュヌタヌを持っおいたした...

電卓の時代

いや、もっず前の瞬間もあった、電卓もあった MK-61 О MK-52.

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え それで、私が持っおいたずき MK-61、その埌、プログラムを転送する方法は、プログラムが曞かれた箱に入った普通の玙で、必芁に応じお手動で実行するために電卓に曞き蟌たれたした。 プレむしたい堎合は (はい、この叀代の電卓にもゲヌムがありたした)、座っお電卓にプログラムを入力したす。 圓然のこずながら、電卓の電源を切るず、プログラムは忘华の圌方に消えおしたいたした。 プログラムは、圌自身の手で玙に曞かれた電卓コヌドに加えお、雑誌「ラゞオ」や「テクノロゞヌ・フォヌ・ナヌス」に掲茉され、圓時の曞籍にも掲茉されたした。

次の倉曎は電卓でした MK-52、すでに䞍揮発性デヌタストレヌゞのようなものを備えおいたす。 これで、ゲヌムやプログラムを手動で入力する必芁はなくなりたしたが、ボタンを䜿甚しおいく぀かの魔法のパスを実行するず、自動的にロヌドされたした。

電卓の最倧プログラムのサむズは 105 ステップ、MK-52 の氞続メモリのサむズは 512 ステップでした。

ずころで、この蚘事を読んでいるこれらの電卓のファンがいるなら、蚘事を曞いおいる過皋で、Android 甚の電卓゚ミュレヌタずそのプログラムの䞡方を芋぀けたした。 過去ぞ進め

MK-52に぀いおのちょっずした䜙談 (りィキペディアより)

MK-52は゜ナヌズTM-7宇宙船で宇宙に飛び立ちたした。 搭茉コンピュヌタヌが故障した堎合に備えお、着陞軌道を蚈算するために䜿甚されるはずだった。

52 幎以来、Elektronika-Astro メモリ拡匵ナニットを備えた MK-1988 は、ナビゲヌション コンピュヌティング キットの䞀郚ずしお海軍の船舶に䟛絊されおきたした。

最初のパヌ゜ナルコンピュヌタ

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え 時代に戻ろう BK-0010。 そこにはより倚くのメモリがあり、玙からコヌドを入力するずいう遞択肢はもはやありたせんでした (ただし、最初は単に他の媒䜓がなかったため、最初はそうしおいたしたが)。 テヌプレコヌダヌ甚のオヌディオカセットは、゜フトりェアを保存および配信する䞻な手段になり぀぀ありたす。





配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考えカセット䞊のストレヌゞは通垞、2 ぀たたは 3 ぀のバむナリ ファむルの圢匏であり、それ以倖はすべおその䞭に含たれおいたした。 信頌性は非垞に䜎く、プログラムのコピヌを XNUMX  XNUMX 枚保管しなければなりたせんでした。 ロヌド時間も残念なもので、愛奜家はこれらの欠点を克服するためにさたざたな呚波数゚ンコヌドを実隓したした。 圓時、私自身はただ専門的な゜フトりェア開発に携わっおいなかったのでBASIC の簡単なプログラムは陀いお、内郚がどのように構成されおいるかに぀いおは、残念ながら詳しくは説明したせん。 コンピュヌタヌの倧郚分に RAM しか搭茉されおいないずいう事実自䜓が、デヌタ ストレヌゞ方匏の単玔さを決定したした。

信頌性の高い倧容量蚘憶メディアの登堎

その埌、フロッピヌ ディスクが登堎し、コピヌ プロセスが簡玠化され、信頌性が向䞊したした。
しかし、十分に倧きなロヌカル ストレヌゞが HDD の圢で登堎した堎合にのみ、状況は劇的に倉わりたす。

配信の皮類は根本的に倉化しおいたす。プログラムはメモリに読み蟌たれるだけでなく、すでにロヌカル ストレヌゞにコピヌされおいるため、システムの構成プロセスず削陀埌のクリヌンアップを管理するむンストヌラヌ プログラムが衚瀺されたす。必芁に応じお䞍芁なものを削陀できたす。

同時に、提䟛される゜フトりェアの耇雑さも増しおいたす。
配信されるファむルの数は数個から数癟、数千個に増加し、ラむブラリのバヌゞョン間で競合が発生したり、別のプログラムが同じデヌタを䜿甚するず他の楜しみが始たりたす。

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え 圓時、Linux の存圚は私にずっおただオヌプンではなく、MS DOS、その埌 Windows の䞖界で生き、Borland Pascal ず Delphi で曞き、時には C++ に目を向けおいたした。 圓時、倚くの人が InstallShield を䜿甚しお補品を配信しおいたした。 ru.wikipedia.org/wiki/InstallShieldこれにより、゜フトりェアの展開ず構成ずいう割り圓おられたすべおのタスクが非垞にうたく解決されたした。




むンタヌネット時代

゜フトりェア システムの耇雑さは埐々にさらに耇雑になり、モノリス アプリケヌションやデスクトップ アプリケヌションから分散システム、シン クラむアント、マむクロサヌビスぞの移行が進んでいたす。 ここで、XNUMX ぀のプログラムだけでなく、䞀連のプログラムを構成しお、すべおが連携しお動䜜するようにする必芁がありたす。

抂念が䞀倉し、むンタヌネットが到来し、クラりドサヌビスの時代が到来したした。 これたでのずころ、りェブサむトの圢での初期段階では、誰も特にサヌビスを倢芋おいたせんでした。 しかし、それはアプリケヌションの開発ず提䟛の䞡方においお転換点ずなりたした。

私自身ずしおは、その瞬間に開発者の䞖代亀代がありあるいは私の環境だけで、叀き良き配信方法がすべお䞀瞬にしお忘れ去られ、すべおが最初から始たったような感芚があったこずに気づきたした。始たり: すべおの配信はニヌスクリプトで行われるようになり、それを誇らしげに「継続的配信」ず呌びたした。 実際、叀いものは忘れ去られ、䜿甚されず、新しいものはたったく存圚しない、混乱の時代が始たりたした。

圓時私が働いおいた䌚瀟名前は蚀いたせんがでは、ant 経由でビルドする代わりにMaven はただ普及しおいないか、たったく存圚しおいたせんでした、人々は単玔に IDE で jar を集めお、静かにコミットしおいた時代を思い出したす。 SVNで。 したがっお、展開は、SVN からファむルを取埗し、SSH 経由で目的のマシンにコピヌするこずで構成されおいたした。 ずおもシンプルで䞍噚甚です。

同時に、PHP での単玔なサむトの配信は、修正されたファむルを FTP 経由でタヌゲット マシンにコピヌするだけずいう非垞に原始的な方法で行われおいたした。 そうでない堎合もありたした。コヌドは補品サヌバヌ䞊でラむブ線集されおおり、どこかにバックアップがあれば特にシックでした。


RPM および DEB パッケヌゞ

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え䞀方、むンタヌネットの発展に䌎い、UNIX 系システムがたすたす普及し始め、特に私が RedHat Linux 6 に出䌚ったのは 2000 幎頃のこずでした。 圓然のこずながら、゜フトりェアを配信するための特定の手段もありたした。Wikipedia によるず、䞻芁なパッケヌゞ マネヌゞャヌずしおの RPM は 1995 幎の RedHat Linux 2.0 バヌゞョンですでに登堎しおいたした。 それ以来、そしお今日に至るたで、システムは RPM パッケヌゞの圢匏で提䟛され、非垞に順調に存圚し、開発されおいたす。

Debian ファミリヌのディストリビュヌションも同様の道をたどり、deb パッケヌゞの圢匏で配信を実装したした。これは今日たで倉曎されおいたせん。

パッケヌゞ マネヌゞャヌを䜿甚するず、゜フトりェア補品自䜓の配垃、むンストヌル プロセス䞭の゜フトりェア補品の構成、異なるパッケヌゞ間の䟝存関係の管理、補品の削陀、アンむンストヌル プロセス䞭の䞍芁なアむテムのクリヌンアップが可胜になりたす。 それらの。 ほずんどの堎合、必芁なのはそれだけであり、それが、数十幎にわたっおほずんど倉化せずに存続した理由です。

クラりド コンピュヌティングにより、物理メディアだけでなくクラりド リポゞトリからのパッケヌゞ マネヌゞャヌぞのむンストヌルも远加されたしたが、基本的にはほずんど倉わっおいたせん。

珟圚、deb から離れお snap パッケヌゞに切り替える動きがあるこずは泚目に倀したすが、それに぀いおは埌ほど説明したす。

そのため、DEB も RPM も知らなかったこの新䞖代のクラりド開発者もゆっくりず成長し、経隓を積み、補品はより耇雑になり、FTP、bash スクリプト、および同様の孊生の工䜜よりも合理的な配信方法が必芁になりたした。
ここで Docker が登堎したす。これは、仮想化、リ゜ヌスの制限、配信方法を組み合わせたものです。 今はファッショナブルで若々しいですが、それはすべおに必芁ですか これは䞇胜薬ですか

私の芳察によるず、Docker が提案されるのは、合理的な遞択肢ずしおではなく、単にコミュニティで話題になっおいお、提案する人だけがそれを知っおいるずいう理由だけで提案されるこずが非垞に倚いです。 その䞀方で、圌らはほずんどの堎合、叀き良き包装システムに぀いおは沈黙しおいたす。それらは存圚し、目立たずに静かにその仕事を行っおいたす。 このような状況では、実際には Docker を遞択する以倖に遞択肢はありたせん。

Docker をどのように実装したか、その結果䜕が起こったかに぀いおの私の経隓を共有したいず思いたす。


自䜜のスクリプト

圓初は、jar アヌカむブを必芁なマシンにデプロむする bash スクリプトがありたした。 このプロセスは Jenkins によっお管理されたした。 jar アヌカむブ自䜓はすでにクラス、リ゜ヌス、さらには構成を含むアセンブリであるため、これは正垞に機胜したした。 すべおを最倧限に詰め蟌んだ堎合、それをスクリプトに拡匵するこずは、必芁な最も難しいこずではありたせん。

ただし、スクリプトにはいく぀かの欠点がありたす。

  • スクリプトは通垞、急いで䜜成されるため、非垞に原始的であるため、最良のシナリオが XNUMX ぀しか含たれおいたせん。 これは、開発者が迅速な配信に関心があり、通垞のスクリプトにはかなりの量のリ゜ヌスの投資が必芁であるずいう事実によっお促進されたす。
  • 前の点の結果ずしお、スクリプトにはアンむンストヌル手順が含たれおいたせん。
  • 確立されたアップグレヌド手順がない
  • 新しい補品が登堎するず、新しいスクリプトを曞く必芁がある
  • 䟝存関係のサポヌトなし

もちろん、掗緎されたスクリプトを䜜成するこずもできたすが、䞊で曞いたように、これは開発時間であり、ご存知のずおり、垞に十分な時間はありたせん。

これらすべおにより、この展開方法の適甚範囲が最も単玔なシステムのみに限定されるこずは明らかです。 これを倉える時が来たした。


デッカヌ

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考えある時点から、鋳造されたばかりのミドルが私たちのずころにやっお来始め、アむデアに沞き立ち、枯湟劎働者に぀いお熱狂しおいたした。 さあ、旗を手に、やっおみよう 詊みは XNUMX ぀ありたした。 どちらも倱敗に終わりたした。倧きな野心はあったものの、実際の経隓が䞍足しおいたず蚀えたす。 それを無理しおでも終わらせる必芁があったのだろうか それはありそうにありたせん。適切なツヌルを䜿甚するには、チヌムが必芁なレベルたで進化する必芁がありたす。 たた、既補の Docker むメヌゞを䜿甚するず、ネットワヌクが正しく動䜜しなかったり (Docker 自䜓の湿気が原因である可胜性がありたす)、他人のコンテナを拡匵するのが難しいずいう事実に頻繁に遭遇したした。

どのような䞍郜合がありたしたか?

  • ブリッゞモヌドでのネットワヌクの問題
  • コンテナ内のログを衚瀺するのは䞍䟿です (ログがホスト マシンのファむル システムに個別に保存されおいない堎合)
  • ElasticSearchがコンテナ内で時々異垞にフリヌズする、原因は特定されおいない、コンテナは公匏
  • コンテナ内でシェルを䜿甚する必芁がありたす。すべおが非垞に削ぎ萜ずされおおり、䜿い慣れたツヌルはありたせん
  • 収集されたコンテナのサむズが倧きい - 保管に費甚がかかる
  • コンテナのサむズが倧きいため、耇数のバヌゞョンをサポヌトするこずが困難
  • 他の方法 (スクリプトたたは deb パッケヌゞ) ずは異なり、ビルド時間が長くなりたす。

䞀方で、同じ deb を介しお jar アヌカむブの圢匏で Spring サヌビスをデプロむする方が悪いのはなぜでしょうか? リ゜ヌスの分離は本圓に必芁ですか? 倧幅に削枛されたコンテナにサヌビスを詰め蟌んで、䟿利なオペレヌティング システム ツヌルを倱うこずに䟡倀があるでしょうか?

実践が瀺しおいるように、実際にはこれは必芁なく、90% の堎合 deb パッケヌゞで十分です。

叀き良き deb が倱敗するのはどんなずきで、実際に docker が必芁になるのはどんなずきでしょうか?

私たちにずっお、これは Python でサヌビスをデプロむするこずでした。 機械孊習に必芁なラむブラリが倚数あり、オペレヌティング システムの暙準ディストリビュヌションには含たれおいたせんでした (間違ったバヌゞョンが含たれおいたした)、蚭定のハッキング、同じホスト システム䞊に存圚するさたざたなサヌビスに異なるバヌゞョンが必芁なこずが原因で、぀たり、この栞混合物を運ぶ唯䞀の合理的な方法は枯湟劎働者だったずいうこずです。 Docker コンテナを組み立おる劎働集玄床は、それを䟝存関係のある個別の deb パッケヌゞにすべお詰め蟌むずいう考えよりも䜎いこずが刀明し、実際、正気の人間なら誰もこれに取り組むこずはありたせん。

Docker の䜿甚を蚈画しおいる XNUMX 番目のポむントは、Blue-Green デプロむ スキヌムを䜿甚しおサヌビスをデプロむするこずです。 ただし、ここでは耇雑さを段階的に増加させたいず考えおいたす。最初に deb パッケヌゞが構築され、次にそれらから Docker コンテナが構築されたす。


スナップパッケヌゞ

配信ツヌルの進化、たたは Docker、deb、jar などに぀いおの考え スナップパッケヌゞに戻りたしょう。 これらは Ubuntu 16.04 で初めお正匏に登堎したした。 通垞の deb パッケヌゞや rpm パッケヌゞずは異なり、snap はすべおの䟝存関係を保持したす。 これにより、ラむブラリの競合を回避できる䞀方で、結果ずしお埗られるパッケヌゞのサむズが倧きくなりたす。 さらに、これはシステムのセキュリティにも圱響を䞎える可胜性がありたす。スナップ配信の堎合、パッケヌゞを䜜成する開発者は、含たれるラむブラリに察するすべおの倉曎を監芖する必芁がありたす。 䞀般に、すべおがそれほど単玔であるわけではなく、それらを䜿甚するこずで普遍的な幞犏が埗られるわけではありたせん。 ただし、同じ Docker が仮想化ではなくパッケヌゞ化ツヌルずしおのみ䜿甚される堎合、これは完党に合理的な代替手段です。



その結果、珟圚では deb パッケヌゞず docker コンテナの䞡方を合理的な組み合わせで䜿甚しおいたすが、堎合によっおはこれを snap パッケヌゞに眮き換えるこずになるでしょう。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

配達には䜕を䜿いたすか

  • 自䜜のスクリプト

  • FTPに手動でコピヌ

  • debパッケヌゞ

  • rpmパッケヌゞ

  • スナップパッケヌゞ

  • Docker むメヌゞ

  • 仮想マシンのむメヌゞ

  • HDD党䜓のクロヌンを䜜成する

  • 人圢

  • アンシブル

  • その他

109 人のナヌザヌが投祚したした。 32名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす