两个Mysql Proxy项目---KingShard和Atlas

1、kingshard

简介

kingshard是一个由Go开发高性能MySQL Proxy项目,kingshard在满足基本的读写分离的功能上,致力于简化MySQL分库分表操作;能够让DBA通过kingshard轻松平滑地实现MySQL数据库扩容。

主要功能:

1. 读写分离。
2. 跨节点分表。
3. 客户端IP访问控制。
4. 平滑上线DB或下线DB,前端应用无感知。
5. 支持多个slave,slave之间通过权值进行负载均衡。
6. 支持强制读主库。
7. 支持将sql发送到特定的node。
8. 支持在单个node上执行事务,不支持跨多个node执行事务。

安装

1. Install Go
2. git clone https://github.com/flike/kingshard.git src/github.com/flike/kingshard
3. cd src/github.com/flike/kingshard
4. source ./dev.sh
5. make
6. set the config file (etc/multi.yaml)
7. run kingshard (./bin/kingshard -config=etc/multi.yaml)

2、Atlas

简介

Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。

主要功能:

1.读写分离

2.从库负载均衡

3.IP过滤

4.自动分表

5.DBA可平滑上下线DB

6.自动摘除宕机的DB

Atlas相对于官方MySQL-Proxy的优势

1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口

2.重写网络模型、线程模型

3.实现了真正意义上的连接池

4.优化了锁机制,性能提高数十倍

Atlas详细说明

1.Atlas的安装

2.Atlas的运行及常见问题

3.Atlas的分表功能简介

4.Atlas部分配置参数及原理详解

5.Atlas的架构

6.Atlas的性能测试

7.Atlas功能特点FAQ

8.Atlas Sharding

名字来源

Atlas:希腊神话中双肩撑天的巨人,普罗米修斯的兄弟,最高大强壮的神之一,因反抗宙斯失败而被罚顶天。我们期望这个系统能够脚踏后端DB,为前端应用撑起一片天。

生活好艰难

现代人为了适应信息时代改变了太多,生活在一个信息爆炸的时代,信息越来越多,越来越乱,无时无刻不向你涌来。注意力越来越不能集中,被各种事情所打断,手机、电脑无疑加重了日常生活的负担,期望能安安静静的读完一本书或者享受一个周末也变得几乎不可能。几十年前想找到一个人需要写信等很久的回信,而现在想找一个人只是一通电话甚至一个微信就可以。互联网确实把人们紧密结合到了一起,但是随之而来的是社交负担的加重,各种社交网络使你不再是一个人,时时刻刻都要淹没在他人的世界里,淹没在社会中,而这些真正对我们有用的又有多少。我们付出了十倍百倍的努力去吸取和处理更多的信息,其中确有99%的都是垃圾。其实效率并没有得到提升,浪费的只有精力和时间而已或许我本来就是一个喜欢安静的人,或许是因为根本没法集中注意力在一件事,虽然多年来练就一身多线程处理事务的本事,但是对现在快节奏的生活越来越感觉力不从心。我已经关掉了社交网络包括人人空间微博朋友圈,可能在可预见的将来某个时间,我也会定时关掉微信,QQ等即时聊天工具。只有在固定时间才会去处理固定的事务。希望能在这个浮躁又碎片化的互联网时代中得到些许心灵的宁静和安静的生活。谢谢大家的理解。

利用prism.js实现代码高亮

发现一个小巧高效的代码高亮js,官网地址
http://prismjs.com/

Prism is a lightweight, extensible syntax highlighter, built with
modern web standards in mind. It’s a spin-off from Dabblet and is
tested there daily by thousands.

<link href="themes/prism.css" rel="stylesheet" />
<script src="prism.js"></script>

定制后加载到主题。
因为本站采用了instantclick做pjax加速,需要在触发pjax的时候同时触发高亮渲染。去instantclick官网的doc里找到

InstantClick fires four events to provide hooks into the lifecycle of
the page:

change : The page is changed, also triggered on initial page load and
if InstantClick is not supported. Replaces DOMContentLoaded.

Its callback can take an optional isInitialLoad argument, it’s a
Boolean that will be true when it’s the initial page change or when
InstantClick isn’t supported, and false when InstantClick changes the
page.

fetch : A page starts preloading.

receive : A page has been preloaded. You can modify its content.

wait : The user has clicked on a link, but the page isn’t preloaded
yet. Only triggers when the page isn’t displayed instantly.

这里采用on change触发InstantClick.on(‘change’, yourCallback);代码如下

InstantClick.on('change', function() {
    self.Prism.highlightAll(event);
});
InstantClick.init();

测试一下,一切正常。

iptoint,inttoip

function ipToInt($sIP)  
{  
    $aIP = explode('.',$sIP);  
    $iIP = ($aIP[0] << 24) | ($aIP[1] << 16) | ($aIP[2] << 8) | $aIP[3] ;
    if($iIP < 0) $iIP += 4294967296;  
    return $iIP;  
} 
 
function intToIP($iIP)  
{  
    $xor = array(0x000000ff,0x0000ff00,0x00ff0000,0xff000000);  
    for($i=0; $i<4; $i++)  
    {  
        ${s.$i} = ($iIP & $xor[$i]) >> $i*8;  
        if (${s.$i} < 0) ${s.$i} += 256;  
    }  
    return $s3.'.'.$s2.'.'.$s1.'.'.$s0;  
}