分布式环境下ID生成方法总结

ID即标示符,在某个搜索域内能唯一标示其中某个对象。在关系型数据库中每个表都需要定义一个主键来唯一标示一条记录。为了方便一般都会使用一个autoincrement属性的整形数做为ID。因为数据库本身能保证这个数是在这个表范围内一直累加的,所以任何两条记录不会有相同的ID值,包括已经删除的记录。可是一旦表大到一定程度,要跨机器分表的时候,那么就不能再依靠这个autoincrement字段唯一表示一条记录了。因为此时的搜索域已经扩大到多个机器,而每台机器的auto_increment都是独立增长的。本文总结了几种在分布式环境下可用的ID生成方式。主要内容来自Instagram的一篇Blog。 UUID(universally unique identifier) 正如其名字一样,UUID就是为了要在分布式环境中产生唯一标示符而发布的一个标准。标准中规定UUID长度为16Bytes(128Bits),一般将其表示为550e8400-e29b-41d4-a716-446655440000这种16进制格式,同时将其分为5部分,每部分用-分割 »

单件模式之C++版

单件模式(Singleton Pattern)应该是设计模式中实现起来最简单的一个了。通过使用单件模式,能够保证全局只存在一个类的实例化对象。本文用C++语言来说明如何写一个简单的单件类。 在有些场景下需要一个类只能在全局存在一个实例化对象,典型的情况如线程池,数据库连接池,全局缓存,日志句柄等等。这种情况下如果实例化多个对象或是随意复制多份对象都会对全局共享的资源造成一定影响。单件设计模式就是为了解决这种问题产生的。 在C++中,要保证变量全局有效并且唯一可以使用static类型;另外想要禁止用户随意实例化类,可以将类的构造函数声明为private,同时也要禁止对象的复制和拷贝,同样将拷贝构造函数和赋值操作符声明为private。类的声明代码如下: // Singleton.h #ifndef »

I/O事件处理模型之Reactor和Proactor

在编写服务端软件的时候,如何处理各种I/O事件是其中很重要的一部分。在Unix Network Programming中介绍了5种Unix/Linux下可用的I/O编程模型: 1 阻塞式I/O 2 非阻塞式I/O 3 I/O复用 4 信号驱动式I/O 5异步I/O 这几种都是基本的I/O编程模型,可以单独使用其中一种,也可以组合使用 »

由一次ls错误发现的服务器入侵

实验室有几台linux服务器,有的用来做项目开发和测试,有的用来做代码库和知识共享。服务器都是直接接入教育网,理论上分配到的IP地址都是公网地址。但是考虑到教育网与公网之间的访问障碍以及有伟大的校长保护,对服务器的安全配置也就没怎么在意,iptables神马的都是默认配置。另外因为服务器地址都是通过DHCP获得的,为了方便实验室同学访问,给每台机器都绑定了dynamic dns。一直以来运行的都非常好,直到清明假期过后。 清明假期过后像往常一样登陆到开发服务器上,偶然发现ls命令显示有点问题: ls: unrecognized prefix: do ls: unparsable value for LS_COLORS »

MacOS Lion编译安装GCC-4.6.2

Mac中的开发工具链都是围绕xcode展开的,但是对于只想使用gcc,g++编译c/c++代码的情况,装一个动辄3,4G的开发工具实在是不符合KISS原则。更新:4.3版本的xcode已经将图形开发界面和命令行工具分开了发布了。还有即使装了xcode,默认带的gcc编译器都是lvmm做前端的,并非纯正的gnu gcc。如果你想用纯正的gcc,最好的办法就是自己手动编译一个。 本文中的安装步骤来源于:http://solarianprogrammer.com/2011/12/01/compiling-gcc-4-6-2-on-mac-osx-lion/,可以直接看英文原版 »