动态追踪技术

简介

动态追踪技术通常是基于操作系统内核来实现的。是一种调试技术。

作用

用于排查线上出现的诡异问题,如网站运行缓慢、超时、CPU占用率高

优点

  1. 动态追踪技术一般是不需要目标应用来配合的。
  2. 自身的性能损耗极小

DTrace

DTrace 是一个非常通用的调试平台,它提供了一种很像 C 语言的脚本语言,叫做 D。基于 DTrace 的调试工具都是使用这种语言编写的。

Supervisor

安装

brew install supervisor

安装完成后会有如下几个命令工具

  • supervisord,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启
  • supervisorctl,用户与 Supervisor 交互的工具,方便用户管理子进程,可用来 stop、start、restart
  • echo_supervisord_conf,输出默认配置

常用命令

1
2
3
4
5
6
7
supervisord -c /usr/supervisor/supervisord.conf // 启动 supervisor,通过 http://ip:9001/ 就可以查看supervisor的web界面

supervisorctl start horizon // 使用 supervisorctl 启动 horizon 脚本

supervisorctl reload // 重启,每次更改了脚本代码后需要reload

supervisorctl status // 查看进程启动状态

supervisor.ini 配置文件详解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[program:demotest]
command=python demotest.py 10000  # 被监控的进程启动命令
directory=/root/                # 执行前要不要先cd到目录去,一般不用
priority=1                    # 数字越高,优先级越高
numprocs=1                    # 启动几个进程
autostart=true                # 随着supervisord的启动而启动
autorestart=true              # 自动重启。。当然要选上了
startretries=10               # 启动失败时的最多重试次数
exitcodes=0                   # 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=TERM               # 用来杀死进程的信号,Default: TERM(即kill -15)
stopwaitsecs=10               # 发送SIGKILL前的等待时间,Default: 10
redirect_stderr=true          # 重定向stderr到stdout

Linux kill -15

Git 基础知识

Git 简介

版本控制工具,分布式版本控制系统

git commit 注释标记

参考文章

  • feat: 添加新功能
  • fix: 修复bug
  • docs: 仅仅修改了文档
  • style: 仅仅修改了空格、格式缩进等等,不改变代码逻辑
  • refactor: 代码重构,没有加新功能(即不是新增功能,也不是修改 bug 的代码变动)
  • merge: 分支合并,解决冲突
  • ui: 修改了一下样式
  • test: 增加测试用例
  • debug: 增加调试日志
  • chore: 构建过程、辅助工具的变动
  • perf: 提高性能

建立分支名规范

模板:开发者姓名拼音首字母_feat/fix_功能名

Laravel 定时任务与常驻进程

任务调度功能

Laravel 命令行调度器允许你在 Laravel 中对命令调度进行清晰流畅的定义。且使用这个任务调度器时,你只需要在你的服务器上创建单个 Cron 入口接口。你的任务调度在 app/Console/Kernel.php 的 schedule 方法中进行定义。

Mysql 事务和锁

事务是必须满足4个条件(ACID)

  • A (Atomicity) 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样
  • C (Consistency) 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
  • I (Isolation)隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰
  • D (Durability) 持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

并发事务处理带来的问题

相对于串行处理来说,并发事务处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多的用户。但并发事务处理也会带来一些问题,主要包括以下几种情况。

Laravel 常用组件

dingo/api

dingo/api 是一个 Lumen 和 Laravel 都可用的 RestFul 工具包,帮助我们快速的开始构建 RestFul Api。

1
2
composer require dingo/api
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

注意点:

由于路由被 DingoApi 接管了,如果将来部署上线后你需要缓存路由,可以使用 php artisan api:cache 代替 php artisan route:cache ,本地测试请不要执行这个命令。

Laravel 基础知识

php 框架运行的核心三步

  1. 从入口进入 index.php
  2. 解析 url,匹配路由
  3. 根据路由,调用控制器,渲染视图

tip: 在第一步到第二步之间,会有更多的操作。比如自动加载,容器初始化等。这些都是为了后面的准备。

黑客入侵

前提

网站被黑首先要检查搜索引擎页面收录情况,很多网站被黑页面会被修改标题后跳转,黑客通过挂马跳转到自己的网站,被跳转的页面已博彩和色情网站居多,黑客通过这种方式来截取流量,确认网站被黑之后应该迅速采取修复手段和后期预防手段,首先应该停止网站的运行,避免更多页面出现问题,然后清除被黑的内容,将被黑的页面设置为404,并通过搜索引擎的后台进行死链提交,还需要技术人员通过检测被黑的时间以及排除出被黑的原因及时把漏洞补上,常规的操作是更改网站关键密码,比如服务器、数据库、网站管理的密码、修复系统的补丁,代码层面的漏洞需要程序人员去检测后修复。

高并发处理

高并发之问题描述

某天A君突然发现自己的接口请求量突然涨到之前的10倍,没多久该接口几乎不可使用,并引发连锁反应导致整个系统崩溃。如何应对这种情况呢?生活给了我们答案:比如老式电闸都安装了保险丝,一旦有人使用超大功率的设备,保险丝就会烧断以保护各个电器不被强电流给烧坏。同理我们的接口也需要安装上“保险丝”,以防止非预期的请求对系统压力过大而引起的系统瘫痪,当流量过大时,可以采取拒绝或者引流等机制。

NoSQL 简单了解

NoSQL 数据库与传统的关系型数据库相比,它具有操作简单、完全免费、源码公开、随时下载等特点,并可以用于各种商业目的。

这使 NoSQL 产品广泛应用于各种大型门户网站和专业网站,大大降低了运营成本。其中风头最劲的莫过于 MongoDB 了。