`
gao_xianglong
  • 浏览: 467041 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Kratos使用过程中的常见问题

 
阅读更多

《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数据源文件

分享到:
评论

相关推荐

    kratos定时任务-kratos-cron.zip

    要使用kratos-cron,你需要在项目中引入相关依赖,并配置任务。这通常包括定义任务函数、设置任务调度规则,以及启动调度器。在kratos-cron-main这个文件中,通常包含了调度器的主入口和示例任务定义。例如,你可以...

    B站微服务框架kratos开发文档PDF版

    Kratos框架是为了解决现代互联网服务在设计、开发和运维过程中遇到的挑战而创建的,它提供了全面的微服务解决方案,包括服务治理、依赖注入、日志、监控、熔断、限流等多个关键功能。 一、Kratos框架概述 Kratos...

    wordpress-kratos-pjax-0.4.4

    在这一背景下,"WordPress Kratos Pjax 0.4.4"应运而生,它是一种旨在提高WordPress网站页面加载速度的插件,通过使用Pjax(Push State + AJAX)技术,实现了页面的无刷新快速切换,极大地提升了用户的浏览体验。...

    B站微服务框架Kratos详细教程(2)-HTTP服务项目源码

    通过这个示例,你可以学习到如何在Kratos中定义一个HTTP服务,如何处理HTTP请求,以及如何使用中间件增强服务的功能。同时,理解Kratos的配置方式也是很重要的,它允许你动态地调整服务行为,适应不同的运行环境。 ...

    PyPI 官网下载 | kratos-debug-0.0.1.tar.gz

    ".tar.gz"是Linux和Unix系统中常见的归档文件格式,它由tar命令用于打包多个文件,并通过gzip工具进行压缩,以减少存储空间。在我们的例子中,"kratos-debug-0.0.1"可能是这个库的版本号,"0.0.1"表明这是该库的初始...

    B站微服务框架Kratos详细教程(7)-数据库示例项目源码

    【标题】:“B站微服务框架Kratos详细教程(7)-数据库示例项目源码”是针对Bilibili(B站)开发的开源微服务框架Kratos的一个实践教程,主要聚焦于如何在Kratos中集成和操作数据库。在这个教程中,你将学习到如何在...

    WordPress简约响应式个人博客Kratos主题

    Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净,简单且响应迅速的博客主题,Vtrois创建和维护,主题设计简约友好,并且支持响应式,自适应访问,简seo单大方的主页构造,使得博客能在臃肿杂乱的环境中...

    B站微服务框架Kratos详细教程(6)-服务发现示例项目源码

    在Kratos中,这可以通过配置文件或代码实现。 2. **服务发现**: 当服务消费者需要调用其他服务时,它会查询服务中心,获取服务提供者的最新位置信息。Kratos提供了API接口或客户端库来简化这个过程。 3. **健康...

    Kratos+Original+Concepts.zip

    这个压缩包文件“Kratos+Original+Concepts.zip”很可能包含了关于这个著名游戏角色的原始设计理念、概念艺术图以及早期开发过程中的相关资料。 1. **概念设计**:在游戏开发初期,角色的概念设计是非常关键的一环...

    B站微服务框架Kratos详细教程(3)-中间件 示例项目源码

    **中间件在B站微服务框架Kratos中的应用** 在微服务架构中,中间件扮演着至关重要的角色,它能够提供各种服务级别的功能,如日志记录、性能监控、限流、熔断、认证和授权等。B站的开源微服务框架Kratos,作为一个...

    Kratos-master.zip

    Kratos 秉持了专心写作专注阅读的特点,简单大方的主页构造并采用了 2:1 的展示比例,使得博客能在臃肿杂乱的环境中脱颖而出。Kratos 主题内置了功能强大的主题配置工具,可以轻松设置关键字及站点描述,多种可供...

    Go-Kratos是bilibili开源的一套Go微服务框架包含大量微服务相关框架及工具。

    在实际项目中,你可以根据具体需求选择使用Kratos提供的组件,或者扩展其功能来满足特定场景的需求。在压缩包文件`bilibili-kratos-76df7ef`中,包含了框架的源代码和相关示例,是深入学习和研究Go-Kratos的好资源。

    B站微服务框架Kratos详细教程(5)-gRPC 示例项目源码

    在实际操作中,你需要在项目中设置环境变量或使用配置中心(如Kratos的配置管理模块)来配置服务发现、服务注册与发现的参数。同时,为了保证服务的高可用,还可以引入健康检查机制,确保只有健康的节点才能接收请求...

    基于Golang+Kratos+MySQL+Redis+Kafka+elk+Opentracing实现的微服务项目

    在这个项目中,开发者可能首先会使用Golang和Kratos来编写微服务,并利用MySQL存储关键业务数据。Redis和Kafka则为系统提供了数据缓存和实时通信的能力。日志通过Logstash收集,然后在Elasticsearch中存储,最后通过...

    基于Golang+Kratos+MySQL+Redis+Kafka+elk+Opentracing实现的微服务项目.zip

    【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发...有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。

    kratos 框架微服务商城-kratos-shop.zip

    "Kratos框架微服务商城-kratos-shop"是一个基于Go语言的微服务架构电商项目,主要使用了Baidu Kratos框架。Kratos是百度开源的一个高性能、高可用、易扩展的Go微服务开发框架,旨在帮助开发者构建稳定、可靠的业务...

    精品WordPress主题/响应式个人博客主题Kratos

    主题设计简约友好,并且支持响应式,自适应访问,简seo单大方的主页构造,使得博客能在臃肿杂乱的环境中脱颖而出, Kratos内置主题设置,可设置seo关键字及站点描述页面伪静态,自定义的顶部样式(背景图 ), ...

    Go微服务框架go-kratos学习05:分布式链路追踪 OpenTelemetry 使用.doc

    分布式链路追踪是微服务架构中的一种监控和定位技术,旨在跟踪微服务中请求链路的执行过程。随着微服务架构的流行,分布式链路追踪也蓬勃发展起来,出现了许多有名的产品,如 Jaeger、Pinpoint、Zipkin、Skywalking ...

    Kratos:Kratos Multiphysics(AKA Kratos)是用于构建并行多学科仿真软件的框架。 模块化,可扩展性和HPC是主要目标。 Kratos拥有BSD许可证,并且使用具有广泛Python接口的C ++编写

    更多内容根据BSD-4, Kratos是免费的,甚至可以直接在商业软件中使用。 它的许多主要应用程序也是免费的,并且已获得BSD-4许可,但是每个派生的应用程序都可以拥有自己的专有许可证。主要特点Kratos是多平台的,可...

Global site tag (gtag.js) - Google Analytics