您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

大型网站架构设计与方法总结

时间:2019-10-08 14:47:32  来源:  作者:

大型网站架构设计是一个循序渐进的过程,围绕“性能、可用性、伸缩性、扩展性、安全性”展开,下面是个人关于网站架构方面的一些总结,不到之处请大家多多批评。

前端

  • CDN加速css/JS/图片等静态资源使用CDN加速,设置缓存时间、Referer限制(防盗链)等进行流量优化;
  • 减少HTTP请求:将CSS/JS/图片等静态资源合并,可以利用webpack等前端构建工具进行处理
  • 启用浏览器缓存和文件压缩:压缩图片、JS/CSS混淆压缩、Web服务器开启Gzip压缩&设置文件expire缓存时间;
  • 异步加载:动态接口通过Ajax异步加载,减少网络请求(可以通过JSONP或者设置Access-Control-Allow-Origin进行跨域);
  • 使用验证码:使用短信或图像验证码,提高验证码的复杂度及多样性,缓解羊毛党带来的流量冲击;
  • 减少Cookie传输:Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输,例如针对CDN采用独立域名,可以减少静态资源加载携带Cookie信息;

缓存

关于缓存,永远要记住二八定律:80%的业务访问集中在20%的数据上。将热点数据进行缓存,可以降低网络I/O和磁盘I/O,极大提升响应速度,除了前端本地资源缓存外,服务端缓存常见做法如下:

  • 页面静态化:缓存整个页面,或者局部缓存,减少数据读取和运算频率;
  • 数据缓存:充分利用NoSQL数据库,例如memcached、redis、mongodb等,可以部署集群或分布式缓存,提高缓存命中率,减少数据访问的压力,可以进行缓存预热、预先加载热点数据,同时需要防止缓存穿透

消息队列

  • 异步解耦:利用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等)对文本、图片、音频、视频等进行过滤和审核。

总结

架构的演变,遵循着”分层->分割->分布式”的思路不断深入,是随着业务的增长,不断积累经验、优化、改良的过程。业务发展是架构发展的主要力量,架构的核心价值是服务业务的灵活发展。所有的架构设计必须以了解业务特点作为出发点,需要考虑互联互通、负载均衡、网络、开发、缓存、存储、数据库、安全性等层面,这些层面看似一个整体,任何一个环节出问题都可能导致整个崩溃,所以一个高可用、高并发的平台还少不了监控、开发、运维等角色通力协作。

大型网站的架构设计,作者也在不断的学习和实践,特别是微服务架构和K8S的运用,必然是未来主流的架构思想,作者正在努力学习。关于本文内容,欢迎大家积极补充。



Tags:网站架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
网站架构变迁Intro从最早的 html 的学习到现在从单体应用迁移到微服务架构,所经历的网站架构也一直在变化,想写一篇关于网站架构变迁的文章。单服务器最早的我们的网站只有一...【详细内容】
2020-05-08  Tags: 网站架构  点击:(49)  评论:(0)  加入收藏
为了使网站这个虚拟的大建筑能够应对高并发访问,海量数据处理,高可靠运行等一系列问题,架构要素和分层架构是必不可少的,就犹如盖房子要用建筑材料一层一层盖一样。满山红网站...【详细内容】
2020-01-09  Tags: 网站架构  点击:(71)  评论:(0)  加入收藏
一、大型网站系统的特点高并发,大流量: 需要面对高并发用户,大流量访问,Google日均PV数为35亿,日均IP访问数为3亿,2011年腾讯QQ最大用户在线数1.4亿,淘宝2012年双11活动一天交易额...【详细内容】
2019-10-22  Tags: 网站架构  点击:(74)  评论:(0)  加入收藏
说道大型网站,就的先说大型网站的特点:高并发,大流量,高可用,海量数据等。下面就说说大型网站的架构演化过程吧。1、初始阶段的网站架构初始阶段都比较简单,通常一台服务器就可以...【详细内容】
2019-10-08  Tags: 网站架构  点击:(141)  评论:(0)  加入收藏
大型网站架构设计是一个循序渐进的过程,围绕“性能、可用性、伸缩性、扩展性、安全性”展开,下面是个人关于网站架构方面的一些总结,不到之处请大家多多批评。前端 CDN加速:CSS/...【详细内容】
2019-10-08  Tags: 网站架构  点击:(115)  评论:(0)  加入收藏
最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责。网站一般分为三个层次:应用层、服务层和数据层,其具体结构如下图所示:...【详细内容】
2019-09-10  Tags: 网站架构  点击:(176)  评论:(0)  加入收藏
一、软件负载均衡概述硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有Ng...【详细内容】
2019-08-08  Tags: 网站架构  点击:(211)  评论:(0)  加入收藏
今天我们来谈谈一个网站一般是如何一步步来构建起系统架构的,虽然我们希望网站一开始就能有一个很好的架构,但马克思告诉我们事物是在发展中不断前进的,网站架构也是随着业务的...【详细内容】
2019-07-30  Tags: 网站架构  点击:(253)  评论:(0)  加入收藏
电商网站:高并发、集群、负载均衡、系统安全、海量数据、高可用、分布式。每一个特点都可能变成痛点!会给系统形成很大的压力,而SOA分布式架构刚好能解决这些问题。什么是SOA?SO...【详细内容】
2019-07-26  Tags: 网站架构  点击:(282)  评论:(0)  加入收藏
前言我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变。该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管...【详细内容】
2019-06-17  Tags: 网站架构  点击:(351)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条