penanda aras nftlb dan kunci prestasi

DIPOS oleh Zevenet | 28 Jun, 2018

penanda aras

Penanda aras laten, bertarikh Jun 2018, menunjukkan peningkatan prestasi yang penting dalam menggunakan nftables sebagai laluan data dan bukannya iptables.

Memandangkan persekitaran testbed dari pelanggan 2 yang melaksanakan alat tekanan beban HTTP, 1 load balancer dan backend 3 dengan terminator HTTP yang memberikan respons kira-kira bait 210, kami memperoleh tanda aras berikut Aliran HTTP sesaat:

iptables DNAT		256.864,07 RPS / cpu
iptables SNAT		262.088,94 RPS / cpu

nftables DNAT		560.976,44 RPS / cpu
nftables SNAT		608.941,57 RPS / cpu
nftables DSR		7.302.517,31 RPS / cpu

Angka-angka di atas ditunjukkan dari segi CPU fizikal kerana skalabiliti menambahkan teras hampir linear. Walaupun tanda aras ini dilakukan dengan hanya sandaran 3, Prestasi iptables akan turun dengan ketara sambil menambah lebih banyak backend, kerana ia menyiratkan lebih banyak peraturan berurutan.

Penanda aras tersebut dilakukan dengan retpoline yang dilumpuhkan (tidak ada pengurangan Spectre / Meltdown), tetapi setelah mereka mengaktifkan hukuman prestasi yang dikesan dalam kes NAT dengan conntrack diaktifkan untuk kes iptables dan nftables jauh lebih buruk untuk yang pertama:

iptables: 40.77% CPU penalty
nftables: 17.27% CPU penalty

Kunci prestasi

Penalti retpolin dijelaskan kerana penggunaan lebih banyak panggilan tidak langsung dalam iptables daripada yang ada. Tetapi, terdapat beberapa kunci prestasi yang akan dijelaskan di bawah.

Pengoptimuman peraturan

Kunci prestasi utama ialah pengoptimuman peraturan. Ia sudah diketahui dalam iptables bahawa penggunaan ipset meningkatkan prestasi kerana ia mengurangkan pemprosesan peraturan berurutan.

Di samping itu, walaupun ia boleh diperluaskan untuk digunakan untuk tujuan lain, kami menetapkan peraturan asas bagi setiap perkhidmatan maya menggunakan bahasa ekspresif yang secara asal menyokong penggunaan set dan peta. Sila lihat di bawah peraturan yang dihasilkan untuk a perkhidmatan tcp maya bernama vs01 dengan backend 2:

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.1.10, 1 : 192.168.1.11 }
    }
}

Sebaik sahaja kita perlu menambah backend baru, hanya menaikkan semula rantaian yang berkaitan kepada perkhidmatan maya tanpa kemasukan peraturan baru dan tanpa menjejaskan seluruh perkhidmatan maya yang lain.

    chain vs01 {
        dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

Kemudian, jika perkhidmatan maya yang baru vs02 perlu dibuat, maka set peraturan menjadi seperti yang ditunjukkan di bawah ini, tanpa penambahan peraturan baru atau mempengaruhi perkhidmatan maya yang lain:

table ip nftlb {
    map tcp-services {
        type ipv4_addr . inet_service : verdict
        elements = { 192.168.0.100 . http : goto vs01,
                     192.168.0.102 . https : goto vs02 }
    }

    chain prerouting {
        type nat hook prerouting priority 0; policy accept;
        ip daddr . tcp dport vmap @tcp-services
    }

    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
    }

    chain vs01 {
        dnat to jhash ip saddr mod 3 map { 0 : 192.168.1.10, 1 : 192.168.1.11, 2 : 192.168.1.12 }
    }

    chain vs02 {
        dnat to jhash ip saddr mod 2 map { 0 : 192.168.2.10, 1 : 192.168.2.11 }
    }
}

Cangkuk awal

nftables membenarkan penggunaan awal memasangkan cangkuk yang digunakan dalam nftlb semasa senario DSR.

Juga, cangkuk awal ini boleh digunakan untuk tujuan penapisan yang meningkatkan prestasi dalam kes-kes menjatuhkan paket. Ini ditunjukkan di bawah dengan peringkat awal iptables dan kes-kes nftables dalam paket sesaat:

iptables prerouting raw drop: 38.949.054,35 PPS
nftables ingress drop: 45.743.628,64 PPS

Teknik pecutan

Terdapat lebih banyak ruang untuk pengoptimuman, sememangnya, kerana nftables sudah menyokong laluan cepat dan teknik ringan yang boleh digunakan untuk merompak paket. Sebagai contohnya ialah:

Flowtables. Laluan laluan konkrit untuk mendelegasikan sambungan yang telah ditubuhkan pada tahap kemasukan tanpa melewati keseluruhan laluan perlahan. Maklumat lanjut di sini.

NAT stateless. Untuk beberapa kes pengimbangan beban, NAT tanpa statik boleh dilakukan tanpa pengesanan sambungan dan dari peringkat ingress untuk mendapatkan semua prestasi yang digunakan untuk senario NAT.

Berkongsi pada:

Dokumentasi di bawah syarat-syarat Lesen Dokumentasi Bebas GNU.

Adakah artikel ini berguna?

Artikel yang berkaitan