AWS Amazon Cloud Partner: Mendedahkan Permainan Lanjutan AWS CloudFront: Gunakan Edge @ Lambda untuk mencapai arah yang disesuaikan di simpul tepi
Rakan-rakan yang telah bermain e-dagang rentas sempadan, stesen bebas di luar negara atau aplikasi luar negara dengan lalu lintas yang besar, betul
Amazon CloudFront (CDN global AWS)
Pasti tidak asing. Biasanya semua orang menggunakannya sebagai "perisai cache statik" yang besar untuk digunakan: menyimpan gambar, mempercepat video, dan menyekat serangan DDoS yang berniat jahat.
Tetapi jika pemahaman anda tentang CloudFront hanya tinggal di "cache statik", itu benar-benar ganas.
Mari kita bincangkan permainan tegar lanjutan hari ini:
Lambda @ Edge
。 Ringkasnya, ia membolehkan anda "melancarkan" kod tersuai (Node.js atau Python) secara langsung ke ratusan nod tepi CDN di seluruh dunia. Sebelum permintaan sampai ke pelayan laman web sumber anda, pada simpul CDN yang paling dekat dengan pengguna, kod tersebut telah dilaksanakan dan pengalihan, pengalihan atau pengubahsuaian kandungan yang disesuaikan telah selesai.
Ini bukan sahaja dapat membantu pelayan laman web sumber anda berkongsi 90% tekanan logik perniagaan, tetapi juga memampatkan kelewatan tindak balas pengguna global secara melampau. Jangan bercakap omong kosong, hanya mulakan keseluruhan.
Peringkat pertama: 4 masa pencetus untuk memahami Lambda @ Edge
Untuk bermain helah di simpul tepi, anda mesti ingat rantai permintaan lengkap CloudFront. Permintaan dihantar dari telefon bimbit pengguna untuk mendapatkan data, dan jumlahnya akan berlalu
4 tahap
。 Anda boleh memasukkan kod Lambda anda dengan tepat di mana-mana tahap:
Viewer Request (permintaan penonton): Pengguna hanya menghantar permintaan ke nod CDN. Pada masa ini, CDN belum memeriksa sama ada ia mempunyai cache. Kod ini paling sesuai untuk dimasukkan ke sini: pengalihan ujian A/B, menyekat IP jahat tertentu, dan mengalihkan URL lama.
Origin Request (permintaan stesen sumber): Node CDN memeriksa dan mendapati bahawa tidak ada cache, jadi saya bersedia menggigit peluru dan pergi ke pelayan stesen sumber anda untuk mendapatkan data. Masukkan kod di sini sesuai untuk dilakukan: ubah jalur kembali ke sumber secara dinamik, dan pindahkan permintaan ke stesen sumber yang berbeza mengikut peranti pengguna (telefon bimbit/komputer).
Origin Response (respons stesen sumber): Pelayan stesen sumber telah mengeluarkan data ke nod CDN dan siap disimpan di dalam cache. Masukkan kod di sini sesuai untuk dilakukan: membersihkan atau menambah kepala tindak balas HTTP tertentu, suntikan dasar keselamatan.
Respons Viewer (respons khalayak): Node CDN siap mengembalikan data secara rasmi ke penyemak imbas pengguna. Masukkan kod di sini sesuai untuk dilakukan: suntikan data pecahan yang diperibadikan secara dinamik yang tidak sesuai untuk cache.
Tahap kedua: latihan praktikal-penggunaan skrip tepi untuk mencapai pengalihan ujian A/B pintar
Cakap sahaja tanpa tindakan hanyalah kepura-puraan. Kami secara langsung mengembalikan senario lanjutan peringkat perusahaan: bahagian depan syarikat telah mengeluarkan ciri baru dan perlu dilakukan
Ujian A/B
。 Kami berharap pengguna di seluruh dunia dapat mengakses
[Ht
Tps: // yourcompan
Y.com/index.html]
ht
Tps: // yourcompany.com/index.html)
Masa:
50% pengguna tinggal di halaman lama.
50% pengguna secara senyap-senyap ditarik ke halaman baru index_v2.html.
Keperluan yang sukar: URL bar alamat penyemak imbas pengguna tidak dapat diubah dalam keseluruhan proses, dan pelayan stesen sumber tidak dapat terlibat dalam penilaian, semuanya dilakukan di tepi CDN.
Permintaan ini paling sesuai untuk pengelasan Lambda
Viewer Request (Permintaan penonton)
Tahap.
Langkah pertama: dalam
Us-east-1
Kawasan menulis fungsi Lambda
Iron Law memberi amaran: Tidak kira di mana perniagaan anda berada di dunia, Lambda @ Edge mesti dibuat di kawasan "kami-timur-1", jika tidak, ia tidak dapat digunakan ke simpul CDN global.
Log masuk ke konsol AWS, beralih ke us-east-1, dan buat fungsi Lambda baru.
Bahasa berjalan memilih Node.js (fungsi tepi memerlukan kelajuan pelaksanaan yang sangat tinggi, Node.js adalah pilihan pertama).
Dari segi kebenaran, subjek perkhidmatan edgelambda.amazonaws.com mesti dibenarkan memanggil fungsi dalam peranan pelaksanaan.
Tulis kod logik perubahan sihir teras berikut:
Klik Deploy untuk menyimpan.
Peringkat ketiga: "melancarkan" kod ke nod tepi global
Setelah kod selesai, bagaimana anda membiarkannya pergi ke simpul CDN global untuk berjaga-jaga?
Di sudut kanan atas halaman fungsi Lambda, klik "Tindakan"-> "Deploy to Lambda @ Edge".
Konfigurasikan parameter penyebaran: Distribution: Pilih ID contoh CloudFront anda yang ada. Cache Behavior: Pilih tingkah laku cache tertentu (seperti lalai * atau untuk/index.html). CloudFront Event: Tidak teragak-agak untuk memilih Viewer Request.
Periksa tetingkap pop timbul pengesahan dan klik untuk menyebarkan.
Pada masa ini, AWS akan memulakan program pengedaran automatik di awan, menyalin dan menyegerakkan puluhan baris kod Node.js anda ke beratus-ratus nod tepi CDN di seluruh dunia dalam beberapa minit.
Tahap keempat: pengesahan ujian dan sejarah permainan tepi
Setelah penyebaran selesai, anda menggunakan rangkaian di seluruh dunia untuk menyegarkan laman web anda dengan liar. Anda akan mendapati bahawa bar alamat akan sentiasa dipaparkan
indeks.html
, Tetapi skrin beralih secara rawak antara versi lama dan versi baru. Log pelayan stesen sumber bersih, bahkan tidak mengetahui bahawa ujian A/B telah berlaku, dan semua tekanan diselesaikan oleh nod CDN di bahagian depan.
Tetapi sebelum anda teruja untuk menyediakan semua perniagaan anda dengan Lambda @ Edge
Sebelum ini, kita mesti terlebih dahulu memahami sekatan kejam ini yang disebabkan oleh "pelaksanaan tepi", jika tidak, keseluruhan CDN akan runtuh jika anda tidak berhati-hati:
1. "Badan" dan had masa yang ketat
Untuk mendapatkan kelajuan tindak balas yang melampau, sumber yang ditinggalkan oleh simpul tepi sangat pelit:
Sekiranya anda menambahkan kod pada tahap Viewer Request/Response, ukuran pakej kod anda tidak boleh melebihi 1MB, masa tamat pelaksanaan tidak boleh melebihi 5 saat, dan memori yang dapat digunakan hanya 128MB.
Jangan berharap untuk menulis model pembelajaran mendalam yang kompleks di simpul tepi atau menyambung ke pangkalan data latensi tinggi jarak jauh tradisional. Prinsip kod tepi adalah: seberapa pendek sesingkat mungkin, seberapa cepat boleh.
2. Menghilangkan sambungan langsung ke pangkalan data pengeluaran (akan melambatkan kelajuan rangkaian)
Sekiranya Lambda @ Edge anda mesti menyambung ke pangkalan data MySQL fizikal di Beijing atau Oregon untuk memeriksa maklumat pengguna setiap kali pengguna meminta, kelebihan pecutan yang dibawa oleh CDN akan dihapuskan oleh kelewatan rangkaian transnasional yang tinggi.
Pendekatan yang betul: Sekiranya anda perlu membaca dan menulis data, sila gunakan Amazon DynamoDB Global Tables (pangkalan data NoSQL diedarkan secara global), atau gunakan CloudFront KeyValueStore (KVS) yang terhad tetapi lebih pantas.
3. Perhatikan dompet anda
Lambda @ Edge mengira wang dengan "jumlah permintaan" dan "masa pelaksanaan (tahap milisaat)". Sekiranya laman web anda mempunyai ratusan juta lalu lintas PV setiap hari, dan setiap lalu lintas mesti mencetuskan skrip Viewer Request yang rumit, maka bil Lambda pada akhir bulan mungkin menyakitkan bagi anda.
Trik penjimatan wang: Sekiranya anda hanya melakukan pengalihan HTTP yang mudah, tulis semula jalan mengikut kod negara, atau tambahkan kepala tindak balas keselamatan (seperti anti-rampasan HSTS), gunakan CloudFront Functions terlebih dahulu. Ini adalah versi Lambda @ Edge yang berprofil rendah dan ringan. Kelajuan pelaksanaannya adalah sub-detik. Kosnya hanya sebahagian kecil dari Lambda @ Edge, dan tidak perlu digunakan dalam lingkaran kami-timur-1.
Ringkasan
Mengangkat tabir permainan lanjutan, inti dari Lambda @ Edge adalah meletakkan"
Kuasa pengkomputeran di hadapan
". Dengan melucutkan logik ujian A/B, pemeriksaan pautan anti-pencurian, dan pengalihan adaptif mudah alih dari pelayan terpusat dan meletakkannya di simpul tepi pengedaran global, anda bukan sahaja memperoleh garis pertahanan depan yang tidak dapat dihancurkan dan tidak fleksibel, tetapi juga Pertukaran kos seni bina terendah untuk pengalaman lancar pengguna global.

