處理器:核心數、主頻、製程工藝、線程數、緩存等css
核心數:一、二、四、六、八、十二、2四、32等
主頻:2.0GHz、2.3GHz等等
製程工藝:22nm、14nm、10nm等等
線程數:一、2
緩存:L一、L二、L3
建議:儘可能選擇核心數越多、主頻越高、製程工藝更新、支持超線程、緩存容量越大,且上市已過半年左右的
處理器。數據庫
內存:容量、頻率、代數後端
容量:1G、2G、4G、8G、16G、32G
頻率:1600、186六、213三、2400MHz等
代數:一、二、三、4代
建議:儘可能選擇單條容量16G或32G的DDR4 2133MHz及以上頻率的內存條。緩存
硬盤:類型、轉速、接口類型、RAID安全
類型:機械和SSD固態
轉速:5400、7200、10000、15000 轉/分(機械硬盤)
接口類型:SATA、SAS、PCI-E
RAID:0、一、五、六、十、50、60
建議:儘可能選擇支持PCI-E的SSD固態硬盤,尤爲數據庫、搜索引擎。服務器
速率:10Mbps、100Mbps、1Gbps、4Gbps、10Gbps
接口類型:以太網、光纖等
建議:大部分服務器默認提供的1Gbps以太網卡夠用。
若有需大數據量高併發訪問的服務器遇到網絡流量高峯跑滿的狀況,能夠改用支持4Gbps或10Gbps的光纖接口網卡。cookie
其餘建議:
通常服務器集成顯卡便可,除非有大量視頻圖像處理或異構計算等特殊需求。網絡
grep -q '7.' /etc/redhat-release if [ $? -ne 0 ]; then Services=$(chkconfig --list | grep '0' | awk '{print $1}' | grep -Ev 'sshd|network|crond|syslog|ntpd') for Service in $Services do service $Service stop chkconfig --level 0123456 $Service off done else Services=(atd avahi-daemon cups dmraid-activation firewalld irqbalance kdump mdmonitor postfix) for Service in ${Services[*]} do systemctl disable ${Service} systemctl stop ${Service} done systemctl enable rc-local fi
內核參數:架構
cat >> /etc/sysctl.conf << EOF vm.swappiness = 0 vm.overcommit_memory = 1 net.core.rmem_default = 262144 net.core.rmem_max = 16777216 net.core.wmem_default = 262144 net.core.wmem_max = 16777216 net.core.somaxconn = 60000 net.core.netdev_max_backlog = 60000 net.ipv4.tcp_max_orphans = 60000 net.ipv4.tcp_orphan_retries = 3 net.ipv4.tcp_max_syn_backlog = 60000 net.ipv4.tcp_max_tw_buckets = 10000 net.ipv4.ip_local_port_range = 1024 65500 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.tcp_mem = 786432 1048576 1572864 fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.sem = 250 32000 100 10000 kernel.pid_max = 65536 fs.inotify.max_user_watches = 1048576 kernel.kptr_restrict = 1 kernel.ctrl-alt-del = 1 EOF sysctl -p
提升系統打開文件數、打開進程數限制,減少默認棧空間大小限制:併發
echo '* - nofile 1048576' >> /etc/security/limits.conf echo '* - nproc 65536' >> /etc/security/limits.conf echo '* - stack 1024' >> /etc/security/limits.conf
cat >> /etc/profile << EOF ulimit -n 1048576 ulimit -u 65536 ulimit -s 1024 EOF
配置:
- 儘可能開啓緩存、緩衝,如:Nginx的fastcgi_cache、open_file_cache,PHP的opcache,MySQL的innodb buffer等等。
- 解鎖資源限制,如:提升打開文件數、增長服務工做進程數、CPU綁定等等。
- 減少磁盤和網絡IO,如:使用批量讀寫數據,tmpfs文件系統代替磁盤,關閉日誌,開啓http服務的keepalive屬性、gzip壓縮等等。
代碼:
- 直接修改應用服務自身源代碼或者使用第三方應用,如:Tengine代替Nginx、MairaDB代替MySQL。
- 藉助性能分析調試工具,如:xdebug、xhprof分析業務PHP代碼,慢日誌和explain工具分析SQL語句等等。
- 添加優化參數,如:gcc編譯優化級別
-O
參數。- 去除多餘模塊,如:Nginx幾乎不多用到的pop3模塊。
- 藉助其它加速模塊或補丁,如:谷歌出品的內存分配庫tcmalloc,阿里巴巴出品的合併靜態文件Nginx補丁Concat。
域名解析負載均衡:經過單個域名解析成多個IP地址,將用戶的請求分發到不一樣的機房。
優勢:簡單,維護比較方便,適合網站鏡像。
缺點:請求分佈不均勻,域名解析緩存影響高可用。
動靜分離:將圖片、視頻、js、css等靜態文件單獨抽離,減少動態請求和靜態請求服務器之間互相影響。
優勢:服務器功能更加簡單,排查問題更加容易。
缺點:開發前期人力物力成本較高。
CDN:將靜態資源部署到離用戶更近的網絡,減少用戶請求的網絡傳輸時間。
優勢:大大提升用戶訪問靜態資源的速度。
缺點:涉及到國內的複雜環境,管理維護成本較高。
負載均衡:分發請求至後端服務器。
優勢:大大提升了後端服務器集羣的性能和擴展性。
缺點:硬件負載均衡太貴。
分佈式內容緩存:將數據庫不常常修改的數據保存至內容緩存服務器。
優勢:能夠很大程度上減少數據庫的讀壓力。
缺點:需解決數據緩存失效和數據庫更新的數據一致性問題,包含使人頭疼的雪崩效應。
消息隊列:不只能夠作消息服務器,還能夠將大量的消耗資源操做轉換成順序異步操做。
優勢:減少瞬間高併發請求和服務器及數據庫負載。
缺點:消息隊列的高可用實現比較複雜,維護難度較高。
網站性能常常出在數據庫瓶頸。
數據庫耗CPU、耗內存、耗IO,優化架構經常使用的最簡單辦法就是儘可能減少數據庫的讀寫操做。
大部分公司的作法都是將請求儘可能截留在數據庫以前的服務器響應,越靠前越好。
能夠將一部分動態內容轉換成靜態內容,進一步減少動態語言服務器和數據庫讀壓力。
還能夠將一部分讀寫數據庫請求轉成消息隊列實現批量操做。
經過分庫分表分區和數據庫代理擴展數據庫集羣的性能。
固然,SQL語句的優化工做需一直堅持。
其他的服務如遇到性能不足時能夠直接經過前置LVS、Haproxy、Nginx+TCP模塊等方法擴展集羣規模。
緩存:
架構: