Road to growth of rookie

Meaningful life is called life

0%

前段时间手撸一个 PHP 的本地自动化环境脚本, 跟朋友分享了一波之后收到了绝大多数的好评. 但是在实际使用的过程中还是有不少的问题, 因为刚入职了新公司也没有时间去升级, 今天刚好有空抽出来两个小时升级一下.

实际使用中遇到的问题:

首先是对 Mac 系统产生依赖, 不能直接移植到 Linux 上; 因为我一直使用的都是 Mac, 它本身自带了 Apache, 当时为了节省时间直接使用 Apache 作为代理服务器, 但是 Linux 本身不会默认安装, 所以这个需要优化. 这个优化上次也提过, 就是通过 docker 拉起一个 nginx 的代理镜像, 通过代理镜像把流量转发到业务容器上.

第二就是 域名root目录 等都是固定不可配置的, 但是我在实际开发过程中还有 Yii 的项目, 需要修改 root 指向地址. 之前都是拉起业务容器后, 进入到容器内手动去修改, 很不方便, 这个也需要优化, 改成通过参数的方式传递给脚本.

Read more »

想要测试一下 MySQL InnoDBMyISAM 两种引擎在不同状态下的查询效率, 之前使用过 sysbenchInnoDB 优化做过一波测试, 时间有点久, 对使用方式有点忘记了, 正好趁这个机会梳理一下; 也刚好对自定义脚本测试做一个简介.

sysbench 是一个跨平台的基准测试工具, 不仅支持数据库性能测试, 还支持测试 CPU性能、磁盘IO性能、调度程序性能、内存分配及传输速度、POSIX线程性能 测试; 本文主要对 数据库性能 测试做一个梳理

MySQL 其实自带了一个压力测试工具 mysqlslap, 但是对自定义测试不太友好. 但是在实际的项目中, 可能就是需要对现有的数据做测试, 所以 sysbench 的适用范围要比 mysqlslap 更广

Read more »

VirtualBox 搞两台虚拟机, 打算运行一下数据库相关的测试. 配置好一台虚拟机后, 想要根据配置好的虚拟机为模板, 复制两个出来; 复制是复制出来了, 两台虚拟机 IP 地址是和 mac 地址都是一样的.

Read more »

Docker 还没有在国内流行起来的早期开发中, 关于 PHP 本地开发环境的搭建, 我尝试过使用本机安装 Nginx + PHP, 也尝试过使用虚拟机的方式. 各有各的优缺点.

因为我们之前生产环境使用的是 Docker 进行部署, 所以为了模拟生产环境需要使用线上的 Docker 镜像; 但是每个项目都写一个给本地开发环境使用的 docker-compose.yml 我又觉得很麻烦, 就花了一点时间写了一个自动化工具

之前有尝试过 Laravel Valet 虽然它的实现对现在来说, 已经有些老旧了, 但是它的运行方式我很喜欢, 所以我打算按照它的方式来写这个自动化工具

项目地址: https://gogs.ijunj.com/common/php-link-tool

Read more »

Laravel/Lumen 应该是目前最受欢迎的框架了, 所以它们的社区也是最活跃的, 扩展包扽支持也是最多的; 从 18 年工作开始我们一直都在使用 Laravel/Lumen, 也在项目中对它做出来一些修改, 用于更好、更快的开发项目

关于 DB 类的一些实践

通过 DB::listen 监听所有执行的 SQL 语句, 这个操作也可以通过查看 mysql 的查询日志实现, 但是调试的过程中还是没有直接写一个函数来的方便

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (!function_exists('print_sql')) {
/**
* To monitor and print execute SQL statements
*
* @param bool $die
*
* @return void
*/
function print_sql($die = false)
{
\Illuminate\Support\Facades\DB::listen(function ($sql) use ($die) {
$singleSql = $sql->sql;
$function = $die ? 'dd' : 'd';
if ($sql->bindings) {
foreach ($sql->bindings as $replace) {
$value = is_numeric($replace) ? $replace : "'" . $replace . "'";
$singleSql = preg_replace('/\?/', $value, $singleSql, 1);
}
$function($singleSql);
} else {
$function($singleSql);
}
});
}
}
Read more »

在网上无意中看到的一篇 文章, 这哥们非常简洁地谈论了 Zend Opcache 的最佳设置, 他说他为此花了大量的时间探索 Zend Opcache 的每个设置选项的细节, 甚至是阅读它的源代码, 并且在自己的项目中实践 (一个每天有 117 millionHTTP 请求的应用) . 个人觉得这种文章相当有指导意义, 所以特地把它的设置方式摘译如下 (格式有些修改).

Read more »

Any technical argument is necessary, even if you put forward a wrong idea, but this argument should stop at technology

今天中午干完饭, 去楼道抽烟, 看到我们产品一个 29 快 30 的大小伙子在那里, 极度郁闷, 卡卡的一根接一根的在那抽烟, 遍地烟头 (估计得抽了有半包).

事情起因是因为今天我们的后台被别人搞了, 衍生出觉得 App 也不太安全, 虽然我们本身是有接口加密的. 但是加密的算法采用的是 RC4 对称加密, 所以密钥是暴露在客户端的, 在拿到我们的包之后可以通过反编译的方式, 获取到加密的密钥

iOS 端针对这个问题, 把整个网络请求的库打包成了一个静态库加载到项目里, 但是这种做法遭到了 Android 端的极力反对 (主要是 Android 端负责人的极力反对). 按照他们的说法是, 安卓把整个网络请求库打包成一个静态库不是很方便

Read more »

规范明确, 清晰, 一致的 Git 分支管理, 可以帮助在多人协作时更加和谐.

每个人对工具的使用往往各有偏好, 各种方法各有利弊, 无所谓对错. 但涉及团队协作的方面需要有一些一致的规范, 遵守一致的规范也能提升大家的效率.

image

除了一致性之外,这个规范的目的是以下几点:

  • 确保可以轻易确定特定时间发布或运行的版本. 在新发布的程序存在重大缺陷时, 可以尽快 rollback 到上一个稳定版本.
  • 在需要修复紧急 bug 并尽快发布时, 可以只发布必要的 bugfix 而不同时发布还不应发布的其他改动.
Read more »

When you encounter a problem, you need to solve the problem, not to escape, and there is no way to escape, you still have to solve it in the end

关于 API 的设计, 一直都是一个比较难搞的问题, 大家对标准也有不同的理解. 这几年里我也接触了好几个项目, 有自己独立设计的, 也有辅助同事设计的. 虽然都是一些中小型的项目 (最大的一个 QPS 1400), 但是开发的过程中也学到了很多东西

有一点我认为尤其的重要, 在多人开发中, 如果大家拟定了一个规范, 不管这个规范是好或者是坏 (前提是: 这个方案是经过讨论经过 大多数人同意 的), 请一定要准守. 这样会让其他开发人员在理解你的代码逻辑的时候, 能更容易看懂; 一旦有人开始不准守规范的时候, 那么项目维护和开发会非常的蛋疼

Read more »

这套工具, 是在某一次观摩朋友公司大型发版过程中, 学到的, 发现使用起来挺方便, 正好我们公司的流程管理工具不是很方便, 就借鉴了一下. 记录一下搭建过程和遇到的一些坑

好的流程管理工具, 可以提高每个部门之间协作的效率, 让大家更便捷、更高效

image

Read more »