处理器:核心数、主频、制程工艺、线程数、缓存等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模块等方法扩展集群规模。
缓存:
架构: