ステロむドサヌバヌFreeBSD、nginx、MySQL、PostgreSQL、PHPなど

私はこの写真が奜きです、カクティ=

はじめに



このバンドルの最適化に関する以前の蚘事を曞いおからかなりの時間が経ちたした。 512 MBのメモリを備えたPentium 4は、フォヌラムで最倧1,000人、トラッカヌで最倧150,000人のピアにサヌビスを提䟛しおいたすが、長い間ドむツ語のスレッド、ダンプ、およびクラブが耇数のサヌバヌに眮き換わりたした。 その䞭で述べられおいるこずはすべお関連性がありたすが、远加する䟡倀があるものがありたす。

蚘事は倧きいため、論理ブロックに分割されたす。



  0.䜕かを最適化する必芁があるのはなぜですか
  
 1. OS最適化FreeBSD
   1.1 7.xぞの移行 
   1.2 7.2ぞの移行
   1.3 amd64ぞのアップグレヌド
   1.4ネットワヌクサブシステムのアンロヌド
   1.5 FreeBSDず倚数のファむル
   1.6゜フトアップデヌト、gjournalおよびマりントオプション
  
 2.フロント゚ンドの最適化nginx
   2.1フィルタを受け入れる
   2.2キャッシュ
   2.3 AIO
  
 3.バック゚ンドの最適化
   3.1 APC
   3.1.1 APCロック
   3.1.2 APCヒント
   3.1.3 APCフラグメンテヌション
   3.2 PHP 5.3
  
 4.デヌタベヌスの最適化
   4.1 MySQL 
   4.1.1 5.1ぞの移行
   4.1.2 InnoDBぞの移行
   4.1.3 MySQLビルトむンキャッシュ-ク゚リキャッシュ
   4.1.4むンデックス
  
 4.2 PostgreSQL
   4.2.1むンデックス
   4.2.2 pgBouncerなど。
   4.2.3 pgFouine
  
 4.3デヌタベヌスのアンロヌド
   4.3.1 SphinxQL
   4.3.2非RDBMSストレヌゞ
   4.4゚ンコヌディング
   4.5非同期
  
アプリケヌション。 ささいなこず。
   1. SSHGuardたたは代替。
   2. xtrabackup
   3.メヌルを別のホストに転送する
   4.サヌドパヌティ゜フトりェアずの統合
   5.モニタリング
  
  6.短所の最適化 




0.䜕かを最適化する必芁があるのはなぜですか



䞀般的に、あなたは成長できたす



最初のオプションは倚額の資金がある堎合に䜿甚し、2番目のオプションは優れたアヌキテクチャヌに䜿甚する方が適切です。 さお、私が説明する3番目のものは、1番目も2番目もないずきに䜿甚されたすが、利甚可胜な鉄から最倧を絞り出したいず思いたす。



1. OS最適化FreeBSD



1.1 7.xぞの移行



FreeBSDの新しいバヌゞョンにアップグレヌドするず䜕が埗られたすか

私にずっお、最も重芁なこずは次のずおりです。

新しいULE 3.0スケゞュヌラずjemallocは 、マルチコア> = 4システムで非垞に䟿利です。

MSIMessage Signaled Interrupts -ドラむバヌでは、しばしば高速割り蟌みずも呌ばれたす。



したがっお、負荷がかかっお曲がり始める埓来の6.xシステムがある堎合は、7.xに移行する䟡倀がありたす。





1.2 7.2ぞの移行



スヌパヌペヌゞ 、拡匵KVA、最適化されたデフォルトsysctl'i。 最新のOSリリヌスにアクセスするだけで、これらすべおを完党に無料で利甚できたす。



進歩も止たっおおらず 、珟圚FreeBSD 8.0のリリヌス準備が敎い、パフォヌマンスのさらなる向䞊が玄束されおいたす。 安定性の蚌拠ずしお、 www.FreeBSD.orgは初期のベヌタ時代にFreeBSD-CURRENTに移行されたした。 したがっお、ステヌゞングマシンでは、すでにドラむブを開始できたす。





1.3 amd64ぞのアップグレヌド



amd64に切り替えるず、 巚倧なサむズのKVAずShared Mem> 2Gbが远加されたす。 しかし、これは最も重芁なこずずはほど遠い...



2009幎には既にラップトップに4 GBのメモリを搭茉しおおり、デヌタベヌスを備えたサヌバヌにこれほど倚くのメモリを搭茉するのはばかげおいるこずに泚意しおください。 もちろん、これは小さなデヌタベヌスでは正垞ですが、成長しおメモリに収たらなくなった堎合はどうすればよいですか PAEは別のグリッチであるため、より倚くのメモリを提䟛するC i386 OSには問題がありたす。 はい。INT64は長い間䜿甚されおきおおり、デヌタベヌスやOpenSSLなどのアプリケヌションのパフォヌマンスを向䞊させたす。 誰かが適切なベンチマヌク「*** SQL i686 vs amd64」ぞのリンクを持っおいる堎合-コメントを投げおください。





1.4ネットワヌクサブシステムのアンロヌド



ここFreeBSDでは、それは単なるフィヌルドではなく、党䜓のテスト堎です。

すべおの最適化は、 ifconfig



パラメヌタヌのチュヌニングずsysctl.conf/loader.conf



2぀の郚分に分けるこずができたす。この順序で行きたしょう。

最初に、ネットワヌクカヌドの機胜を確認する必芁がありたす。これには、次のコマンドを䜿甚できたす。

  ifconfig -m
機胜= 399b <RXCSUM、TXCSUM、VLAN_MTU、VLAN_HWTAGGING、VLAN_HWCSUM、TSO4、WOL_UCAST、WOL_MCAST、WOL_MAGIC> 


クラスemIntel Gigabit/ bgeBroadcom Gigabitの優れたネットワヌクカヌドがある堎合は、ifconfigオプションを詊すこずができたす。



たた、 em



ネットワヌクカヌドずマルチコアprocでは、 Yandexのドラむバヌを詊すこずができたす。これは、いく぀かのストリヌムでパケットを凊理したす。 たた、ネットワヌクサブシステムの調敎に関する倚くのこずはnag.ruで読むこずができたす。



サヌドレヌトのre/rl/sk/nfe



 re/rl/sk/nfe



...を䜿甚しおいる堎合、䞊蚘のオプションが正しく機胜せず、サヌバヌがフリヌズする可胜性があるため、 ポヌリングに re/rl/sk/nfe



方が良いでしょう。



そしお最埌に、 「Sysoevによる」FreeBSD 7チュヌニングの曎新版ずsysctlシヌトをコメント付きで芋るこずを皆に勧めたす。





1.5 FreeBSDず倚数のファむル



FreeBSDには、ファむル名をディレクトリにキャッシュするための優れた技術がありたす。 そのため、1぀のディレクトリに倚数のファむルがある堎合、目的のファむルを怜玢するためにツリヌ党䜓を垞にスクロヌルむン/アりトするのではなく、ハッシュテヌブル怜玢を䜿甚するこずをお勧めしたす。 ただし、最倧 vfs.ufs.dirhash_maxmem



割り圓おられるメモリの量このテクノロゞが呌び出されるためはvfs.ufs.dirhash_maxmem



によっお制限され、デフォルトでは、2MBなど、非垞に小さいです。 vfs.ufs.dirhash_mem



が「倩井」に察しお停止するたでメモリを増やすこずをお勧めしたす。





1.6゜フトアップデヌト、gjournalおよびマりントオプション



新しいテラバむトのネゞは単に豪華です-それらは安䟡であり、その性胜は単なるレゞです。 ただし、1぀の泚意点がありたす。デヌタセンタヌで電力が遮断された堎合、そのようなテラバむトのfsckは1時間以䞊かかるこずがありたす。 softjupdatesを䜿甚しおこの問題を解決するか、gjournalを介しおシステムぞのロギングを固定できたす。 正確にあなた次第です 。

いく぀かのゞャヌナリングのヒントパフォヌマンスを倱わないためには、ゞャヌナルパヌティションを別のディスクに蚭定するこずをお勧めしたす。たた、オヌバヌフロヌによるパニックをキャッチしないためには、ゞャヌナルセクションを倧きくするこずRAM +スワップなどをお勧めしたす。

BPUでraidを䜿甚しおいる堎合、たたは倱うものが䜕もない堎合は、 /etc/fstab



async



オプションを远加できたす。 そしお、 noatime



などのオプションは、 ほずんどすべおの人に恐れるこずなく掚奚できたす。  ここで ginerのコメントを読む





2.フロント゚ンドの最適化nginx



実際、私は、フロント゚ンドの最適化を含む過床のおよび/たたは時期尚早な最適化に極端に反察しおいたす。 通垞、nginxが静的倉数だけでなく、䜿甚の性質に応じお1〜5のCPUを消費するWebプロゞェクトでは、残りはphpによっお消費されたす。

ただし、nginx構成の最適化はサむトの党䜓的な応答時間に圱響を䞎える可胜性があるため、説明する䟡倀のある点がいく぀かありたす。

暙準的な最適化から、私はお勧めできたす

  reset_timedout_connection on;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on; 


たあ、劎働者の数で遊んで、CPU /ネゞの数だけでそれらを配眮したせん。 たた、ServerfaultのこのドキュメントずNginxのベストプラクティストピックに誰もが慣れ芪しむこずをお勧めしたす。䜕か新しいこずを孊ぶ可胜性が高いです。







2.1フィルタを受け入れる



FreeBSDには、1デヌタが到着した堎合、2有効なhttp芁求がある堎合にのみ、カヌネルからプロセスにパケットを転送できる技術がありたす。 このテクノロゞヌは、 受け入れフィルタヌず呌ばれたす。 このようなフィルタヌは、倚数の接続の堎合にサヌバヌをアンロヌドし、DDoS'aから少し保護するのに圹立ちたす ハブでngx_http_limit_req_moduleが耇数回蚘述されおいたすがが、2番目のサヌバヌの管理に優れおいたす

フィルタを䜿甚しお接続凊理を有効にするには、たずカヌネルモゞュヌルをロヌドする必芁がありたす。

  #ls / boot / kernel / | grep acc
    accf_data.ko
    accf_http.ko
 #kldload accf_http 


次に、 nginx.conf



config nginx.conf



、 httpready



フィルタヌを有効にしたす。

  listen 80 default accept_filter = httpready; 




2.2キャッシュ



Nginxには、 fastcgiずプロキシバック゚ンドの䞡方からの非垞に柔軟な応答キャッシュシステムがありたす。 ドキュメントをすぐに読む人は皆、プロゞェクトでキャッシュを䜿甚するためのいく぀かのシナリオを持っおいるず思いたす。 䞀般的なアドバむスしかできたせん

rssがphpスクリプトを介しお䞎えられるのを神は犁じおいたす その堎合、応答を3〜5分間安党にキャッシュできたす。

ゲスト甚のサむトのほが党䜓のバヌゞョンも玄5分間キャッシュにプッシュできるず思いたすもちろん、ニュヌスサむトがない限り



サヌバヌキャッシュに加えお、クラむアントキャッシュもありたす。 すべおの統蚈情報に぀いお、月ごずに期限切れにするこずをお勧めしたす。

    
        堎所〜* \。jpg | jpeg | gif | png$ {
    	    root / var / nnm-club;
    	   有効期限は30日です。
         } 


2.3 AIO



NginxはすでにnginxでのAIOの導入に぀いお曞いおいたすが 、そこのコメントには非垞に興味深い議論がありたす。 芁するに、AIOは非垞に特定の負荷に察しお有甚であり、たた、ワヌカヌの数を枛らしながら応答時間を維持するのにも圹立ちたす。

aioを䜿甚するには、aio.koカヌネルモゞュヌルをロヌドする必芁がありたす。

# kldload aio





次に、 nginx.conf



aioずsendfileを有効にしnginx.conf





 
  sendfile on;
  aio sendfile; 


nginxの新しいバヌゞョンでは、sioをsendfileで䜿甚できたす。 この構成に関しお、ドキュメントには次のように蚘茉されおいたす。

この構成では、SF_NODISKIOフラグが䜿甚され、sendfileはディスク䞊でブロックされたせんが、メモリにデヌタがないこずを報告したす。その埌、nginxは1バむトのみを読み取るこずで非同期デヌタロヌドを開始したす。 同時に、FreeBSDカヌネルは最初の128Kファむルをメモリにロヌドしたすが、その埌の読み取りでは、ファむルは16Kだけの郚分でロヌドされたす。 したがっお、このモヌドは、最倧128Kの小さなファむルの配垃に最適です。



ここでこの問題を解決するためのFreeBSDのパッチは、おそらく-CURRENTに移行し、8.0および7.xに移怍されるでしょう





3.バック゚ンドの最適化



たずえば、javaには、シリヌズ「-Xms768m -Xmx1280m -XX+ UseConcMarkSweepGC -XX+ CMSIncrementalMode -XX+ UseCompressedOops -Djava.net.preferIPv4Stack = true -XAnal + Javaプログラマヌのみが理解でき、PHPには50の最適化のオペコヌドキャッシングがあり 、残りはデヌタベヌスからの応答のキャッシングから芳察されたす。 したがっお、トピックのこの郚分は非垞に意地悪です。

3.1 APC



Facebook開発者は、APCの最適化に぀いお話したした。 時間があれば、読むこずを匷くお勧めしたす。



3.1.1 APCロック



叀いファむルのロック。これはたさにAPCの代わりにeAcceleratorが䜿甚されおいるため、「ブレヌキ」です。 そのため、倚くの堎合、デフォルトのロックをスピンロックたたはpthreadミュヌテックスに倉曎するこずをお勧めしたす 。 私の知る限り、pthread mutexは3.0.16からデフォルトになったため、叀いAPCのサヌバヌがある堎合は、曎新するこずをお勧めしたす。



3.1.2 APCヒント



倚くの.phpファむルがある堎合、たたはAPCナヌザヌキャッシュに倚くキャッシュする堎合、倀を䞊げる必芁がある可胜性が非垞に高くなりたす。

それぞれphp.ini



apc.num_files_hint



およびapc.user_entries_hint



これらの倀は、APCテヌブルのハッシュサむズに圱響を䞎え実際、アプリケヌションの前に2倍になりたす、 負荷係数 > = 0.75ではハッシュテヌブルの動䜜が非垞に悪いこずがわかりたす。





3.1.3 APCフラグメンテヌション



APCの断片化は非垞に重芁です。そのため、このキャッシュを取埗し、くしゃくしゃにしお、りィンドりの倖に攟り出したいず思いたす。 APCは、TTLたたはLRUを䜿甚しおレコヌドを自動的に削陀できないため、通垞のKey-Valueの代わりにはなりたせん。 ぀たり、GCがなく、そこからキャッシュに入れられた゚ントリは、次の2぀の堎合にのみ移動できたす。



芁玄するず、次のように蚀えたす。高フラグメンテヌションは、APCが他の目的で䜿甚されおいるこずを瀺しおいたす。

ここで、3.1.xのコメントで刀断しおメモを远加する必芁がありたす。メモリ割り圓おの点で倚くの点が修正されたしたが、 これで刀断するず、3.1.xはすべおのナヌザヌに察しお機胜したせん。







3.2 PHP 5.3



ここではすべおが簡単に思えたす-PHPを曎新するず、パフォヌマンスが向䞊したす。 ただし、5.3で廃止された関数のリストを芋るず、ただ機胜するため、恐ろしい堎合がありたす。

その単玔さにも関わらず、5.2から5.3ぞの移行は、特に本番環境では非垞に長くなるず思いたす。





4.デヌタベヌスの最適化



実際、クラブで最適なデヌタベヌスの最適化は次のずおりです。



ただし、䞊蚘のツヌルのほずんどは、アプリケヌションの倧幅な曞き換えが必芁です。





4.1 MySQL



むンタヌネットには、MySQLを最適化するためのマニュアルがたくさんありたすが、読み曞きのできるマニュアルがありたすが、それほど倚くありたせん。 いずれにせよ、Webプロゞェクトの存続期間䞭、そのベヌスはメモリ、ディスク、そしお堎合によっおはプロセッサに眮かれる時間があるため、簡単なハりツヌを行うこずはできず、䌚議を芋お 、プロファむラoprofile、 systemtap 、dtraceを孊ぶ必芁がありたすそしお、倚数の远加゜フトりェアを䜿甚したす 。 蚀い換えれば、むンデックス、゜ヌト、グルヌプ化が䜕であるかを理解するだけでなく、MySQLが内郚的にそれらをどのように䜿甚するかを理解し、 EXPLAIN、ク゚リキャッシュ、さたざたなストレヌゞ゚ンゞンの長所ず短所を理解し、䞀般的に、あなたのプロゞェクト。

次に、最小限のコヌド倉曎たたはコヌド倉曎なしでMySQLを最適化する方法を説明したす。

前の郚分で述べたように、MySQLのチュヌニングの50は、2぀のナヌティリティだけで半自動で実行できたす。



4.1.1 5.1ぞの移行



5.1ぞの移行は倚くのボヌナスをもたらしたす。特に興味がありたした。



これによりパフォヌマンスが向䞊するため、5.1を超える䟡倀がありたす。 5.1が安定しおいないずいう事実にた぀わるノむズに぀いおは、これはもはや関係がなく、最初は肥倧化しすぎおいたした5.1ぞの切り替えの犁忌たたは悪意があれば、コメントしおください。

もちろん、最も極端なものは5.4を長期間テストしおおり、パフォヌマンスは非垞によく向䞊しおいるず蚀っおいたすGoogleずPerconaからのパッチの助けなしではないず思いたす。 しかし、生産5.4はただ長い道のりです。





4.1.2 InnoDBぞの移行



MyISAMを䜿甚しおいる堎合、 なぜですか 実皌働サヌバヌがMyISAMにどのように存圚するかわかりたせんそのような存圚があるず蚀いたすが、トランザクションがない堎合倧きな曎新䞭にサヌバヌがクラッシュした堎合、デヌタの半分が倉曎され、半分は倉曎されたせん、TABLE LOCKがありたす蚘録䞭テヌブルおよびその逆を読み取るためにブロックされたす、デヌタセンタヌで電力が倱われた埌の修理には数十時間かかる堎合がありたす。 MyISAMを節玄できるのは、フルテキストむンデックスが存圚するこずだけですが、sphinxsearchで品質ず速床を競うこずはほずんどできたせん。





はい、InnoDBには欠点デッドロック、倧きなむンデックス、FTSの欠劂がありたすが、もっず倚くのボヌナスがありたす、私芋最初に、InnoDBは完党にACID互換です 。デヌタは、1぀のトランザクションで実行でき mysqldump --single-transaction



オプション、次に、行レベルのロックmyisamのTABLE LOCKに察しおがありたす。぀たり、耇数のデヌタで同時にデヌタを読み曞きできたす。互いにブロックするこずなくスレッド。

繰り返しになりたすが、スタヌトアップの心のパフォヌマンスを非垞に心配しおいる人々はXtraDBを䜿甚できたす。圌らはそれがI / Oバりンドワヌクロヌドで倧いに圹立぀ず蚀いたす。





4.1.3 MySQLビルトむンキャッシュ-ク゚リキャッシュ



ク゚リキャッシュは、MySQLの最も「誀解された」郚分の1぀です。 倚くの人は512Mbでそれを眮き、「すべおが今すぐ飛んでいる」ず考えたす。倚くの人は「ずにかく機胜しない」ため、完党にオフにしたす。 このパラメヌタヌの倀に光を圓おようずしたす。 そもそも、この堎合はもっず良くないので、圌を持ち䞊げないでください。 次に、ク゚リキャッシュは完党に䞊列化されたサブシステムではないこずを明確にする必芁がありたす。そのため、凊理速床が䜎䞋するだけなので、プロセッサ数= 8で無効にするこずをお勧めしたす。 最埌になりたすが、最も圹に立たないわけではありたせん-ク゚リキャッシュの本質は、このテヌブルぞの倉曎が発生するず、テヌブルに関連するコンテンツが完党にリセットされるこずです。 ぀たり、実際には、ク゚リキャッシュは適切に正芏化されたテヌブルでのみパフォヌマンスを向䞊させたす 。

QCの詳现に぀いおは、 こちらをご芧ください 。





4.1.4むンデックス



むンデックスがないこずはSELECTにずっお悪いこずなので、䜙分なむンデックスはINSERT / UPDATEにずっお悪いです。 䞀床䜜成された叀いむンデックスが1幎以䞊デヌタベヌスに存圚し、貎重なメモリを占有し、デヌタの倉曎が遅くなるこずがよくありたす。 簡単なSQL ク゚リが圹に立ちたす 。 圹に立ちたしたか これらのヒントの倚くはここで芋぀けるこずができたす 。







4.2 PostgreSQL



私にずっお、Postgresはかなり奇劙なシステムのたたです。䞀方でぱンタヌプラむズクラスのベヌスであり、Skypeはその䞊で動䜜したす。他方では、デフォルト蚭定は携垯電話でも起動できるようになっおいたす。 䞀般に、調敎する必芁があり、ほずんどすべおをここで調敎できたす。 ほが200の可胜なパラメヌタヌのうち、 䞻なものは45のチュヌニングを担圓したす=

ちなみに、他に私が驚いたのは、蚭定内の行をコメントアりトするずきに、PostgreSQLが「デフォルト」にリセットせず、「芚えおいる」ものを䜿甚するこずです...

むンタヌネット䞊のPostgresのチュヌニングには倚くのこずがありたすマニュアルの䞀郚は叀くなっおいるため、公開日ず新しいバヌゞョンではmaintenance_memに眮き換えられるvacuum_memキヌワヌドに泚意しおください。 よくある質問のようなものがありたす 䞻なこずに぀いおは 、高床なDB管理者のための非垞に思慮深い論文がありたす...私は、管理者ずプログラマヌが資栌のあるDBAを探しおいる間にプロゞェクトが立ち䞊がるのを助ける基本をお䌝えしたす。





4.2.1むンデックス



ここで、公正な質問がありたす。なぜ、MySQLむンデックスが最埌に、PosgreSQLが最初にあったのでしょうか この点での機胜はMySQLの機胜よりもはるかに高いため、すべおが単玔です 。 Bツリヌ、ハッシュ、GiST、GIN、および匏の耇数列、郚分、むンデックスこれらはすべお、PostgerSQLをプログラムする人が理解する必芁がありたす。 そしお、それが存圚するこずを知るためだけでなく、どの堎合にある皮のむンデックスを䜿甚する必芁があるのか​​、そしお他のどのむンデックスを䜿甚するのかを理解するためです。

監芖に有甚なSQLク゚リむンデックスの統蚈を含むは、 ここにありたす 。





4.2.2 pgBouncerなど。



pgBouncer たたはその代替は、デヌタベヌスを備えたサヌバヌに最初にむンストヌルする必芁があるものです。 接続マネヌゞャヌの単玔なむンストヌルによる負荷の10倍の䜎䞋を瀺すサボテングラフを十分に芋たした。 接続プヌラヌがない堎合、デヌタベヌスぞの接続ごずに個別のプロセスが起動され、このプロセスは少なくずもwork_mem



のwork_mem



食い尜くし、SQLク゚リを実行しお独自の皮類のCPUずハヌドドラむブの戊いを開始したす。 すべおは問題ありたせんが、そのようなプロセスの数が200〜500の芏暡から倖れるず、サヌバヌは非垞に匷力なサヌバヌであっおもタむトになりたす。 ずおもき぀い。 pgBouncerはこれから私たちを救いたす。

たた、PostgreSQLを操䜜するための䟿利な、たたは䞍可欠なアプリケヌションのリストは、 postgresqlrussia.orgにありたす。





4.2.3 pgFouine



pgFouineは、そのようなかけがえのないプログラムの1぀にすぎたせん。 これは、phpの非垞に高床なmysqlslaアナログです。 Playr ログのリプレヌダヌ生成を䜿甚するず、ステヌゞングサヌバヌ䞊のリク゚ストをほが「戊闘」状態で最適化できたす。





4.3デヌタベヌスのアンロヌド



前述したように、デヌタベヌスを最適化しおパフォヌマンスを向䞊させる最良の方法は、できる限りアクセスしないこずです。





4.3.1 SphinxQL



前回の蚘事では、 sphinxsearchに基づく怜玢を導入したずいう事実に぀いお説明したした。 しかし、誰もがSphinxAPIの䜿甚を開始するために数千行のコヌドを怜玢し、バグのテストずキャッチにさらに1〜2回の反埩を費やすこずができるわけではありたせん。 この問題は非垞に゚レガントに解決されたした。SphinxSearchはMySQLサヌバヌのふりをするこずを孊びたした。 sphinx.conf



、 sphinx.conf



を䜜成し、cronでむンデクサヌの゚ントリを䜜成し、怜玢を別の「mysql」のようなデヌタベヌスに切り替えるだけです。 コヌドをさらに線集する必芁がない可胜性がありたす。

スフィンクスに切り替えるず䜕が埗られたすか 怜玢の速床ず品質を改善するこずに加えお、MyISAMずそのFTSを取り陀くこずができたす。非垞に興味深いのは、怜玢甚の新しいアプリケヌションを考案するこずです 。そのため、怜玢ずRSSを組み合わせたした。これは非垞に䟿利でした。

そしお、sphinxsearchの存圚から利益を埗るこずができるいく぀かの䟋がありたすほずんど倖出䞭に発明されたので、激しく叩かないでください



䟋1 長い間Starcraft 2を埅っおいたしたが、次の圢匏のRSSフィヌドをい぀でも远加できたすrss.phpQ = "starcraft 2"をGoogle Readerに远加し、それに぀いお説明するすべおの投皿を確認したす。 たた、フォヌラムのメンバヌずしお、私のニックネヌムが蚀及されおいるすべおの投皿を芋たいです。 これも問題ではありたせん。URLを修正するだけです。



䟋1.5 サむトにアクセスしたナヌザヌが怜玢バヌを芋、ク゚リを入力し、䜕も芋぀かりたせんでしたが、このリク゚ストのRSSぞのリンクを含む「この怜玢を賌読」リンクが衚瀺されたした。 したがっお、ナヌザヌだけがあなたを離れるこずはありたせん=



䟋2 映画21、たたは神の犁じられた映画9を芋぀けたいft_min_word_len



自殺ではなく、 ft_min_word_len



ク゚リの長​​さよりも長いず䞍平を蚀っお、単にそのようなリク゚ストを拒吊したす。 スフィンクスは、ほが瞬時に結果を「Twenty One / 21」の圢匏で返し、2番目のケヌスでは、「District No. 9 / District 9」ず「Nine / 9」から遞択するこずもできたす。







4.3.2非RDBMSストレヌゞ



プロゞェクトには、リレヌショナルデヌタベヌスを䜿甚できない堎所が非垞に倚くありたす。 単玔なキヌず倀のストアで十分です。 これらの利点は今では十分です。

たた、 Hive SQLのようなQLずHadoop圢匏のバック゚ンドを備えたデヌタりェアハりスなどの非垞に興味深いプロゞェクトもありたす。 䞀般に、デヌタりェアハりスを䜿甚するず、OracleMySQL、PostgreSQL、FoxPro、必芁なものに䞋線を匕くだけでなく、どのように生きおいるかを実隓するこずができたす。

たた、その速床のために、キヌず倀のデヌタベヌスは、リレヌショナルデヌタベヌスからサンプルをキャッシュするために䜿甚されたす。 キャッシュ自䜓に぀いおプレれンテヌションをスクロヌルし、ビデオを芋お、 Andrey Smirnovのブログからレポヌトの党文を読んだ埌、私は実質的に远加するものがありたせん。 ほんのいく぀かのヒント

PHPに非垞に倧きなプロゞェクトがある堎合は、オペコヌドキャッシュがカスタムデヌタを保存する機胜を忘れないでください。 最も䞀般的に䜿甚されるグロヌバル倉数をその䞭に保存できたす。たず、それらの倚くはなく、小さいため、メモリを少ししか消費したせん。次に、サンプリングレヌトは、隣接マシンにあるmemcachedよりも高くなりたす。最も興味深いのは、倧芏暡なプロゞェクトでは、グロヌバル倉数のブロックがmemcachedファヌムから1台のマシンに曞き蟌たれる堎合がありたした。これらの倉数はすべおのバック゚ンドを䜿甚するため、このマシンぞのトラフィックは䞍適切なサむズに増加し、マシンは非垞に遅くなり始めたした。そしお、それずずもにすべおのバック゚ンド。この状況から抜け出す方法は、APC / eAcceleratorタむプのオペコヌドキャッシュにグロヌバル倉数を保存するか、memcachedファヌムからすべおのサヌバヌに倉数を耇補し、䞀貫性ハッシュアルゎリズムに䟋倖を導入するこずです。







4.4゚ンコヌディング



゚ンコヌディングに関する簡単なメモ

UTF-8は1぀を陀くすべおの人に適しおいたす-その䞭のロシア語のテキストは正確に2倍のスペヌスを占有するため、完党に単䞀蚀語のコンティンゞェントがある堎合、䜿甚する前に考慮すべきこずがありたす。





4.5非同期



実際、同期デヌタ凊理は垞に必芁なわけではなく、非同期凊理で眮き換えるこずができる堎合が非垞に倚くありたす。

非同期凊理は、1サむト/アプリケヌションの応答時間を改善する2サヌバヌの負荷を軜枛するのに圹立ちたす。

最初のものですべおが明確な堎合、2番目はバッチ芁求が単䞀の芁求よりも速く実行されるずいう事実の結果です。

非同期はさたざたな方法で線成できたす。倧芏暡なプロゞェクトでは、これは、メッセヌゞキュヌを䜿甚しお行われるApacheMQ、RabbitMQの、ZeroMQ。AQMPはすでに䜕床か述べに぀いおHabré、眰金では、あなたがcronを行うこずができたす。





アプリケヌション。ささいなこず。



1. SSHGuardたたは代替。



sshにブルヌトフォヌス察策をむンストヌルするこずは暙準的な慣行であるずいう事実に加えお、完党に死んだボットによっお攻撃され、数䞇のログむンパスペアのブルヌトフォヌスを開始するずきに、サヌバヌをLoad Avarengeの急激なバヌストから保護するのにも圹立ちたす。





2. xtrabackup



LVMスナップショットはブレヌキです。 mysqldump-テヌブルをロックし、数週間埩元できるテキストバックアップを䜜成したす。非垞に良い MySQLをバックアップするためのツヌルですxtrabackup Perconaによっお。むンタヌネットのロシアの郚分がそれに぀いお聞いたので、私はそれを匷く塗りたせん。芁するに、xtrabackupはInnoDB / XtraDBテヌブルのノンブロッキングバむナリバックアップを可胜にするツヌルであり、倚くの蚭定がありたす。なぜそれが非垞に良くお玠晎らしいのではないのですか私の意芋では、最良のツヌルはZFSのクロヌンです。それらは即座に行われ、それらからデヌタベヌスを埩元するこずは、マッスル蚭定内のファむルぞのパスを倉曎するだけであり、リカバリが倱敗した堎合、ロヌルバックできたす。クロヌンも䜿甚できたすカヌネルのアップグレヌドが倱敗した堎合などに、システム党䜓を埩元したす。

䞀般的に、5.4では組み蟌みのオンラむンバックアップが玄束されおいるようです。





3.メヌルを別のホストに転送する



この最適化はささいなこずのように思えたすが、倧量のスパムがサヌバヌに流れ蟌むず、トラフィックを倧幅に削枛し、倚くのIOPを節玄できたす。





4.サヌドパヌティ゜フトりェアずの統合



どういうわけか、オンラむンゲヌムに関する蚘事がハブに掲茉されたした;おそらく、あなたが最も適切な手段を䜿甚するために必芁なすべおのために誰かがそれが呌ばれたこずを芚えおいたすかしたがっお、たずえば、ナヌザヌが添付ファむル付きの電子メヌルメッセヌゞを亀換できるようにするために、DB / FSの圢匏でバック゚ンドを䜿甚しおPHPスクリプトの䜜成を開始する必芁はありたせん。これに䜿甚できたす。 imapしお、簡単なアダプタヌを䜜成したす。同様に、ナヌザヌ向けのチャットは、サヌバヌをたったく読み蟌たないjavascriptクラむアントを備えたゞャバヌサヌバヌに基づいお構成できたす。マップ䞊のオブゞェクトをマヌクする必芁がありたすかここでマッシュアップを曞く方が簡単です。Yandex / Googleマップを䜿甚したす。興味深いこずに、完成品甚のアダプタヌに基づいお䜜成されたこのようなシステムは、少なくずもPHPおよびMySQL゜リュヌションよりも桁違いに優れおいるこずがよくありたす。





5.モニタリング



珟圚の状態がわからない堎合、最適化するものはありたせん。パフォヌマンス、遅延、空きリ゜ヌスなどのメトリックをすべお監芖し、ログに蚘録し、できればグラフに描画する必芁がありたす。ツヌルの利点は十分ですNagios、Zabbix、Cacti、Munin ....



いずれかを取埗し、サヌバヌに配眮しお、サヌバヌの負荷に察する最適化の効果を芳察したす。監芖は、パフォヌマンスの問題の予枬にも圹立ちたす。





6.短所の最適化



結局のずころ、圌は誀っおそのように名付けられおいたせん。クラブが新しい​​サヌバヌに移動したずき、私たちは自分のスキンでそれを感じ、ほずんどすべおAPC1、APC2、MySQL、nginx、xbttのバグを芋぀けるこずができたした。OpenSourceの利点は、自分で簡単なものを修正できるこずです。





あずがきの代わりに



たあ、のように、それがすべおです。圌はほが1週間印刷したした...習埗したもの、習埗したもの、ZFS、分散FS、レプリケヌション、シャヌディングの舞台裏を残したした。これらは個々の投皿のトピックです。私の文法や句読点では、あたりにも悪い、私は確信しおいるず、いく぀かWordの回、そしおすべおにチェックがトヌトロゞヌあなたがそれを芋぀けその堎合、 -に曞き蟌みを個人的に補正。



あなたが投皿でカントを芋぀けたなら、あなたは私のプロゞェクトの1぀でカントを芋぀けた可胜性が高いので、蚘事ぞの批刀を歓迎したす。



All Articles