咱们的项目若是跑在一台机器上,若是这台机器出现故障的话,或者用户请求量比较高,一台机器支撑不住的话。咱们的网站可能就访问不了。那怎么解决呢?就须要使用多台机器,部署同样的程序,让几个机器同时的运行咱们的网站。那怎么怎么分发请求的咱们的全部机器上。因此负载均衡的概念就出现了。php
负载均衡是指基于反向代理能将如今全部的请求根据指定的策略算法,分发到不一样的服务器上。经常使用实现负载均衡的能够用nginx,lvs。可是如今也有个问题,若是负载均衡服务器出现问题了怎么办?全部冗余的概念就出现了。mysql
冗余其实就是两个或者多台服务器 一个主服务器,一个从服务器。 假设一个主服务器的负载均衡服务器出现了问题,从服务器可以替代主服务器来继续负载均衡。实现的方式就是使用keepalive来抢占虚拟主机。nginx
分布式其实就是将一个大项目的拆分出来,单独运行。laravel
举个上面的例子。假设咱们的访问量特别大。咱们就能够作成分布式,跟cdn同样的机制。在北京,杭州,深圳三个地方都搭建一个如出一辙的集群。离北京近的用户就访问北京的集群,离深圳近的就访问深圳这边的集群。这样就将咱们网战给拆分3个区域了,各自独立。git
再举个例子好比咱们redis分布式。redis分布式是将redis中的数据分布到不一样的服务器上面,每台服务器存储不一样的内容,而mysql集群是每台服务器都放着同样的数据。这也就理解了分布式和集群的概念。web
mysql master服务器会把sql操做日志写入到bin.log 日志里 slave服务器会去读master的bin.log 日志,而后执行sql语句。redis
主从有如下几个问题。算法
1.master服务器能写又能读,slave却只能写。sql
slave读取的数据尚未写入,这样该怎么解决呢?shell
如何解决数据不一致
在config/database.php
mysql配置块中将sticky设置为true
sticky 是一个 可选值,它可用于当即读取在当前请求周期内已写入数据库的记录。若 sticky 选项被启用,而且当前请求周期内执行过 「写」 操做,那么任何 「读」 操做都将使用 「写」 链接。这样可确保同一个请求周期内写入的数据能够被当即读取到,从而避免主从延迟致使数据不一致的问题。不过是否启用它,取决于应用程序的需求。
同步代码到多台服务器
Laravel为咱们提供了扩展包laravel/envoy,它为定义远程服务器的平常任务,提供了一套简洁、轻量的语法。Blade 风格语法便可实现部署任务的配置、Artisan 命令的执行等。
composer global require laravel/envoy
Envoy 任务都应在项目根目录下的 Envoy.blade.php 中定义。写入一下内容
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2']]) cd site git pull origin {{ $branch }} composer update php artisan migrate @endtask
以上代码意思就是在命令行envoy run deploy时候,咱们会ssh到会web-1,web-2 执行
cd site git pull origin {{ $branch }} php artisan migrate
也能够本身手写一个Linux cron来实现代码同步
不少PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提高,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货须要的能够免费分享给你们 ,须要请戳这里