首页 > 编程知识 正文

php高并发怎么处理,微网站架构设计

时间:2023-05-04 19:12:58 阅读:117141 作者:171

最近在学习大型网站的体系结构设计,为了复习和加强,我想总结记录学习过程中的一些事情。 首先,让我们看看大型站点的体系结构图:

从左侧开始,首先,CDN服务器和反向代理服务器用于缓存用户请求的资源。 两者的区别在于,CDN部署在网络提供商的机房中,用户可以在附近获得。 反向代理部署在网站中心机房。 CDN和反向代理的目的是尽快向用户返回数据。 这加快了恢复到用户资源的速度,并减少了后端服务器上的负载。

到下面,是用于将用户请求发送到服务群集的负载平衡调度服务。 其中,a、b APP应用服务器可以是Tomcat服务器集群,但上面只引入了Action,即我们平时编写的控制器层的代码。 在此调用为不同服务单独部署的业务层代码。 大型网站划分业务,并分别部署不同的APP应用程序。 如果某些业务请求量大且业务处理时间长,则可以根据情况将其添加到消息队列中,以实现快速恢复。 最后,调用分布式业务服务分布式的数据库系统来实现数据的存储。 在右侧,可以将文件部署到分布式文件服务器上。 右上,使用分布式缓存服务器缓存平时访问最多的数据的20%。 二八定律: 80%的业务访问集中在20%的数据上。 最底层的两个是由于网站业务相当复杂,使用nosql等非关系数据库和搜索引擎等非数据库查询技术进行数据的存储和检索。

以上是大型网站的大致框架。

总体框架结束了,接下来说点具体的吧。 大型网站的核心体系结构元素:性能、可用性、可扩展性、可扩展性和安全性。

首先谈谈性能:

web前端性能优化: web前端的主要优化手段一般包括浏览器访问优化、反向代理、CDN的使用等。

优化浏览器访问: 1减少http请求的开销需要成本,因此必须最大限度地减少http请求的次数。 主要手段是将javascrit、css、图像合并为一个文件,浏览器只需一次请求即可。 2使用浏览器缓存的站点不经常更新资源(如css、javascript、徽标和图标),并且可以设置http标头的Cache-Control和Expires属性以在浏览器中缓存。 3启用压缩后,可以在服务器端压缩文件,文本文件的压缩效率达到80%以上,因此启用GZip压缩时,HTML、CSS和Javascript文件非常有效。 4 css文件位于页面顶部,Javascript位于页面底部,浏览器在下载所有CSS后进行页面渲染。 Javascript已加载。因此,您可以先下载css文件,然后将Javascript放在最后。 cdn加速内容分发网络(cdn )的本质仍然是缓存,通过将数据缓存在离用户最近的位置,用户可以以最快的速度检索数据。 常规缓存静态资源。 反向代理反向代理服务器必须保护服务器的安全,来自互联网的请求必须通过代理服务器。 因此,将静态数据放置在代理服务器上,当用户第一次访问静态内容时,静态内容被缓存在代理服务器上,并可以在其他用户请求时直接返回,从而减轻web服务器的负担优化APP应用服务性能优化服务的手段主要有缓存、集群、异步等。 异步操作:对于高并发,如果不使用消息队列,则如果用户请求直接写入数据库,则会对数据库造成很大压力,并会加剧响应延迟。 使用消息队列异步写入数据库,可以起到峰值剪切的作用,改善网站的可扩展性,提高网站的性能。 集群的使用:在网站并发访问较多的场景中,使用负载均衡技术构建由APP应用程序用的中断服务器组成的集群,将并发访问请求分发到多个服务器进行处理,避免负载过大导致一个服务器的响应变慢代码优化: 1从资源利用角度看,多线程使用多线程的原因主要有两个。 I/o块。 线程执行I/o处理时,阻止cpu并等待I/o。 多线程io块和执行交替,可充分利用cpu。

多cpu :在一台服务器上有多个cpu,并且手机上有四核cpu的时代,必须启用多线程才能充分利用这些cpu。

2资源复用资源复用主要有两种模式:单个实例和目标池。 示例:使用示例模式是很自然的,因为web开发主要使用贫血模式,使用大量无状态对象,并且不需要重复创建。

线程池:对象池通过重用对象实例来减少对象的创建和资源消耗。

3数据结构可以在不同的场景中使用适当的数据结构,通过改写数据和计算特性来大幅优化程序的性能。 4当垃圾回收web APP应用程序在具有垃圾回收功能(如JVM )的环境中运行时,了解垃圾回收的工作原理有助于优化程序、进行参数调整以及为内存编写安全代码。 网站体系结构的可伸缩设计一般是。 网站的伸缩性设计可以分为基于功能物理分离实现伸缩和单一功能通过集群实现伸缩两种。 前者为每个服务器部署不同的服务,而后者提供不同的功能,则集群中的服务器部署相同的服务以实现相同的功能。 APP应用集群的可伸缩性设计负载均衡是实现可伸缩性设计的关键技术。 通过按照某些规则将用户请求分发给集群的不同服务器,感知或配置集群的服务器数量,及时发现新联机或脱机的服务器,从而提高APP应用服务器集群的可扩展性实现负载均衡的技术包括http重定向负载均衡

http服务是常见的APP应用服务,唯一的功能是根据用户的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模拟黑客行为的工具。

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。