高并发的大型网站架构设计

news/2024/5/21 21:04:00/文章来源:https://blog.csdn.net/zoroduyu/article/details/79187169

最近在学习大型网站的架构设计,便想把学习过程中的一些东西总结记录下来,以便复习和巩固提高。先来看看大型网站架构图:

大型网站架构图

从左边开始,先是CDN服务器和反向代理服务器,都用于缓存一些用户需要请求的资源。两者的区别在于CDN部署在网络提供商的机房,用户可以就近获取;反向代理则部署在网站中心机房。使用CDN和反向代理的目的都是尽快返回数据给用户。这样可以加快返回用户资源的速度,也减轻了后端服务器的负载压力。
往下走,是一台负载均衡调度服务器,用于将用户的请求发送到服务器集群上。这里面A,B应用服务器可以是Tomcat服务器集群,只不过它上面只部署了Action,也就是我们平时写的controller层的代码。在这里面去调用被分别部署在不同服务器上的业务层代码(大型网站会进行业务拆分,将不同的应用独立部署)。如果某些业务请求量较大,业务处理时间较长,可以根据实际情况来将其加入消息队列,以达到快速返回的目的。最后,由分布式的业务服务器去调用分布式的数据库系统实现数据的存储。右边,文件这些东西可以部署在分布式的文件服务器上。右上,使用分布式缓存服务器将平时最常访问的20%数据(二八定律:80%的业务访问集中在20%的数据上)缓存起来。最下面两个,由于网站业务相当复杂,采用一些非关系数据库如nosql和非数据库查询技术如搜索引擎进行进行数据的存储和检索。
以上,就是一个大型网站的大体架构。
总体架构讲完了,接下来讲一点具体的东西。大型网站核心架构要素:性能,可用性,伸缩性,扩展性,安全性。
先来讲性能:

web前端性能优化:

一般来讲,web前端主要优化手段有优化浏览器访问,使用反向代理,CDN等。

浏览器访问优化:

1 减少http请求
http请求的开销都很昂贵,应该尽量减少http请求次数。主要手段是将javascrit,css,图片合并成一个文件,这样浏览器只需一次请求。
2 使用浏览器缓存
对网站而言,css,javascript,logo,图标这些资源更新频率低,可以设置http头中的Cache-Control和Expires属性将其缓存在浏览器中。
3 启用压缩
可以在服务器端对文件进行压缩,文本文件的压缩效率可达80%以上,因此HTML,CSS,Javascript文件启用GZip压缩可以达到较好的效果
4 css文件放在页面最上面,javascript放在页面最下面
浏览器在css全部下载完之后才进行页面渲染,而javascript则是加载后就立即执行。因此先进行css文件的下载,javascript放在最后即可。

cdn加速

CDN(内容分发网络)本质仍是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获取数据。一般缓存静态资源。

反向代理

反向代理服务器可以保护服务器的安全,来自互联网的请求必需经过代理服务器。所以也可以在代理服务器放一些静态数据,当用户第一次访问静态内容时,静态内容就被缓存在方向代理服务器上,其他用户请求进来时,就可以直接返回,减轻web服务器负载压力。

应用服务器性能优化

服务器的优化手段主要有缓存,集群,异步等。

异步操作:

在高并发情况下,若不使用消息队列,用户请求直接写入数据库会对数据库造成巨大的压力,同时使响应延迟加剧。使用消息队列,异步写入数据库,可以起到很好的削峰作用,改善网站的扩展性,提升网站性能。

使用集群:

在网站高并发访问的场景下,使用负载均衡技术为应用构建一个堕胎服务器组成的集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢。

代码优化:

1 多线程
从资源利用的角度来看,使用多线程的原因主要有两个:
  • io阻塞:当线程进行io处理时,会阻塞cpu以等待io。利用多线程io阻塞与执行交替进行,可以最大限度利用cpu。

  • 多cpu:一个服务器有多个cpu,在这个手机都有四核cpu的时代要想做大限度使用这些cpu,必需启用多线程。

2 资源复用
资源复用主要有两种模式:单例和对象池。
  • 单例:由于web开发中主要使用贫血模式,使用很多无状态对象,无需重复创建,因此使用单例模式自然而然的事。

  • 线程池:对象池通过复用对象实例,减少对象创建和资源消耗。

3 数据结构
在不同的场景中使用适当的数据结构,改写数据和计算特性可以极大优化程序的性能。
4 垃圾回收
如果web应用运行在JVM等具有垃圾回收功能的环境中,理解垃圾回收机制有助于程序优化和参数调优,以及编写内存安全的代码。

网站架构的伸缩性设计

一般来说。网站的伸缩性设计可分为两类:一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的功能;后者是集群内的服务器部署相同的服务实现相同的功能。

应用服务器集群的伸缩性设计

负载均衡是实现伸缩性设计的关键技术。因为它能将用户的请求按照某种规则分发到集群不同的服务器上,且能感知或配置集群的服务器数量,及时发现新上线或下线的服务器,以此来实现应用服务器集群的可伸缩性。实现负载均衡的技术有以下几种:
  • http重定向负载均衡

       http服务器就是一台普通的应用服务器,唯一功能就是根据根据用户的http请求计算一台真实的web服务器地址。这种方案的优点是比较简单。缺点是浏览器需要两次请求服务器才能完成一次访问,性能较差;实践中不常采用。
    
  • dns域名解析负载均衡

     每次域名解析请求都会根据负载均衡算法计算一个不同的ip地址返回。优点是将负载均衡工作交给dns,省掉了网站管理维护负载均衡服务器的麻烦。缺点是dns负载均衡的控制权在域名服务商那里,网站无法对其做更多的改善和更强大的管理。
    
  • 反向代理负载均衡

    反向代理服务器需要双网卡及内部外部两套ip地址。其优点是和反向代理服务器功能集成在一起,部署简单。缺点是所有请求均经过此,其性能可能成为瓶颈。
    
    • ip负载均衡

      在网络层通过修改请求目标地址进行负载均衡。ip负载均衡在内核进程完成数据分发,有更好的处理性能。但对需要提供下载服务或视频服务的大型网站而言,难以满足需求。

    • 数据链路层负载均衡

      在通信协议的数据链路层修改mac地址进行负载均衡。此模式是目前大型网站采用最广的一中负载均衡手段。

数据库存储服务器集群的伸缩

这里主要将关系型数据库的伸缩设计。对于进行了水平分库分表的数据库,可以用一些分布式数据库产品例如Mycat,Cobar.

利用分布式消息队列降低降低系统耦合性

如果模块间不存在直接调用,那么新增或修改对其他模块的影响就最小。通过在低耦合的模块间传输事件消息,来保持模块的松散耦合。最常用的是分布式消息队列。在伸缩性方面,由于消息队列上的服务器上的数据是即时被处理的,可以看作无状态的服务器,伸缩性比较简单,将新服务器加入分布式消息队列集群中,通知生产者服务器更改消息队列服务器列表即可。在可用性方面,为避免内存空间不足的问题,会将消息写入磁盘。

网站应用攻击与防御:

从互联网诞生之日起,各种web攻击和信息泄漏也从未停止。在此讲一下主要的攻击手段及防御措施。

  • xss攻击

    xss即跨站点脚本攻击,致黑客通过篡改网页,注入恶意html脚本。主要防御手段有两种:1 消毒对某些html危险字符转义,如“>”转义为“&gt”。2 HttpOnly即浏览器禁止页面javascript访问带有HttpOnly属性的cookie。
    
    • sql注入

    sql注入,攻击者在http请求中注入恶意sql命令。防御方法,还是消毒,过滤请求数据中可能注入的sql。或者参数绑定,如mybatis的#{},将攻击者的sql视为参数,而不是可执行sql。

    • csrf攻击

    跨站点请求伪造,攻击者通过跨站请求,以合法用户身份进行非法操作。其核心是利用服务器session或浏览器cookie策略。盗取用户身份。防御方法
    1 表单token。在页面表单加入一个随机数作为token值,提交到服务器进行检查。
    2 验证码
    3 Refer Check
    http请求头的请求域中记录着请求来源,可检查请求来源验证其是否合法。

web应用防火墙
ModSecurity,一种开源的web应用防火墙,探测攻击并保护web程序。
网站安全漏洞扫描
指根据一定规则构造攻击性url模拟黑客行为的工具。

由于本博客只是对大型网站的架构及其用到的技术做一个大致的描述(不太好做详细的讲解,因为这里牵扯的知识点实在太多,而每个知识点又是可以单独提出来写成一片或几篇博客的那种),所以对大多数知识点的讲解只是浅尝辄止,如果想了解更多细节的同学,可以自行百度或者阅读本文的主要参考文献:

大型网站技术架构核心原理与案列分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_886901.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dedecms织梦做中英文(多语言)网站详解

有很多网友都问过我,用dedecms织梦程序如何做中英文网站,今天就给大家来一个详细的图文教程,希望能帮助到大家。 以下所讲的和截图是本人用dedecms织梦程序制作过的一个5国预言网站,下面开始教程。 一、首先在后台建栏目&#x…

织梦手机网站建设 并配置二级域名

现在手机站很流行,如何用织梦程序建手机站并实现数据同步呢?我们都知道通过开发实现数据同步还是比较麻烦的,咱们就来说下利用织梦自动的手机wap浏览是如何实现手机网站建设并配置二级域名的。 首先为织梦安装手机wap浏览模块:找到…

武汉网站建设技术哪家强,武汉八音猫科技

网站建设技术哪家强,中国武汉找八音猫科技。 一、武汉网站建设成功的关键有时候网页设计占了五成。一个成功的网站可以让用户记住你的网站,记住你的品牌,实现高转化。那么怎么才能设计一个成功的网站呢? 1. 吸引眼球第一步&#…

CentOS6.5服务器配置建站环境详细流程

CentOS6.5服务器配置建站环境详细流程 之前的Win主机上挂了十几个WordPress网站,客户普遍反映后台操作已经慢到不行。于是我租了一台新的云主机,这次下决心要搞定Linux 主机了,同样的配置,Linux跑WordPress肯定要快不少&#xff…

vue-cli3.0(@vue/cli)设置网站标题时找不到index.html问题解决

需求 使用Vue做课程设计,需要更改一下网站的题目和图标。 默认效果 想要实现的效果 背景颜色不同是由于上面的浏览器开了暗色模式。 问题 根据在网上查找,很容易得知对于标题只需要很简单的修改index.html里的一行代码即可。对于图标,除…

基于阿里云的网站搭建

阿里云_网站建设——部署与发布 1.建站的基本步骤 (1)网站的访问过程: (2)建网站的基本步骤: (3)域名的分类: 注意:中文和英文就是看一看是否可以包含汉字 …

电商购物网站如何调用第三方支付平台(支付宝,财付通,盛付通等)

各个平台传递参数有所不同,流程基本是一致的。 通常第三方的支付平台都会有一个关于平台api的开发指南,在里面介绍了需要传递参数,返回的参数。 首先是组装平台需要的参数,post到支付宝: Java代码 /** * 发送支付宝htt…

在GitHub上搭建自己的静态网站

问题: 写了网站,在没有买服务器的情况下让别人可以访问: 步骤: 1.准备好要发布的网站的HTML文件 2.下载并安装好GitHub客户端(在客户端操作更加方便): 地址1:https://desktop.github.com/ 地址2: https://pan.baidu.com/s/1SypPfb9yIIQgC9XkXs_NxQ 提取码:u4ve …

网站课程设计(简单线上购物商城)

网站课程设计(简单线上购物商城) 1.开发环境 ​ VS2019,SQL2012,ASP.NET开发 2.项目主题 ​ ​ ​ ​ ​ ​ ​ 刚好完成了网站的课程设计,觉得该好好纪念一下((✪ω✪)),这是一个简易线上购物平台,只是实现了一部分基础功能,例如商品的浏览,添加购物车收藏等.(项目代码在文…

机器学习实战——第二章之改进约会网站的配对效果

三种类型:不喜欢的-1,魅力一般的-2,极具魅力的-3。 样本特征:每年获得的飞行常客里程数,玩视频游戏所耗时间百分比,每周消费的冰淇淋公升数。 1 from numpy import *2 import matplotlib3 import matplotli…

图像网站下载图片

图像网站下载图片 文章目录 准备工作方法一:方法二: 准备工作 实现从百度图片中下载某一类型的图片 import requests from selenium import webdriver通过webdriver打开浏览器,如果遇到问题可以参考https://blog.csdn.net/weixin_49374896…

婚外情网站的谎言和资料外泄故事 企业该吸取怎样的教训

近日被曝全球最大的偷情网站Ashley Madison已遭黑客组织入侵,黑客宣称已掌握超过3700万已婚外遇男女的个人资料,除非达到他们的要求,否则将公布客户的真实姓名、裸照、信用卡详细资料与“性幻想内容”。Ashley Madison去年曾推出只要支付19美…

高考志愿填报小心钓鱼网站 趋势科技PC-cillin 2012保护学生网上报名无忧

[趋势科技中国]– [2012年5月11日] 细节决定成败,随着高考志愿网上集中填报的来临,针对这一高考关口时间的钓鱼网站和网站木马病毒开始明显增多。全球服务器安全、虚拟化及云计算安全领导厂商趋势科技提醒广大考生和家长,在查看高校网站和填写…

适合做个人博客网站的一套静态页面模板,非常不错哦

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 原文:适合做个人博客网站的一套静态页面模板&#x…

开发多用户注册使用的网站---享元模式

我们在实际项目开发过程中,肯定遇到以下类似的情况:专为小型公司注册并显示的公司信息,提供不同样式的显示方式;我们不会为每个注册的账户的公司都开发出一套量身打造的网站,而且才用共享技术的方式来实现核心技术、其…

大型网站架构系列:负载均衡详解(1)

大型网站架构系列:负载均衡详解(1) 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等&…

大型网站架构系列:负载均衡详解(3)

大型网站架构系列:负载均衡详解(3) 本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结 一、软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期…

大型网站架构系列:负载均衡详解(4)

大型网站架构系列:负载均衡详解(4) 本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法。具体参考文章,详见最后的链接。 三、LVS负载均衡 L…

大型网站架构系列:电商网站架构案例(2)

大型网站架构系列:电商网站架构案例(2) 电网网站架构案例系列的第二篇文章。主要讲解网站架构分析,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session。 五、网站架构分析 根据以上预估&#xff…

大型网站架构系列:电商网站架构案例(3)

大型网站架构系列:电商网站架构案例(3) 本文章是电商网站架构案例的第三篇,主要介绍数据库集群,读写分离,分库分表,服务化,消息队列的使用,以及本电商案例的架构总结。 6.5数据库集群&#xff0…