Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP · Pelajaran

Pendaftaran Proses Global

Urus nama proses global dan temui proses merentas gugusan Erlang teragih untuk operasi yang diselaraskan

Pelajaran 3 daripada 411 langkah

Pendaftaran Proses Global ialah pelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP merangkumi sejumlah 4 pelajaran.

Nama Global Merentasi Nod

Dalam Erlang teragih, proses sering perlu mencari satu sama lain, walaupun proses tersebut berada pada mesin yang berbeza. Bagaimanakah anda mencari proses apabila anda tidak tahu pada nod mana proses itu berada?

Modul global Erlang menyediakan penyelesaian: pendaftaran proses global. Modul ini membolehkan anda memberikan nama unik kepada proses yang diketahui pada semua nod yang bersambung dalam kelompok anda.

Proses Tempatan berbanding Global

Biasanya, apabila anda mendaftarkan proses menggunakan register/2, namanya hanya diketahui pada nod tempatan. Jika my_process berada pada nodeA@host, proses pada nodeB@host tidak dapat mencarinya berdasarkan nama sahaja.

Pendaftaran global menyelesaikan masalah ini! Ia berfungsi seperti perkhidmatan direktori teragih. Mana-mana proses pada mana-mana nod yang bersambung boleh mencari nama yang didaftarkan secara global dan mendapatkan ID Proses (PID) yang sepadan, tanpa mengira tempat proses itu berjalan.

`global:register_name/2`

Untuk menjadikan proses boleh dicapai secara global, gunakan global:register_name(Name, Pid).

  • Name: Atom yang akan menjadi nama global unik (contohnya, my_service).
  • Pid: ID Proses bagi proses yang ingin anda daftarkan.

Jika nama tersebut telah digunakan, register_name mengembalikan {false, OldPid}; jika tidak, ia mengembalikan true. Modul global memastikan nama global adalah unik merentasi seluruh kelompok teragih.

`global:whereis_name/1`

Setelah proses didaftarkan, mana-mana proses lain boleh mencarinya menggunakan global:whereis_name(Name).

  • Name: Nama global (atom) yang sedang dicari.

Fungsi ini mengembalikan PID proses yang didaftarkan jika ditemui, atau atom undefined jika tiada proses didaftarkan dengan nama tersebut.

Anda mesti menyemak undefined sebelum cuba menghantar mesej kepada PID yang dikembalikan.

Demonstrasi Komunikasi Global Lengkap

Contoh yang boleh dijalankan ini menggabungkan semuanya! Proses pelayan bermula dan mendaftarkan dirinya secara global. Selepas kelewatan singkat, proses klien mencari pelayan global ini lalu menghantar mesej kepadanya dan menerima balasan.

Perhatikan cara global:register_name memastikan pelayan diketahui, manakala global:whereis_name membolehkan klien mencarinya, lalu membolehkan komunikasi berjalan dengan lancar.

-module(global_demo).
-export([main/0]).

% Server Functions
server_init() ->
    case global:register_name(my_global_service, self()) of
        true ->
            io:format("Server (~p) registered as my_global_service~n", [self()]),
            server_loop();
        {false, OldPid} ->
            io:format("Error: my_global_service already registered by ~p~n", [OldPid])
    end.

server_loop() ->
    receive
        {From, hello} ->
            io:format("Server (~p) received 'hello' from ~p~n", [self(), From]),
            From ! {self(), "Hi from server!"},
            server_loop();
        _ ->
            io:format("Server (~p) received unknown message~n", [self()]),
            server_loop()
    end.

% Client Functions
client_task() ->
    io:format("Client (~p) trying to find my_global_service...~n", [self()]),
    case global:whereis_name(my_global_service) of
        undefined ->
            io:format("Client: my_global_service not found!~n");
        ServerPid ->
            io:format("Client: Found server ~p, sending 'hello'...~n", [ServerPid]),
            ServerPid ! {self(), hello},
            receive
                {ServerPid, Response} ->
                    io:format("Client: Received response from server: '~s'~n", [Response])
            after 5000 ->
                io:format("Client: No response from server within 5 seconds.~n")
            end
    end.

% Main entry point
main() ->
    % Start the server process
    spawn(?MODULE, server_init, []),
    timer:sleep(100), % Give server time to register

    % Start the client process
    spawn(?MODULE, client_task, []),

    timer:sleep(2000). % Allow processes to run and communicate

Mengalih Keluar Nama Global

Apabila proses yang didaftarkan secara global ditamatkan, modul global akan menyahdaftar namanya secara automatik. Walau bagaimanapun, anda juga boleh menyahdaftar nama secara eksplisit menggunakan global:unregister_name(Name).

Ini berguna jika anda ingin menggantikan sesuatu perkhidmatan, atau jika proses perlu melepaskan nama globalnya buat sementara waktu. Ingat bahawa selepas dinyahdaftar, proses lain tidak lagi boleh mencarinya menggunakan nama tersebut.

Mengendalikan Pertembungan Nama

Apakah yang berlaku jika dua proses berbeza (walaupun pada nod yang berbeza) cuba mendaftarkan nama global yang sama?

Modul global memastikan nama global adalah unik merentasi seluruh sistem teragih. Proses pertama yang berjaya mendaftarkan nama tersebut akan menang. Percubaan seterusnya untuk mendaftarkan nama yang sama akan gagal dan mengembalikan {false, OldPid}, yang menunjukkan pihak yang sudah memiliki nama tersebut.

Ini mengelakkan kekeliruan dan memastikan whereis_name/1 sentiasa mengembalikan satu PID yang betul.

Aplikasi Praktikal

Pendaftaran proses global sesuai untuk melaksanakan:

  • Perkhidmatan Tunggal: Satu tika perkhidmatan (contohnya, pengurus konfigurasi atau pencatat log) yang boleh dicapai dari mana-mana sahaja.
  • Pengurus Sumber: Proses yang bertanggungjawab mengurus sumber dikongsi yang perlu dicapai oleh beberapa bahagian sistem teragih anda.
  • Titik Masuk: Menyediakan nama yang diketahui umum untuk titik masuk utama aplikasi teragih.

Ini memudahkan penemuan proses dalam seni bina teragih yang kompleks.

Cara Pendaftaran Global Berfungsi

Modul global melaksanakan keupayaannya dengan mengekalkan paparan yang konsisten tentang nama yang didaftarkan merentasi semua nod Erlang yang bersambung.

Apabila nama didaftarkan, maklumat ini disiarkan kepada semua nod lain. Apabila nod bersambung atau terputus sambungan, modul global mengemas kini keadaan dalamannya untuk mencerminkan topologi kelompok semasa dan nama global yang tersedia.

Ini memastikan global:whereis_name/1 dapat mencari PID yang betul dengan pantas, tanpa mengira tempat PID itu berada.

Semakan Pendaftaran Global

Bayangkan sistem Erlang teragih dengan dua nod, nodeA dan nodeB, yang kedua-duanya bersambung. Satu proses pada nodeA berjaya mendaftarkan dirinya menggunakan global:register_name(my_service, self()).

Apakah yang berlaku jika proses pada nodeB kemudiannya cuba memanggil global:register_name(my_service, self())?

Nama Global: Direktori Teragih

Dalam pelajaran ini, anda telah mempelajari tentang pendaftaran proses global menggunakan modul global Erlang:

  • Modul ini menyediakan cara untuk menetapkan nama unik kepada proses yang boleh ditemui merentasi seluruh kelompok Erlang teragih.
  • global:register_name(Name, Pid) menjadikan sesuatu proses boleh dicapai secara global.
  • global:whereis_name(Name) membolehkan mana-mana proses pada mana-mana nod yang bersambung mencari PID yang dikaitkan dengan nama global.
  • Modul global mengendalikan keunikan nama dan menyahdaftar proses secara automatik apabila proses tersebut ditamatkan, lalu memudahkan pengurusan proses teragih.

Nama global merupakan asas penting untuk membina perkhidmatan yang kukuh, tahan terhadap kegagalan dan mudah ditemui dalam aplikasi Erlang teragih.

Percuma untuk bermula

Pelajari Erlang dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
12
Pelajaran
48

Soalan Lazim

Adakah pelajaran “Pendaftaran Proses Global” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP, termasuk “Pendaftaran Proses Global”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pendaftaran Proses Global”?

Urus nama proses global dan temui proses merentas gugusan Erlang teragih untuk operasi yang diselaraskan Anda berlatih Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pendaftaran Proses Global” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP ini?

Ya. Setiap pelajaran Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Komunikasi dan Persediaan Nod
  2. Panggilan Prosedur Jauh (RPC)
  3. Pendaftaran Proses Global
  4. Keselamatan Pengagihan dan Kuki
← Kembali ke Pengaturcaraan Sistem Teragih dan Tahan terhadap Kegagalan dengan Erlang OTP