构建高性能Web站点-9.Web组件分离

声明式开发
• 阅读 1874

以下内容为《构建高性能Web站点》的读书笔记

因材施教

根据Web组件的来分析Web组件的差异

  • 文件大小

  • 文件数量

  • 内容更新的频率

  • 预计并发的用户数

  • 是否需要脚本解释器

  • 是否涉及大量CPU计算

  • 是否访问数据库

  • 访问数据库的主要操作是读还是写

  • 是否包含远程调用(RPC)

对应的优化方法

  • 是否使用epoll模型

  • 是否使用sendfile()系统调用

  • 是否使用异步I/O

  • 是否支持HTTP持久连接(HTTP Keep-alive)

  • 是否需要支持opcode缓存

  • 是否使用动态内容缓存以及有效期为多长

  • 是否使用Web服务器缓存以及有效期为多长

  • 是否使用浏览器缓存以及有效期为多长

  • 是否使用反向代理缓存以及有效期为多长

  • 是否使用负载均衡策略

Web组件的分离的目的是便于采取针对性的最佳优化方案,是的Web组件能够充分利用服务器资源,达到符合各自实际情况的吞吐率最大化(单位时间内的处理请求数,一般指每秒处理的请求权数)

组件拥有自己的域名

分离前
www.demo.com

分离后
images.demo.com
upload.demo.com
static.demo.com
js.demo.com
。。。

小问题

在对分离后的组件进行请求时,会把www.demo.com也带上,对于这个有两种解决方法

  • 限制cookies顶级域名只对主机域名服务

  • 使用顶级域名来指向web组件,例如:www.img-demo.com,保存了demo.com的所有图片资料

同时,使用上面的第二种解决方案,顺带解决了浏览器并发请求同一域名站点的请求数限制。参见下表格。

浏览器 HTTP /1.1 HTTP /1.0
IE 6,7 2 4
IE 8 6 6
Firefox 2 2 8
Firefox 3 6 6
Chomre 1,2 6 -

动态内容

  • 开启opcode动态缓存

  • 足够快的CPU(例如使用多核CPU)

  • 大的内存(内存不大,会使用swap空间,与硬盘之间频繁复制数据)

  • 多进程(多实例web进程或者fastcgi进程)

  • 与数据库保持高速连接(单机使用unix socket连接,多机只能通过TCP进行连接,跨机房建立DDN专线)

  • 可靠的数据中心

动态内容放在反向代理的后端,并且对一些动态内容进行了反向代理的缓存。

如果是使用web api的话,则可以单独设置域名,例如:api.demo.com,部署在反向代理后端之外,此时的数据不会被反向代理缓存

同时分离代理的好处

  • 域名更具有可读性,用户容易记忆

  • 有利于服务独立统计

  • 有利于服务独立扩展,该处涉及dns的负载轮询

同时压力小的时候,可以把所有域名指向一台服务器,静态内容再分发到其他服务器上

静态网页

  • 支持epoll

  • 非阻塞I/O

  • 异步I/O

  • sendfile()系统调用

  • 单进程

  • 使用Raid分区

  • 足够大的带宽

图片和样式表和Javascript

开启Web服务器的keep-alive,设置Expires过期时间,避免重复的请求开销

点赞
收藏
评论区
推荐文章
凝雪探世界 凝雪探世界
4年前
JavaScript基础加ES6语法
JavaScript一、什么是JavaScript当下最流行的脚本语言,在世界上的所有浏览器中都有js的身影,是一门脚本语言,可以用于我们与web站点和web应用程序的交互,还可以用于后台服务器的编写,例如node.js二、语法特点基于对象和事件驱动的松散型,解释型语言单线程异步三、JavaScript作用页面的交
Stella981 Stella981
3年前
Linux应急响应(三):挖矿病毒
0x00前言随着虚拟货币的疯狂炒作,利用挖矿脚本来实现流量变现,使得挖矿病毒成为不法分子利用最为频繁的攻击方式。新的挖矿攻击展现出了类似蠕虫的行为,并结合了高级攻击技术,以增加对目标服务器感染的成功率,通过利用永恒之蓝(EternalBlue)、web攻击多种漏洞(如Tomcat弱口令攻击、WeblogicWLS组件漏洞、Jboss
Stella981 Stella981
3年前
SpringBoot 注册Servlet三大组件【Servlet、Filter、Listener】
由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。注册三大组件,classMyServlet()/classMyListener/classMyFilter需要自己亲自编写!!1\.classMyServletpa
Stella981 Stella981
3年前
R语言代写线性混合效应模型Linear Mixed
本文介绍了线性混合效应模型的新型贝叶斯分析。该分析基于部分折叠的方法,该方法允许某些组件从模型中部分折叠。得到的部分折叠的Gibbs(PCG)采样器被构造成适合线性混合效应模型,预计会比相应的Gibbs采样器表现出更好的收敛特性。为了构建PCG采样器而不使组件更新复杂化,我们考虑通过在线性混合效应模型中根据组内方差表示组间方差来重新参数化模型组件。简介
Stella981 Stella981
3年前
Bypass ngx_lua_waf SQL注入防御(多姿势)
0x00前言ngx\_lua\_waf是一款基于ngx\_lua的web应用防火墙,使用简单,高性能、轻量级。默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则:select.(from|limit)(?:(union(.?)select))(?:from\Winformation_schema\W)这边
Stella981 Stella981
3年前
Servlet的使用
1\.什么是Servlet      sun公司制定的一种用来扩展web服务器功能的组件规范(1)扩展web服务器功能             早期的web服务器,比如apachewebserver,iis等,只能处理静态资源的请求(即需要事先将html文件写好并保存到web服务器相应的目录下),不能处理动态资源
Wesley13 Wesley13
3年前
ASP.NET站点文件类型和应用程序文件夹
ASP.NET站点文件类型:aspx文件:标准的Web窗体文件,即用户界面。ascx文件:ASP.NET用户控件,用户控件与Web页面类似,但是用户将不能直接访问这些文件,必须将用户控件添加Web页面。用户界面最大的优点在于重用。Master文件:Web应用程序的母版页。asmx文件:ASP.NET Web
Wesley13 Wesley13
3年前
mysql商品库存扣减问题总结
文章讨论内容秒杀类的问题一直都是web领域比较热点的问题,一个超高并发的网站需要考虑从产品、前端优化、站点部署及后端服务等等所有环节进行考虑。mysql所能抗住的写压力是一定的,高并发的web站点,你需要在数据持久化之前控制好压力,而不是把所有的请求都落到数据服务这一层。今天我不在这篇文章里讨论秒杀整体设计的问题(我也没这个资格),我们讨论