
后端
后端
3333333_
大部分都是记录云笔记,有时候复制过来就挺乱的,而且可能复制1年或者几个月前记录的。随缘吧。
展开
-
raft一致性协议
在完成日志复制之后,这个时候客户端发送了一个新的写请求,会产生一个新的logEntry,假如服务器2还是leader,它就会发送一个appendEntry的请求,给所有的follower,如果多数follower都接收到这个logEntry,然后成功复制,那么leader就会把它提交,上图就是被大部分服务器3、4、5接收了,这个就算多数,这个时候就算已提交, 已提交之后,它(term6)就会被写入到我们leader的logEntry。服务节点会不断的读取日志记录,并将日志记录更新到服务节点的数据中。转载 2023-01-30 20:46:05 · 686 阅读 · 0 评论 -
Langchain-Chatchat 本地源代码部署 二次开发
langchain-chatchat原创 2024-08-20 14:07:42 · 2533 阅读 · 1 评论 -
nginx -s reload 高并发情况下有性能损耗
nginx -s reload 高并发情况下有性能损耗。用consul来发现服务。可以用动态负载均衡解决。原创 2023-08-23 17:27:56 · 241 阅读 · 0 评论 -
亿级流量商品详情页静态化与多级缓存
来腾讯视频看更多热门视频原创 2023-08-23 17:26:52 · 211 阅读 · 0 评论 -
Linux Load Average过高多少合适?CPU Load使用率检查
显然,“load average”的值越低,例如0.2或0.3,意味着计算机(电脑)的工作量越小,系统负载越轻。假如CPU每分钟最多处理100个进程,则系统负载为0.2,这意味着CPU在这1分钟内仅处理20个进程;为了顺利运行计算机,系统负载不应超过1.0,因此无需等待任何进程,并且可以首先处理所有进程。首先,我们假设在最简单的情况下,你的计算机只有一个CPU,所有运算操作必须由该CPU完成。然后,通过将系统负载除以核心总数,只要每个核心的负载不超过1.0,计算机就会如常运行。原创 2023-08-23 17:24:20 · 1145 阅读 · 0 评论 -
抓取占用系统资源的进程CPU飙升
【代码】抓取占用系统资源的进程CPU飙升。原创 2023-08-23 17:23:20 · 109 阅读 · 0 评论 -
12、Swoole 可以替代 Nginx 吗?
比如,虚拟域名的配置文件为:local.swoole.com.conf,可以选择加载 enable-php.conf ,也可以选择加载 enable-swoole-php.conf。Http\Server 对 Http 协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理。我们都习惯会将虚拟域名的配置文件放在 vhost 文件夹中。暂时不能,随着 Swoole 越来越强大,以后说不准。官方建议 Swoole 与 Nginx 结合使用。根据自己的 Nginx 配置文件,可以自行调整。原创 2023-08-23 17:27:25 · 334 阅读 · 0 评论 -
Swoole千万PV网站异步任务开发
群发消息:客户端发消息给服务端,之前是循环一个个发,swoole可以异步发送。发送数据过去,有个缓冲区,首先缓冲数据到缓冲区,然后缓冲区把数据合成起来做到传输使用。延展:如果用HTTP协议连接上面的服务端能不能访问上面的服务端?能访问,但是数据不能被解析。TCP是传输层是二进制传输的(流式)所以TCP通信需要做粘包处理,类似水流,不知道什么时候关闭水流。不像应用层,所有数据都是封装好的,能直接使用数据。可以使用固定包头识别自己发送的数据。2 swoole工作原理。1 异步任务的开发场景。原创 2023-08-09 16:08:14 · 109 阅读 · 0 评论 -
swoole websocket服务
websocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器的全双工(full-duplex)通信——允许服务器主动发送信息给客户端。http的通信只能是由客户端发起。以前只能是前端轮训,这样比较浪费资源。4、协议标识符ws wss(加密,类似https)为什么需要websocket呢?5、持久化网络通信协议(长连接)3、客户端可以与任意服务器通信。什么是websocket。1、建立在TCP协议之上。websocket特点。2、性能开销小通信高效。原创 2023-08-09 16:06:53 · 97 阅读 · 0 评论 -
swoole高性能共享内存 Table
由于 PHP 语言不支持多线程,因此 Swoole 使用多进程模式,在多进程模式下存在进程内存隔离,在工作进程内修改 global 全局变量和超全局变量时,在其他进程是无效的。数组方式取出的 Swoole\Table\Row 对象为一次性对象,请勿依赖其进行过多操作。不要使用数组方式读写 Table,一定要使用文档中提供的 API 来进行操作;设置 worker_num=1 时,不存在进程隔离,可以使用全局变量保存数据。请勿在遍历期间进行删除操作(可将所有 key 取出后进行删除)原创 2023-08-09 16:04:49 · 185 阅读 · 0 评论 -
swoole task进程异步任务实现
swoole_server->task函数是非阻塞函数,任务投递到task进程中后会立即返回,即不管任务需要在task进程内处理多久,worker进程也不需要任何的等待,不会影响到worker进程的其他操作。如果投递的任务量总是大于task进程的处理能力,建议适当的调大task_worker_num的数量,增加task进程数,不然一旦task塞满缓冲区,就会导致worker进程阻塞,所以需要使用好task前期必须有所规划。2、task worker进程会在onTask()回调中接收到这些数据,并进行处理。原创 2023-08-09 16:04:18 · 202 阅读 · 0 评论 -
三、swoole进程间通讯
第5个参数 : bool $blocking = true 是否阻塞,当你发送的消息很大,而此时的消息队列无法存入的时候,此时消息队列就会阻塞,除非等到有别的进程从消息队列中读取了别的消息,然后消息队列有足够的空间存储你要发送的信息,才能继续执行。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。消息队列实际上就是一个链表,而消息就是链表中具有特定格式和优先级的记录,对消息队列有写权限的进程可以根据一定规则在消息链表中添加消息,对消息队列有读权限的进程则可以从消息队列中获得所需的信息。原创 2023-08-09 16:03:42 · 253 阅读 · 0 评论 -
ipc_server.php
【代码】ipc_server.php。原创 2023-08-09 16:02:40 · 90 阅读 · 0 评论 -
swoole开发IM通讯服务器案例及rpc通讯案例需求说明
原创 2023-08-09 16:02:09 · 133 阅读 · 0 评论 -
swoole多进程模块
u swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据。u swoole_process提供了基于unixsock的进程间通信,使用很简单只需调用write/read或者push/pop即可。u swoole_process提供了exec接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信。Swoole是有自己的一个进程管理模块,用来替代PHP的pcntl扩展。u pcntl没有提供进程间通信的功能。原创 2023-08-09 16:01:17 · 104 阅读 · 0 评论 -
swoole IPC 进程通讯
全名 UNIX Domain Socket, 简称 UDS, 使用套接字的 API (socket,bind,listen,connect,read,write,close 等),和 TCP/IP 不同的是不需要指定 ip 和 port,而是通过一个文件名来表示 (例如 FPM 和 Nginx 之间的 /tmp/php-fcgi.sock),UDS 是 Linux 内核实现的全内存通信,无任何 IO 消耗。防止丢数据,如果整个服务都挂掉,再次启动队列中的消息也在,可以继续消费,但同样有脏数据的问题。原创 2023-08-09 16:00:31 · 160 阅读 · 0 评论 -
1、MACPHP7.3安装phalcon扩展及安装phalcon-devtools 测试用例及ide支持
直接用phpunit 可能报错。是你系统的phpunit版本太低 升级 或者用vendor下面的。在.bashrc 我用的是zsh 文件是.zshrc 结尾加入下面代码。3、composer安装phalcon-devtools。创建第一个测试用例FirstUnitTest.php。安装Phalcon Incubator Test。phalcon ide IDE 自动完成代码提示。创建目录 tests/Unit/2、编译安装phalcon扩展。生成一个controller。创建 phpunit.xml。原创 2023-08-09 15:58:43 · 348 阅读 · 0 评论 -
Phalcon Query Language (PHQL)
【代码】Phalcon Query Language (PHQL)原创 2023-08-08 10:45:52 · 87 阅读 · 0 评论 -
3、phalcon 依赖注入自定义类
但是推荐使用 registerNamespaces 效率比registerDirs高。原创 2023-08-08 10:45:18 · 83 阅读 · 0 评论 -
phalcon笔记
/不更新age字段 $this->useDynamicUpdate(true);//加速性能,需要更新的字段更新 $this->setSchema("test");$di->set和$di->setShare()是单利模式 不需要再实例化了。phal orm没有提供批量删除,通过hydration控制输出。原创 2023-08-08 10:44:45 · 122 阅读 · 0 评论 -
Dockerfile 快速构建swoft环境搭建微服务
保存上面内容到 Dockerfile 文件。原创 2023-08-08 10:42:26 · 136 阅读 · 0 评论 -
swoft做微服务RPC服务中心consul
Listener/DeregisterServiceListener.php 去掉注释,这个是使用命令行关闭swoft服务的时候自动反注册服务。其他的配置看需要添加,这里两个选项要配置,rpcServer也可以去掉(有默认值),但是去掉就不直观了。就可以通过调用端获取consul服务里面有效的服务地址来调用提供端的接口。二、服务提供者 项目 swoft1 (我自己命名的项目)三、服务使用者 项目swoft2 (我自己命名的项目)app/bean.php 其他的配置看需要添加。然后就可以启动调用端了。原创 2023-08-08 10:41:40 · 160 阅读 · 0 评论 -
swoft redis+ lua 令牌桶限流算法
Swoft 采用的是第二种,当每次获取令牌时,先执行 resync 来更新令牌桶中令牌的数量,从而达到异步产生令牌的目的。原创 2023-08-08 10:39:49 · 82 阅读 · 0 评论 -
PHP抽象类与接口的区别
抽象类:定义为抽象的类不能被实例化.任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。原创 2023-08-08 10:39:00 · 71 阅读 · 0 评论 -
PHP之十六个魔术方法详解
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用。 魔术方法包括:__construct(),类的构造函数 __destruct(),类的析构函数 __call(),在对象中调用一个不可访问方法时调用 __callStatic(),用静态方式中调用一个不可访问方法时调用 __get(),获得一个类的成员变量时调用 __set(),设置一个类的成员变量时调用 __isset(),当对不可访问属性调用isset()或empty原创 2023-08-08 10:37:25 · 170 阅读 · 0 评论 -
获取两个文件相对路径
【代码】获取两个文件相对路径。原创 2023-08-08 10:36:51 · 108 阅读 · 0 评论 -
php trait特性详解及使用注意事项
自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait。Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。无法通过 trait 自身来实例化。原创 2023-08-08 10:36:19 · 203 阅读 · 0 评论 -
4-8、FPM的三种模式
子进程的数量是动态变化的,启动时,会生成固定数量的子进程,可以理解成最小子进程数,通过pm.start_servers控制,而最大子进程数则由pm.max_children控制,子进程数会在pm.start_servers~pm.max_children范围内波动,另外,闲置的子进程数还可以由pm.min_spare_servers和pm.max_spare_servers两个配置参数控制。static模式始终会保持一个固定数量的子进程,这个数量由pm.max_children定义。1.static模式。原创 2023-08-07 08:17:37 · 284 阅读 · 0 评论 -
4-11、FPM信号处理实战
kill -9 43490 此命令 只杀掉master worker进程还在。所以还能服务 master进程不负责请求,只负责重启worker等工作。kill SIGUSR1 php-fpm 重新打开日志文件(释放旧的文件句柄,打开新的文件句柄 ) 可用于日志切割。kill SIGUSR2 php-fpm 平滑重载所有worker进程且重新载入配置文件还有二进制模块。kill 43491 还能服务,master会启动另外一个worker进程来服务。查看到php-fpm。原创 2023-08-07 08:16:54 · 154 阅读 · 1 评论 -
4-12、FPM的生命周期
FPM声明周期(常驻内存的进程,一个进程结束不直接shutdown,而是循环使用,当fpm退出时才进行php_module_shutdown)原创 2023-08-07 08:15:55 · 132 阅读 · 0 评论 -
4-14、FastCGI协议理论讲解
一般情况下,最先发送的是FCGI_BEGIN_REQUEST类型的消息,然后是FCGI_PARAMS和FCGI_STDIN类型的消息,当FastCGI响应处理完后,将发送FCGI_STDOUT和FCGI_STDERR类型的消息,最后以FCGI_END_REQUEST表示请求的结束。在fcgi_finish_request中调用fcgi_flush,fcgi_flush中封装一个FCGI_END_REQUEST消息体,再通过safe_write写入 socket 连接的客户端描述符。原创 2023-08-07 08:15:27 · 827 阅读 · 0 评论 -
5-13 总结并回顾
第1抽象语法树在PHP里面实现了几个数据结构,分别是zend_ast和zend_ast_list、zend_ast_zval,这些基本结构呢,是根据kind来区分它的子女个数,其中一个知识点呢是对于zend_ast_list,它会由一个chidlren的数目来确定子女的个数,像其他的比如说他的kind呢是zend_ast_asign的话,它一定有两个子女,对于zend_ast_zval这种的是叶子节点,他就是对应的里边有一个zval结构的val,可以存储我们的基本变量,这是抽象语法树。原创 2023-08-07 08:13:26 · 66 阅读 · 0 评论 -
6-1 break语法的AST、栈、符号表和指令集
原创 2023-08-07 08:12:51 · 76 阅读 · 0 评论 -
7-1 编写一个简单的扩展
原创 2023-08-07 08:12:06 · 64 阅读 · 0 评论 -
API规范设计原理
1、web容器搭建(web服务器(Nginx) swoole容器)2、API规范设计(数据同步、消息推送(规模) )版本控制(v1.0 v2.0.......)性能测试(单元测试 性能分析 API调优)日志组件(composer组件)API中间件 (几十亿请求)接口业务代码(按需缓存设计)Redis缓存 常用场景。身份验证、https。自定义错误编码及说明。原创 2023-08-07 08:11:17 · 60 阅读 · 0 评论 -
微服务架构API网关应用 kong
能 限流 控制访问数据包大小等。为什么需要API网关呢?原创 2023-08-07 08:10:14 · 57 阅读 · 0 评论 -
Swoft微服务化解析
网关跨主机调用服务,但是希望跟本地调用一样,就能使用RPC。默认协议 json-rpc。原创 2023-08-05 21:20:22 · 87 阅读 · 0 评论 -
服务限流
令牌桶算法 允许突发流量。原创 2023-08-05 21:19:40 · 76 阅读 · 0 评论 -
Redis悲观锁 乐观锁的原理
原创 2023-08-03 20:23:20 · 73 阅读 · 0 评论 -
redis 乐观锁实现秒杀过程
原创 2023-08-03 20:22:47 · 78 阅读 · 0 评论