自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 如何排查 configure 问题——以使用 LibreSSL 替换 OpenSSL 编译 axel 为例

查看 configure 脚本发现,check 函数的过程是编译+链接,说变要么编译出错,要么链接出错,要是能查看编译和链接的详细参数就迎刃而解了。在我们编译出了静态的 LibreSSL 库之后,就要想办法怎么让 axel 使用私有目录的 LibreSSL 库。因此,解决这个问题就变成了升级 OpenSSL 以及使用静态库(因为升级生产环境所有机器的 OpenSSL 库不现实)。由于 LibreSSL 是 OpenSSL 的 fork, 因此,本质上它也是 OpenSSL, 我们通过。

2024-04-01 12:07:29 719 1

原创 如何找到 rpm 包对应的源码

有些比较古早的 rpm 包通过项目官网可能并不一定能找到对应源码的 tag, 排查问题时代码行可能对不上,因此,我们需要通过 rpm 发行方找到对应的源码。

2024-04-01 11:15:09 297

原创 如何正确使用 HTTP proxy

目录两种 HTTP 代理Proxy 如何获取目标服务器地址两种 request-URL 格式如何代理 HTTPS编程实现两种 HTTP 代理第一种是 RFC 7230 - HTTP/1.1: Message Syntax and Routing(即修订后的 RFC 2616,HTTP/1.1 协议的第一部分)描述的普通代理。其代理过程为:client 请求 proxyproxy 解析请求...

2018-11-30 20:31:13 44936

原创 MySQL 并发场景下如何避免插入重复行

目录文章目录目录场景问题解决方案LOCK TABLEINSERT IGNORE场景先查询,不存在则插入,存在则更新更新需依赖于之前的记录并做复杂的计算,无法使用 “INSERT … ON DUPLICATE KEY UPDATE” 解决问题两个请求 A 和 B 如果同时到来,那么可能出现以下序列:A select 记录不存在B select 记录不存在A 插入B 插入...

2018-11-07 20:17:11 4353

原创 lsof - 根据 fd 或 socket 查找打开的文件或读写地址

通过日志发现某个进程一直阻塞在某处,通过 strace 查看系统调用:$ strace -p 9441Process 9441 attachedrecvfrom(22, 发现阻塞在读 22 socket 上,由于进程连接的地址非常多,想通过目前的信息找到进程是阻塞在哪类连接的读取上:$ lsof -p 9441 | grep 22upython 9441 userxxx 2...

2018-05-02 20:59:50 3358

原创 C++11 bind

// bind example#include <iostream> // std::cout#include <functional> // std::bind// a function: (also works with function object: std::divides<double> my_divide;)double my...

2018-04-18 20:39:34 261

原创 DNS 工作机制全面剖析与应用探究

Hierarchy of DNS servers域名解析过程迭代式查询与递归式查询DNS recordsDNS cachingTTL 值设置多少合适AnycastGeolocation-aware DNS如何获取来源 IPECSEDNS Client Subnet

2017-12-06 21:35:30 2226

转载 Python函数参数默认值的陷阱和原理深究

本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的

2017-09-20 20:35:04 341

原创 Nginx/OpenResty 谨慎配置 8.8.8.8 作为 DNS server

问题Nginx resolver 配置:resolver 127.0.0.1 8.8.8.8;项目中两处使用域名,一处为外网 CDN 域名,一处为 MySQL 集群域名(可能为内网私有域名,也可能为外网共有域名)。 部署完之后测试两处都能正常解析,但运行一段时间之后会报 db.example.com could not be resolved (3: Host not found) 错误。分析用

2017-07-19 22:31:33 4796

原创 FTP 协议那些事 - 弱网络传输、防火墙与代理

主动模式与被动模式和 HTTP 不同的是,FTP 采用两条链路通信,一条链路只做控制,一条链路只做数据传输。控制链路传输控制命令,数据链路传输文件内容或命令的输出结果,控制链路 server 监听 well-known 端口(默认 21),数据链路端口使用视传输模式而定。被动模式(默认)所谓被动模式,是指 server 端的数据连接是被动打开,即 server 监听某端口,client 连接该端

2017-06-06 18:55:01 769 1

原创 FTP 代理过程分析 - 使用 ftp.proxy

与 HTTP 代理相比,FTP 代理要特殊很多,因为 FTP 要使用随机端口来传输数据,端口号在运行时确定并通过控制链路(控制链路传输 FTP 命令和响应,数据链路传输文件内容)传输,因此代理服务器必须要解析控制链路的响应或请求并替换。HTTP 代理就要简单很多,客户端与 proxy 通信,并将 Host header 填成 real server 的地址,proxy 之间将整个 TCP messa

2017-06-06 16:10:14 20237

原创 Quorum 机制在开源分布式系统中的应用

IntroductionA quorum is the minimum number of votes that a distributed transaction has to obtain in order to be allowed to perform an operation in a distributed system. A quorum-based technique is imp

2017-06-05 22:05:15 1397

原创 DNS 是否适合做容灾

场景客户端:外网游戏玩家 服务端:外网游戏玩家直连服务。部署架构如下: ServerA / | \ / | \LB1 LB2 LB3 \ | / \ | / ServerBDNS: example.com –> IP1(LB1), IP2(LB2), IP3(LB3)游戏客户端通过 example.

2017-06-05 22:04:40 2118

转载 HTTP Message Length

The transfer-length of a message is the length of the message-body as it appears in the message; that is, after any transfer-codings have been applied. When a message-body is included with a message, t

2017-06-05 22:02:53 639

原创 MySQL 记录被删除之后 AUTO_INCREMENT 值被复用问题分析

结论MyISAM 不会出现删除掉的 AUTO_INCREMENT 字段值被复用的问题,因为这个最大值会被写磁盘,每次初始化会从磁盘读取InnoDB 会出现删除掉的 AUTO_INCREMENT 字段值被复用的问题,因为这个最大值不会写磁盘,每次都是用类似 SELECT MAX(ai_col) FROM table_name FOR UPDATE; 的方式初始化。参考InnoDB AUTO_IN

2017-06-05 22:02:11 1710

原创 多线程程序谨慎给 DB 加锁

场景ServerA 起 N 个线程,每个线程执行相同的逻辑,就是去 DB 取一个待执行的任务来执行,也就是常见的任务队列。具体逻辑是:lock tableAget 1 new taskupdate task statusunlock tableAexecute tasklock tableAupdate task statusunlock tableA问题由于程序存在 bug, 但

2017-06-05 22:01:49 428

原创 巧用 MySQL 自定义变量一条语句实现 UPDATE + SELECT

示例mysql> select * from t_job_queue order by id desc limit 1;+------+--------+---------------+---------------------+------------+------------+| id | status | params | result | up

2017-06-05 22:00:51 1529

原创 使用 MySQL 实现无锁任务队列(using MySQL as a job queue)

场景N 个生产者往 db 里面插入新任务,N 个消费者从 db 取出新任务执行并更新任务状态为“已执行”。CREATE TABLE `t_job_queue` ( `id` INT NOT NULL AUTO_INCREMENT, `status` INT NOT NULL DEFAULT '0', `params` VARCHAR(1024) NOT NULL DEFAULT '',

2017-06-05 22:00:23 3174

原创 OpenResty 中不当使用 MySQL 连接池导致事务被回滚

场景为了使用方便,server 封装了一个执行 SQL 语句的函数:function query_db(sql) db, err = mysql:new() ok, err = db:connect(host, port, ...) res, err, errcode, sqlstate = db:query(sql) ok, err = db:set_keepali

2017-06-05 21:59:33 1866

原创 使用 Nginx 搭建 HTTPS 服务器

SSL/TLS client/server 交互过程浅析握手阶段server 下发证书给 client, 证书中包含 server 的公钥(public key), 但证书是使用第三方私钥加密的(这里的私钥不是 server 的私钥,通常为 CA 机构的私钥,不做特殊说明,本文默认证书是 CA 机构签发的证书),client 拥有 CA 机构的公钥,因此可以解密证书,获取 server 下发的公钥。

2017-06-05 21:57:22 426

原创 公网服务器或客户端为 NAT 网络的服务器不要同时开启 tcp_tw_recycle 和 tcp_timestamps

背景及现象服务器:公网服务器 客户端:外网手游客户端 玩家侧现象:大批处于同一局域网内的内侧玩家连接服务器超时,但是切换成 4G 之后连接顺畅。 服务端现象:netstat -s" 显示 “passive connections rejected because of time stamp” 数量增长快速,关闭 tcp_tw_recycle 或 tcp_timestamps 恢复正常,玩家侧现

2017-06-05 21:48:42 1942

原创 解读 Linux 性能指标

CPU 篇Run Queue StatisticsIn Linux, a process can be either runnable or blocked waiting for an event to complete. A blocked process may be waiting for data from an I/O device or the results of a system

2017-06-05 21:47:25 550

原创 top, free 与虚存管理

VIRT, RES, %MEM, SHR, SWAP$ top -Mtop - 20:10:06 up 167 days, 10:00, 1 user, load average: 0.66, 0.81, 0.79Tasks: 168 total, 2 running, 166 sleeping, 0 stopped, 0 zombieCpu(s): 1.9%us, 0.7

2017-06-05 21:46:52 644

原创 FTP 主动模式与被动模式

基础知识FTP is a TCP based service exclusively. There is no UDP component to FTP.FTP is an unusual service in that it utilizes two ports, a ‘data’ port and a ‘command’ port (also known as the control por

2017-06-05 21:31:52 1825

原创 使用 Apache httpd 搭建 HTTP/HTTPS (正向)代理服务器

为什么选择 Apache httpd事实上代理服务器用的最多的还是 squid, 因为对它不熟,还是想在 Nginx 和 Apache httpd 之间选,但是 nginx 生来是用作反向代理(Reverse Proxy)的,它对正向代理(Forward Proxy)的支持并不好,因此选择 Apache httpd. Apache httpd 不仅支持正向代理和反向代理,而且还支持 HTTPS,

2017-06-05 21:27:05 9008

原创 CentOS 搭建 vsftpd

Installation, Starting/Stopping# yum install vsftpd# /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf# service vsftpd {start,stop,status,...} # 2.2.2(/etc/init.d/vsftpd)# systemctl {start,sto

2017-06-05 21:26:13 569

原创 负载均衡会话保持(session persistence, session stickiness, session affinity)

问题的产生An important issue when operating a load-balanced service is how to handle information that must be kept across the multiple requests in a user’s session. If this information is stored locally on

2017-06-05 21:25:15 1841

转载 云存储中的 HTTP 鉴权算法分析

基于 Base64 编码的 HTTP Basic Authentication 由于安全问题,已经不再广泛使用了。在云存储中,数据的安全性一直被广泛关注。亚马逊的 AWS S3 和 OpenStack Swift 分别采取了不同的算法来对每一个 HTTP 请求进行鉴权。这里想对二者的鉴权过程作简单分析和总结。AWS S3 的 HTTP 请求鉴权流程AWS 采取的鉴权算法类似于 HTTP 基本认证。我

2017-06-05 21:23:43 1010

原创 SSH 公钥免密码登陆

SSH 密钥对总是成双出现的,一把公钥,一把私钥。公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须稳妥的保管好。 所谓”公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 shell,不再要求密码。这样子,我们即可保

2017-06-05 21:17:03 320

原创 公钥密码学、数字签名与数字证书

公钥密码学(非对称密码学)A 创建一对公钥/私钥对,私钥自己保存,公钥给其他人(例如 B, C, D)。公钥和私钥都能用于加密和解密。B 给 A 发送信息时用 A 的公钥加密,A 收到之后用私钥解密。反之,A 给 B 发送信息时,用私钥加密,B 收到之后用 A 的公钥解密。 在上述场景中,非对称密钥的作用是加密。参考 公开密钥加密数字签名(Digital Signature)A 给 B 发送 M

2017-06-05 21:09:47 1508

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除