Rumah > tajuk utama > Perbincangan mendalam tentang penyelesaian dan penyelesaian untuk akses 'konkurensi tinggi dan trafik besar'.

Perbincangan mendalam tentang penyelesaian dan penyelesaian untuk akses 'konkurensi tinggi dan trafik besar'.

青灯夜游
Lepaskan: 2022-05-11 16:28:35
ke hadapan
4730 orang telah melayarinya

Bagaimana untuk menyelesaikan masalah konkurensi yang tinggi dan trafik yang besar? Artikel berikut akan berkongsi dengan anda idea dan penyelesaian untuk keselarasan tinggi dan web trafik yang besar, saya harap ia akan membantu anda!

Kursus video berkaitan yang disyorkan: " Puluhan juta penyelesaian serentak data (amalan teori) "

Berkongsi beberapa soalan temuduga serentak tinggi: 15 soalan temu bual PHP tentang konkurensi tinggi (ringkasan)

Konsep berkaitan seni bina web konkurensi tinggi


  • QPS: Every The bilangan permintaan atau pertanyaan sesaat, dalam medan Internet, merujuk kepada bilangan permintaan yang sepadan (permintaan http) sesaat.

  • Puncak QPS sesaat: (80% daripada jumlah PV) / (20% saat dalam 6 jam), 80% daripada lawatan tertumpu pada 20% daripada masa

  • Bilangan sambungan serentak: bilangan permintaan yang diproses oleh sistem secara serentak

  • Troughput: bilangan permintaan yang diproses setiap unit masa (biasanya ditentukan oleh QPS dan keselarasan).

  • Masa respons: Masa yang diambil dari permintaan kepada respons. Contohnya, 100ms diperlukan untuk sistem memproses permintaan HTTP 100ms ini ialah masa tindak balas sistem.

  • PV: Paparan Halaman ialah paparan halaman dan klik, bilangan halaman yang dilawati oleh pelawat dalam masa 24 jam.

  • UV: Pelawat Unique (UniQue Visitor), iaitu, pelawat yang sama melawat tapak web beberapa kali dalam julat masa tertentu dan hanya dikira sebagai 1 pelawat unik.

  • Lebar Jalur: Pengiraan saiz lebar jalur memfokuskan pada dua penunjuk, trafik puncak dan saiz halaman purata.

  • Jalur lebar tapak web harian = PV/masa statistik (ditukar kepada saat dalam satu hari) * saiz halaman purata (unit KB) * 8.

  • Ujian tekanan: uji konkurensi maksimum, uji QPS maksimum Perlu diingatkan bahawa mesin ujian serentak perlu dipisahkan daripada mesin yang diuji pelayan dalam talian Perhatikan bahawa CPU, memori, rangkaian, dll. mesin di mana ujian ab terletak dan mesin bahagian hadapan mesin yang diuji tidak melebihi 75% daripada had maksimum.

    • Keselarasan

    • Kelajuan tindak balas

    • Toleransi kesalahan

  • Alat ujian prestasi yang biasa digunakan: ab, wrk, http_load, Web Bench, Siege, Apache JMeter.

Penyelesaian keseluruhan untuk keselarasan tinggi dan web trafik yang besar


  • Pengoptimuman trafik

  • Anti-pautan panas sumber web menghalang sistem pihak ketiga daripada mencuri imej, css, js, dll. daripada menduduki trafik pelayan dan lebar jalur pelayan

  • Pengoptimuman bahagian hadapan

  • Kurangkan permintaan http: penggabungan imej, penggabungan js, penggabungan css dan pemampatan Walaupun fail mungkin lebih besar, permintaan akan dikurangkan

  • Tambah permintaan tak segerak: dapatkan data melalui antara muka panggilan ajax sebenar

  • Dayakan cache penyemak imbas dan pemampatan fail (anda juga boleh mendayakan modul pemampatan nginx)

  • pecutan cdn: selesaikan masalah lebar jalur yang tidak mencukupi, Cache data ke nod cdn, pilih nod terdekat semasa mengakses, kurangkan lebar jalur dan percepatkan akses

  • Tubuhkan pelayan gambar bebas: gambar sangat memakan io, anda boleh menggabungkan pelayan gambar dengan web Pelayan dipisahkan sepenuhnya, dan pelayan lain boleh dibezakan Jika pelayan imej dibina secara berasingan dan bukan jenis pengkomputeran, konfigurasi boleh dilaraskan dengan sewajarnya. Pelayan imej juga boleh dikelompokkan

  • Pengoptimuman bahagian pelayan

    • Pestatakan halaman: html statik halaman dinamik, mengurangkan tekanan beban pelayan, penembusan penstabilan halaman, penstabilan mempunyai masa yang berkesan

    • Pemprosesan serentak bahasa dinamik :Pemprosesan tak segerak, berbilang benang, pemprosesan baris gilir tak segerak

  • Pengoptimuman pangkalan data:

  • Cache pangkalan data: memcache , redis cache

  • pengoptimuman indeks mysql, sub-mysql pangkalan data dan jadual, operasi partition mysql, pemisahan baca-tulis replikasi master-slave mysql, pengimbangan beban mysql, siap sedia panas tuan-hamba mysql

  • Pengoptimuman pelayan web:

  • Pengimbangan beban: Anda boleh menggunakan proksi terbalik ningx untuk menggunakan pengimbangan beban, dan anda boleh menggunakan lapisan ketiga dalam lapisan rangkaian Empat lapisan lv mencapai pengimbangan beban

pengimbangan beban pelayan web


pengimbangan liabiliti

  • Empat- pengimbangan beban lapisan: Apa yang dipanggil pengimbangan beban empat lapisan ialah pengimbangan beban berasaskan port IP

  • Pengimbangan beban tujuh lapisan: Pengimbangan beban tujuh lapisan yang dipanggil ialah pengimbangan beban berdasarkan maklumat (URL)

Pelaksanaan pengimbangan beban tujuh lapisan:

Pengimbangan hutang berdasarkan maklumat lapisan aplikasi seperti URL. Proksi Ningx adalah fungsi yang sangat berkuasa Ia merealisasikan pengimbangan beban 7 lapisan Ia mempunyai fungsi yang kuat, prestasi yang sangat baik, operasi yang stabil, konfigurasi mudah dan fleksibel, dan secara automatik boleh menghapuskan bahagian belakang yang tidak normal, muat naik fail dalam mod tak segerak, menyokong pelbagai strategi pengedaran, boleh menetapkan pemberat, dan kaedah pengedaran adalah fleksibel.

strategi pengimbangan beban nginx

  • IP Hash (terbina dalam)

  • Tinjauan wajaran (terbina dalam)

  • strategi adil (sambungan)

  • cincang universal (sambungan)

  • cincang (sambungan) yang konsisten

1. IP Hash Strategy

Satu lagi strategi pengimbangan beban terbina dalam nginx, prosesnya hampir sama dengan pengundian, kecuali algoritmanya adalah sama kerana Strategi khusus telah berubah agaknya. Algoritma cincang IP ialah algoritma pengundian yang menyamar

2. Strategi pengundian berwajaran

Peruntukkan dahulu permintaan kepada mesin berat tinggi , sehingga berat mesin jatuh ke nilai yang lebih rendah daripada mesin lain, permintaan akan diedarkan ke mesin berat tinggi seterusnya Apabila semua mesin bahagian belakang turun, nginx akan segera mengosongkan bendera semua mesin ke keadaan awal. Untuk mengelakkan menyebabkan semua mesin berada dalam keadaan tamat masa

3 Strategi adil

Nilai situasi pemuatan berdasarkan masa tindak balas pelayan bahagian belakang dan pilih. beban daripadanya Mesin paling ringan digunakan untuk memunggah

Cincangan universal, strategi cincangan yang konsisten Anda boleh menggunakan pembolehubah terbina dalam nginx sebagai kunci untuk pencincangan yang konsisten gelang cincang yang konsisten dan menyokong memcache

Pengimbangan beban empat lapisan dicapai

melalui alamat destinasi dan port dalam mesej, serta kaedah pemilihan pelayan yang ditetapkan oleh peranti pengimbangan beban , tentukan pilihan terakhir pelayan dalaman

istilah berkaitan lvs:

  • DS:pelayan sasaran pelayan pengarah, iaitu memuatkan pengimbang

  • RS: Pelayan sebenar Pelayan sebenar, iaitu pelayan bahagian belakang

  • VIP: Alamat IP terus menghadap pengguna, biasanya alamat IP awam

  • DIP: Alamat IP Pelayan Pengarah terutamanya digunakan untuk komunikasi hos dalaman

  • RIP: Alamat IP Pelayan Sebenar bahagian belakang pelayan sebenar

  • CIP: IP Pelanggan

Tiga cara pengimbangan beban lvs:

NAT: Ubah suai alamat IP sasaran ke alamat IP RealServer belakang

DR: Ubah suai alamat mac sasaran kepada alamat mac RealServer belakang

TEROWONG: jarang digunakan, sering digunakan untuk pemulihan bencana jauh

Kebaikan dan Kelemahan Pengimbangan Beban Lapisan 4 dan 7

Lapisan keempat boleh membawa jumlah konkurensi yang lebih besar daripada tujuh lapisan Menggunakan

tujuh lapisan tapak besar boleh mencapai kawalan pengimbangan beban yang lebih kompleks, seperti URL, berdasarkan sesi, pemisahan dinamik dan statik, dll.

Lapisan ketujuh boleh menduduki banyak masa CPU dan carry concurrency

cdn acceleration


Apakah itu CDN?

Nod: Ia boleh difahami sebagai cermin pelayan sebenar.

Nama penuh ialah Rangkaian Penghantaran Kandungan, yang bermaksud bahawa rangkaian pengedaran kandungan mengelakkan kesesakan dan pautan di Internet yang mungkin menjejaskan kelajuan dan kestabilan penghantaran data sebanyak mungkin, menjadikan penghantaran kandungan lebih cepat dan lebih stabil .

Lapisan rangkaian maya pintar berdasarkan Internet sedia ada yang dibentuk dengan meletakkan pelayan nod di seluruh rangkaian.

Sistem cdn boleh mengubah hala permintaan pengguna ke nod perkhidmatan yang paling hampir dengan pengguna dalam masa nyata berdasarkan maklumat komprehensif seperti trafik rangkaian, sambungan ke setiap nod, keadaan beban, jarak kepada pengguna dan masa tindak balas .

Apakah kelebihan cdn?

  • 1. Pecutan cache setempat untuk meningkatkan kelajuan akses tapak korporat (terutamanya tapak dengan bilangan gambar yang banyak dan halaman statik)

  • 2. Pecutan rangkaian rentas pengendali memastikan pengguna rangkaian berbeza menerima kualiti akses yang baik

  • 3 teknologi pengimbangan

  • 4 Menjana pelayan cache jauh Cermin (cermin) pelayan Apabila pengguna jauh mengakses, baca data dari pelayan cache, kurangkan lebar jalur akses jauh, kongsi trafik rangkaian, dan mengurangkan beban pada tapak web dan fungsi lain.

  • 5. Nod CDN yang diedarkan secara meluas dan mekanisme redundansi pintar antara nod boleh menghalang pencerobohan penggodam dengan berkesan

Apakah itu prinsip kerja CDN?

Akses tradisional: Pengguna memasukkan nama domain dalam penyemak imbas untuk memulakan permintaan, menyelesaikan nama domain untuk mendapatkan alamat IP pelayan, mencari pelayan yang sepadan berdasarkan alamat IP, dan pelayan bertindak balas dan mengembalikan data.

Gunakan cdn untuk mengakses: pengguna memulakan permintaan, analisis dns pintar (menentukan lokasi geografi dan jenis rangkaian akses berdasarkan ip, memilih pelayan dengan laluan terpendek dan beban paling ringan), mendapatkan ip pelayan cache dan mengembalikan kandungan kepada Pengguna (jika terdapat satu dalam cache) memulakan permintaan ke tapak asal, mengakses keputusan kepada pengguna dan menyimpan hasil dalam pelayan cache.

Apakah senario yang boleh digunakan untuk cdn?

Pengedaran dipercepatkan sejumlah besar sumber statik dalam tapak atau aplikasi, seperti css, js, imej dan html

Cara untuk melaksanakan cdn?

  • Perkhidmatan CDN yang dilaksanakan oleh BAT dan lain-lain

  • Pengimbangan beban Lapisan 4 menggunakan LVS

  • Anda boleh menggunakan nginx, varnis, sotong, apache trafficServer untuk pengimbangan beban tujuh lapisan dan cache Gunakan sotong sebagai proksi terbalik atau nginx sebagai proksi terbalik

Tubuhkan pelayan imej bebas


Adakah kemerdekaan itu perlu?

  • 1 Kongsi beban I/O pelayan web, asingkan perkhidmatan gambar yang memakan sumber dan tingkatkan prestasi dan kestabilan pelayan

  • 2 Mampu mengoptimumkan pelayan gambar secara khusus, menyediakan penyelesaian caching disasarkan untuk perkhidmatan gambar, mengurangkan kos lebar jalur dan meningkatkan kelajuan akses

Mengapa gunakan nama domain bebas?

Sebab: Bilangan sambungan penyemak imbas serentak di bawah nama domain yang sama adalah terhad Pelanggaran had sambungan penyemak imbas tidak baik untuk caching kerana kebanyakan cache web hanya cache tanpa permintaan Kuki permintaan imej untuk gagal mencapai cache

Adakah ini masalah selepas merdeka?

  • Cara memuat naik dan menyegerakkan gambar

  • Kaedah perkongsian NPS

  • Gunakan FTP penyegerakan

Pestatikan halaman dinamik


Konsep berkaitan: Apakah pestatikan bahasa dinamik, mengapa kita harus statikkan, cara pelaksanaan pestatakan.

Pemprosesan serentak bahasa dinamik


Apakah itu proses

Proses (Proses) ialah aktiviti menjalankan program dalam komputer pada set data tertentu Ia adalah unit asas peruntukan sumber dan penjadualan dalam sistem dan asas struktur sistem pengendalian

Proses ialah "pelaksanaan "Program dalam"

Model tiga keadaan bagi keadaan proses

Dalam sistem berbilang pengaturcaraan, proses berjalan secara bergantian pada pemproses, dan keadaan sentiasa berubah.

  • Menjalankan: Apabila proses berjalan pada pemproses, ia dikatakan berada dalam keadaan berjalan. Bilangan proses dalam keadaan ini adalah kurang daripada atau sama dengan bilangan pemproses Untuk sistem pemproses tunggal, hanya terdapat satu proses dalam keadaan berjalan. Apabila tiada proses lain boleh dilaksanakan (contohnya, semua proses disekat), proses melahu sistem biasanya dilaksanakan secara automatik.

  • Sedia: Apabila sesuatu proses telah memperoleh semua sumber kecuali pemproses dan boleh dijalankan sebaik sahaja ia memperoleh pemproses, ia dikatakan berada dalam keadaan sedia. Keadaan sedia boleh disusun mengikut keutamaan berbilang. Sebagai contoh, apabila sesuatu proses memasuki keadaan sedia disebabkan kehabisan masa, ia diletakkan dalam baris gilir keutamaan rendah apabila proses memasuki keadaan sedia kerana selesai operasi I/O, ia diletakkan dalam a barisan keutamaan tinggi.

  • Menyekat: Juga dikenali sebagai keadaan menunggu atau tidur, proses sedang menunggu peristiwa tertentu berlaku (seperti meminta I/O dan menunggu I/O selesai, dsb. ) dan berhenti buat sementara waktu Ini Walaupun pemproses diperuntukkan kepada proses, ia tidak boleh berjalan, jadi proses itu dikatakan dalam keadaan tersekat.

Apakah urutan itu

Disebabkan permintaan serentak daripada pengguna, jelas OK untuk mencipta proses? untuk setiap permintaan. Ia tidak masuk akal, dari perspektif overhed sumber sistem atau kecekapan bertindak balas kepada permintaan pengguna. Oleh itu, konsep benang dalam sistem pengendalian diperkenalkan.

Benang, kadangkala dipanggil proses ringan, ialah unit terkecil aliran pelaksanaan program.

Urutan ialah entiti dalam proses dan merupakan unit asas yang dijadualkan secara bebas dan diperuntukkan oleh sistem Ulir itu sendiri tidak memiliki sumber sistem, hanya beberapa sumber yang penting untuk operasi, tetapi ia boleh tergolong dalam proses yang sama seperti Urutan lain berkongsi semua sumber yang dimiliki oleh proses tersebut.

Sebuah utas boleh mencipta dan memusnahkan utas lain, dan berbilang utas dalam proses yang sama boleh dilaksanakan secara serentak.

Benang ialah aliran kawalan berjujukan tunggal dalam atur cara. Unit pelaksanaan yang agak bebas dan boleh dijadualkan dalam proses Ia adalah unit asas untuk sistem menjadualkan dan memperuntukkan CPU secara bebas. Ia merujuk kepada unit penjadualan program yang sedang berjalan.

Benang tiga keadaan

  • Keadaan sedia: Benang mempunyai semua syarat untuk dijalankan, boleh dijalankan secara logik dan sedang menunggu pemproses.

  • Status berjalan: Benang yang menduduki pemproses sedang berjalan.

  • Keadaan menyekat: Benang sedang menunggu acara (seperti semafor) dan secara logiknya tidak boleh dilaksanakan.

Apakah itu coroutine?

Coroutine ialah urutan ringan dalam mod pengguna Penjadualan sepenuhnya di bawah pengguna kawalan. Coroutine mempunyai konteks daftar dan tindanan sendiri. Apabila jadual penyelarasan bertukar, konteks daftar dan timbunan disimpan ke tempat lain Apabila menukar kembali, konteks dan timbunan daftar yang disimpan sebelum ini dipulihkan secara langsung mengendalikan tindanan pada dasarnya tidak mempunyai overhed penukaran kernel, dan pembolehubah global boleh diakses tanpa mengunci, jadi penukaran konteks adalah sangat pantas.

Apakah perbezaan antara benang dan proses?

  • 1 Utas ialah unit pelaksanaan dalam satu proses. Mereka berkongsi ruang alamat proses itu proses mempunyai ruang alamat sendiri.

  • 2. Proses ialah unit peruntukan dan pemilikan sumber dalam proses yang sama berkongsi sumber proses.

  • 3. Benang ialah unit asas penjadualan pemproses, tetapi proses bukan

  • 4. Kedua-duanya boleh dilaksanakan secara serentak

  • 5 Setiap utas bebas mempunyai titik masuk untuk pelaksanaan program, urutan pelaksanaan berurutan dan titik keluar untuk program Walau bagaimanapun, utas tidak boleh dilaksanakan secara bebas dan mesti bergantung pada aplikasi untuk pelaksanaan.

Apakah perbezaan antara benang dan coroutine?

  • 1 Urutan boleh mempunyai berbilang coroutine dan proses juga boleh mempunyai berbilang coroutine secara berasingan

  • 2. Proses benang adalah semua mekanisme segerak, manakala coroutine adalah tak segerak

  • 3. Coroutine boleh mengekalkan keadaan panggilan terakhir, dan setiap kali proses masuk semula, ia bersamaan dengan Enter the keadaan panggilan terakhir

Apakah itu berbilang proses?

Pada masa yang sama, jika dua atau lebih proses dibenarkan berjalan dalam sistem komputer yang sama, ini bermakna berbilang proses membuka satu proses lagi dan memperuntukkan satu lagi sumber , antara -proses komunikasi menyusahkan

Apakah itu multi-threading?

Benang membahagikan proses kepada banyak kepingan Setiap keping boleh menjadi proses bebas Perbezaan daripada berbilang proses ialah hanya sumber satu proses yang digunakan dan utas boleh berkomunikasi dengannya satu sama lain.

Apakah perbezaan antara pelbagai konsep?

  • Proses tunggal benang tunggal: satu orang makan di meja

  • Proses tunggal berbilang benang: berbilang orang Makan makanan di meja

  • Berbilang proses dan benang tunggal: berbilang orang masing-masing makan makanan di meja mereka sendiri

Segerak model penyekat

Berbilang proses: Program bahagian pelayan terawal menyelesaikan masalah IO serentak melalui berbilang proses dan berbilang benang Permintaan mencipta proses, dan kemudian proses anak memasuki penyegerakan gelung Berinteraksi dengan sambungan klien dalam cara yang disekat, hantar dan terima data pemprosesan.

Langkah

  • Buat soket

  • Masukkan gelung sementara dan sekat pada proses terima operation , tunggu sambungan klien memasuki proses utama dan cipta proses anak melalui garpu di bawah model berbilang proses.

Anda boleh mencipta sub-benang dalam mod berbilang benang

Selepas sub-benang/benang berjaya dibuat, ia memasuki gelung sementara, menyekat pada recv panggilan, menunggu klien menghantar data ke pelayan

Selepas menerima data, program pelayan memprosesnya dan kemudian menggunakan hantar untuk menghantar respons kepada klien

Apabila sambungan klien ditutup, proses/benang anak keluar dan memusnahkan semua sumber. Proses/benang utama akan mengitar semula proses/benang anak ini.

Model ini sangat bergantung pada bilangan proses untuk menyelesaikan masalah konkurensi.

Memulakan sejumlah besar proses akan membawa penggunaan penjadualan proses tambahan

Model tidak menyekat tak segerak

Kini, pelbagai program pelayan IO tak segerak yang tinggi semuanya dilaksanakan berdasarkan epoll

program tidak menyekat tak segerak pemultipleksan IO menggunakan model Reaktor klasik, seperti namanya, bermaksud reaktor, dan ia tidak memproses sebarang penghantaran data dan menerima. Anda hanya boleh memantau perubahan peristiwa pemegang soket.

Model reaktor:

- add:添加一个socket到reactor
- set:修改socket对应的事件,如可读可写
- del:从reactor中移除
- callback:事件发生后回掉指定的函数
Salin selepas log masuk

nginx: Reaktor berbilang benang

swole: pekerja berbilang proses Reaktor berbilang benang

Amalan Pengaturcaraan Serentak PHP


  • sambungan swoole 1.php, selari, enjin komunikasi rangkaian berprestasi tinggi, ditulis dalam bahasa C tulen, menyediakan ketidaksegerakan bahasa PHP Pelayan berbilang benang, klien rangkaian tcp/udp tak segerak, mysql tak segerak, redis tak segerak, kolam sambungan pangkalan data, AsyncTask, baris gilir mesej, pemasa milisaat, bacaan dan penulisan fail tak segerak, pertanyaan dns tak segerak.

  • 2 Selain sokongan IO tak segerak, swoole telah mereka bentuk berbilang struktur data serentak dan mekanisme komunikasi IPC untuk mod berbilang proses PHP, yang boleh memudahkan penyelarasan berbilang benang. . Kerja pengaturcaraan

  • 3.swoole2.0 menyokong coroutine seperti bahasa Go, yang boleh menggunakan kod segerak sepenuhnya untuk melaksanakan program tak segerak

  • 4 . Baris gilir mesej

  • 5. Penyahgandingan aplikasi

  • Penerangan senario: Selepas pengguna membuat pesanan, sistem pesanan perlu memaklumkan sistem inventori .

  • Jika sistem inventori tidak boleh diakses, pengurangan pesanan akan gagal, mengakibatkan kegagalan pesanan

  • Sistem pesanan dipisahkan daripada inventori sistem<🎜 ​​>

  • Baris Gilir Rujukan

  • Selepas pengguna membuat pesanan, sistem pesanan melengkapkan pemprosesan kegigihan, menulis mesej ke baris gilir mesej, dan mengembalikan kejayaan pesanan pengguna

  • Langgan maklumat pesanan dan gunakan kaedah tarik/tolak untuk mendapatkan maklumat pesanan Sistem inventori menjalankan operasi inventori berdasarkan maklumat pesanan

  • 6. Senario aplikasi pemotongan puncak trafik: Aktiviti jualan kilat, trafik melonjak serta-merta, dan pelayan berada di bawah tekanan berat Selepas pengguna memulakan permintaan, pelayan menerimanya dan menulisnya ke baris gilir mesej. Jika panjang baris gilir mesej melebihi nilai maksimum, ralat akan dilaporkan secara langsung atau pengguna akan digesa untuk mengawal volum permintaan dan mengurangkan trafik yang tinggi

  • 7.日志处理 应用场景:解决大量日志的传输 日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志。

  • 8.消息通讯 聊天室

  • 9.常见消息队列产品 kafka,ActiveMQ,ZeroMQ,RabbitMQ,Redis等 php的异步 消息队列

  • 10.接口的并发请求 curl_multi_init

mysql缓存层的优化


1.什么是数据库缓存

mysql等一些常见的关系型数据库的数据都存储在磁盘当中,在高并发场景下,业务应用对mysql产生的增删,改,查的操作造成巨大的I/O开销和查询压力,这无疑对数据库和服务器都是一种巨大的压力,为了解决此类问题,缓存数据的概念应运而生。

  • 极大的解决数据库服务器的压力

  • 提高应用数据的响应速度

常见的缓存形式:内存缓存和文件缓存

2.为什么要使用数据库缓存

  • 缓存数据是为了让客户端很少甚至不访问数据库服务器进行数据的查询,高并发下,能最大程序地降低对数据库服务器的访问压力。

  • 用户请求-》数据查询-》连接数据库服务器并查询数据-》将数据缓存起来(html,内存,json,序列化数据)-》显示给客户端

  • 缓存方式的选择

  • 缓存场景的选择

  • 缓存数据的实时性

  • 缓存数据的稳定性

3.使用mysql查询缓存

  • 启用mysql查询缓存

  • 极大的降低cpu使用率

  • query_cache_type查询缓存类型,有0,1,2三个取值。0则不适用查询缓存。1表示始终使用查询缓存,2表示按需使用查询缓存。

query_cahce_type=1 select SQL_NO_CACHE * from my_table where condition; query_cache_type=2 select SQL_CACHE * from my_table where condition; query_cache_size
Salin selepas log masuk

默认情况下query_cache_size为0,表示为查询缓存预留的内存为0,则无法使用查询缓存 SET GLOBAL query_cache_size = 134217728; 查询缓存可以看作是SQL文本和查询结果的映射 第二次查询的SQL和第一次查询的SQL完全相同,则会使用缓 SHOW STATUS LIKE ‘Qcache_hits’查看命中次数 表的结构和数据发生改变时,查询缓存中的数据不再有效

情理缓存:

  • FLUSH QUERY CACHE;//清理查询缓存内存碎片

  • RESET QUERY CACHE;//从查询缓存中移出所有查询

  • FLUSH TABLES;//关闭所有打开的表,同时该操作将会清空查询缓存中的内容

4.使用Memcache缓存

对于大型站点,如果没有中间缓存层,当流量打入数据库层时,即便有之前的几层为我们挡住一部分流量,但是在大并发的情况下,还是会有大量请求涌入数据库层,这样对于数据库服务器的压力冲击很大,响应速度也会下降,因此添加中间缓存层很有必要。

memcache是一套分布式的高速缓存系统,由liveJournal的BrandFitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。 memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像,视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存,然后从内存中读取,从而大大提高读取速度。

工作流程:先检查客户端的请求数据是否在memcache中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcache中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中。

通用缓存机制:用查询的方法名+参数作为查询时的key,value对中的key值

5.使用Redis缓存

与memcache的区别:

  • 性能相差不大

  • redis在2.0版本后增加了自己的VM特性,突破物理内存的限制,memcache可以修改最大可用内存,采用LRU算法

  • redis依赖客户端来实现分布式读写

  • memcache本身没有数据冗余机制

  • redis支持(快照,aof)依赖快照进行持久化aof增强了可靠性的同时,对性能有所影响

  • redis用户数据量较小的高性能操作和运算上

  • memcache用于在动态系统中减少数据库负载,提升性能;适合做缓存提高性能。

  • 可用于存储其他数据:session,session_set_save_handler

Pengoptimuman lapisan data mysql


  • Pengoptimuman jenis data jadual data: int, smallint., bigint, enum, Storan IP menggunakan jenis int ip2long untuk menukar dan menyimpan

  • Lebih banyak indeks lebih baik, cipta indeks yang sesuai pada medan yang sesuai

  • Patuhi dengan prinsip awalan indeks

  • seperti masalah% pertanyaan

  • Pengoptimuman imbasan jadual penuh

  • atau penggunaan indeks bersyarat

  • Masalah kegagalan indeks jenis rentetan

  • Optimumkan akses data semasa data pertanyaan, had penggunaan, Cuba jangan gunakan *, buat kompleks kepada pertanyaan ringkas, pecahkan, menguraikan pertanyaan berkaitan *

  • Optimumkan jenis pernyataan pertanyaan tertentu, optimumkan kiraan(), optimumkan pernyataan pertanyaan berkaitan, optimumkan subkuari, Optimumkan kumpulan mengikut dan berbeza, optimumkan had dan kesatuan

  • Pengoptimuman enjin storan: cuba gunakan innodb

  • Pengoptimuman struktur jadual pangkalan data: operasi partition (Telus kepada pengguna) partition, sub-pangkalan data dan sub-jadual (pemisahan mendatar, pemisahan menegak untuk mencipta jadual kedua)

  • Pengoptimuman seni bina pelayan pangkalan data: replikasi induk-hamba, pemisahan baca-tulis, dwi-siap sedia panas Utama , pengimbangan beban (lvs merealisasikan pengimbangan beban, perisian tengah pangkalan data MyCat merealisasikan pengimbangan beban)

Label berkaitan:
sumber:github.io
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan