PHP建造一个高可用高性能的网站

news/2024/5/9 18:28:15/文章来源:https://blog.csdn.net/weixin_33979363/article/details/92255060

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1. 说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apache和Nginx的高级web服务器在承受并发量上面都各有千秋,apache的最大承受并发数可以到三四千个,nginx要是它的10倍,但apace的三四千个是实打实的三四千个,nginx的并发数是要依靠缓存的。(哈哈~好久没写博客这下感觉自己还写得挺6的,呵呵~,可不是我自恋哦接下来有你好看),高可用高性能系统这些就要求对mysql的掌握程度相当高,包括memcached,这会大大提高PHP的可扩展性。

        之前模拟过一个高并发的单进程模型(这个对PHP的其它备用缓存的掌握程度有一定要求,有兴趣的可以自己也试下哦!),在并发数达到一定峰值,PHP的某些小小的缺点就会暴露出来,例如异步并发时数据库反应时间不能及时响应导致PHP的处理时间超时问题,swoole的出现对于PHP来说无异于如虎添翼,再将字符串的值放进redis的队列通过点对点的响应进行异步处理来模拟整个过程,其实也不是特别的简单啦,Linux的强大就在于此处,只要你有想法就一切就可以满足你!

          好啦,话不多说,我们来分析分析高兴能高可用的系统。

           

简而言之,采用分布式系统,分布式应用和服务,分布式数据和存储,分布式静态资源,分布式计算,分布式配置和分布式锁。

负载均衡,故障转移,实现高并发。

高可用:

主要是利用冗余数据的原理,应用和服务器部署在多台机器上,数据存储部署在多台机器上,在多台机器上利用mysql的主从分离实现多态服务器数据相互备份,万一有一台服务器宕机,直接转移另外一台数据服务器上读取数据。也不会导致数据丢失。

对于应用服务器,可以通过nginx负载均衡实现设备组成一个集群,如果有服务器宕机,就需要把请求切换到其他服务器上,这样级可以实现高可用,但是,在应用服务器上不能保存请求的会话信息,服务器宕机,会话丢失,即使将用户请求转发到其他服务器上也无法完成业务处理。

对于存储服务器,它是存储数据,数据需要实时备份,当服务器宕机时,只需要将请求转移到其他可用的服务器上即可。

集群:可伸缩性

伸缩性是指可以动态的向集群服务器中添加一个节点或者减少一个节点。

但是,对于缓存服务器,添加节点或者减少节点都会导致数据不可读,虽然可以通过从新访问数据库获得数据,但是,如果应用已经严重依赖缓存,读取那些无法访问的数据,也会导致整个网站瘫痪,所以要改进路由算法来保证缓存数据的可读性。

异步:各个系统之间越独立,它们之间关系越少,越好

单一服务器可以通过多线程实现共享内存队列的方式实现异步,将处在业务前面的线程将输出写入队列,后面的线程将从队列中读取数据进行处理。在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息可以看成是内存队列的分布式部署。

1.松耦合,异步架构是典型的消费者和生产者模式,两者之间不存在直接调用,只要保持数据结构一致,彼此功能可以随意改动没有任何影响,可扩展性高。

2.提高可靠性,一旦消费者服务器发声故障,数据会在消费者消息队列中堆积,不会影响生产者可以继续处理业务请求,系统整体表现无故障,消费者服务器恢复后,继续处理消费者消息队列数据。

3.加快网页反应速度,处在业务处理前的生产者将消息传递给消息队列后,不需要等待消费者返回消息就可以直接返回,响应延迟减少。比如:秒杀业务等。

4.消除并发访问高峰,双11等活动高峰,可能会造成网站并发量大,负载过重,响应延迟,严重甚至宕机,使用消息队列就会将请求数据的消息放入消息队列中,等服务器依次处理,就不会造成服务器压力大,负载过重等情况。

冗余:

利用服务器冗余运行,数据冗余备份,这样当某台服务器宕机的时候,可以将其上的服务和数据访问转移到其他服务器上。访问和负载很小的服务也必须部署至少两台服务器构成的一个集群,其目的就是通过冗余实现高可用。数据库除了定期备份,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离(ameba),实时同步实现热备份。


分层

分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对简单并比较单一的职责,然后通过上层对下层的依赖和调度组成一个完整的系统。

在网站的分层架构中,常见的为3层,即应用层、服务层、数据层。应用层具体负责业务和视图的展示;服务层为应用层提供服务支持;数据库提供数据存储访问服务,如数据库、缓存、文件、搜索引擎等。

分层架构是逻辑上的,在物理部署上,三层架构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,是网站拥有更多的计算资源以应对越来越多的用户访问。

所以虽然分层架构模式最初的目的是规划软件清晰的逻辑结构以便于开发维护,但在网站的发展过程中,分层结构对网站支持高并发向分布式方向的发展至关重要。

分隔

如果说分层是将软件在横向方面进行切分,那么分隔就是在纵向方面对软件进行切分。

网站越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分隔开来,包装成高内聚低耦合的模块单元,不仅有助于软件的开发维护也便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。

大型网站分隔的粒度可能会很小。比如在应用层,将不同业务进行分隔,例如将购物、论坛、搜索、广告分隔成不同的应用,有对立的团队负责,部署在不同的服务器上。

分布式

对于大型网站,分层和分隔的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着可以使用更多的计算机完同样的工作,计算机越多,CPU、内存、存储资源就越多,能过处理的并发访问和数据量就越大,进而能够为更多的用户提供服务。

在网站应用中,常用的分布式方案有一下几种.

分布式应用和服务:将分层和分隔后的应用和服务模块分布式部署,可以改善网站性能和并发性、加快开发和发布速度、减少数据库连接资源消耗。

分布式静态资源:网站的静态资源如JS、CSS、Logo图片等资源对立分布式部署,并采用独立的域名,即人们常说的动静分离。静态资源分布式部署可以减轻应用服务器的负载压力;通过使用独立域名加快浏览器并发加载的速度。

分布式数据和存储:大型网站需要处理以P为单位的海量数据,单台计算机无法提供如此大的存储空间,这些数据库需要分布式存储。

分布式计算:目前网站普遍使用Hadoop和MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算。

安全

网站在安全架构方面有许多模式:通过密码和手机校验码进行身份认证;登录、交易需要对网络通信进行加密;为了防止机器人程序滥用资源,需要使用验证码进行识别;对常见的XSS攻击、SQL注入需要编码转换;垃圾信息需要过滤等。

自动化

具体有自动化发布过程,自动化代码管理、自动化测试、自动化安全检测、自动化部署、自动化监控、自动化报警、自动化失效转移、自动化失效恢复等。

缓存

缓存目的就是减轻服务器的计算,使数据直接返回给用户。在现在的软件设计中,缓存已经无处不在。具体实现有CDN、反向代理、本地缓存、分布式缓存等。

使用缓存有两个条件:访问数据热点不均衡,即某些频繁访问的数据需要放在缓存中;数据在某个时间段内有效,不过很快过期,否在会因为数据过期而脏读,影响数据的正确性。
 

转载于:https://my.oschina.net/u/2364788/blog/2877225

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

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

相关文章

PC比电脑好玩的秘密是什么?答案就是因为有这些神奇的网站!

五花八门小工具合集http://www.nicetool.net/ 该网站真的很“乱”!因为里面的小功能真的很多!无论是Gif制作、证件照换底色、还是搞笑的王思聪微博生成,它都能让你得心意手! 根据你的星座推荐电影https://magicmoviesorter.com/ 如…

10种AJAX/JavaScript特效实例让你的网站更吸引人

今天的话题是如何改进自己网站的界面或提高网站的视觉体验,从而让用户记忆犹新。   我们有三种主要的方法(从难到易):自己动手写脚本;使用类似于jQuery和mooTools的JavaScript框架(可以让编写代码变得更容易些);使用能工作于现有的JavaScript框架下的提前预置好的…

如何在IIS上发布网站

本片博客记录一下怎么用IIS发布一个网站,以我自己电脑上一个已经开发完成的网站为例: 1.打开项目 这是我电脑上的一个项目,现在我记录一下将这个项目发布到iis上的整个过程; 2.在vs2017中发布网站 如下图:右击该mvc程序…

网站服务全面监控

简单的方法:通过端口号或者进程数量 服务 端口 进程 Rsync 873 ? NFS 111? ? MySQL 3306 ? Nginx 80 ? 怎么监控端口? net.tcp.listen[port]检查 TCP 端口 是否处…

Kaggle案例——用python从进网站到获得评测结果

最近写了Kaggle的一个playground项目——预测科比投篮是否命中https://www.kaggle.com/c/kobe...,主要使用python的pandas和sklearn包。 这里和大家分享一下。 首先就是进入Kaggle官网https://www.kaggle.com/,Kaggle是一个专门数据竞赛的网站。经常会有…

PageAdmin CMS网站建设教程:自动任务执行时间设置

PageAdmin Cms发布文章时候有一个上线时间设置和下线时间设置,网站编辑人员可以利用这个功能来实现定时发布,在信息发布界面,如下图: 设置后就会自动加入定时任务中,注意这个功能需要再系统设置>>自动任务执行间…

10种AJAX/JavaScript特效实例让你的网站更吸引人

今天的话题是如何改进自己网站的界面或提高网站的视觉体验,从而让用户记忆犹新。我们有三种主要的方法(从难到易):自己动手写脚本;使用类似于jQuery和mooTools的JavaScript框架(可以让编写代码变得更容易些);使用能工作于现有的JavaScript框架下的提前预置好的脚本或…

国内在线学习网站汇总

2019独角兽企业重金招聘Python工程师标准>>> 一、什么是在线学习网站 在线学习是通过计算机互联网,或是通过手机无线网络,在一个网络虚拟教室进行网络授课、学习的方式。在线学习网站(社区)跟多是通过互联网的方式实现…

大型网站技术架构(四)网站的高性能架构

2019独角兽企业重金招聘Python工程师标准>>> 网站性能是客观的指标,可以具体体现到响应时间、吞吐量、并发数、性能计数器等技术指标。 1、性能测试指标 1.1 响应时间 指应用执行一个操作需要的时间,指从发出请求到最后收到响应数据所需要的时…

推荐几个高质量图片网站,再也不怕没图装X了

这几个图片网站都是高质量的图片网站,建议收藏! 找个高逼格的图片发票圈,不再难了。 Unsplash 网址:https://unsplash.com Unsplash是一个免费高质量照片的网站,照片都是真实的摄影,照片分辨率也很大,全是生活中的景象作品,清新的…

关于最近学习的自动登录网站技术以及post get请求

下面要列出2段内容,一个是目前做的工作,一个是之后要继续进行的工作.(以后完成一部分工作就将后者放到前者内容里面去更新) 1.目前进行的工作: 其实模拟自动登录就是用httpwatch软件进行抓包,,找到你想要的页面,分析post get请求,然后用程序进行模拟就好了,难点就是这个分析抓包…

IOS破解软件,比较全的网站。

转载于:https://blog.51cto.com/14259888/2369621

mouseenter和mouseover的区别

mouseover:当鼠标移入目标元素或者移入目标元素的子元素,都会触发该事件。所以有一个重复触发,冒泡的过程。对应的一出事件mouseout。 mouseenter:当鼠标移入目标元素时(不包括子元素),会触发该…

好久没有更新了,上传一个网站上通用的验证效果的函数吧。

之前觉得在注册表单的时候,当填写表单失去焦点进行验证的效果很酷,自己也经历了很多的版本的改进,不过都是JS的代码,现在感觉已经成形了。所以发到网上让大家PK一下。 1/**//* 2 函数名:检验表单的函数 3 作者&a…

列出一些当前所见到过的基于sharepoint的漂亮的internet网站(update 2007-10-18)

老外的网站:传说中的夏威夷航空网站 一个食品网站一个提供解决方案的公司门户 update(10-18) 几个非常不错的 sharepoint网站 中文的: sharepoint爱好者易联工作室 sharepoint中国台湾的一个sharepoint教学网 update (2007-10-16) KenTCj的个人网站 转载…

为什么一个网站的资源会存在于多个域名中?

转自:http://www.toutiao.com/i6432298910575755777/ 大致可以这样理解,为什么一个网站的资源会存在于多个域名中? 在很多的网站中,如果我们打开开发者工具查看source选项,会发现下面会有很多个域名。例如某度首页的so…

Step by Step WebMatrix网站开发之二:使用WebMatrix(1)

第一次运行WebMatrix会看到如图1所示的窗口。 图1 第一次运行WebMatrix显示的窗口 我的网站 进入“我的网站”可看到自己设计过的网站。 从Web库创建网站 可以从“从Web库创建网站“中理由网络上开源的网站系统创建网站,如名气比较响的WordPress、phpwind等…

自定义事件和windows phone访问网站取得数据

昨天看了一位园友的自定义事件的文章,我以前学习过这方面的内容,但在实际工作中基本没用过自定义事件,前天就边看着,自己写了写代码把这个知识点复习了。下面上代码 事件类代码 public class EvevtClass:EventArgs {public st…

减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)...

在网站开发过程中,对于页面的加载效率一般都想尽办法求快。那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法。上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”,那么,这一篇…

请求的站点不可用或无法找到怎么解决_seo优化怎么做能快速被收录

原标题:seo优化怎么做能快速被收录网站在做seo优化时,不被收录是一件头疼的事,网站不被收录会影响接下来的seo优化工作,无法做关键词优化,但是网站被收录都有一个时间过程,很少有网站秒收录的,快…