Mengoperasikan bridge
Catatan operator untuk menjalankan bridge dan ring di belakangnya: muat sebuah rencana, selamat dari restart, jaga kontribusi tetap mengalir, dan jauhkan mesinnya dari internet.
Gateway (titik masuk publik) dan bridge (wajah mesin) adalah dua layanan berumur panjang yang dijaga tetap sehat oleh operator, dengan agen-agen p4 dan stage server mereka di belakangnya. Mesinnya sama sekali tak berbicara autentikasi — ia mengasumsikan mesin-mesin yang bisa saling menjangkau memang dimaksudkan begitu — sehingga semua yang publik memusat pada gateway, dan bridge dijangkau lewat terowongan alih-alih dipublikasikan.
Memuat
Sebuah rencana, dan angka yang menaunginya
- Penempatan adalah rencana yang Anda tulis, bukan permintaan yang Anda ajukan: bridge menjawab
409kepada siapa pun yang memintanya melayani. Hasilkan rencananya, jalankan uji-kering, lalu muat dengan--confirm. - Load generation ditulis ke disk sebelum perintah pertama berangkat. Ia dipilih oleh pemuat, diperiksa untuk kesetaraan persis pada setiap sesi dan saat unload, dan tak tercatat di mana pun pada mesin-mesinnya — hilangkan angka itu dan model yang sudah termuat bahkan tak bisa diturunkan.
- Generation node adalah angka yang sama itu. Muat sebuah ring dengan dua angka berbeda dan ia melayani persis satu permintaan sebelum kepalanya berhenti; sesi berikutnya menggantung setengah-termuat. Pakai nilai baru tiap pemuatan, atau registrasi yang ditinggalkan percobaan gagal akan bertabrakan dengannya.
- Agen menolak memuat tanpa jurnal operasionalnya. Itu adalah catatan penerimaan yang dibutuhkan pemuatan aman-diulang, bukan flag debug.
Selamat dari restart
Apa yang kembali dan apa yang tidak
- Restart agen menjatuhkan node-nya. Stage server hanya ada saat runtime; modelnya harus dimuat lagi dari rencana. Itu prosedur pemulihannya, bukan kegagalan.
- Gateway tak akan memuat ulang untuk Anda. Watchdog ring-nya menyadari sebuah model berhenti melayani, belajar dari
409bridge bahwa penempatan bersifat eksternal, menyatakannya sekali, lalu berhenti bertanya. - Penghitung kontribusi hidup di memori bridge. Gateway mem-poll setiap 30 dtk dan meng-delta-kredit; sebuah restart hanya menghilangkan apa yang belum sempat di-poll, dan gateway mengatur ulang basis alih-alih membayar ganda saat sebuah penghitung mundur.
Kunci rapat
Mesinnya tidak menghadap internet
- Ikat bridge ke loopback dan beri ia service token. Tanpa token itu ia tak mengautentikasi siapa pun, dan apa pun yang menjangkaunya bisa menjalankan ring secara cuma-cuma — ia menyatakannya saat start alih-alih membiarkan Anda menemukannya belakangan.
- Agen mengiklankan alamat yang ditelepon agen lain. Pakai jaringan tercepat yang dibagi host-host itu, jangan pernah loopback antar-host, dan jauhkan jaringan itu dari internet publik.
- Jika sesuatu harus berada di IP publik, ingat bahwa port terbit Docker di-DNAT sebelum rantai INPUT, jadi aturan pada
dporttakkan cocok. Filter di rantaiDOCKER-USERmemakai port tujuan asli conntrack (--ctorigdstport), dan persistenkan dengan systemd oneshot yang diurutkanAfter=docker.service.
Jebakan
Dua yang memakan waktu sungguhan
- Dompet operator yang belum disetel terbaca sebagai nol perolehan. Gateway melewati setiap baris kontribusi tanpa pemilik dan tak mencatat apa pun. Node-nya tampak menganggur padahal sedang melayani.
- `pkill` mencocokkan baris perintahnya sendiri.
ssh host 'pkill -f server.js; ...'membunuh shell yang menjalankannya. Taruh polanya di sebuah berkas skrip alih-alih di perintah jarak jauh, pakai kelas karakter (server[.]js), dan ingat bahwa proses yang dijalankan sebagainode server.jspolos tak membawa path untuk dicocokkan — temukan lewat port dengarnya saja.