当前位置: 首页 > 后端技术 > PHP

分布式、集群的理解以及多台服务器代码是如何同步的

时间:2023-03-29 18:09:17 PHP

cluster如果我们的项目跑在一台机器上,如果机器出现故障,或者用户请求量比较大,一台机器是支撑不住的。我们的网站可能无法访问。如何解决?需要使用多台机器,部署同一个程序,让几台机器同时运行我们的网站。那么我们如何在所有机器上分发请求。于是出现了负载均衡的概念。负载均衡负载均衡是指基于反向代理,可以将当前所有的请求按照指定的策略算法分发到不同的服务器上。常用的实现负载均衡可以使用nginx、lvs。但是现在还有一个问题,负载均衡服务器出现问题怎么办?所有冗余的概念都出现了。冗余冗余实际上是两台或多台服务器,一个主服务器和一个从服务器。假设一个主服务器的负载均衡服务器出现问题,从服务器可以代替主服务器继续负载均衡。实现方式是使用keepalive抢占虚拟主机。分布式分布式其实就是把一个大的项目拆分出来,单独运行。以上面的例子为例。假设我们的访问量特别大。我们可以做成分布式的,跟CDN一样的机制。在北京、杭州和深圳建立了一个相同的集群。靠近北京的用户访问北京的集群,靠近深圳的用户访问深圳的集群。这样一来,我们的线上对战就会被分成3个区域,每个区域都是独立的。再比如,比如我们的redis分布。Redis分布式是将redis中的数据分布到不同的服务器上,每个服务器存储的内容不同,而mysql集群是指每个服务器存储相同的数据。这样也就理解了分布和聚类的概念。MySQL主从mysql主服务器会将sql运行日志写入bin.log日志,从服务器读取主服务器的bin.log日志,然后执行sql语句。主从存在以下问题。1、master服务器可以读写,slave只能写。从机读取的数据还没有写入,怎么解决呢?如果已缓存,则从缓存中读取。强制从master读取。使用pxc集群,任意节点可读写,读写强一致性。如何解决数据不一致在config/database.phpmysql配置块中将sticky设置为truesticky是一个可选值,可以用来立即读取当前请求周期内已经写入数据库的记录。如果启用了粘性选项并且在当前请求周期内执行了“写入”操作,则任何“读取”操作都将使用“写入”连接。这样就保证了同一个请求周期内写入的数据可以被立即读取,从而避免了主从延迟导致的数据不一致的问题。但是是否启用它取决于应用程序的需要。将代码同步到多台服务器Laravel为我们提供了扩展包laravel/envoy,它提供了一套简洁轻量级的语法来定义远程服务器的日常任务。部署任务的配置、Artisan命令的执行等都可以用Blade风格的语法来实现。composerglobalrequirelaravel/envoyEnvoy任务都应该在项目根目录的Envoy.blade.php中定义。写点东西@servers(['web-1'=>'192.168.1.1','web-2'=>'192.168.1.2'])@task('deploy',['on'=>['web-1','web-2']])cdsitegitpullorigin{{$branch}}composerupdatephpartisanmigrate@endtask上面代码的意思是当命令行envoy运行deploy时,我们会ssh到web-1,web-2执行cdsitegitpullorigin{{$branch}}phpartisanmigrate也可以手写一个linuxcron实现代码同步很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码编写我没有方向感,不知道从哪里开始提高。我整理了一些这方面的资料,包括但不限于:分布式架构、高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点免费分享给你,需要进阶干货请点这里