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)
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.
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
pengimbangan liabiliti
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
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 Apakah itu CDN?
Apakah kelebihan cdn?
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 htmlCara untuk melaksanakan cdn?
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
Konsep berkaitan: Apakah pestatikan bahasa dinamik, mengapa kita harus statikkan, cara pelaksanaan pestatakan.
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.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
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?
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:事件发生后回掉指定的函数
nginx: Reaktor berbilang benang
swole: pekerja berbilang proses Reaktor berbilang benang
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<🎜 >
7.日志处理 应用场景:解决大量日志的传输 日志采集程序将程序写入消息队列,然后通过日志处理程序的订阅消费日志。
8.消息通讯 聊天室
9.常见消息队列产品 kafka,ActiveMQ,ZeroMQ,RabbitMQ,Redis等 php的异步 消息队列
10.接口的并发请求 curl_multi_init
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
默认情况下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 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)