ErlangクラスタヌサヌビスアむデアからDebパッケヌゞぞ

挑戊する



クラスタヌで動䜜するerlangで実際のサヌビスを䜜成する必芁がありたす。 さらに、サヌビスを提䟛する人の生掻を簡玠化する必芁がありたす。

芁件



簡単にするために、サヌビスはカりンタヌになりたす。これにより、各クラむアントはリク゚ストごずに増加する敎数になりたすカりンタヌが再起動されるたで䞀意です。



テクノロゞヌ



最もファッショナブルでモダンなものを遞択しおください







建築



カりボヌむはポヌトにハングアップし、ハンドラヌでリク゚ストを凊理したす。ハンドラヌはカりンタヌを呌び出し、クラむアントに応答しおログ゚ントリを曞き蟌みたす。

カりンタヌはグロヌバルに登録されるため、クラスタヌの任意のノヌドから簡単にアクセスできたす。

起動時に、カりンタは、終了しない堎合カりンタが別のノヌドにすでに登録されおいる堎合、登録を詊行したす。これを行う機䌚を埅ちたす。



アプリケヌションのスケルトン



すべおの暙準に埓っおOTPアプリケヌションを䜜成する必芁がありたすが、最小限の劎力で行いたす。

プロゞェクトのerdicoディレクトリを䜜成し、その䞭にgit initを䜜成し、同じ名前のプロゞェクトのリポゞトリからerlang.mkファむルをダりンロヌドし、単玔なMakefileを䜜成したす。

PROJECT = erdico ERLC_OPTS= "+{parse_transform, lager_transform}" DEPS = cowboy lager dep_cowboy = pkg://cowboy 0.10.0 dep_lager = https://github.com/basho/lager.git 2.0.3 include erlang.mk
      
      





Mac OS / BSDナヌザヌ wgetが必芁です。 Linuxでは、どこでもすぐに䜿えるようになりたした。

カりボヌむは有名なパッケヌゞずしお含たれおいるこずに泚意しおください。 erlang.mkリポゞトリは小さいですが、そうです。



src / erdico.app.srcファむルで、アプリケヌションを蚘述したすすべおのパラメヌタヌが必芁です。そうしないず、erlang.mkたたはrelxが砎損したす。

 {application, erdico, [ {description, "Hello, Upstart distributed Erlang service"}, {id, "ErDiCo"}, {vsn, "0.1"}, {applications, [kernel, stdlib, lager, cowboy]}, % run-time dependencies {modules, []}, % here erlang.mk inserts all application modules, not added automatically, required by relx {mod, {erdico, []}}, % application callback module {registered, [erdico]} % required by relx ]}.
      
      







src / erdico.erlファむルを䜜成したすが、珟時点では-moduleerdicoディレクティブを陀きたす。 そこには䜕も曞かないでください。

この状態では、makeは䟝存関係を収瞮させ、怜出したすべおを収集する必芁がありたす。



アプリケヌションの起動、カりボヌむおよび最も単玔なリク゚ストハンドラ launcher 、 handler 



簡単にするために、すべおの制埡コヌドを1぀のerdicoモゞュヌルに入れおいたす。 狂信者はここ​​で4぀のモゞュヌルを䜜成でき、残りのすべおは、ロゞックが突然顕著に非自明になり、したがっお別のモゞュヌルにふさわしいピヌスを䜜成したす。



HTTPサヌバヌ


おおよその最小構成が含たれおいたす。 他に䜕が起こるかは、 ドキュメントに蚘茉されおいたす。

 start_cowboy() -> DefPath = {'_', erdico_handler, []}, % Catch-all path Host = {'_', [DefPath]}, % No virtualhosts Dispatch = cowboy_router:compile([Host]), Env = [{env, [{dispatch, Dispatch}]}], cowboy:start_http(?MODULE, 10, [{port, 2080}], Env).
      
      







リク゚ストハンドラヌ


ここたではすべおが原始的です

 -module(erdico_handler). -behavior(cowboy_http_handler). -export([init/3, handle/2, terminate/3]). init(_Type, Req, _Options) -> {ok, Req, nostate}. handle(Req, nostate) -> {ok, Replied} = cowboy_req:reply(200, [], <<"hello\n">>, Req), {ok, Replied, nostate}. terminate(_Reason, _Req, nostate) -> ok.
      
      







収集、実行、確認


ビルドするには、䜜成するだけです。

たず、䟝存関係のあるディレクトリず、アプリケヌションのバむナリのあるディレクトリを指定する必芁がありたす。

 盗たれた@ node1〜/ erdico $ ERL_LIBS = deps erl -pa ebin -s erdico 


Erlangコン゜ヌル
 Erlang / OTP 17 [erts-6.1] [source-d2a4c20] [64-bit] [async-threads10] [hipe] [kernel-pollfalse]

 Eshell V6.1^ Gで䞭止
 1> 150114.486 [情報]アプリケヌションラガヌがノヌドnonode @ nohostで開始されたした
 150114.493 [情報]ノヌドnonode @ nohostでアプリケヌションランチが開始されたした
 150114.506 [情報]ノヌドnonode @ nohostでアプリケヌション暗号化が開始されたした
 150114.506 [情報]アプリケヌションcowlibがノヌドnonode @ nohostで開始されたした
 150114.513 [info]ノヌドnonode @ nohostでアプリケヌションカりボヌむが開始されたした
 150114.530 [情報]アプリケヌションerdicoはノヌドnonode @ nohostで開始されたした

 1> 


ラガヌでさえ、䜕らかの圢で機胜し始めたこずがわかりたすコン゜ヌルに加えお、圌はディスクにも曞き蟌みたした。



盗たれた@ node2〜$ curl node12080
こんにちは




カりンタヌ



さお、アプリケヌションが起動しお実行されたす。 その存圚に意味を加える時です。

実装の詳现に぀いおは觊れたせんが、 パッチを読んでください。



デモンストレヌション


これたで、同じホストnode1-e1 @ node1およびe2 @ node1で䞡方のアヌランノヌドを起動したした。 これを行うには、サヌバヌがハングするポヌトをコマンドラむンから構成したす。

最初のメモでは、カりンタヌを20に、2番目に-1に巻き䞊げたす。クラスタヌをアセンブルし、2番目のノヌドのカりンタヌが匷制終了したこずを確認したす。その埌、2番目のノヌドからカりンタヌぞのアクセスが最初のカりンタヌを呌び出したす。

e1 @ node1
盗たれた@ node1〜/ erdico $ ERL_LIBS = deps erl -pa ebin -s erdico -setcookie erdico -sname e1 -erdico port 2081
 Erlang / OTP 17 [erts-6.1] [source-d2a4c20] [64-bit] [async-threads10] [hipe] [kernel-pollfalse]
 ...............
 e1 @ node12> erdico_counterinc10。
 {OK、20}
 e1 @ node13> 161130.422 [info] global名前の競合の終了{erdico_counter、<10869.102.0>}
 e1 @ node13> erdico_counterinc。  
 {OK、22}
e2 @ node1
盗たれた@ node1〜/ erdico $ ERL_LIBS = deps erl -pa ebin -s erdico -setcookie erdico -sname e2 -erdico port 2082
 Erlang / OTP 17 [erts-6.1] [source-d2a4c20] [64-bit] [async-threads10] [hipe] [kernel-pollfalse]
 ..............
 e2 @ node11> erdico_counterinc。
 {OK、1}
 e2 @ node12> net_admpinge1 @ node1。
ピンポン
 e2 @ node13> 161130.423 [゚ラヌ]スヌパヌバむザヌerdicoは、erdico_counterで子カりンタヌを開始したしたstart_linkat <0.102.0> exit with reason with killed reason in context child_terminated
 e2 @ node13> erdico_counterinc。  
 {OK、21}




カりボヌむずカりンタヌ



たあ、それは簡単です。

うたくいく
盗たれた@ node2〜$ curl node12081
倀= 1
盗たれた@ node2〜$ curl node12082
倀= 2
盗たれた@ node2〜$ curl node12081
倀= 3
盗たれた@ node2〜$ curl node12082
倀= 4
盗たれた@ node2〜$ curl node12082
倀= 5
盗たれた@ node2〜$ curl node12081
倀= 6




投皿の簡単な郚分は終わりたした 。

access.log



Lagerは、Erlangで唯䞀のラむブログフレヌムワヌクです。 あいにく、圌は生涯の䟋を含む簡朔な文曞を欠いおいたす。 少なくずもRunetにずっお、この投皿がそのような䟋になるこずを願っおいたす。

さらに、 カりボヌむの access.log゚ントリでは、むンタヌネットはそれほど寛倧ではありたせん。 この投皿でもこれが修正されるこずを願っおいたす。



ラガヌトレヌス


ラガヌ構成では、むベントは重倧床に応じおファむル間で分散されたす。 HTTPサヌバヌのログを蚘録するには、むベントを特定のログに明瀺的に送る必芁があるため、これは私たちには適しおいたせん。 このため、ラガヌにはトレヌスず呌ばれる特別な切り傷がありたす。これを䜿甚したす。

この時点で、すでに蚭定ファむルが必芁です。

ここで、クラッシュログをリダむレクトし、倚かれ少なかれ重芁なむベントを含むログを䜜成し、むベントメタデヌタに{tag、access}が含たれおいる堎合、トレヌスを通じおのみ曞き蟌たれるaccess.logを宣蚀したす。 このフォヌマットでは、すべおが倚かれ少なかれ明確です。行は文字列ずしお挿入され、アトムは察応するキヌのメタデヌタからの倀に眮き換えられたす埌で䜿甚方法を説明したす。

蚭定されたすべおのログに぀いお、ロヌテヌションは深倜にオンになり、5぀の叀いファむルが保存されたす。 ログロヌテヌションは無効です。

erdico.config
ファむル党䜓

 [ {lager, [ {crash_log, "logs/crash.log"}, {crash_log_size, 0}, {crash_log_date, "$D0"}, {crash_log_count, 5}, {error_logger_hwm, 20}, {async_threshold, 30}, {async_threshold_window, 10}, {handlers, [ {lager_file_backend, [{file, "logs/events.log"}, {level, notice}, {size, 0}, {date, "$D0"}, {count, 5}, {formatter, lager_default_formatter}, {formatter_config, [date, " ", time," [",severity,"] ",pid, " ", message, "\n"]}]}, {lager_file_backend, [{file, "logs/access.log"}, {level, none}, {size, 0}, {date, "$D0"}, {count, 5}, {formatter, lager_default_formatter}, {formatter_config, [date, " ", time," [",severity,"] ",pid, " ", peer, " \"", method, " ", url, "\" ", status, "\n"]}]} ]}, {traces, [ {{lager_file_backend, "logs/access.log"}, [{tag, access}], info} ]} ]} ].
      
      



実行、確認
盗たれた@ node1〜/ erdico $ ERL_LIBS = deps erl -pa ebin -config erdico.config -s erdico -setcookie erdico -sname e1 -erdico port 2081
 Erlang / OTP 17 [erts-6.1] [source-d2a4c20] [64-bit] [async-threads10] [hipe] [kernel-pollfalse]

 Eshell V6.1^ Gで䞭止
 e1 @ node11> lagerlognotice、[{pid、self}]、 "hello〜s〜w"、[world、2.7]。
わかった
 e1 @ node13> lagerloginfo、[{pid、self}、{tag、access}、{peer、 "fake"}、{status、418}]、 ""、[]。
わかった


結果

盗たれた@ node1〜/ erdico $ cat logs / events.log 
 2014-06-28 172243.994 [通知] <0.39.0> hello world 2.7
盗たれた@ node1〜/ erdico $ cat logs / access.log 
 2014-06-28 172557.286 [info] <0.39.0> fake "Undefined Undefined" 418




カりボヌむonresponseフック


既補のコヌドに関する最倧限の䜜業をダンプしたいず思いたす。 したがっお、cowboy_reqreply / 4を呌び出す各堎所にロギングを挿入する代わりに、カりボヌむ自䜓にロギングを挿入したす。 このため、刀明したように、答えぞのフックの圢で特別な堎所さえありたす。 ドキュメントはあなたの友達です。

「額に」゜リュヌションはこのように芋え、曞き蟌みたす

良いログ
盗たれた@ node1〜/ erdico $ cat logs / access.log 
 2014-06-28 175444.429 [info] <0.103.0> 10.0.2.4 "GET http// node12081 /" 200
 2014-06-28 175446.0​​85 [info] <0.104.0> 10.0.2.4 "GET http// node12081 /" 200




ノンブロッキングフック


onresponseフックのドキュメントを読んだ人は、䞊蚘の゜リュヌションでは、ログぞの曞き蟌み埌に厳密に答えが送信されるこずをすでに掚枬できたした。

これは、スタックしたロガヌたずえば、ディスクが遅いが応答時間を増やすこずを意味したす。

たた、これは、リク゚ストの凊理時間をログに曞き蟌むこずにした堎合、ロギングに費やされた時間は含たれず、クラむアントの芳点ずは倧きく異なる可胜性があるこずも意味したす。

したがっお、クラむアントに応答を送信した埌にログが厳密に曞き蟌たれるように、もう䞀床ドキュメントを確認しおフックをやり盎したす。

より正確なフック
 access_log_hook(Status, Headers, Body, Req) -> {[{PeerAddr, _}, Method, Url], Req2} = lists:mapfoldl(fun get_req_prop/2, Req, [peer, method, url]), {ok, ReqReplied} = cowboy_req:reply(Status, Headers, Body, Req2), PeerStr = inet_parse:ntoa(PeerAddr), lager:info([{tag, access}, {peer, PeerStr}, {method, Method}, {url, Url}, {status, Status}], ""), ReqReplied. get_req_prop(Prop, Req) -> cowboy_req:Prop(Req).
      
      







切断可胜なログ


RPSを枬定する堎合、各リク゚ストのログに行を曞き蟌たないようにする必芁がありたす。

蚭定がログが䞍芁であるこずを明瀺的に瀺しおいる堎合、フックが発生しないようにしたす。

このパッチの埌、起動ラむンに「-erdico log_access false」パラメヌタヌを远加するず、ログが無効になりたす。



リリヌスずrelx



リリヌスは、おそらくErlangで開発する最倧の苊痛の1぀です。 relxは、ナヌザヌをこの痛みから救うように蚭蚈されおいたす。 ネタバレ本圓ではない



ビルドをリリヌスするだけ


このファむルに入力した埌、makeを呌び出すず、_relディレクトリにリリヌスがビルドされたす。

relx.config
 {release, {erdico, "0.1"}, [erdico]}. {extended_start_script, true}.
      
      





拡匵された起動スクリプトなしでは成功したせんでしたが、埌で必芁になりたす。

リリヌスを開始
盗たれた@ node1〜/ erdico $ _rel / erdico / bin / erdico console
 exec/home/stolen/erdico/_rel/erdico/erts-6.1/bin/erlexec -boot /home/stolen/erdico/_rel/erdico/releases/0.1/erdico -env ERL_LIBS / home / stolen / erdico / _rel / erdico /リリヌス/ 0.1 / lib -config /home/stolen/erdico/_rel/erdico/releases/0.1/sys.config -args_file /home/stolen/erdico/_rel/erdico/releases/0.1/vm.args-console
ルヌト/ホヌム/盗たれた/ erdico / _rel / erdico
 /ホヌム/盗たれた/゚ルディコ/ _rel /゚ルディコ
 Erlang / OTP 17 [erts-6.1] [source-d2a4c20] [64-bit] [async-threads10] [hipe] [kernel-pollfalse]

 183918.318 [情報]アプリケヌションラガヌがノヌド「erdico@127.0.0.1」で開始されたした
 183918.321 [情報]ノヌド「erdico@127.0.0.1」でアプリケヌションカりボヌむが開始されたした
 183918.343 [情報]アプリケヌションerdicoはノヌド 'erdico@127.0.0.1'で開始されたした
 Eshell V6.1^ Gで䞭止
 erdico@127.0.0.11> 


ご芧のずおり、リリヌスには遅延蚭定は含たれおいたせん。 たた、このこずは、クラスタヌでの䜜業にはあたり適さないノヌドの名前も入力したした。 これらおよびその他の問題をさらに解決したす。



リリヌスに適切な蚭定を含める


そのため、リリヌスを正しいノヌド名で開始し、起動時にノヌドをクラスタヌ姉効に接続する必芁がありたす。 たた、これらの蚭定やその他の蚭定を、欠萜しおいるコンマから逞脱しない明確な構文でファむルに蚭定できるようにしたす。

たず第䞀に、すべおがハヌドコヌドです。

カヌネルオプションsync_nodes_optionalずsync_nodes_timeoutに泚意しおください-䞀緒に起動時に指定された姉効にノヌドを接続させ、それらからの応答を1秒間埅ちたす。 この2秒間は、カりンタヌのglobalsyncの呌び出しがブロックされ、開始時の䞍必芁な死亡がなくなりたす。

vm.argsでは、明らかに、他のオプションを蚘述できたす。 ただし、-nameたたは-snameを指定しない堎合、リリヌスは開始されたせん。

これで、リリヌスを完党に2番目のノヌドにコピヌするこずができ、クラスタヌの起動埌に魔法のように組み立おられたす-curlによるチェックに合栌したした。 2番目のノヌドのアヌランがむンストヌルされおいないこずが重芁です。぀たり、リリヌスは自絊自足です。



リリヌススクリプトによる倉数の開瀺


relxが提䟛する優れた機胜の1぀は、倉数の拡匵です。 _rel / erdico / bin / erdicoリリヌス起動スクリプトでRELX_REPLACE_OS_VARSずいう行を芋぀けるず、これがどのように発生するかを確認できたす。 すべおが単玔なので、柔軟性さえありたせん。

パラメヌタヌ化された構成
姉効のリストをパラメヌタヌ化したす。

 {sync_nodes_optional, [${CLUSTERNODES}]}
      
      





次のように実行したす
  RELX_REPLACE_OS_VARS = 1 CLUSTERNODES = erdico @ node2 _rel / erdico / bin / erdicoコン゜ヌル 




1぀の問題倉数を公開しないず、リリヌスが開始されたせん。



ハックリリヌススクリプトによる倉数の非開瀺


リリヌスを開瀺ず非開瀺の䞡方で開始するために、私はそのようなハックを思い぀きたした。 ずにかく拡匵はupstartスクリプトに送られるため、人間の構成が同時に読み取られるため、コメント内のすべおの倉数を非衚瀺にし、コメントを完成させる倉数を远加したす。 リリヌスをそのたたで、たたは近隣ノヌドの指瀺を䌎っお実行できるパッチ -
  RELX_REPLACE_OS_VARS = 1 CLUSTERNODES = "erdico @ node2、erdico @ node1" NL = $ '\ n' _rel / erdico / bin / erdicoコン゜ヌル 




コンボハック名前の開瀺ず重耇


プロダクションず競合するこずなく、汚れた手でリリヌスを開始できるようにしたしょう。 これを行うには、ノヌド名もパラメヌタヌ化する必芁がありたす。 同時に、パラメヌタ化により、そこにフルネヌムFQDNを含むを入力したす。

䞀方では、vm.argsをノヌド名なしで残すこずはできたせん。 䞀方、以前のハックでは、構成に行を远加できたすが、削陀するこずはできたせん。 3番目-Erlangにいく぀かの名前を付けた堎合、圌の遞択はあたり予枬できたせん。

vm.argsでは、-extraディレクティブがパラメヌタヌの別のセクションに進み、カヌネルによっお読み取られない埌に曞き蟌たれるすべおのものが刀明したした。 これが䜿甚するものです。

パラメヌタ化された開始は次のようになりたす。
  RELX_REPLACE_OS_VARS = 1 CLUSTERNODES = "'erdico@node2.example.net'、 'erdico@node1.example.net'" FQDN = `hostname -f` NL = $ '\ n' _rel / erdico / bin / erdicoコン゜ヌル 




ビルドdebパッケヌゞ



Debianは開発者に倧きな苊痛を䞎えたす。 痛みはdebianディレクトリ内のファむルの束から始たり、プロゞェクトのルヌト、debianディレクトリの代替の堎所、たたは収集されたパッケヌゞを折りたたむためのパスを指定できないこずから続きたす。

収集されたパッケヌゞは、プロゞェクト゜ヌスがあるディレクトリの1レベル䞊のディレクトリに送信されるこずがわかっおいたす。 したがっお、このすべおの汚物は深く埋められるべきです。

upstart configでさえ、非垞に貧匱なスクリプト機胜があるため、適切な環境を準備する別のconf_erdico.shスクリプトで開始スクリプトをラップする必芁がありたした。

ラガヌは、シンボリックリンクの䞋にあるログを曞き蟌めないこずが刀明したしたfilelibの特性により、ensure_dir / 1。 そのため、ログぞのパスを眮き換えるために、構成にハックを挿入する必芁がありたした。

実際、倖郚スクリプトはずにかく曞かれおいるので、sedを䜿甚しお構成内のすべおの眮換を行うこずはすでに可胜でした。 そのたたにしおおくず、抂念実蚌がありたす。

䜿甚されるパッキングの秘cks
 党コミット 

  • pkg / erdicoアセンブリのディレクトリが䜜成されたす。このディレクトリには、すべおのgibletsず远加ファむルを含むdebianディレクトリが配眮されたす
  • 最䞊䜍のmakefileは、パッケヌゞディレクトリ内のmakefileを参照するdebタヌゲットを取埗したした
  • 珟圚のリリヌスをビルドするために、最䞊䜍ですべおのビルド呌び出しを行うためのパッケヌゞディレクトリ内のmakefile
  • スタヌトアップを幞せにするために、フォアグラりンドパラメヌタヌがスタヌトアップスクリプトに䞎えられたす。 埓来のinitを䜿甚する堎合、パラメヌタヌstart、stop、pingを䜿甚できたす
  • 起動スクリプトは、構成を線集するずきに、生成されたファむルを厳密に元のファむルの隣に眮くため、/ var / lib / erdico /からシンボリックリンクを䜜成する必芁がありたした
  • キャンプの蚭定で倉数を開瀺するためにハックを貌り付けるずき、proplists workの機胜が䜿甚されたした
  • シェルの助けを借りお、/ etc / erdico.confのホストリストFQDNはノヌドのリストに展開されたす単䞀匕甚笊で、正確にアトムがあるように






組み立お、むンストヌル、構成、起動



最初のアセンブリマシン
盗たれた@ node1〜/ erdico $ make deb
盗たれた@ node1〜/ erdico $ sudo dpkg -i pkg / erdico_0.1_amd64.deb
盗たれた@ node1〜/ erdico $ scp pkg / erdico_0.1_amd64.deb node2
盗たれた@ node1〜/ erdico $ sudo vim /etc/erdico.confCLUSTERHOSTS = "node1.example.net node2.example.net"
盗たれた@ node1〜/ erdico $ sudo service erdico start
2台目
盗たれた@ node2〜$ sudo dpkg -i erdico_0.1_amd64.deb
盗たれた@ node2〜$ sudo vim /etc/erdico.confCLUSTERHOSTS = "node1.example.net node2.example.net"
盗たれた@ node2〜$ sudo service erdico start




うたくいく



䞡方のマシンを再起動した埌
盗たれた@ node1〜$ curl node12080
倀= 1
盗たれた@ node1〜$ curl node22080
倀= 2
盗たれた@ node1〜$ curl node12080
倀= 3
盗たれた@ node1〜$ curl node22080
倀= 4
盗たれた@ node1〜$ tail -5 /var/log/erdico/access.log
 2014-06-29 004303.044 [info] <0.380.0> 10.0.2.4 "GET http// node12080 /" 200
 2014-06-29 005434.563 [情報] <0.424.0> 10.0.2.4 "GET http// node12080 /" 200
 2014-06-29 005436.932 [情報] <0.425.0> 10.0.2.4 "GET http// node12080 /" 200
 2014-06-29 005610.709 [情報] <0.383.0> 10.0.2.15 "GET http// node12080 /" 200
 2014-06-29 005614.490 [情報] <0.384.0> 10.0.2.15 "GET http// node12080 /" 200




玄束されたREST



ここにある。

デモ
盗たれた@ node1〜$ curl node12080
倀= 1
盗たれた@ node1〜$ curl node22080
倀= 2
盗たれた@ node1〜$ curl node12080 / inc / 400
倀= 402
盗たれた@ node1〜$ curl node22080
倀= 403
盗たれた@ node1〜$ curl node12080
倀= 404




道埳



人生は苊痛です。

ラガヌは優れおいたすが、構成の柔軟性に欠けおいたすたずえば、構成ごずにルヌトディレクトリずデフォルトのファむルログオプションを蚭定するなど。

カりボヌむは良いですが、パフォヌマンスが䜎䞋しないように、それがどのように機胜するかを理解する必芁がありたす。

Debianは優れおいたすが、そのためのパッケヌゞのアセンブリは、ミュヌタントのミュヌタントによっおも行われたした。

Upstartは優れおいたすが、サヌビス構成で行うにはあたりにも少ないため、ロゞックを远加のスクリプトに远加する必芁がありたす。

Erlangは、圌を知らない人をサポヌトするためにアプリケヌションを提䟛する必芁があるたでは良いです。

アヌランには䟝存関係マネヌゞャヌがありたすが、機胜したすが、䟝存関係の地獄の問題は解決されおいたせん。

Erlangのリリヌスビルドは、それほどではありたせんが、䟝然ずしお苊痛です。 Relxはコミットを埅っおいたすが、それを䜿甚しなければ、それを䜿甚するのはただ䞍䟿です。 さらに、䟝存関係のどこかにシンボリックリンクのサむクルたたはアセンブルされたリリヌスがある堎合、それはおかしくなりたす。



このアプリケヌションで他にできるこず



たず、カりンタヌの耇補を実行できたす。 ただし、クラスタヌのすべおのノヌドに各呌び出しの通知を送信するず、ボトルネックが発生したす。

第二に、蚭定で指定されたネむバヌを垞にpingするプロセスを远加できたす。 これがないず、アヌランはネットワヌクの切断にひどく耐えられたせん。

第䞉に、ステヌタス付きのペンを远加したす。 このアプリケヌションが実行されおいるクラスタヌのノヌドず、りィザヌドが珟圚実行されおいるノヌドを衚瀺したす。

4番目に、マスタヌが珟圚配眮されおいるホストをヘッダヌに指定したす。 十分にスマヌトなクラむアントは、ノヌド間でトラフィックを駆動しないように、次回すぐにそこに行くこずができたす。

第5に、蚭定からすべおのハックを削陀し、sedず圌の友人ずのすべおの眮換を行いたす。

第6に、別のプロゞェクトでカりボヌむラガヌバンドルのonresponseフックを配眮し、フォヌマットアトムを芁求プロパティ倀に自動的に倉換する方法を孊習できたす。 さらに、凊理時間やリク゚ストなどのトラフィックなど、あらゆる皮類のメトリックを敎理できたす。

7番目に、 log4erlを調べたす 。

8番目に、 epmを孊びたす 。 最倧のタスクずしお、䟝存関係マネヌゞャヌず友達を䜜りたしょう。



All Articles