Tratopedia
ES
Tetapan

Saiz teks

Tema

Kontras tinggi

Versi

v1.81.0

Keluaran yang menjadi asas halaman ini dibina. Itulah versi yang disimpan oleh service worker.

Infrastruktur web · Kejuruteraan perisian · Keselamatan maklumat · Taklimat kejuruteraanTratopedia · 16 Ogos 2026

Cloudflare memindahkan cdnjs ke platform pembangunnya sendiri

Sembilan bilion permintaan sehari, dipindahkan tanpa membina semula satu fail pun

Pada 23 Jun 2026 cdnjs mula beroperasi secara eksklusif di atas Platform Pembangun Cloudflare, dan pada 30 Julai Cloudflare menerbitkan kisahnya. Pemindahan itu tajuk beritanya; pengunduran itu pengajarannya. Satu percubaan terdahulu memproses semula katalog lama dan terpaksa ditinggalkan, kerana alat pemampatan tidak menghasilkan keputusan yang sama antara versi dan setiap fail yang dijana semula membawa cincangan integriti yang berbeza — yang, bagi sesiapa yang telah menetapkannya, bukan satu perbezaan tetapi satu halaman kosong.

  • 23 Jun 2026eksklusif di platform itu; didedahkan 37 hari kemudian
  • 108,000/spermintaan sesaat, kira-kira sembilan bilion sehari
  • 98.6%kadar cache hit — masih kira-kira 126 juta permintaan sehari melepasinya
  • 1.1 TBcermin git yang GitHub tidak lagi mampu menjana muat turunnya
KedudukanApa yang didakwa
BerdokumenPelayar yang diberi integrity="sha384-…" akan mencincang apa yang diterimanya dan, jika tidak sepadan, enggan memuatkan sumber itu dan memulangkan ralat rangkaian. Tiada mod terjejas. Inilah sebabnya fail yang dijana semula memutuskan perkhidmatan, bukan sekadar berbeza rupa.
Disahkan oleh pengendali, tidak boleh disahkan di siniTarikh peralihan; 108,000 permintaan sesaat dan sembilan bilion sehari; lebih 330 pusat data; kadar cache hit 98.6%; digunakan pada kira-kira 12% daripada semua laman web dan 48.3% pasaran CDN JavaScript. Setiap satu ialah Cloudflare melaporkan tentang Cloudflare, tanpa kaedah dan tanpa atribusi.
Disahkan, dan luar biasa terus terangSatu percubaan pemindahan terdahulu telah diundurkan. Memproses semula pakej lama menghasilkan fail yang betul tetapi tidak sama bait demi bait, jadi cincangan integritinya berubah. Katalog itu kemudian disalin dari KV ke R2 seadanya.
Didakwa, tanpa kuantitiMenyingkirkan saluran lama itu “menutup semua kerentanan cdnjs yang dibuka baru-baru ini”. Tiada bilangan, tiada pengenal, tiada tahap keterukan, tiada tarikh — dalam tulisan yang selainnya tepat hingga ke digit.
Didakwa, dan dilemahkan dalam tulisan yang samaSetiap fail di cdnjs membawa cincangan SRI — dinyatakan tiga ayat sebelum pengakuan bahawa Cloudflare masih berusaha memastikan cincangan yang tersimpan sepadan dengan kenyataan, kerana pepijat sistem lama. Kedua-dua ayat ada dalam tulisan itu; membawa satu tanpa yang lain ialah salah lapor.

Bagaimana ia sampai ke sini lima belas tahun, dan satu langkah yang tidak dapat ditarikhkan

  1. 2011Dibina sebagai cermin komuniti. Ryan Kirkman dan Thomas Davis memulakan cdnjs ketika npm baru berusia setahun dan “letak sahaja tag <script>” ialah cara web menghantar JavaScript. Cloudflare mula menghosnya secara percuma beberapa bulan kemudian.
  2. 2019Cloudflare mengambil alih penyelenggaraan projek itu, bukan sekadar hosnya.
  3. 2020Penyampaian berpindah; penerbitan tidak. Fail mula disajikan dari Workers dan KV dengan asal bare-metal di belakangnya, dan setiap aset dimampatkan awal dengan Brotli dan gzip. Saluran yang memerhati npm dan GitHub kekal di Google Cloud, kerana Workflows, Queues, Durable Objects, R2 dan Containers belum wujud.
  4. Tanpa tarikhPercubaan yang diundurkan. Pakej lama diproses semula dan ditulis terus ke R2; hasilnya tidak sepadan bait demi bait dengan apa yang disajikan KV, jadi cincangan integritinya berbeza dan perubahan itu dibatalkan. Tulisan itu langsung tidak memberi tarikh, sebab itu ia diletakkan di sini dan bukan mengikut urutan — dan ia perkara paling berguna dalam keseluruhan tulisan.
  5. Sebelum Jun 2026Dua siling platform dinaikkan, bukan dielak. Subpermintaan Workers naik daripada 1,000 kepada 10 juta setiap panggilan pada pelan berbayar; langkah Workflow daripada 1,024 kepada 10,000, boleh ditetapkan sehingga 25,000.
  6. 23 Jun 2026cdnjs beroperasi secara eksklusif di Platform Pembangun. R2 menjadi satu-satunya sumber kebenaran bagi kandungan fail; KV menyimpan metadata sahaja.
  7. 30 Julai 2026Kisahnya diterbitkan, 37 hari selepas peralihan itu.

Satu langkah tiada tarikh, dan itulah yang penting

Segala yang lain di sini bertarikh sehingga hari. Percubaan yang diundurkan itu langsung tiada tarikh — tiada bulan, tiada tahun — jadi ia tidak boleh diletakkan dalam urutan secara jujur. Ia disenaraikan sebagai tanpa tarikh, bukan diteka.

Apa yang dihujahkan Cloudflare makan masakan sendiri, dan ayat yang dituju oleh semuanya

Perkataan yang digunakan oleh tulisan itu sendiri ialah dogfooding, dan hujahnya ialah satu silogisme: cdnjs amat besar, cdnjs kini berjalan di atas blok binaan yang sama yang boleh disewa sesiapa sahaja, maka blok binaan itu mampu menampung apa sahaja yang anda bina. Ayat penutupnya menyebut tepat begitu — “ia berkemungkinan mampu menjalankan apa sahaja yang anda bina”. Ada baiknya kedua-dua bahagian itu diasingkan. Buktinya nyata: dua siling platform dinaikkan kerana cdnjs melanggarnya, dan kenaikan itu terpakai kepada setiap pelanggan berbayar, bukan kepada cdnjs sahaja. Kesimpulannya pula ialah jualan, dan tulisan itu tidak berpura-pura sebaliknya. Yang menarik, Cloudflare turut menyatakan dengan jelas bahawa ini bukan masalah prestasi. “Kami tidak berpindah kerana cdnjs perlahan. Kami berpindah kerana kami mahu terus memperbaikinya.” Seni bina lama itu diberi kredit kerana kadar cache hit 98%, berbilion permintaan, dan tiada gangguan. Rungutannya ialah mengubah apa-apa bermakna menyelaraskan pengerahan merentas GCP Functions, sebuah mesin maya dan Cloudflare — dan apabila sesuatu gagal separuh jalan, tiada apa pun dalam sistem itu tahu. Satu versi boleh menulis ke KV, gagal sampai ke repositori GitHub tanpa bunyi, dan disajikan dengan baik selama berminggu-minggu sehingga seseorang perasan kedua-dua stor telah menyimpang. Tiada amaran untuknya, dan tulisan itu jelas tentang sebabnya: tiada komponen yang tahu keadaan keseluruhan saluran itu.

  • 26Cloud Function semata-mata untuk memeriksa npm — satu bagi setiap huruf abjad, masing-masing dengan pengerahan dan lognya sendiri.
  • 274entri .gitignore yang disusun dengan tangan untuk menyekat keluaran rosak atau berversi ganjil — ungkapan tulisan itu sendiri ialah “tanah perkuburan berdokumen”.
  • 10,000×kenaikan siling subpermintaan Workers, daripada 1,000 kepada 10 juta — satu perubahan platform, bukan perubahan cdnjs.

Mekanisme yang tulisan itu anggap anda tahu mengapa fail yang dijana semula ialah halaman kosong, bukan satu perbezaan

  • Integriti subsumber

    Pelayar menolak, bukan menurunkan taraf

    • Sesebuah halaman boleh menetapkan cincangan: <script integrity="sha384-…">.
    • Pelayar mencincang apa yang tiba dan membandingkannya. Jika tidak sepadan ia memulangkan ralat rangkaian dan skrip itu tidak pernah berjalan.
    • Sumber: MDN. Inilah keseluruhan sebab percubaan pemindahan pertama terpaksa dibatalkan.
  • Kedeterminan

    Keluaran pemampat tidak stabil antara versi

    • Menjalankan semula alat yang sama ke atas input yang sama beberapa tahun kemudian memberi keluaran yang betul tetapi tidak serupa.
    • Bait yang berbeza bermakna cincangan yang berbeza, dan cincangan yang berbeza bermakna setiap halaman yang menetapkan yang lama akan rosak.
    • Pengajaran umumnya: stor beralamatkan kandungan tidak boleh dibina semula. Ia hanya boleh disalin.
  • Apa yang masih tidak diketahui

    Berapa banyak cincangan tersimpan yang kini salah

    • Cloudflare berkata ia masih berusaha menjadikan cincangan tersimpan sepadan dengan kenyataan, “kerana pepijat sistem lama”.
    • Tiada skala diberikan. Cincangan tersimpan yang salah pada fail yang ditetapkan seseorang bermakna ada halaman rosak di suatu tempat.
    • Inilah perkara tidak diketahui yang paling besar kesannya pada halaman ini.
LamaBaharuApa yang sebenarnya berubah
Workers KV + sebuah repositori GitHubR2 sebagai satu-satunya sumber kebenaranSebelum ini tiada stor yang berwibawa, dan apabila keduanya menyimpang tiada cara bersih untuk menyelaraskannya. R2 juga tiada had saiz praktikal, jadi peta sumber dan pakej fon yang tidak muat dalam KV kini duduk bersama yang lain.
Rantaian Cloud Function yang dicetuskan oleh peristiwa baldiWorkflows, dengan Queues dan pembilang Durable ObjectStor sebelum ini merangkap barisan mesej — tiada barisan surat mati, tiada penglihatan terhadap timbunan, tiada ulangan bersih. Workflows menyimpan keadaan setiap langkah, jadi tamat masa akan menyambung dan bukan memulakan semula.
Dua sistem log tanpa kunci sepunyaSatu platform, satu jejakKegagalan yang hendak ditangkap bukan gangguan tetapi kejayaan separuh: satu versi yang menulis ke satu stor, terlepas yang lain tanpa bunyi, dan disajikan dengan baik selama berminggu-minggu.
Asal bare-metal di belakang tepi rangkaiancache → R2 → DigitalOcean SpacesDigitalOcean telah menaja laman cdnjs selama bertahun-tahun dan kini turut mencerminkan storannya: dari segi seni bina satu salinan pemulihan bencana, dari segi operasi satu sandaran langsung. Asal yang dihos Cloudflare masih berada dalam rantaian sehingga pengisian semula daripada GitHub selesai.

Apa yang boleh diambil daripadanya satu pengajaran yang boleh dipindahkan, dan tiga perkara yang perlu dipegang longgar

Salin baitnya; jangan bina semula

Inilah bahagian yang boleh dipindahkan kepada sistem yang langsung tiada kaitan dengan CDN. Jika sesiapa di hilir telah menetapkan cincangan keluaran anda, keluaran itu bukan lagi sesuatu yang boleh anda jana semula — rantaian alat akan berubah, baitnya akan berbeza, dan betul sahaja tidak memadai. Cloudflare mempelajarinya dengan mencuba dan mengundur, lalu menerbitkannya.

Selesai dalam erti tajuknya, belum selesai dalam satu perkara yang dinyatakan

cdnjs memang berjalan di Platform Pembangun. Sebuah asal yang dihos Cloudflare juga masih berada dalam rantaian penyampaian sehingga pengisian semula daripada GitHub sampai ke R2. Tulisan itu sendiri menyatakannya, dan rencana yang melicinkannya akan melaporkan tajuk dan bukan tulisannya.

Pegang angka-angka itu longgar, dan dakwaan keselamatan itu paling longgar

Setiap angka operasi di sini ialah Cloudflare melaporkan tentang Cloudflare, tanpa kaedah dan tanpa atribusi — itu keadaan biasa bagi tulisan kejuruteraan, bukan skandal. Tetapi “menutup semua kerentanan cdnjs yang dibuka baru-baru ini” tidak membawa bilangan, pengenal mahupun tahap keterukan, dalam tulisan yang selainnya tepat hingga ke digit. Ambil kenaikan 10,000× subpermintaan itu sebagai bukti yang kukuh; ambil ayat itu sebagai perkara paling lemah di dalamnya.

Simona Badoiu, “Dogfooding at scale: migrating cdnjs to Cloudflare's Developer Platform”, The Cloudflare Blog, 30 Julai 2026 · MDN Web Docs, “Subresource Integrity”, Mozilla, dicapai 16 Ogos 2026 · Tulisan Cloudflare itu dibekalkan dalam bentuk PDF; blog.cloudflare.com tidak boleh dicapai dari sesi ini, dan tiada laporan bebas tentang pemindahan itu yang dapat diperoleh.