Inspirer

文章列表

Rust 实现动态库加载和基于此功能实现的插件管理

最近开发后端 UCenter 服务,考虑到该服务核心逻辑变动相对少,稳定性要求高,单点处理能力要强,且 IO 瓶颈较少(大多缓存),有较多的校验和加解密工作,因此需要使用性能更为强劲的语言,最终考虑使用 Rust(无 GC、内存安全、性能与 C/C++ 差距不明显)以及其最近风头正劲的基于 Actor 模型的 Web 框架:Actix-web。对于框架和语言的介绍我会另起文章,先说说这个用户中心服务。

用户中心服务提供平台下属多个应用的统一授权工作,无论是第三方登录授权(如基于 OAuth 的授权或对外部以 OAuth 支持)、SSO(Single Sign-On)以及解决跨应用用户数据共享、互通等。虽然服务核心逻辑十分稳定,但对于各类子应用接入会有较多的拓展需求,例如不同应用的专用数据表的访问、多协议适配等。对于动态语言或存在虚拟机的语言而言,动态库加载相对简单,但对于 Rust 这种静态和无(或极小)运行时语言,拓展则相对困难。不过 Rust 提供了 FFI(Foreign Function Interface)支持,我们则利用这个实现我们的需求。

为什么重启后 /run 下的文件不在了?

摘自 https://serverfault.com/questions/546966/whats-removing-stuff-from-var-run-at-reboots-from-a-fedora-machine

The software should define what directories it needs in /run (which replaced /var/run in Fedora 15) by placing a configuration file in /usr/lib/tmpfiles.d. During the boot process, systemd-tmpfiles populates /run based on that confguration.

其中解释了 /run 是挂载在临时文件的系统里的,即在系统启动后,添加在里面的数据、文件都是写入内存的,因此重启后自然不存在。

懒得去翻的,本文直接给出一个便于快速查阅的方案。

MySQL5.7 的编译安装

一直嫌弃 MySQL 的编译安装,原因很简单,依赖复杂、容易出错,总之就是麻烦。但这些天由于需要必须编译安装,被迫阅读相关文档,发现现在的 MySQL 安装变得十分简单和容易。

直接开始吧。

一切从必要依赖开始。

yum install -y gcc gcc-c++ ncurses-devel perl

本文中系统为 CentOS 7,不同系统的软件包管理器可能用法不同,但需求类似,请准备好 gcc gcc++ ncurses 及 perl 相关编译器或依赖库即可。

PHP 7 的编译安装

之前有一篇 《PHP 7 开发版本编译安装》,不过那时候连 RC 版都不是,昨日正式版已经在 Github 上发布(参见: https://github.com/php/php-src/releases) ,于是乎迫不及待的在此分享其编译安装的过程。

其实 php 的编译安装相当简单,且每个版本差异不大,正因为如此之前版本的编译安装过程也可以参考,当然,需要注意的是,每个版本的编译参数存在部分差异,以 ./configure --help 中具体描述的编译配置参数为准。

本文中系统环境为 CentOS 7 64bit,如使用其他系统环境的,请注意在某些 依赖安装环节 的差异。

HTTP 中的幂等操作

在做 web 端开发,常常和各种请求打交道。HTTP 协议中,常见的请求不外乎是 GETPOSTPUTDELETEHEAD。其中,GET、PUT、DELTE、HEAD 都是幂等操作,而 POST 则不是。那么什么是幂等操作?其存在的意义和网站的设计与架构有什么关系呢?

IE 死活无法保存 cookie 的问题(去屎吧 IE)

近日在公司遇到了一件奇葩问题 —— IE 死活无法保存 Cookie!

在平日一切正常,那天就出了这么一出问题,可问题是前两天还正常运行呢。Cookie 无法保存带来的一系列问题让人无比抓狂,但就是找不清楚问题在哪(好吧我承认对 IE 真的不了解)。按道理,并没有限制 IE 的 Cookie 功能,没有设置什么,也没有改动什么,而且其他网站依旧能够正常保存 Cookie。

问题原因到底是啥呢?

解决 mount 挂载 windows 共享目录导致出现的内存无法分配问题

原文转载自:http://jlcoady.net/windows/how-to-resolve-mount-error12-cannot-allocate-memory-windows-share 《How to Resolve “mount error(12): Cannot allocate memory” on a Windows Share》

原文的中说的步骤很简单。

  1. Set “HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache” to “1″. 即编辑注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCach 这一项的值,设置为 1

  2. Set “HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size” to “3″. 编辑注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size 这一项的值,设置为 3

  3. Restart the “server” service. 重启名为 Server 的服务即可。

PHP Cli 程序开发

PHP 在大多数人心目中主要是做 web 开发的,但实际上从 PHP 4.2.0 起就开始支持 Server Application Programming Interface 即服务端应用编程接口,也称其为 Command Line Interface,也就是我们常说的 CLI。这使得 PHP 开发外壳应用(Shell)变为可能。其实这个功能自 PHP 5 起变得越来越易用,这对于 PHP 应用于更多情景变得可能,比如多进程爬虫、服务端守护进程、自动化部署工具等等,我们如今使用的 composer 就是典型的 PHP CLI 程序。

本文主要内容就是围绕 PHP CLI (下文简称 CLI) 进行讲述,并分享一个十分强大且易用的 symfony 组件 —— console (命令行)组件。