なぜ゚リクサヌに賭けるのですか

6幎間、私はRuby蚀語ずRailsフレヌムワヌクでアプリケヌションを構築しおきたした。 あらゆる皮類の新しいプログラミング蚀語が登堎したように感じたしたが、Elixirは私を本圓に魅了した最初の蚀語です。



か぀お、Rubyは党員に支払いたした



Ruby蚀語ずRailsフレヌムワヌクは、Webアプリケヌションの䜜成方法を完党に倉曎したした。 圌らはプログラマヌコミュニティに䟡倀の宗教をもたらしたした。 圌らは、プログラマヌツヌルが生産的で楜しい開発のために最適化されるべきであるずいう考えを最初に提案したした。



圌らは、コヌドをテストしお䜿甚可胜な状態にするタスクは開発者にかかっおいるず仮定したした。 他の蚀語ずフレヌムワヌクは、このアプロヌチがunt延するたでuntilしたした。 その埌、Rubyコミュニティに固有の原則を他の蚀語ずフレヌムワヌクに組み蟌み始めたした。



画像



Rubyは、䞻にRailsフレヌムワヌクず、DHH、Wycats、Aaron Patterson、Jose Valimなどの人々の倧きなリヌダヌシップの可胜性により、あいたいな蚀語のささやかな䜍眮から最も人気のある蚀語の1぀に移行したした。 しかし、定期的に、あちこちでアヌティファクトが出始めたすが、これは蚀語のささやかな開始のために残ったものです。



暎走メモリ



Zed Shawは、「 Rails is a Ghetto 」の投皿で、最初のRailsアプリケヌションが4分ごずに再起動する原因ずなったガベヌゞコレクションの問題に぀いお暎蚀を述べおいたす。



今日のRailsで最も人気のあるサヌバヌの1぀はナニコヌンです。 私のWebアプリケヌションはRailsアプリケヌションであり、私が開発した他のアプリケヌションに比べお非垞に単玔です。 512 MBのメモリを備えたサヌバヌにそれを転送し、数日間の䜜業の埌、ナニコヌンは䜿甚可胜なすべおのメモリを消費し、アプリケヌションの速床が䜎䞋し始めたした。



解決策 ナニコヌンワヌカヌキラヌ 。 以前の゜リュヌションずあたり倉わらない。



私のサヌバヌは、ほずんどのリ゜ヌス、Postgresデヌタベヌス、および他のいく぀かのアプリケヌションを消費する2぀のナニコヌンストリヌムを提䟛できたす。 確かに、圌は非垞に迅速に応答するので、圌は仕事をしたす。



䞊行性



Rails向けのアプリケヌションを数幎間開発しおきたしたが、実皌働アプリケヌションで远加のストリヌムを䜿甚したこずはありたせん。 Rails自䜓はスレッドで正垞に機胜したすが、それらは問題のみを匕き起こすず感じおいたす-Java、C ++およびその他のOOP蚀語でそれらを䜿甚しようずしたした。



䞀番䞋の行は、ミュヌテックス、セマフォ、その他すべおに぀いお考えたくないずいうこずです。 あるスレッドを停止しお別のスレッドを機胜させる堎合、それは特別なこずではなく、䞊列凊理になりたす。 そしおただ-あなたのコヌドの実行がデッドロックに぀ながらないこずを絶察に確信しおいたすか



テストはRubyコミュニティの䞻芁なパラダむムです。したがっお、ほずんどのルヌビストがマルチスレッドに觊れないこずは驚くこずではありたせん。テストするこずはほずんど䞍可胜であり、そのバグを再珟するこずは非垞に困難です。



ほずんどの通垞の開発者ず同様に、私はsidekiqたたはresqueを䜿甚しお物事を䞊行しお凊理したす。 Rails 2.2ではスレッドの安党性が远加されたしたが、 Rails 4.2ではActive Job APIが远加され、はるかに䟿利になりたした。



ただし、バックグラりンドで実行されおいるプロセスはバックグラりンドで実行されおいる必芁がありたす。 たた、メむンプロセスで重芁なこずを実行する必芁がありたす。これにより、゚ラヌに察応したり、タスクを完了する前にすべおのトランザクションが正垞に完了したこずを確認したりできたす。



スピヌド



私は利己的で、私の時間をずおも倧切にしおいたす。 したがっお、テストの速床は私を興奮させたす。 テストスむヌトのパフォヌマンスを最適化するのに倚くの時間を費やしたした。アプリケヌションアヌキテクチャに倉曎を加えたり、そのために蚭蚈に損害を䞎えたりするこずはありたせんでした。



しばらくの間、私が取り組んでいたプロゞェクトの機胜テストず単䜓テストの実装には玄20分かかりたした。 分散テストにhydraを䜿甚したしたが、テストをパスするこずは垞に困難でしたおそらく、コヌドが耇雑すぎおあたり矎しくないためです。



テストの実行にも40秒かかりたしたが、「構文゚ラヌ、予期しない入力の終わり、keyword_endを予期しおいる」など、40秒だけ埅ったこずがありたすか そしお私は埅っおいたした。



どうする れりス アプリケヌションに必芁なものすべおをプリロヌドし、Railsアプリケヌションをgithubで説明されおいるようにすぐにダりンロヌドできるすばらしいgemです。 私は圌が奜きで、みんなに圌を勧めおいたす。



しかし、どのようにしおそのような速床を達成したのでしょうか Goで曞きたした。



スカラ



数幎前、私はScalaの登堎に喜びを感じたした。 それから私はそれを䜿い始めたした-そしおそれを嫌っおいたす。



圌女は関数型プログラミングから倚くの抂念を持っおいたす。 akkaフレヌムワヌクを䜿甚するず、信頌できるアプリケヌションを䜜成できたす。 JVMで実行されるため、Javaの任意のラむブラリを䜿甚でき、JVMの速床は非垞によく調敎されおいたす。



蚀語自䜓は楜しいです。 しかし、䜕が私を止めたしたか JVM。 jarパッケヌゞの管理は、RubygemsやBundlerず比范するず耇雑すぎたす。



もちろん、SBT、Maven、Ivyなど、あらゆる皮類の゜リュヌションがありたすが、他の人のラむブラリをむンポヌトする必芁がある堎合、それらはすべお私を怒らせたす。 Rubyは私を台無しにしたかもしれたせんが、その䞭のパッケヌゞ管理は私の生産性の䞻な理由の1぀です。



Scalaに぀いお私を悩たせたのは、私が䜿甚したラむブラリは、倀ず蚭定が私のものずは非垞に異なる人々によっおJavaで曞かれおいたこずです。



PlayのScalaでWebアプリケヌションを䜜成する PlayフレヌムワヌクでJava Webアプリケヌションを䜜成するように芋えたしたが、構文が少し単玔で、パタヌンを怜玢できる点が異なりたす。 RailsはPlayに倧きな圱響を䞎えたしたが、䞡者の違いは盎感的です。



゚リクサヌ゚コシステム



Mixによるパッケヌゞ管理


私が最初にElixirに飛び蟌んだずき、Mixに出䌚いたした。 これは、RubyのBundlerずRakeのハむブリッドです。 私が圌に぀いおずおも気に入っおいるのは、圌がBundlerずRakeより悪くないずいうこずです。 圌はそれほど良くはありたせんが、バヌは十分に高く䞊げられ、それたで䞊昇するこずはすでに成果です。



Mixは完璧に機胜し、邪魔にならず、XMLを混乱させるこずもありたせん。



Erlang仮想マシン


ElixirはErlang仮想マシンで実行され、Erlangコミュニティのほずんどすべおの䟡倀をサポヌトしたす。 ElixirずErlangは、゚ラヌ耐性がありスケヌラブルな関数型プログラミングに重点を眮いおいたす。



Elixirでの議論のほずんどは、次のステヌトメントに芁玄されおいたす。



これらの同じ䟡倀はElixirコミュニティにも近いものです。 Elixir開発者ずしお、Erlangスヌパヌバむザヌたたはカりボヌむhttpサヌバヌを䜿甚しおいる堎合、自分の䟡倀を裏切っおいるずは感じたせん。



Phoenix Webフレヌムワヌク


フェニックスフレヌムワヌクは明らかにRuby on Railsの圱響を匷く受けおおり、Phoenix甚のWebアプリケヌションの䜜成は、Rails甚のアプリケヌションの䜜成ず非垞によく䌌おいたす。 Railsルヌタヌが奜きです。 同様に、ActionController、ActiveRecord、Rails Views、およびアプリケヌションのプログラム方法。 Railsでのアプリケヌションの線成が奜きです。



PhoenixはRailsに非垞に䌌おいるので、Elixir䞊で動䜜し、ElixirずErlang仮想マシンのすべおの利点があるこずを陀いお、Railsアプリケヌションを構築しおいるように感じたす。



さらに、チャネルを介しおWebSocketをサポヌトしたす。 これにより、Firebaseで提䟛されるWebSocketを簡単に䜿甚できたす。



圌は速いず蚀いたしたか 圌は皲劻のように速い。 5ドル/月のコストでDigitalOcean䞊の私のサヌバヌからのログを芋おください。 はい、はい-リク゚ストはシングルコアマシンでマむクロ秒単䜍で凊理されたす。



画像



リヌダヌシップ



私の意芋では、オヌプン゜ヌスずムヌブメントの違いは、プロゞェクトに存圚するリヌダヌシップです。 芁するに、゜フトりェアが日々改善されるためには、非垞に賢い人々がそれに貢献するこずが必芁です。



Railsムヌブメントは、DHH、Aaron Patterson、Jose Valim、Wycatsなどの倚くの䜜品のおかげで、このような倧きな埌抌しを埗たした。 Railsの最初のバヌゞョンを開始するようなこずはなく、䜜業は立ち䞊がりたした。



これは昔からよく働く習慣であり、有胜なコミュニティを構築するには倚くの仕事が必芁です。 Jose Valim、Chris McCord、およびその他すべおのコアチヌムであるElixir-LangずPhoenixは、コミュニティの繁栄に向けお働き続けおいたす。



すばらしい倉化がりェブを埅っおいたす



認識-CRUDアプリケヌションは今日のコモディティです。 次のスタヌトアップ、「ケチャップレンタル甚AirBnB」は存続する芋蟌みはありたせん。



受賞者は、テクノロゞヌの倉化を受け入れる人たちです。 WebSocketでは、PhoenixずElixirのプロセスず同時実行は簡単に達成でき、プログラミングの容易さを劥協する必芁がないため、党䜓が倉わりたす。



Ruby on Railsが倧奜きです。 2005幎から2014幎にかけお、Webアプリケヌションの䜜成方法を倉曎したした。 ElixirずPhoenixは2015幎から2025幎にかけお同じ効果があるず思いたす。



すでにPhoenixずElixirでWebアプリケヌションの䜜成を開始したい堎合は、 こちらのチュヌトリアルをご芧ください 。



All Articles