Yn yr erthygl hon, byddwn yn ymchwilio i pam mae llwyth gweinydd cynyddol yn digwydd ac yn trafod gwahanol ffyrdd o wneud y gorau o brosesau llwyth uchel. Rhoddir sylw arbennig i optimeiddio cod yn Apache / Nginx a MySQL, byddwn yn siarad am caching fel offeryn ategol, a hefyd yn ystyried bygythiadau allanol posibl, megis ymosodiadau DDOS, a ffyrdd i'w hatal.
Pam mae Llwyth Gweinydd yn Digwydd
Cyn symud ymlaen i optimeiddio gweinydd, mae angen cynnal dadansoddiad trylwyr o'r llwyth cyfredol ar adnoddau. Mae hyn yn cynnwys mesur llwyth CPU, defnydd RAM, gweithgaredd rhwydwaith, a pharamedrau allweddol eraill. Mae deall deinameg a llwythi brig yn caniatáu nodi tagfeydd a gwneud y gorau o ddyrannu adnoddau, gan gynyddu sefydlogrwydd a pherfformiad seilwaith y gweinydd.
Ar gyfer datrys problemau cychwynnol llwyth gweinydd uchel, rydym yn argymell cynnal a diagnosteg gweinydd cyffredinol. Os yw hyn yn annigonol, manylach dadansoddiad o adnoddau yn angenrheidiol. Fel offeryn ategol, archwilio'r logiau o'r Linux gall gweinydd fod yn ddefnyddiol, gan mai dyma lle mae ffynhonnell y broblem i'w chael yn y rhan fwyaf o achosion.
Optimeiddio Gweinydd Apache / Nginx
Llwyth Gweinydd Cynyddol Oherwydd Mynegeio
Gall llwyth cynyddol oherwydd mynegeio ar y gweinydd ddigwydd, er enghraifft, pan fydd peiriannau chwilio yn sganio nifer fawr o dudalennau ar eich gwefan. Gall hyn arwain at ddefnydd cynyddol o adnoddau gweinydd ac, o ganlyniad, arafu perfformiad y safle. Mae canfod yr achos yn gymharol syml; mae angen ichi agor y ffeil sydd wedi'i lleoli yn:
/var/www/httpd-logs/sitename.access.log
Pan gaiff ei fynegeio gan beiriannau chwilio, bydd y defnyddiwr yn gweld cofnodion o'r natur ganlynol:
11.22.33.44 - - [Date and Time] "GET /your-page-path HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Fel ateb cyntaf i leihau'r llwyth, gallwch ddefnyddio gosod tagiau meta "noindex" a "nofollow" ar dudalennau nad oes angen eu mynegeio. Yr ail ateb yw y . Htaccess ffeil, lle mae angen ychwanegu cofnodion sy'n cyfateb i beiriannau chwilio penodol, er enghraifft, i guddio rhag Yandex a Google:
SetEnvIfNoCase User-Agent "^Yandex" search_bot
SetEnvIfNoCase User-Agent "^Googlebot" search_bot
Order Allow,Deny
Allow from all
Deny from env=search_bot
Yn yr un modd, mae angen gwneud golygiadau ar gyfer peiriannau chwilio eraill. Dylid nodi nad yw galluoedd .htaccess yn gyfyngedig i fynegeio blocio yn unig. Rydym yn argymell dod yn fwy cyfarwydd â'i brif nodweddion yn y erthygl.
Defnyddio Gosodiadau Caching
Gall gosodiadau caching anghywir ar y gweinydd hefyd arwain at lwyth uchel. Er mwyn gwneud y gorau o'r paramedr hwn, mae angen gwneud newidiadau cyfatebol yn y ffeiliau ffurfweddu neu . Htaccess. Yn achos Apache, mae'r opsiwn olaf yn well, ar gyfer Nginx - y cyntaf.
Ar Apache gweinydd, mae angen ichi agor y .htacess ffeil a mewnosodwch y cod canlynol:
<FilesMatch ".(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf|doc|docx)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
Yna, galluogi'r Yn dod i ben modiwl gan ddefnyddio'r gorchymyn:
sudo a2enmod expires
Ar ôl hynny, ailgychwynwch y gweinydd gwe:
sudo service apache2 restart
Ac actifadu'r modiwl trwy nodi:
ExpiresActive On
Ar Nginx gweinydd, mae'n ddigon ychwanegu'r cod canlynol i'r ffeil ffurfweddu:
location ~* .(jpg|jpeg|gif|png|ico|css|swf|flv|doc|docx)$ {
root /var/www/yoursite.com;
}
A pherfformiwch ail-lwytho gwasanaeth:
sudo service nginx restart
Sylwch, gyda'r gosodiadau hyn, y Caniatáu a gwrthod bydd cyfarwyddiadau yn cael eu hosgoi.
Defnyddio Cywasgu Data
Galluogi cywasgu data gan ddefnyddio Gzip ar weinyddion gwe Apache a Nginx yn helpu i leihau faint o ddata a drosglwyddir rhwng y gweinydd a'r cleient, sy'n gwella perfformiad ac yn lleihau amser llwytho tudalennau gwe.
I alluogi Gzip on Apache, mae angen i chi actifadu'r mod_deflate modiwl:
sudo a2enmod deflate
Yna, ailgychwynwch y gweinydd gwe:
sudo service apache2 restart
Ac yn olaf, ychwanegwch y bloc canlynol i'r ffeil ffurfweddu neu .htaccess:
<IfModule mod_deflate.c>
# Configure compression for specified file types
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json
# If the browser matches the specified pattern, apply compression only to text/html files
BrowserMatch ^Mozilla/4 gzip-only-text/html
# If the browser matches the specified version patterns of Mozilla 4.0.6, 4.0.7, 4.0.8, disable compression
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# If the browser is MSIE (Internet Explorer), disable compression for all files except text/html
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# If the request contains the specified pattern (extensions of image files), disable compression
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
</IfModule>
Mae'r cyfluniad hwn yn galluogi cywasgu ar gyfer rhai mathau o ffeiliau ac yn ei analluogi ar gyfer delweddau.
Yn achos Nginx, cyfluniad yn digwydd yn y http bloc o'r ffeil ffurfweddu. Mae angen ychwanegu'r cod canlynol:
gzip on;
gzip_disable "msie6";
# Adds the Vary header, indicating that the response may change depending on the Accept-Encoding header value
gzip_vary on;
# Enables compression for any proxy servers
gzip_proxied any;
# Sets the compression level. A value of 6 provides a good balance between compression efficiency and resource use
gzip_comp_level 6;
# Sets the size of the buffer for compressed data (16 buffers of 8 kilobytes each)
gzip_buffers 16 8k;
# Specifies that data compression should be used only for HTTP version 1.1 and higher
gzip_http_version 1.1;
# Sets the file types that can be compressed
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Yn debyg i Apache, yma gosodir y paramedrau cywasgu ar gyfer rhai mathau o ffeiliau. Ar ôl gwneud newidiadau i unrhyw un o'r gweinyddwyr gwe, mae angen ail-lwytho gwasanaeth:
sudo service apache2 restart
Or
sudo service nginx restart
Ymosodiad DDOS ar y Gweinydd
Gall llwyth gweinydd uchel ddigwydd o ganlyniad i ymosodiad DDoS. Gellir nodi presenoldeb ymosodiad DDoS trwy fonitro cynnydd sydyn mewn traffig, ceisiadau annormal, a gostyngiadau perfformiad gweinydd. Gall adolygu logiau ar gyfer ceisiadau dro ar ôl tro o un cyfeiriad IP neu sganio porthladd hefyd nodi ymosodiad DDoS posibl. Mae yna lawer o fesurau amddiffyn, ond dim ond y pethau sylfaenol y byddwn yn eu trafod.
Defnyddio CDN (Rhwydwaith Cyflenwi Cynnwys). Gall CDN fod yn gyfryngwr rhwng eich gweinydd gwe a defnyddwyr, gan ddosbarthu traffig a storio cynnwys i liniaru effaith ymosodiad DDoS. Gall CDNs hefyd feddu ar fecanweithiau amddiffyn DDoS adeiledig, gan gynnwys dosbarthu llwythi a hidlo traffig.
Ffurfweddu waliau tân a systemau canfod ymyrraeth (IDS/IPS). Gellir ffurfweddu waliau tân i hidlo traffig yn seiliedig ar feini prawf amrywiol, megis cyfeiriadau IP a phorthladdoedd. Gall IDS/IPS ganfod ymddygiad traffig annormal a rhwystro cysylltiadau amheus. Gall yr offer hyn fod yn effeithiol wrth olrhain a rhwystro traffig a allai fod yn faleisus.
Ffurfweddu gweinyddwyr gwe Apache a Nginx i liniaru effaith ymosodiadau DDoS.
Fel ateb ar gyfer Apache, rydym yn galluogi'r mod_evasive modiwl. I wneud hyn, dadwneud sylw neu ychwanegu'r llinell ganlynol yn y httpd.conf or apache2.conf ffeil ffurfweddu:
LoadModule evasive20_module modules/mod_evasive.so
Yn yr un ffeil, mae angen i chi ychwanegu bloc gosodiadau:
<IfModule mod_evasive20.c>
# Hash table size for storing request information
DOSHashTableSize 3097
# Number of requests to one page before activating protection
DOSPageCount 2
DOSPageInterval 1
# Number of requests to all pages before activating protection
DOSSiteCount 50
DOSSiteInterval 1
# Blocking period in seconds for IP addresses
DOSBlockingPeriod 10
</IfModule>
Yn yr un modd, rydym yn actifadu'r mod_terfyn cyfradd modiwl:
LoadModule ratelimit_module modules/mod_ratelimit.so
Ac ychwanegwch y cyfluniad:
<IfModule mod_ratelimit.c>
# Setting the output filter for rate limiting (Rate Limit)
SetOutputFilter RATE_LIMIT
# Beginning of the settings block for the location "/login"
<Location "/login">
# Setting the environment variable rate-limit with a value of 1
SetEnv rate-limit 1
# Ending of the settings block for the location "/login"
</Location>
</IfModule>
Mae'r cyfluniad ar gyfer Nginx yn debyg i Apache. Yn y nginx.conf ffeil ffurfweddu, mae angen defnyddio'r cyfarwyddebau canlynol:
http {
...
# Defining a zone for connection limits
limit_conn_zone $binary_remote_addr zone=addr:10m;
# Defining a zone for request limits
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
server {
...
# Configuring connection limits
limit_conn addr 10;
# Configuring request limits
limit_req zone=req_zone burst=5;
...
}
}
Ar ôl gwneud newidiadau i bob un o'r gwasanaethau, mae angen eu hail-lwytho:
sudo systemctl restart apache2
Neu:
sudo systemctl restart nginx
Mae'r enghreifftiau hyn yn darparu cyfluniad sylfaenol yn unig, y gellir ei addasu ymhellach yn dibynnu ar ofynion penodol a natur ymosodiadau.
Optimeiddio Ymholiadau MySQL
Gellir gwneud y gorau o ymholiadau cronfa ddata MySQL ar weinydd gwe mewn gwahanol ffyrdd, ac un ohonynt yw cyfluniad cywir y ffeil ffurfweddu. Yn nodweddiadol, mae'r ffeil hon wedi'i henwi fy.cnf or fy.ini ac wedi ei leoli yn y / etc / or /etc/mysql/ cyfeiriadur. Mae angen i chi ei agor a gwneud y newidiadau canlynol:
[mysqld]
# Location of the file for recording slow queries. Be sure to replace it with your path
log-slow-queries = /var/log/mariadb/slow_queries.log
# Threshold time for considering slow queries (in seconds)
long_query_time = 5
# Enabling recording of queries that do not use indexes
log-queries-not-using-indexes = 1
# Disabling query caching
query_cache_size = 0
query_cache_type = 0
query_cache_limit = 1M
# Size of temporary tables
tmp_table_size = 16M
max_heap_table_size = 16M
# Size of the thread cache
thread_cache_size = 16
# Disabling name resolving
skip-name-resolve = 1
# Size of the InnoDB buffer pool. Set to 50-70% of available RAM
innodb_buffer_pool_size = 800M
# Size of the InnoDB log file
innodb_log_file_size = 200M
Gadewch i ni hefyd ystyried argymhellion ychwanegol a all hwyluso rhyngweithio â chronfa ddata'r gweinydd:
- Defnyddiwch y ESBONIAD gorchymyn cyn ymholiad SQL i ddadansoddi ei weithrediad. Mae hyn yn caniatáu ichi gael cynllun gweithredu ar gyfer yr ymholiad a phenderfynu pa fynegeion a ddefnyddir, pa dablau sy'n cael eu sganio, ac ati.
- Mae mynegeion yn cyflymu'r broses o chwilio am ddata, felly gall mynegeion sydd wedi'u dylunio'n gywir wella perfformiad ymholiad yn sylweddol. Rhowch sylw i golofnau a ddefnyddir yn aml yn LLE or YMUNO amodau.
- Osgoi defnyddio SELECT *. Nodwch dim ond y colofnau hynny sy'n wirioneddol angenrheidiol ar gyfer eich ymholiad, yn lle dewis pob colofn mewn tabl.
- Osgoi defnyddio swyddogaethau yn LLE amodau. Defnyddio swyddogaethau (fel LOWER, UCHAF, CHWITH, DDE) yn LLE gall amodau wneud mynegeion yn ddiwerth. Ceisiwch osgoi eu defnyddio'n uniongyrchol mewn amodau.
- Defnyddio INNER JOIN lle bo modd, gan ei fod fel arfer yn fwy effeithlon. Hefyd, sicrhewch fod gan y colofnau cyfatebol ar gyfer ymuno fynegeion.
- Defnyddio LIMIT i gyfyngu ar nifer y rhesi a ddychwelir os oes angen i chi gael nifer benodol o ganlyniadau yn unig.
- Ystyriwch caching canlyniadau ymholiad, yn enwedig os ydynt yn newid yn anaml, i leihau llwyth gweinydd.
Mae'r Gweinyddwr Post yn Creu Llwyth Uchel ar y Gweinydd
Yn yr adran hon, byddwn yn archwilio sut i benderfynu bod y gweinydd post yn profi llwyth uchel a pha gamau y gellir eu cymryd i wneud y gorau o'i weithrediad, gan gynnwys gwirio'r ciw neges a ffurfweddu paramedrau gweinydd. Dechreuwch gyda gwirio'r ciw neges. Mae'r mailq gall cyfleustodau helpu gyda hyn, i'w actifadu, rhowch y gorchymyn cyfatebol yn y derfynell:
mailq
Bydd hyn yn dangos rhestr o negeseuon yn y ciw, os o gwbl. Bydd pob neges yn cael ei harddangos gyda'i dynodwr unigryw a gwybodaeth am y statws anfon. Gellir cael canlyniad tebyg trwy adolygu'r logiau cleient post.
Yn y rhan fwyaf o achosion, mae llwyth uchel yn digwydd os bydd y gweinydd yn cyfaddawdu pan fydd yn dechrau anfon sbam. Fodd bynnag, ar ôl gwirio bod y gweinyddwr yn hyderus nad yw'r gweinydd wedi cael ei ymosod o'r tu allan ac nad yw defnyddwyr yn esgeuluso sbam, mae'n bryd symud ymlaen i optimeiddio'r gweinydd post. Dyma'r camau a fydd yn helpu:
- Sicrhewch fod cofnodion DNS eich parth wedi'u ffurfweddu'n gywir, gan gynnwys SPF, DKIM, a DMARC cofnodion i wella dosbarthiad post a diogelu rhag sbam. Mae cyfluniad cywir y paramedrau i'w gweld yn yr erthygl ar diagnosteg gweinydd post.
- Gwiriwch osodiadau rhwydwaith, gan gynnwys ffurfweddiad wal dân a rheolau llwybro, i osgoi blociau a chyflymu'r broses o ddosbarthu post.
- Ffurfweddu paramedrau ciw neges yn ôl llwyth y gweinydd. Gall hyn gynnwys gosod uchafswm maint y ciw a seibiannau amser.
- Ystyriwch yr atebion a drafodwyd gennym yn yr erthygl hon yn gynharach. Optimeiddio cronfa ddata gweinydd post o bryd i'w gilydd i wella perfformiad, defnyddio mecanweithiau caching i gyflymu chwilio a phrosesu data, megis ymholiadau DNS.
- Os yw'r gweinydd post yn dal i ddod ar draws llwyth uchel yn rheolaidd, ystyriwch opsiynau graddio, megis defnyddio clwstwr o weinyddion post neu ddatrysiadau cwmwl.
Casgliad
Mae cynnydd mewn llwyth gweinydd yn effeithio'n uniongyrchol ar gyflymder llwytho gwefan, gan effeithio yn y pen draw ar brofiad defnyddwyr ac enw da mewn peiriannau chwilio. Felly, mae rheoli'r llwyth hwn yn effeithiol yn chwarae rhan allweddol wrth sicrhau gweithrediad parhaus yr adnodd a chynyddu ei hygyrchedd i ymwelwyr.