Code For Colorful Life
Laravel service providers/service container/facades
控制反转(IOC)
为了实现应用中组件的配置与使用分离。
例如,我们有一个应用程序叫Text Editor,它有一个组件叫Spell Checking,那么我们的代码可能会像如下:
1
2
3
4
5
6
7
8
9
<?php
class TextEditor
{
private SpellChecker checker;
public __construct() {
checker = new SpellChecker();
}
}
?>
这样的话,TextEditor与SpellChecker就耦合在一起了,TextEditor->checker的实例化完全被TextEditor控制。
Read more...
Zero Copy
学习自Zero Copy I: User-Mode Perspective
什么是zero copy
让我们了解下一个作为通过存储在文件中的数据提供服务的服务器守护进程在传输给客户端时,守护进程的简单处理过程:
1
2
read(file, tmp_buf, len);
write(socket, tmp_buf, len);
在这两个系统调用发生的复制:
Read more...
使用Dockers管理个人开发环境
当我们新安装Linux系统或者登陆了一个非自己环境的Linux系统时,通常都得做许多繁杂而又重复的工作,安装各种软件、搭建开发环境等,为了解决这个问题,我将使用Docker来管理自己的开发环境。
简单版的在线docker介绍:Docker —— 从入门到实践
基础镜像
自己搭建了一个CentOS 7的基础开发镜像centos-dev:base-v1.2
,修改软件源为163源,装了各种常用软件以及个人配置:git、vim、zsh等等。
Read more...
理解Linux操作系统——分析性能瓶颈
学习自《Linux性能分析》
识别瓶颈
快速调优策略:
- 认识你的系统。
- 备份系统。
- 监控和分析系统性能。
- 缩小瓶颈范围,找到根源。
- 通过每次只修改一个地方来解决瓶颈问题。
- 回到第3步直到对系统的性能满意为止。
应该记录下调优的操作,特别是对性能有影响的操作。
Read more...
理解Linux操作系统——性能度量
学习自《Linux性能分析》
处理器度量
- CPU utilization: 如果该值超过80%持续一段周期时间,有可能是处理器瓶颈。
- User time: 通常都希望该值越高越好,因为这表明系统在做更多的实际工作。
- System time: 包括了内核操作和中断处理时间,该值应该尽量小。
- Waiting: 花在等待I/O操作出现的CPU时间,该值应该尽量小。
- Idle time: CPU空闲时间。
- Nice time: 花在re-nicing改变进程执行顺序和优先级的时间。
- Load average: 与两个数值密切相关,在等待运行队列的进程数和等待uninterruptible task完成的进程数。该数值应该不大于CPU核数。
- Runable processes: 该值不应该超过CPU核数的10倍。
- Blocked: 进程因为需要等待I/O操作的完成而无法执行。Blocked processes值过大,可能存在I/O瓶颈。
- Context switch: 该值应该尽量小。
- Interrupts: 包括硬中断和软中断,该值过高表明可能软件、内核或驱动存在瓶颈。注意CPU clock产生的中断也是一部分。
Read more...
LVS DR/TUN real server VIP配置
在LVS的DR/TUN模式中,需要在real server上配置与LVS Director相同的VIP,这样real server才能接受和处理LVS Director转发过来的数据包。
但是这样一个网络内就有多台主机拥有VIP,当有数据包的目的IP地址是VIP时,该传输给那台主机?显然我们希望是由LVS Director接收。
那么就相当于real server需要对其他主机隐藏自己拥有VIP的事实,这可以通过ARP机制实现:当real server接收到目的IP地址是VIP的ARP广播请求包时,不做出回应。
现在的Linux内核支持通过两个参数配置网卡接口对ARP的请求和响应做出不同的处理:
- arp_announce: 在ARP请求数据包中该包含哪个源IP地址定义不同的限制级别。
- arp_ignore: 对ARP请求包中目的IP地址定义不同的限制级别。
Read more...