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

工匠之心,技术狂热追求者,开源社区爱好者,一个记录成长的站点。

李彪 发布的文章

February 24, 2020

Redis哨兵-官方文档翻译

Sentinel概述Redis Sentinel为Redis提供高可用性。实际上,这意味着使用"哨兵"可以创建一个不需要人工干预就能抵抗某些类型失败的Redis部署。Redis Sentinel还提供其他附属任务,如监控、通知和为客户提供配置。这是宏观上(即全局)Sentinel功能的完整列表:监视:Sentinel会不断检查你的主实例和副本实例是否按预期工作。通知:Sentinel可以通过...

MKV-高性能分布式内存KV-开篇

一. 背景描述目前缓存环境中,使用较多的是Redis缓存,但是Redis单线程机制,在特高并发场景中还是能达到吞吐瓶颈,又由于很多大数据应用场景需要单次GET 1000或者更多的key,所以直接打到Redis服务器上,很容易让Redis主线程出现阻塞情况,产生吞吐大大下降的情况。在这样的情况下,我们就设想架构设计一个分布式内存的缓存系统(MKV),主要设计目标包括一下:多线程机制保障多核使用...

LibCurl连接复用原理

一. 背景描述Curl是计算机中使用最多的网络请求工具,很多开源项目在内核中对于HTTP、FTP的操作是通过libcurl库获得的技术支持。这篇文章主要调研libcurl库中的TCP连接复用部分。二. 连接池Libcurl针对tcp连接采用了连接池管理,一次传输完成后,它将在“连接池”(有时也称为连接缓存)中保持N个连接处于活动状态,以便恰好能够重用现有连接之一的后续传输可以使用它而不是创建...

Go 十年

Russ Cox,代表Go团队2019年11月8日Happy birthday, Go!这个周末,我们庆祝Go发布10周年,庆祝Go作为一种开源编程语言和构建现代网络软件的生态系统的10周年。为了纪念这一时刻,Go gopher的创始人蕾妮·弗兰奇描绘了这一令人愉快的场景:庆祝Go十周年让我回想起2009年11月上旬,那时我们正准备与世界分享Go。 我们不知道会有什么样的反应,也不知道是否有...

Swoole协程版curl源码剖析

Swoole协程版curl源码剖析一. 背景描述2019年6月5日,Swoole作者宣布在4.4版本后开始初步支持协程版本的Curl。我在原来的研究分析中指出PHP内核对于curl部分的支持是建立在libcurl库上,swoole作者也表达因为PHP内核建立在libcurl基础上,造成了swoole无法直接对于libcurl内部的socket操作进行钩子化。那么,最新版的swoole是采用什...

Redis-Server 线程模型源码剖析

Redis-Server 线程模型源码剖析一. 背景描述最近有同事咨询Redis线程模型有关的情况,对于Redis线程模型,网上的说法总体是单线程模型,但是对于内部线程结构的分布及线程的主要作用多数没有涉及。接下来,我们就来好好探索一下Redis的线程模型。二. 环境模拟首先,我们搭建一个Redis-Server并把它运行起来,然后,我们用拦截一下进程的线程列表,效果如下:通过上图,可以看到...

PHP-CURL-Guzzle-HTTP-连接复用内核原理

PHP-CURL连接复用内核原理0.写在前面PHP是一个时代的产物,它的底层支持是C语言,因此它在CPU密集型计算或者系统内核调用上有天生的优势,Zend引擎把PHP执行生命期分成了五个阶段1,这五个阶段并不是全部都能常驻进程,这种模式下,对于很多使用场景会造成不好的影响,比如网络IO.对于网络IO中的HTTP请求 , 很多工程师使用 php-curl 系列函数 . 所以这篇文章将从内核角度...

基于CMake构建标准的Go编译及打包框架

一. 背景描述为了简化团队内部中间件的编译及打包和方便运维伙伴的线上环境部署过程 , 我们开始尝试使用标准的rpm安装包来进行线上的环境部署,虽然制作rpm安装包可以采用很多途径 , 但是我们选择采用CMake方式 , 采用这种方式的优点如下:利用CMake 可以构建出很强大的自动编译系统.CMake在编译周期结束后,支持rpm , zip等格式的自动打包.下面的内容从两个方面来阐述: 利用...

开源: 高性能网络监听库-NetHandle

NetHandle这是一个库,方便构建高性能TCP服务端应用程序,站在Go语言的巨人肩膀上项目地址: https://github.com/gitsrc/NetHandle一. 特点高性能,低资源消耗非常简单易用的开发接口支持众多协议,TCP,UDP,UNIX二. 安装go get -u github.com/gitsrc/NetHandle三. 性能测试:3.1 50*10000 (50...