Kratos使用过程中的常见问题

标签: kratos 常见问题 | 发表时间:2015-09-20 13:53 | 作者:
出处:http://gao-xianglong.iteye.com

《Kratos使用过程中的常见问题》

 

原文地址: https://github.com/gaoxianglong/kratos/wiki/常见问题

1、什么是Kratos?

基于Java语言编写的轻量级分库分表(Sharding)中间件,丰富的Sharding算法支持(2类4种分片算法),能够方便DBA实现库的水平扩容和降低数据迁移成本。Kratos站在巨人的肩膀上(SpringJdbc),采用与应用集成架构,放弃通用性,只为换取更好的执行性能与降低分布式环境下外围系统的宕机风险。
关于更多Kratos的介绍,请参考 https://github.com/gaoxianglong/kratos/wiki/kratos简介

2、怎么获取Kratos的源码

Kratos是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/gaoxianglong/kratos。 同时每次Kratos发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码。

3、RDBMS的数据库为什么需要做垂直分库、水平分区操作?

主要是为了解决单库性能瓶颈,充分利用分布式和集群的威力提升数据库读/写性能。关于互联网场景下常见的性能瓶颈:

  • 大量的并发访问,导致单库出现难以承受的负载压力;
  • 单表数据量过大,导致检索效率低下;

关于互联网当下的数据拆分过程,请参考 https://github.com/gaoxianglong/kratos/wiki/互联网当下的数据拆分过程

4、和其它sharding中间件相比,Kratos的优势体现在哪里?

目前市面上Sharding中间件太多,应用集成架构鼻祖TDDL闭源,而其它成熟的更多是基于Proxy,在分布式场景下,多一个外围系统依赖就意味着需要多承担一分风险,况且性能相对于应用集成架构直连数据库而言,网络连接带来的消耗也是一个问题。并且市面上大多数的Sharding中间件都会附加很多看似“实用”的鸡肋功能,导致过多的代码,可读性、维护性不好。
Kratos不考虑通用性,采用应用集成架构,站在巨人的肩膀上,只为换取更好的执行性能与降低分布式环境下外围系统的宕机风险。并且处于成本(人员成本、物理资源成本)上的考虑,Kratos有着较大优势,最重要的是,Kratos的分片模型丰富,能够帮助DBA在较短时间内实现库的水平扩容和降低数据迁移成本。
关于更多的对比细节,请参考 https://github.com/gaoxianglong/kratos/wiki/目前市面上常见的一些Sharding中间件产品对比

5、是否可以单独使用Kratos的功能子集?

Kratos简单易用,开发人员可以使用所有或者部分Kratos的功能,如果你的应用还没有达到Sharding级别,那么你可以优先考虑使用Kratos实现master/slave一主一从的读写分离操作。
关于读写分离配置,请参考 https://github.com/gaoxianglong/kratos/wiki/Master-Slave一主一从读写分离配置

6、Kratos是否一定要依赖于SpringJdbc?

Kratos诞生的初衷就是因为SpringJdbc,自然依赖于它。简单来说,Kratos重写了JdbcTemplate,并使用了Spring提供的AbstractRoutingDataSource作为动态数据源层。相信一直到最后,Kratos都不会考虑与其它第三方持久层组件集成,这主要是为了使Kratos的核心代码更加纯粹。
关于Kratos的架构模型,请参考 https://github.com/gaoxianglong/kratos/wiki/kratos的架构模型

7、Kratos支持哪些分片算法?

Kratos支持2类4种分片算法:
  • 库内分片类型:
    • 片名连续的库内分片算法;
    • 非片名连续的库内分片算法;
  • 一库一片类型:
    • 片名连续的一库一片算法;
    • 非片名连续的一库一片算法;

关于Kratos的分片模型,请参考 https://github.com/gaoxianglong/kratos/wiki/kratos的分片模型

8、Kratos所使用数据库连接池是否可随意替换?

你可以使用任意的数据库连接池,比如C3P0、DBCP、BoneCP、Druid等,Kratos推荐使用Druid与C3P0,并且Kratos对这2款数据库连接池产品提供了一定程度上的集成支持。

9、Kratos是否支持分布式事物?

Kratos不支持分布式事物,并且提示大家,能够避免引入分布式事物的,最好还是避免最好。如果实在要使用事物,那么强一致性的分布式事物肯定是不现实,也是不推荐的,但可以在业务层依赖MQ、异步操作的方式实现事物,保证最终一致性即可。
关于更多使用注意事项,请参考 https://github.com/gaoxianglong/kratos/wiki/kratos的使用注意事项

10、如何配置分片规则?

有3个属性非常重要,如下所示:

<!-- 分片开关 -->
<constructor-arg name="isShard" value="true" />
<!-- 分片模式,false为库内分片模式,true为一库一表分片模式 -->
<property name="shardMode" value="true" />
<!-- 片名是否连续,true为片名连续,false为非片名连续 -->
<property name="consistent" value="true" />

属性“shardMode”指定了分片类型,而属性“consistent”指定了分片方式。
关于片名连续的库内分片配置,请参考 https://github.com/gaoxianglong/kratos/wiki/片名连续的库内分片配置
关于非片名连续的库内分片配置,请参考 https://github.com/gaoxianglong/kratos/wiki/非片名连续的库内分片配置
关于片名连续的一库一片配置,请参考 https://github.com/gaoxianglong/kratos/wiki/片名连续的一库一片配置
关于非片名连续的一库一片配置,请参考 https://github.com/gaoxianglong/kratos/wiki/非片名连续的一库一片配置

11、路由条件是否必须是整型?

Kratos不支持其它类型的路由条件,这就意味着路由条件必须是整型。当然在实际的开发过程中,查询条件往往比较复杂,不可能都是整型,那么在这种情况下,就需要在主表的基础上,构建一个反向索引表(也称之为二级索引表)。

12、构建反向索引表时,如何避免路由条件产生hash碰撞?

查询反向索引表获取主表的路由条件时,反向索引表的路由条件一般都是主键值做hash,为了避免产生hash碰撞,检索条件一般都会采用“select uid from tab where emailhash=? and email=?”。

13、数据库Sharding后,多机的Sequence如何解决?

如果在单库的情况下,开发人员可以使用主键自增,而多机场景下,将不再适用,Kratos提供有解决生成全局唯一的SequenceId策略。
关于自动生成全局唯一的sequenceId,请参考 https://github.com/gaoxianglong/kratos/wiki/自动生成全局唯一的sequenceId

14、数据源配置文件能否自动生成?

为了避免手工配置出现错误的情况,Kratos提供有自动生成核心配置文件和数据源配置文件的功能。
关于自动生成核心配置文件,请参考 https://github.com/gaoxianglong/kratos/wiki/自动生成kratos核心配置文件
关于自动生成数据源配置文件,请参考 https://github.com/gaoxianglong/kratos/wiki/自动生成druid数据源文件



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [kratos 常见问题] 推荐:

Kratos使用过程中的常见问题

- - gao_xianglong的自言自语
《Kratos使用过程中的常见问题》. 原文地址: https://github.com/gaoxianglong/kratos/wiki/常见问题. 基于Java语言编写的轻量级分库分表(Sharding)中间件,丰富的Sharding算法支持(2类4种分片算法),能够方便DBA实现库的水平扩容和降低数据迁移成本.

linux xampp常见问题

- We_Get - 博客园-首页原创精华区
1.安装xampp4linux后,只能本机(http://localhost)访问,局域网内其他机器无法访问. 解答:在/opt/lampp/etc中修改httpd.conf,将Listen 80修改为Listen 本机ip地址:80 本机ip地址使用ifconfig 查看. 2.我按照1修改之后,局域网内的机器还是无法访问.

storm常见问题解答

- - BlogJava-庄周梦蝶
    最近有朋友给我邮件问一些storm的问题,集中解答在这里. 一、我有一个数据文件,或者我有一个系统里面有数据,怎么导入storm做计算. 你需要实现一个Spout,Spout负责将数据emit到storm系统里,交给bolts计算. 怎么实现spout可以参考官方的kestrel spout实现:.

MariaDB常见问题FAQ

- - OurMySQL
MariaDB常见问题,同样适用于MySQL. 老版本MariaDB服务的相关旧信息. via似乎是个关键字,但是至少在MySQL5.1文档中找不到. 在MySQL5.1中执行成功,但是会出现1064错误 (毫无疑问,用avia替代via就可以). 答           elenst. 这个bug(https://bugs.launchpad.net/maria/+bug/1010351)被修复.

hadoop配置常见问题

- - 企业架构 - ITeye博客
收集记录一些Hadoop配置部署过程中遇到的问题. 这种方法解决了运行中的hadoop的safe mode问题,但是下次重启hadoop,还会出现这个问题. 其实这个问题,我猜测可能是由于目录/app/hadoop/tmp/mapred/system被破坏造成. 永久解决,可以删除掉/app/hadoop/tmp/,重新创建,重新format,重启hadoop——如果条件允许的话.

Zookeeper常见问题整理

- - CSDN博客推荐文章
当leader崩溃或者leader失去大多数的follower,这时候zk进入恢复模式,恢复模式需要重新选举出一个新的leader,让所有的Server都恢复到一个正确的状态. Zk的选举算法使用ZAB协议:. 选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server;.

轻量级Mysql分库分表(Sharding)中间件——Kratos

- - gao_xianglong的自言自语
基于Java语言编写的轻量级分库分表(Sharding)中间件,丰富的Sharding算法支持(2类4种分片算法),能够方便DBA实现库的水平扩容和降低数据迁移成本. Kratos站在巨人的肩膀上(SpringJdbc),采用与应用集成架构,放弃通用性,只为换取更好的执行性能与降低分布式环境下外围系统的宕机风险.

关于链接的常见问题

- - Google China Blog
发表者:谷歌中文搜索质量团队. 转载自: 谷歌中文网站管理员博客. 发布时间:2012年9月29日 下午 03:08:00. 在我们的 网站管理员帮助论坛里,站长们问的最多的就是关于链接的问题. 很多站长询问一旦网站因为链接的原因被处理,应该怎样申请重新审核. 也有很多站长询问关于买卖链接方面的问题.

Java String 的十大常见问题

- - ITeye博客
Java字符串经常被问到的排名前十的问题.    1、如何比较字符串. 使用 “==”  还是 “equals()”.   简单来讲,“==”比较的是引用(对象的内存地址),“equals()” 比较值是否相等. 除非你想检测两个字符串是否是同一对象,否则都用equals().   当然了解字符串池的概念更好.

php初学者常见问题

- - SQL - 编程语言 - ITeye博客
最令PHP初学者头痛的十四个问题. 管理提醒: 本帖被 haowubai 执行置顶操作(2009-04-16) 【1】面之间无法传递变量 get,post,session在最新的php 版本中自动全局变量是关闭的,所以要从上一面取得提交过来得变量要使用$_GET[’foo’],$_POST[’foo’],$_SESSION[’foo’]来得到.