使用 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。

人类三大思维

1、逻辑思维 数学(推理)

2、实证思维 物理(观察,归纳)

3、计算思维 计算机(抽象,自动)

分布式 or 集群?

为支撑一个中大型网站所搭建架构时,会选用一些技术栈。比如在多个 web 服务器前使用 LVS 做负载均衡,使用 keeplived 实现 LVS 高可用,在多个 Mysql 从节点前使用负载均衡器,Mongodb 使用复制集方式,使用 twemproxy 管理多个 Redis 节点,Mysql、Mongodb、Redis 做主从同步,使用 Hadoop 管理大数据,对 Mysql 分库分表分区,Mongodb 分片,多实例Memcached,按业务将服务划分等等。这些都是通过使用多个节点来响应请求、计算、存储从而应对访问量高、并发请求大、数据量大的问题。具有这种特征的架构我们称作为“分布式服务器集群架构”。

Linux 下常见 IO 模型

常见的网络 I/O 模型大概有四种:

  1. 同步阻塞 IO(Blocking IO)
  2. 同步非阻塞 IO(Non-blocking IO)
  3. IO 多路复用(IO Multiplexing)
  4. 异步 IO(Asynchronous IO)

三类加密算法

加密技术是对信息进行编码和解码的技术。在加密算法上可分为对称加密、非对称加密和单向不可逆加密三类算法。

全球化 — 移动网号(MNC)

即移动网号,两个数字。格式:MNC 由二个十进制数组成,编码范围为十进制的00-99。用于识别移动客户所属的移动网络。若一个国家中有多于一个的 GSM 公司陆地移动网(PLMN),则每个网必须具有不同的 MNC。 MNC 一般由国家的有关电信管理部门统一分配,同一个营运者可以拥有一个或多个 MNC (视业务提供的规模而定),但不同的营运者不可以分享相同的 MNC。由于 MNC 的特殊意义,因此它在网络中一旦设定是不允许更改的。

全球化 — 国际移动用户识别码(IMSI)

IMSI 即国际移动用户识别码 International Mobile Subscriber Identity。国际上为唯一识别一个移动用户所分配的号码。从技术上讲,IMSI 可以彻底解决国际漫游问题。但是由于北美目前仍有大量的 AMPS 系统使用 MIN 号码,且北美的 MDN 和 MIN 采用相同的编号,系统已经无法更改,所以目前国际漫游暂时还是以 MIN 为主。其中以0和1打头的 MIN 资源称为IRM(International Roaming MIN),由 IFAST (International Forum on ANSI-41 Standards Technology)统一管理。目前联通申请的IRM资源以09打头。可以看出,随着用户的增长,用于国际漫游的 MIN 资源将很快耗尽,全球统一采用 IMSI 标识用户势在必行。

全球化 — 语言代码

ISO 639是数个由国际标准化组织为各语言所订定的语言代码。比如中文的 ISO 639-1 代码为 zh。 ISO 639-1是国际标准化组织 ISO 639语言编码标准的第一部分。它含有 136 个两字母的编码,用来标示世界上主要的语言。这些代码在很多地方都被用作语言的简写,例如:

英语(English)用 en 表示;
德语(Deutsch)用 de 表示(Deutsch 是德语的本名);
日语(Japanese)用 ja 表示(尽管日语的拼音是 Nihongo);
汉语 使用 zh 表示,来自“中文”的汉语拼音:Zhōngwén;

ISO 639-1 在2002年成为正式标准,ISO 639-1 收录语言列表➫

全球化 — 时区

时区(Time Zone)是地球上的区域使用同一个时间定义。1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区。比如中国为东八区(UTC/GMT+08:00)。是比世界协调时间(UTC)/格林威治时间(GMT)快8小时的时区。在1884年的“国际经度会议”上,格林尼治天文台测定的经线被确定为零度经线,有关国际会议决定将地球表面按经线从南到北,每相隔15度划一个区域,这样一共有24个区域,并且规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。