
大型网站架构的设计是一个循序渐进的过程,重点是“性能、可用性、可扩展性、可扩展性和安全性”。下面是一些关于网站架构的个人总结,不足之处请大家多多指责。
前端
CDN加速:CSS/JS/图片等静态资源使用CDN加速,设置缓存时间、Referer限制(防盗链)等举行流量优化;
削减HTTP请求:将CSS/JS/图片等静态资源合并,可以行使webpack等前端构建工具举行处置
启用浏览器缓存和文件压缩:压缩图片、JS/CSS混淆压缩、Web服务器开启Gzip压缩amp;设置文件expire缓存时间;
异步加载:动态接口通过Ajax异步加载,削减网络请求(可以通过JSONP或者设置Access-Control-Allow-Origin举行跨域);
使用验证码:使用短信或图像验证码,提高验证码的复杂度及多样性,缓解羊毛党带来的流量打击;
削减Cookie传输:Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输,例如针对CDN接纳自力域名,可以削减静态资源加载携带Cookie信息;
缓存
关于缓存,永远记住 28定律: 80%的商业访谈关注20%的数据。缓存热数据可以减少网络I/O和磁盘I/O,大大提高响应速度。除了前端内陆资源缓存,服务器缓存的常见做法如下:
如何注册网站域名(注册手机域名的步骤)
页面静态化:缓存整个页面,或者部分缓存,减少数据读取和操作的频率;
数据缓存:丰富NoSQL数据库,如memcached、redis、mongodb等。、部署集群或分布式缓存、提高缓存命中率、降低数据访问压力、hold 缓存预热、预加载热门数据,同时需要防范。
新闻排名
异步解耦:使用Httpsqs、RabbitMQ、Kafka等排名或新闻中间件,耗时/非瞬时操作会通过排名异步。遵循一个原则:以后能做的事以后再做。
削峰填谷:因为流量变化比较颠簸,峰谷落差比较大,所以有些操作可以存放在MQ队列中。通过拉,并且拉的速率由消费者控制,可以控制流量稳定,达到削峰填谷的目的,或者说提到流量控制的目的。
数据库
使用缓存后,大部分数据读取操作不需要通过数据库来完成,但是需要在缓存不缺失、缓存过期、所有写操作都执行的情况下满足数据库。当用户达到一定规模时,数据库会因为负载压力过大而成为瓶颈。常见的做法如下:
读写星散:行使Mysql主从复制机制搭建读写星散集群,在客户端实现或者服务端行使中间件(例如MyCAT)实现读写星散;
分库分表:针对差别营业类型,举行分库,部署到差别服务器上,削减单服务器压力,同时针对大表,凭据一定条件(如用户ID取模、ID局限)举行水中分表,削减单表读写压力;
数据库毗邻池:充实行使毗邻复用,解决数据库毗邻历程需要占用资源,影响响应速率等问题,PHP自己没有毗邻池,可以行使第三方框架实现(例如SMProxy);
硬件优化:行使磁盘阵列(RAID)提升数据可靠性,资金足够的话可以换SSD硬盘;
负载平衡
营业拆分:凭据URL拆分营业,分发流量到差别的服务器组,防止单一功效模块卡住,而影响整个营业,主要遵照SOA的架构思绪,将营业模块打散(鸡蛋不要放在一个篮子内里)
反向署理负载平衡:充实行使Nginx/Haproxy/LVS反向署理负载平衡,搭建服务器集群,提升并发处置能力;
DNS负载平衡:DNS剖析可以依据差别网络运营商、区域举行划分剖析、从而实现DNS层面负载平衡;
代码
多线程:充实行使多CPU优势举行数据批处置
锁:在高并发情形下,对统一资源读写接见容易泛起脏读、幻读,这个时刻需要对焦点资源枷���,行使Redis或者Zookeeper等可以实现分布式锁;
设计模式:充实行使设计模式,实现逻辑解耦、分层和资源服用,例如单利模式、观察者模式等;
数据结构和算法:好的数据结构和算法可以给程序性能带来很大提升、例如链表查找、快速排序等;
垃圾接纳:优越的编程习惯,例如即时清算内存占用大的变量、制止操作的数据量大等都可以制止泛起内存泄露(OOM)的情形发生。
SQL查询优化:SQL执行效率一样平常是影响响应速率的要害,可以开启SQL慢查询日志,对执行效率慢的SQL语句举行优化;
GIT多分支:优越的分支治理对于CI/CD、版本测试有很好的作用,建议参考git-flow举行一样平常Git协作。
日志:统一的日志输出尺度,有利于举行数据追踪和问题排查。
冗余
数据定期备份:定期全量备份+主从同步增量备份,例如MySQL/Redis主从复制举行增量备份、Mysqldump全量备份、Redis行使RDB或者AOF举行备份;
集群:一定数目的备用服务器,可以保障系统的高可用,防止单点故障,可以连系Keepalived+LVS/HAProxy/Nginx等实现数据库/Web服务器/缓存/新闻中间件高可用集群;
自动化
CI/CD:行使成熟的CI/CD机制实现自动化测试、代码检测,自动化公布,例如可接纳Git+Jenkins+Docker搭建CI/CD工作流。
自动化部署:针对跨越30台的服务器部署,可以接纳ansible举行批量治理
自动监控/报警:监控用户行为日志、服务器日志等 ,可连系zabbix+ELK举行实行;
自动降级和资源调剂:微服务架构范围,作者也在努力学习中。
平安
二次验证:充实手机验证/人脸识别举行二次验证,保障操作的真实性;
web防火墙:传统防火墙仅限于包过滤,网络和端口地址转换(NAT)和VPN等功效。它凭据端口,协媾和IP地址做出决议;Web防火墙(WAF)则提供了HTTP/HTTPS接见请求监控、自定义过滤规则、Web攻击防护、平安合规等功效;可以行使阿里云等提供的WAF服务或者基于Nginx+lua等实现的类似API网关实行类似功效;
内外网间隔:露出出来的IP和端口越少,平安系数越高;例如数据库服务、缓存服务、中间件等只管只允许内外接见,若是确实需要可以通过路由转发或反向署理实现;
数据加密:充实行使非对称加密,例如启用https, rsa加密等,保障数据传输的平安性;
网络攻击:需要防止DDOS攻击、XSS攻击、SQL注入、CSRF等,常见手段CDN加速、高仿IP、Linux内核优化、数据输入输出过滤、Referer限制、表单添加随机token/验证码等;
信息平安:对于垃圾信息、敏感信息可以接纳第三方解决方案(例如网易云盾、百度AI等)对文本、图片、音频、视频等举行过滤和审核。
总结
架构的演进,按照“分层- gt;分解->;“分布式”的思路不断深入,这是一个积累简历,随着业务的提升不断优化改进的过程。业务增长是架构增长的主要力量,架构的焦点价值是服务业务的幼稚增长。所有的架构设计都必须从了解业务特点出发,需要考虑互联、负载均衡、网络、开发、缓存、存储、数据库、安全等方面。这几个方面看起来是一个整体,任何一个环节出现问题都可能导致整个外逃。因此,一个高可用、高并发的平台需要监控、开发、运维的协同工作。
笔者在不断的学习和实践大型网站的架构设计,尤其是微服务架构和K8S的应用,一定是未来主流的架构头脑,笔者正在努力学习。关于这篇文章的内容,欢迎大家来补。