11 wssg3620625

尚未进行身份认证

暂无相关简介

等级
TA的排名 13w+

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

怎样避免“if”嵌套

前几日在浏览stackoverflow网站时,偶然看到别人提的“How to avoid ‘if’ chains” 的问题,觉得这是一个编程人员在编程时很容易就碰到的问题,而且我自己在看一些源码时也遇到过这种编程方式,因此,对这个问题进行一点总结。if嵌套的情况很多,下面列出一些情况,并给出了相对来说比较简洁的书写方式以供参考:1、使用一个guard来使用代码变得平坦a、代码如下:

2014-07-06 23:05:12

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

mysql字符集设置

最近一直在弄一个有关mysql proxy的项目,中间涉及到对sql语句的解析。之前对mysql了解的并不是太多,随着项目的推进,不得不补补了。今天突然看到mysql的charset设置,自己很多地方都没法解释清楚,对一些相关的sql语句背后的工作机制一知半解,于是找了点资料补习下,顺便做点儿笔记。一、字符集和校对规则字符集是一套符号和编号。校对规则是在字符集内用于比较字符的一套规则。

2014-07-06 15:15:23

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

Atlas源码剖析(十一)

读写分离和负载均衡

2014-04-09 22:19:06

Atlas源码剖析(十)

SQL语句的解析和自动分表解析SQL语句:

2014-04-09 14:45:42

Atlas源码剖析(九)

Atlas主流程处理——状态转移在接收了client的请求后,Atlas的主线程会通过调用network_mysqld_con_accept初始化连接,并通过调用chassis_event_add来选择通知某一个工作线程来执行主流程处理;接收到通知的工作线程会调用network_mysqld_con_handle来执行主流程处理,状态的转移图如下所示:Atlas对mysql p

2014-04-01 16:06:53

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

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

Atlas源码剖析(六)

日志管理基本数据结构:typedef struct { GLogLevelFlags min_lvl; //glib中对应的日志级别,初始为critical, //后改赋为message gchar *log_filename; //日志文件名free gint log_file_fd; //打开的

2014-03-26 16:19:47

Atlas源码剖析(五)

后台连接池的管理Atlas为每个后台设置了一个pools,pools是一个数组,每一个线程都对应pools里的一个pool,一个pool管理着一个线程跟这个后台的连接。主要的数据结构如下:struct chassis_private { lua_scope *sc; network_backends_t *backends; //管理后台组};

2014-03-20 15:58:00

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

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

Atlas源码剖析(二)

以守护模式启动进程Atlas中通过调用chassis_unix_daemonize函数来开启守护模式。(a)   忽略SIGTTOU、SIGTTIN和SIGTSTP信号,忽略来自终端的信号。(b)   调用fork创建子进程,然后终止父进程。这样做实现了以下几点:第一,如果该守护进程是作为一条简单shell命令启动的,那么父进程的终止使得shell认为这条命令已经执行完毕;第二,子进程

2014-03-18 09:51:00

Atlas源码剖析(一)

信号设置在设置各种配置参数之前,如果支持sigaction,则使用sigaction来设置SIGSEGV信号,指定处理函数调用g_on_error_stack_trace获取相关的堆栈信息后,调用abort退出程序。此信号在程序结束前进行清除,修复默认处理方式。#ifdef HAVE_SIGACTION /* register the sigsegv interceptor

2014-03-18 09:04:52

Atlas架构及相关功能介绍

一、       Atlas的整体架构Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。Atlas的整体架构,可参考下面

2014-03-14 17:48:38

Atlas的安装及配置

一、       Atlas简介Atlas是Qihoo 360 Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。主要功能: 1、读写分

2014-03-14 17:45:18

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

构建mysql-proxy

一、 目标现有几台虚拟机,一台主机,多台从机,笔者所要做的是在这几台虚拟机中构建mysql-proxy,实现读写分离。如下图所示:mysql-proxy就是一个中间层代理,简单的说,mysql-proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,mysql-prox

2014-01-05 22:39:33

查看更多

勋章 我的勋章
    暂无奖章