- 博客(28)
- 资源 (3)
- 收藏
- 关注
原创 Atlas权重测试中的bug调试
一、 问题背景Atlas对slave进行负载均衡,每一台slave都有一个权重值,权重越大,负载的读请求越多。负载均衡的算法比较巧妙,代码如下: guint max_weight = rwsplit->max_weight; guint cur_weight = rwsplit->cur_weight; guint next_ndx =
2014-07-10 20:09:31
1109
原创 怎样避免“if”嵌套
前几日在浏览stackoverflow网站时,偶然看到别人提的“How to avoid ‘if’ chains” 的问题,觉得这是一个编程人员在编程时很容易就碰到的问题,而且我自己在看一些源码时也遇到过这种编程方式,因此,对这个问题进行一点总结。if嵌套的情况很多,下面列出一些情况,并给出了相对来说比较简洁的书写方式以供参考:1、使用一个guard来使用代码变得平坦a、代码如下:
2014-07-06 23:05:12
2296
原创 Problem 2 ---- euler
Even Fibonacci numbersProblem 2Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:1, 2, 3, 5, 8, 13, 21,
2014-07-06 15:42:09
499
原创 mysql字符集设置
最近一直在弄一个有关mysql proxy的项目,中间涉及到对sql语句的解析。之前对mysql了解的并不是太多,随着项目的推进,不得不补补了。今天突然看到mysql的charset设置,自己很多地方都没法解释清楚,对一些相关的sql语句背后的工作机制一知半解,于是找了点资料补习下,顺便做点儿笔记。一、字符集和校对规则字符集是一套符号和编号。校对规则是在字符集内用于比较字符的一套规则。
2014-07-06 15:15:23
2419
原创 Problem 1 ---- euler
Multiples of 3 and 5Problem 1If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.Find the sum of all the multiples of
2014-07-05 22:26:27
500
原创 Atlas源码剖析(九)
Atlas主流程处理——状态转移在接收了client的请求后,Atlas的主线程会通过调用network_mysqld_con_accept初始化连接,并通过调用chassis_event_add来选择通知某一个工作线程来执行主流程处理;接收到通知的工作线程会调用network_mysqld_con_handle来执行主流程处理,状态的转移图如下所示:Atlas对mysql p
2014-04-01 16:06:53
1245
原创 Atlas源码剖析(八)
Atlas IP过滤Atlas实现了IP过滤,通过配置参数client-ips来指定有权限访问的IP。client-ips的配置如下所示,可以是精确IP,也可以是IP段,以逗号分隔,若不设置client-ips则允许所有IP连接,否则只允许列表中的IP连接:client-ips = 127.0.0.1, 192.168.1Atlas把配置的IP转换成整数,放入hash表中:
2014-04-01 15:22:10
1273
原创 Atlas源码剖析(七)
后台状态检测基本结构体:typedef struct {network_address *addr; //后台地址 backend_state_t state; /**< UP or DOWN */ //后台的状态 backend_type_t type; /**< ReadWrite or ReadOnly */ //后台的类型 GP
2014-03-27 17:24:38
1393
原创 Atlas源码剖析(六)
日志管理基本数据结构:typedef struct { GLogLevelFlags min_lvl; //glib中对应的日志级别,初始为critical, //后改赋为message gchar *log_filename; //日志文件名free gint log_file_fd; //打开的
2014-03-26 16:19:47
1256
原创 Atlas源码剖析(五)
后台连接池的管理Atlas为每个后台设置了一个pools,pools是一个数组,每一个线程都对应pools里的一个pool,一个pool管理着一个线程跟这个后台的连接。主要的数据结构如下:struct chassis_private { lua_scope *sc; network_backends_t *backends; //管理后台组};
2014-03-20 15:58:00
1332
原创 Atlas源码剖析(四)
线程模型基本数据结构struct chassis_event_threads_t {GPtrArray *event_threads; //线程组,用来保存各个线程;GAsyncQueue *event_queue; //事件队列,用来保存connection结构;};typedef struct {chassis *chas; //chassis指针 //i
2014-03-19 09:52:52
1249
原创 Atlas源码剖析(三)
keepalive进程的开启Atlas调用chassis_unix_proc_keepalive函数来keep process alive。调用fork创建子进程,其中子进程直接返回,处理接下来的任务,父进程将接收到的SIGINT、SIGTERM、SIGHUP、SIGUSR1和SIGUSR2信号发送给子进程进行处理,若系统支持wait4则调用wait4等待子进程结束,否则调用waitpid
2014-03-18 09:58:41
1383
原创 Atlas源码剖析(二)
以守护模式启动进程Atlas中通过调用chassis_unix_daemonize函数来开启守护模式。(a) 忽略SIGTTOU、SIGTTIN和SIGTSTP信号,忽略来自终端的信号。(b) 调用fork创建子进程,然后终止父进程。这样做实现了以下几点:第一,如果该守护进程是作为一条简单shell命令启动的,那么父进程的终止使得shell认为这条命令已经执行完毕;第二,子进程
2014-03-18 09:51:00
1289
1
原创 Atlas源码剖析(一)
信号设置在设置各种配置参数之前,如果支持sigaction,则使用sigaction来设置SIGSEGV信号,指定处理函数调用g_on_error_stack_trace获取相关的堆栈信息后,调用abort退出程序。此信号在程序结束前进行清除,修复默认处理方式。#ifdef HAVE_SIGACTION /* register the sigsegv interceptor
2014-03-18 09:04:52
2177
原创 Atlas架构及相关功能介绍
一、 Atlas的整体架构Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。Atlas的整体架构,可参考下面
2014-03-14 17:48:38
3312
原创 Atlas的安装及配置
一、 Atlas简介Atlas是Qihoo 360 Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。主要功能: 1、读写分
2014-03-14 17:45:18
7588
原创 Lattice paths——格子路径
这个题目是取自http://projecteuler.net/problem=15上,解决的方法挺简单的,但是我觉得思考方式可以当成一个范例来看待,因此写下点东西做点儿记录。 Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are
2014-01-25 23:36:50
2063
原创 构建mysql-proxy
一、 目标现有几台虚拟机,一台主机,多台从机,笔者所要做的是在这几台虚拟机中构建mysql-proxy,实现读写分离。如下图所示:mysql-proxy就是一个中间层代理,简单的说,mysql-proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,mysql-prox
2014-01-05 22:39:33
744
原创 mysql主从复制
一、 目标将多台虚拟机配置成一台主机、多台从机,通过主从复制的方式来同步数据。如下图所示:二、 基本步骤a) mysql的安装与配置每台虚拟机上都已经安装好了mysql,具体方法与步骤请参照:http://qiuzl.com/blog/?p=16b) 先在两台机器上实践主数据库服务器:172.30.204.71从数据库服务器:172.30.204.7
2014-01-05 22:34:44
577
原创 在linux下本地安装mysql
一、 目标笔者所要处理的问题是,在几台linux虚拟机上安装mysql,但虚拟机是共享的,不能破坏全局环境而影响到其他用户的使用,因此必须在特定的个人目录下安装mysql。另外有些虚拟机上已经安装有mysql,并且启动了服务,所以,安装的mysql的配置不能跟原有的mysql冲突,如监听的端口号、mysql.sock文件的位置、数据目录(datadir)等。mysql.sock是mysql
2014-01-05 22:30:16
1397
原创 在Linux下安装Tomcat
一、安装JDK* 从Oracle官方网站上下载最新的JDK,解压, tar -xvf jdk-7u10-linux-i586.tar.gz。* 将其拷贝到/usr/local/目录下,cp -r jdk1.7.0_10/ /usr/local/java* 配置环境,在/ect/profile文件中加入下列语句:export JAVA_HOME="/usr/local/java"
2012-12-24 19:54:37
304
原创 Linux使用apt-get安装软件时出现的问题
昨天在Linux下使用apt-get install 安装软件时,出现了:子进程 post-installation script 返回了错误号 1 在处理时有错误发生的错误,接着就是一连串的依赖,其实就是前面因上面这个问题没安装好的包导致的一连串依赖。因此,解决好上面这个问题是关键。采用了下面的方法,问题很快得到了解决,现在把方法记下,以备后用。1.$ sudo mv /va
2012-12-15 17:11:46
594
原创 二维数组与二级指针
室友编写了关于一个二级指针与二维字符串数组的程序,但是老是报段错误,不明就里,让我帮忙调试。我根据他的程序出理的问题,写了另外一个简单一点的程序,来了解问题所在,程序如下:运行gcc -W b.c -o b,会产生警告信息:运行: ./b,果断报段错误了。之所以会报警告错误,原因在于c语言的多维数组实际上是数组的数组,a与b的类型并不匹配,a是一个具有
2012-05-06 23:04:09
1167
2
原创 在Linux下使用subversion搭建项目
项目管理是大型程序设计中必不可少的一部分。对于经常修改程序版本的程序员而言,项目管理的价值已远远超出软件开发的领域。在项目开始中,如果当前出现了失误,项目管理可以使用户代码自动恢复到一个已知的,工作正常的版本,从而避免重大的风险和损失。此外,在已经发布的老程序版本中如果发现了bug,用户也可以轻松地检出特定的版本,以确认和修订,并生成该bug的修补程序。如果没有版本控制和项目管理,用户在开发时必须
2012-04-22 15:22:53
1838
转载 云里雾里的云计算
有一次去开会,台上的人在讲云计算。我问身边的听众,“听懂了吗?感觉如何?”听众答,“云里雾里的,感觉特神秘。”我说,“这说明讲员讲得好。有没有注意到寺庙里的气氛也很神秘?不神秘,就没有崇拜。不崇拜,你怎么肯掏钱买香火?”【1】云计算要解决什么问题?
2011-09-15 19:10:25
1892
原创 C++中const的含义
在学习c++期间,一次偶然看到一篇文章,文提到一个问题:关键字const是什么含意?然后作者接下来又说到,如果对方回答说:“const意味着常数”,就知道正在和一个业余者打交道。这话使我震惊了,然后继续把文章看完了,并按文章所说的,下载了Dan Saks的const T vs. T const文章,并仔细看了一遍。现记录一下自己的理解。在说明问题之前,先来看一个小例子:typedef void *VP;const VP vectorTable[] = {.....};跟上面这段代码等价的是不是下面这段代码呢
2011-04-13 16:21:00
889
关于antlr的详细教材
2009-09-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人