庞大的业务訪问量需要高性能、可靠的server框架支撑。高性能要求server在巨大压力下仍然快速执行,读写返回正确的业务信息,前端用户体验良好。可靠性要求server出现宕机、罢工等状况,可以及时恢复server正常工做状态,支持业务系统24小时健康执行。使用缓存、读写分离技术提升server訪问资源速度。解决大訪问量资源拥堵问题;使用负载均衡与高可用技术提升server响应速度以及server稳定性,解决server处理大用户量请求问题以及server宕机的及时恢复能力。
同一时候,需要部署运维监控平台。监控server上服务程序与资源使用状况,出现故障及时报警通知运维人员。前端
server系统的安全加固问题也不能忽视。防范于未然。mysql
依照上述需求。基础架构划分如下几个模块:负载均衡与代理、Web主站服务、APP接口服务、图片server、数据库与缓存服务。nginx
client经过域名解析直接訪问到负载代理server,后端全部訪问与响应操做对用户透明。算法
图片也可以单独开来,不通过负载均衡代理server,使用单独的域名进行图片读写。当图片服务数量上来了,也要配置单独的负载均衡代理server。组合server集群。而这里图片server与其它服务共用一样负载,这样负载压力大,easy出现故障,追溯问题源头工做也会变得复杂。因此说。不一样的服务集群。最好使用不一样域名、不一样负载均衡进行代理。client直接经过负载訪问相关服务。负载直接代理到服务子群。再也不对服务进行推断划分。分工更加明白,出现故障也easy解决。
sql
图片server也可以不需要存在与其它服务直接訪问关系。他们仅仅需要保存好訪问图片相应关系。包含图片所属ID、路径、标识等。数据库
负载均衡代理主要是两个做用:实现多台机器依照算法轮流工做,分担服务压力,当一台机器宕机或者罢工,其它机器也可以继续执行。代理隐藏服务内部真实结构,多台对外提供统一地址,执行一样业务系统。apache
负载代理server自己也需要支持高可用性能,主从备份机器,主server发生问题时,从server及时顶替继续执行负载代理服务。Keepalived可以支持高可用性能,更加可以配置Keepalived本身主动执行本身定义检測脚本,检測server的心跳,本身主动递减server的优先级。实现服务本身主动偏移功能。
如下几个组合可以完毕上述功能,各个组合側重点有所不一样。所处的网络层次也有不一样。网络四层主要针对IP地址负载均衡,而网络七次针对URL,更有支持四层与七层的,側重于TCP/IP协议栈。
LVS+Keepalived:LVS工做于网络四层结构。针对IP地址进行网络数据报转发,实现负载均衡代理功能。器配置相对复杂。性能稳定,支持超大訪问量的集群负载。对外提供统一的虚拟IP,有三种工做模式,十种左右的轮询算法。后端
Nginx+Keepalived:Nginx工做与网络七层结构,配置相对简单。支持URL、文件夹等正则处理更加贴近实际生产需求。可以支持较大訪问量的集群负载。
Haproxy+Keepalived:Haproxy工做网络四层与网络七层都可以,配置相对简单。负载均衡速度不亚于Nginx,值得一提的是Haproxy可以进行DDOS攻击防护,之后应该深刻研究Haproxy。
缓存
主站框架是一个Webserver(apache、tomcat、nginx等)集群。集群中全部机器执行一样业务系统。tomcat
经过负载均衡代理与client通信,每一次通信仅仅有一台机器为当前client服务。
需要解决session共享问题。不然将会丢失用户的登陆状态,在用户体验方面有逻辑错误。常见的共享session方法有数据库共享、cookie共享、内存共享。使用最多的是memcache共享方式,memcache把多个server的共享内存拼接成一块大的内存使用。保存用户的session信息。Tomcat服务集群可以简单配置memcache共享内存,PHP中也可以直接配置设置memcache共享内存。
Nginx负载解决session的方式:ip_hash、sticky。ip_hash依据IP保存响应server,在一张存储表单中,IP相应上次訪问的server,之后来自于该IP的訪问都使用这个这台server,解决session问题。存在局限性影响负载均衡的功能。Sticky使用cookie的方式解决session共享问题,事实上是避开session共享。Sticky把cookie与server绑定,存储于client缓存其中,client再次訪问时直接进入到cookie绑定的server,关闭clientsession也随之消失。
接口服务与主站服务功能大同小异,也是Web服务集群。在负载代理时候,经过七层代理转发正则匹配域名与文件夹。指向接口服务地址port。
对于划分更加细节的系统架构,接口服务也是单独的域名,启用四层负载代理链接集群,服务功能更加简单明了。
图片服务创建在分布式文件系统基础上,搭建Web服务主要支持图片訪问上次下载功能。结合读写分离技术。图片上传划分一个子群,图片下载划分一个子群。前面搭建负载均衡server支持大量读写操做。两个子群创建在同一个文件系统,组成分布式文件系统。常见的文件系统有NFS、FastDFS、TFS、Hadoop等。
NFS是共享挂载方式,訪问图片时仍然占用网络带宽,没有文件备份处理。出现问题不easy恢复。FastDFS是一个分布式同步文件系统,稳定性好可靠,提供各类语言clientAPI便于开发。
TFS是淘宝正在使用的图片server文件系统,支持海量图片读写操做。对于大文件存储能力欠佳。Hadoop是比較火的大数据平台。高容错高吞吐量。技术成熟,分布式文件系统很好的选择。
假设服务訪问量很是大,数据库是訪问速度最重要的影响因素。
数据的读写操做每每占用大部分时间。数据表上百万级别记录,update操做时间开销会很是大。而且外面有一条几万的数据库操做队列。那是人不崩溃,机器已经崩溃。首先是CPU占满,数据库里面堆满上锁sql语句,致使前端反应速度跟不上蜗牛。
对数据库訪问频繁数据记录数量巨大的表,进行分片操做,细化数据表提升sql运行速度。数据库server使用分布式架构部署。前面架设负载均衡server,结合数据库读写分离技术。常见数据库db二、oracle、mysql等,对于分布式mysql系统,可以使用MyCat中间件管理。
缓存可以提升服务的响应速度,处理及时性要求高的数据时,数据首先进入缓存,而后经过消息队列写入到数据库。从数据库查询出来的实时数据也可以保存在缓存中,在缓存中直接提供用户訪问,运行用户操做数据请求,再把数据返回数据库。
Redis是一款出色的缓存server,内存级别的键值对数据库,支持丰富数据结构,数据库操做命令也是很是齐全。最重要是Redis操做速度很是快。知足缓存server需求。
Redis提供单机的分片集群,单机硬件性能要求比較高。Redis也可以进行分布式部署,搭建分布式缓存服务。
安全配置:隐藏常见系统服务信息、配置用户权限、开启防火墙、关闭无用系统服务、按期更新系统
风险评估:进行渗透測试、漏洞扫描
安全防护:配置IDS\IPS、进行源码审计、DDOS防护、恶意代码检測
配置运维监控平台。实时监控server的健康情况。CPU、内存、磁盘、输入输出、网络性能等參数,配置报警规则,触发报警是立刻调用API接口或者第三方回调,发送报警信息到邮箱、微信等。
同一时候。自定监控数据项。检測Web服务、数据库服务、后台程序等执行状态,连续出现拒绝服务行为立马报警,通知管理员。