笔迹-工匠之芯

穷则独善其身,达则兼济天下

研究报告:JAVA 与 Golang 在 UDP服务器上的性能对比

背景介绍因工作需求,目前需要采用UDP协议来存储用户日志信息,目前采用了JAVA 和 Golang 两种途径。 #Linux内核优化(非常重要) 可以使用netstat -su 查看UDP是否有错包,如果查看到有UDP receive errors,可以调整UDP缓冲区的大小以应对大规模请求, …

Nginx FAST-CGI缓存优化

背景描述传统的LNMP架构中,PHP-FPM对于PHP脚本进行解析工作,Nginx反向代理的时候,会把PHP请求转达给PHP-FPM。对于一个PHP站点,PHP-FPM的工作压力很巨大,所以,如果我们在Nginx层面上做一个FAST-CGI缓存,则会大大缓解解析器的压力,达到更好的响应效果。 NGINX 缓存配置1. HTTP …

源码阅读:C语言epoll模型

背景epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了 …

解析 Go 中的函数调用

让我们来看一些简单的 Go 的函数,然后看看我们能否明白函数调用是怎么回事。我们将通过分析 Go 编译器根据函数生成的汇编来完成这件事。对于一个小小的博客来讲,这样的目标可能有点不切实际,但是别担心,汇编语言很简单。哪怕是 CPU 都能读懂。 这是我们的第一个函数。对,我们只是让两个数相加。 1func add(a, b int) int { 2 …

微服务:请求熔断原理

伴随微服务,出现了很多新鲜的名词,其实剥去外衣并没有那么高大上。 今天要谈到的,叫做”熔断”,一个典型的开源实现是Hystrix(JAVA实现)。 背景一个分布式系统中,服务间互相调用错综复杂,假设某个基础服务宕机,那么就会导致若干上游调用方出现访问超时,进而引起上游重试,导致宕机的基础服务遭受到数倍的流量放大,更加无法恢复服务。 这种恶劣的情况并不会就此结 …

Pecl_Http 与 unix domain socket 客户端封装

1. 背景描述Pecl/HTTP是一个PHP扩展,历史非常悠久了,从2005年至2018年不断完善其功能,它主要帮助PHP对于HTTP请求的相关操作。不同于CURL,其具有更丰富的扩展接口,既包括平常的请求,也包括对于HTTP数据的封包或拆包操作。 对于PHP和HTTP,大部分程序员关心的如何完成一个请求。但是更深一步,我们会发现HTTP数据包的文件格式也很 …

测试报告:HTTP Post 与 Unix Domain Socket 通信性能对比

背景描述因工作需求,项目需要在不同的程序语言框架中进行通信,目前对于进程通信的方式,互联网上主要有HTTP请求、IPC通信、Socket通信、共享内存通信,虽然共享内存效率最高,但是对于内存结构的设计与队列维持需要很高的系统实现能力,所以目前我测试了HTTP与Unix Socket这两种通信方案。 测试环境搭建目前分为HTTP和Unix Socket通信两种 …

Jmeter测试报表相关参数说明

背景介绍采用Jmeter测试工具对web系统作的负载测试,得出的响应报表,数据比较难懂,现作一具体说明。 以下是在一次具体负载测试中得出的具体数值,测试线程设置情况为:线程数:200,等待时间(ramp-up):0秒,循环次数为永远,另: 线程组——这些元件用于指定运行的线程数和等候周期。每个线程模拟一个用户,而等候周期用于指定创建全部线程的时间。例如,线程 …