PHP使用local-proxy的一种思路! | 架构师之路(19)

news2024/12/26 22:54:28

《架构师之路:架构设计中的100个知识点》

19.脚本语言使用长连接的一种思路

脚本类语言,例如PHP,不能像C++/Java那样能搞服务常驻内存,不能搞长连接?

为什么脚本语言要搞长连接?

9f3823c25b496166b982a6918523c675.jpeg

脚本类语言每次访问后端数据库,服务,缓存,都需要经历上述四个步骤:

1. 建立连接;

2. 发送数据;

3. 接受数据;

4. 销毁连接;

在吞吐量很高的情况下,TCP建立与断开连接的开销不能忽略了,有可能成为性能瓶颈。

像PHP可以用swoole来优化解决,但其仅限于PHP。脚本语言有没有通用的长连接优化方法呢?

那你可以搞一个本地服务local-proxy,PHP与本地服务利用UDS通讯,本地服务与缓存用TCP长连接通讯。这样脚本语言就可以避免每次访问缓存建立连接销毁连接。

什么是UDS?

UNIX Domain Socket,是一种进程间IPC通讯机制,它不需要经过网络协议栈,不需要打包拆包、不需要计算校验和等,它只是将应用层数据从一个进程拷贝到另一个进程。它可以用于同一台机器上两个没有亲缘关系的进程通讯,不但全双工,还保证消息不丢,不重,不错乱

db308547a4e8d2aad21a37e180abdc6b.jpeg

如上图所示,我们在PHP应用服务器上部署一个local-proxy:

1. PHP与local-proxy之间使用UDS通讯;

2. local-proxy与缓存之间用TCP长连接通讯。

local-proxy的实现要点是什么?

1. 没有任何业务逻辑,只转发请求;

2. 复用缓存协议,这样调用缓存的业务代码不需要大幅度修改。如果封装了缓存访问client,只要要升级client,将访问缓存升级为访问local-proxy,这样业务代码甚至都不用动。

你会发现,非常非常多基于server实现的缓存,数据库中间件,都是这两个思路。

知其然,知其所以然。

思路比结论更重要。

补充阅读材料:

《Swoole:PHP 协程框架》

https://www.swoole.com/

573a48c19ac93740345485a94c5624ad.png

不多介绍了,硬生生为PHP续命的技术。

==全文完==

20年,系列1:

《流量从10万到10亿,遇见的80个架构问题》

以实践为主线,结合讲解架构知识点,几十个小时视频内容,已完结。

今年,系列3:

《架构设计中的100个知识点》

架构知识点为主线,结合讲实践。讲解形式:短视频+图文+直播+星球社群,免费,欢迎感兴趣的童鞋关注。

63bcc5efb83fa1e45dac1f583aae6c2d.png

第20集:分布式系统一致性为什么难做?

技术没啥人看了,坚持还有意义吗?

置顶标星,日更好文不错过。

点赞,转发,在看三连。感谢!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【51单片机】程序实验1112.外部中断-定时器中断

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 前置知识:C语言 单片机套装:普中STC51单片机开发板A4标准版套餐7 码字不易,求点赞收藏加关注(•ω•̥) 有问题欢迎评论区讨论~ 目录 程序实验11&12.外部中断-定时器…

驱动---1.DAC8552实现三角波输出

最近开始进行新项目的研发,考虑用DAC做一个前级输出,选择了DAC8552这个器件的一个模块,用了野火的指南者做主控,芯片是STM32F103VET6,主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…

虚幻引擎生存建造系统

先做一个建造预览模式,按下按键B后进入建造预览模式 首先创建自定义事件Preview Loop 用射线追踪摆放物体预览位置,并做一个预览材质 增强输入设置按键 每帧判断是否进入建造模式 预览模式制作成功! 接着做点击左键放置物品&#xff0…

IP研究 | 大数据洞察黄油小熊的爆火之路

一只来自泰国的小熊在国内红成了顶流。 今年,黄油小熊以烘焙店“打工人”的超萌形象迅速走红,2个月内火遍中国的社交媒体,泰国门店挤满飘洋过海求合影的中国粉丝,根据数说故事全网大数据洞察,黄油小熊2024年度的线上声…

深度学习案例:DenseNet + SE-Net

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 回顾DenseNet算法 DenseNet(Densely Connected Convolutional Networks)是一种深度卷积神经网络架构,提出的核心思想是通过在每一层与前面所有层进行直接连接…

【java学习笔记】Set接口实现类-LinkedHashSet

一、LinkedHashSet的全面说明 (就是把数组不同位置的链表当成一个节点然后相连)

【大模型系列篇】LLaMA-Factory大模型微调实践 - 从零开始

前一次我们使用了NVIDIA TensorRT-LLM 大模型推理框架对智谱chatglm3-6b模型格式进行了转换和量化压缩,并成功部署了推理服务,有兴趣的同学可以翻阅《NVIDIA TensorRT-LLM 大模型推理框架实践》,今天我们来实践如何通过LLaMA-Factory对大模型…

【C++】LeetCode:LCR 078. 合并 K 个升序链表

题干: 给定一个链表数组,每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中,返回合并后的链表。 解法:优先队列 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *ne…

数据结构和算法-04二叉树-04

广度优先的实现力扣中常见的二叉树相关问题及基本解决方案 tips: 在解决问题时,先确保问题能解决,再去考虑效率,这是解题的关键,切不可为追求效率而变成了技巧性解答。 广度优先 广度优先(层序遍历)遍历的方式是按层次…

DMA代码部分

第一个程序的接线图 OLED ShowHexNum(2,1,(uint32_t)&ADC1->DR,8); 这样可以看AD的DR寄存器的的地址(固定的)了 可以跑一下然后和手册对比 先查ADC1的地址 再在外设的总表里面, 查一下DR相对于上面地址的偏移量 所以其地址为4001 244C 研究一下外设寄存器的地址是怎么…

spdlog高性能日志系统

spdlog高性能日志系统 spdlog 是一个快速、简单、功能丰富的 C 日志库,专为现代 C 开发设计。它支持多种日志后端(如控制台、文件、syslog 等),并提供灵活的格式化和线程安全的日志输出。 1. 特点 极高的性能:大量的编…

FPGA在线升级 -- Multiboot

简介 本章节主要描述关于如何从Golden Image转换到Multiboot Image程序。 升级方案 Golden Image转换到Multiboot Image的方法主要又两种 1、使用ICAPE2 原语; 2、在XDC文件中加入升级约束命令; 以上两种方案都可以实现在线升级,第一种升级…

守护进程化

目录 一、进程组 二、会话 (1)什么是会话 (2)如何创建一个会话 三、守护进程 一、进程组 之前我们学习过进程,其实每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组。进程组是一个或者多个进程的集合&…

QML插件扩展

https://note.youdao.com/ynoteshare/index.html?id294f86c78fb006f1b1b78cc430a20d74&typenote&_time1706510764806

RabbitMQ七种工作模式之 RPC通信模式, 发布确认模式

文章目录 六. RPC(RPC通信模式)客户端服务端 七. Publisher Confirms(发布确认模式)1. Publishing Messages Individually(单独确认)2. Publishing Messages in Batches(批量确认)3. Handling Publisher Confirms Asynchronously(异步确认) 六. RPC(RPC通信模式) 客⼾端发送消息…

ArcGIS字符串补零与去零

我们有时候需要 对属性表中字符串的补零与去零操作 我们下面直接视频教学 下面看视频教学 ArcGIS字符串去零与补零 推荐学习 ArcGIS全系列实战视频教程——9个单一课程组合 ArcGIS10.X入门实战视频教程(GIS思维) ArcGIS之模型构建器(Mod…

前端面试如何出彩

1、原型链和作用域链说不太清,主要表现在寄生组合继承和extends继承的区别和new做了什么。2、推荐我的两篇文章:若川:面试官问:能否模拟实现JS的new操作符、若川:面试官问:JS的继承 3、数组构造函数上有哪些…

大模型应用编排工具Dify之构建专属FQA应用

1.前言 ​ 通过 dify可以基于开源大模型的能力,并结合业务知识库、工具API和自定义代码等构建特定场景、行业的专属大模型应用。本文通过 dify工作室的聊天助手-工作流编排构建了一个基于历史工作日志回答问题的助手,相比原始的大模型答复,通…

前端node环境安装:nvm安装详细教程(安装nvm、node、npm、cnpm、yarn及环境变量配置)

需求:在做前端开发的时候,有的时候 这个项目需要 node 14 那个项目需要 node 16,我们也不能卸载 安装 。这岂不是很麻烦。这个时候 就需要 一个工具 来管理我们的 node 版本和 npm 版本。 下面就分享一个 nvm 工具 用来管理 node 版本。 这个…

c基础加堆练习题

1】思维导图: 2】在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成 要求&#xff…