syyongx 发布的文章

Dokuwiki 二次开发记录

DokuWiki 是一种在 GPLv2 下获得许可并以 PHP 编程语言编写的 wiki 应用程序。 它适用于纯文本文件,因此不需要数据库。它的语法与 MediaWiki 使用的语法类似。

DokuWiki 具有丰富的插件,如Markdown、sidebar、流程图、时序图、svg、数学公式、ToDo等等这些实用的插件。

但由于直接安装 DokuWiki 和使用她的插件,对有些地方和样式不是很满意。如 Markdown 插件存在 bug,样式风格过于传统,登录方式需要自定义等。由于这些问题的存在,也就需要在源码的基础上做些配置和二次开发。

http2

HTTP/2(最初名为 HTTP/2.0)是 WWW 使用的 HTTP 网络协议的主要版本。 它来自早先由 Google 开发的实验性 SPDY 协议。 HTTP/2由互联网工程任务组的超文本传输协议工作组 httpbis(其中 bis 表示“第二个”)开发。 HTTP/2是 HTTP 1.1以来的第一个新版本,于1997年在 RFC 2068中进行了标准化。工作组于2014年12月向 IESG 提交了 HTTP/2作为建议标准的审议意见,IESG 批准其发布为提议 标准于2015年2月17日发布。HTTP/2规范于2015年5月发布为 RFC 7540。

Chrome,Opera,Firefox,Internet Explorer 11,Safari,Amazon Silk 和 Edge 浏览器支持标准化工作。 到2015年底,大多数主流浏览器都增加了对 HTTP/2 的支持。

Go 完整实现版本比较 VersionCompare 函数

VersionCompare — 用于对比两个的版本数字字符串大小。

此函数首先在版本字符串里用一个点 . 替换 _、- 和 +,也会在任意非数字前后插入一个点 .,这样,类似 '4.3.2RC1' 将会变成 '4.3.2.RC.1'。 接下来它会分割结果,然后它会从左往右对比各个部分。如果某部分包含了特定的版本字符串,将会用以下顺序处理:列表中未找到的任意字符串 < dev < alpha = a < beta = b < RC = rc < # < pl = p。 这种方式不仅能够对比类似 '4.1' 和 '4.1.2' 那种不同的版本级别,同时也可以指定对比任何包含开发状态的版本。

PHP 中几种用于区分环境的方法

在项目开发过程中,我们一般至少会有三套环境:本地开发环境,测试环境、线上生产环境。而不同的环境一般它的配置文件内容是不一样的,比如环境不一样时数据库地址不一样。为了能在每次发布代码时不至于屡次改动代码来适配不同的环境,我们可以为每一套环境对应到各自的配置文件,这时就需要能有一种方法能识别当前代码所运行的环境来自动加载对应的配置文件。这样的自动识别环境的方法常用的有三种。

使用 nginx 的 proxy_pass 功能做域名转发导致一次事故

proxy 模块是 nginx 中非常实用的一个模块。可以方便地实现一个域名的流量转发到另一域名,也可以将一个端口的流量转发到另一个端口。而结合在 AWS 等云服务中的 elb(负载均衡器) 使用本功能时则要注意一下域名被缓存问题,否则可能导致整个域名无法提供服务。

一次 MongoDB 选主失败经历

MongoDB 选主机制较为复杂,需要考虑各种可能性,选举机制可参考>>。这样在某些特定情况下,则可能导致选主失败,从而使得整个集群中无主,也就无法提供写操作,进而影响到服务的可用性。本文便记录了一次在特殊场景下所导致的选主失败经历。

协程

“协程”(Coroutine)概念最早由 Melvin Conway 于1958年提出。协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。总的来说,协程为协同任务提供了一种运行时抽象,这种抽象非常适合于协同多任务调度和数据流处理。在现代操作系统和编程语言中,因为用户态线程切换代价比内核态线程小,协程成为了一种轻量级的多任务模型。

从编程角度上看,协程的思想本质上就是控制流的主动让出(yield)和恢复(resume)机制,迭代器常被用来实现协程,所以大部分的语言实现的协程中都有 yield 关键字,比如 Python、PHP、Lua。但也有特殊比如 Go 就使用的是通道来通信。

复制集模式 MongoDB 从2.2升级到3.0

到目前最新 Release 版本的 Mongodb 已经是3.2了,对于比2.2更高的版本 2.4、2.6、3.0 来说,无论是支持更多的新特性还是在性能、安全、bug 修复方面也都有着巨大的改进。但也正是因为这些变动就会给升级工作带来困难和风险,比如兼容性问题。而我们必须遵守整个升级过程是数据要绝对安全,线上服务不能受影响的原则,这就需要在前期做好充足的准备工作。整个版本升级过程会逐步推进,从2.2到2.4,从2.4到2.6,php驱动升级,从2.6到3.0,升级3.0引擎为 WiredTiger。