void rollback() {
        final int initCount =
 session.getTargetCount();
        lock.lock();
        try {
            reset(initCount);
        } finally {
            lock.unlock();
        }
        if (session.closed()) {
            decrementCountToZero();
            return;
        }
        // 执行
        int started = 0
;
        for (
final RouteResultsetNode node : session.getTargetKeys()) {
            if (node == 
null) {
                    LOGGER.error("null is contained in RoutResultsetNodes, source = "
                            +
 session.getSource());
                continue;
            }
            final BackendConnection conn =
 session.getTarget(node);
            if (conn != 
null) {
                boolean isClosed=
conn.isClosedOrQuit();
                    if(isClosed)
                    {
                        session.getSource().writeErrMessage(ErrorCode.ER_UNKNOWN_ERROR,
                                "receive rollback,but find backend con is closed or quit"
);
                        LOGGER.error( conn+"receive rollback,but fond backend con is closed or quit"
);
                    }
                if (LOGGER.isDebugEnabled()) {
                    LOGGER.debug("rollback job run for " +
 conn);
                }
                if (clearIfSessionClosed(session)) {
                    return;
                }
                conn.setResponseHandler(RollbackNodeHandler.this);
                //support the XA rollback
                if(session.getXaTXID()!=
null && conn 
instanceof  MySQLConnection) {
                    MySQLConnection mysqlCon =
 (MySQLConnection) conn;
                    String xaTxId =
 session.getXaTXID();
                    //exeBatch cmd issue : the 2nd package can not receive the response
                    mysqlCon.execCmd("XA END " + xaTxId + ";"
);
                    mysqlCon.execCmd("XA ROLLBACK " + xaTxId + ";"
);
                }else {
                    conn.rollback();
                }
                ++
started;
            }
        }
但问题是已经成功的提交无法回滚,就会造成分库或多节点间数据不一致。
 
Vitess:
Youtube出的与我们现有架构中需要注入的接口对应不上,需要改造现有接口,不太满足要求

Atlas(https://github.com/Qihoo360/Atlas):
360开源的,但是在github上发现他们似乎不太会花精力维护了,最近一次代码的更新时两年前了,另外启了事务似乎不分读写都会走主库,关于跨库方面似乎也不是很符合我们的需求。

Oceanus(https://github.com/58code/Oceanus):已经很久没维护了,而且只有37个提交。
 
DBProxy (https://github.com/Meituan-Dianping/DBProxy)
美团,C语言开发的,独立部署式的,还是希望能有一个直连的,并且有问题可以自己改的
 
sharding-jdbc (https://github.com/dangdangdotcom/sharding-jdbc)
当当直连数据库式的,下面是2017-03-30截的图,大版本改动太大稳定性如何,感觉还是要看一段时间再入场比较好,

最大努力送达模型,其他方面目前感觉是最合适的,分片配置成一个就是不分库

==========================================================
咱最近用的github:https://github.com/saaavsaaa
微信公众号:
                      
mysql分表分库选型
标签:mybatis   pack   ping   style   c语言   gets   一点   tco   init