好多年没发博,最近有时间整理些东西,分享给大家。

所有内容都在github项目liuzhibin-cn/my-demo中,基于SpringBoot,演示Dubbo微服务 + Mycat, Sharding-Proxy分库分表 + Seata分布式事务管理 + ZipKin, SkyWalking, PinPoint性能分析链路跟踪APM工具,有详细文档,可以快速运行


演示项目架构


运行演示项目

package.sh为打包脚本:

  • sh package.sh:最简单运行方式,使用单个MySQL数据库、nacos注册中心,运行4个Dubbo服务和1个Web应用;
  • sh package.sh -mycat:使用Mycat分库分表;
  • sh package.sh -sharding-proxy:使用Sharding-Proxy分库分表;
  • sh package.sh -seata:使用Seata分布式事务管理;
  • sh package.sh -zipkin:使用ZipKin进行链路跟踪、性能分析;
  • sh package.sh -pinpoint:使用PinPoint进行链路跟踪、性能分析;
  • sh package.sh -skywalking:使用SkyWalking进行链路跟踪、性能分析;

参数可以组合,例如sh package.sh -mycat -seata -zipkin,分库分表参数只能二选一,APM工具只能三选一。

最简单运行方式操作步骤:

  1. JDK 8+;
  2. 部署nacos,用于Dubbo注册中心;

    比较简单,参考Nacos快速开始即可。
  3. MySQL数据库;

    建库脚本sql-schema.sql,是演示分库分表用的建库脚本,简单方式运行只需要其中mydemo-dn1单库即可。
  4. 修改项目配置信息;

    配置信息都在parent pom.xml中,包括数据库连接信息、nacos地址等。
  5. 编译打包;

    执行sh package.sh,Windows环境装了git bash就可以运行。
  6. 运行演示项目:

    依次启动服务和Web应用:
    java -jar item-service\target\item-service-0.0.1-SNAPSHOT.jar
    java -jar stock-service\target\stock-service-0.0.1-SNAPSHOT.jar
    java -jar user-service\target\user-service-0.0.1-SNAPSHOT.jar
    java -jar order-service\target\order-service-0.0.1-SNAPSHOT.jar
    java -jar shop-web\target\shop-web-0.0.1-SNAPSHOT.jar
  7. 通过http://localhost:8090/shop访问,执行操作查看效果;

分布式事务管理

阿里云分布式事务管理GTS的开源版Seata,2019年1月开源出来,1.0.0版已经发布。相关概念、部署和使用方法参考Seata分布式事务管理框架概览

Seata提供AT、TCC、Saga三种柔性事务模式,AT模式对应用几乎透明,使用方便,目前来看:

  1. 性能开销还比较高;
  2. 在使用Mycat、Sharding-Proxy进行分库分表时,Seata会产生不少路由到全分片执行的SQL操作,详细参考Seata分布式事务管理框架概览文末;

数据库分库分表

本项目演示了使用MycatSharding-Proxy进行分库分表,相关概念、部署和使用方法,参考MyCat分库分表概览Sharding-Proxy分库分表概览,这2个分库分表开源方案与DRDS对比,参考DRDS产品概览

Mycat、Sharding-Proxy和DRDS都实现了MySQL协议,成为独立的中间件,将分库分表、读写分离等数据存储的弹性伸缩方案与应用隔离,并且实现语言无关。

APM全链路监控

演示项目支持PinPointSkyWalkingZipKin三种APM工具进行全链路跟踪和性能分析,相关概念、部署和使用方法,参考PinPoint部署和使用SkyWalking部署和使用ZipKin部署和使用

三种APM工具对比:

  • 使用方式:PinPoint和SkyWalking都采用javaagent方式,对应用代码几乎没有侵入性;ZipKin需要和应用打包到一起,并在应用中完成各种配置,属于强依赖关系;
  • 链路跟踪能力:整体上看相差不大,基本都参照Google Dapper,也都支持对大量主流框架的跟踪,细节上有些差异:
    • 对单次RPC调用分析,ZipKin定义的Annotations更精细,参考ZipKin部署和使用
    • PinPoint和SkyWalking都提供将额外方法添加到调用链跟踪的功能,其中PinPoint对代码完全没有侵入性,SkyWalking则需要对方法添加注解;
    • SkyWalking支持在Span中添加自定义tag功能,利用该功能可以将方法参数值等额外信息记录到Span中,有利于问题分析;
  • UI功能:PinPoint和SkyWalking UI功能比较丰富,都提供应用/服务、实例等层级的性能统计,两者各有特色;ZipKin UI功能最弱,只提供依赖关系、具体调用链查看分析;

    额外的UI功能,可以读取APM工具的数据,自定义开发;
  • 社区支持:ZipKin架构灵活、文档完善,社区支持度最高,Spring Cloud和Service Mesh(istio)官方提供ZipKin支持;SkyWalking是华为员工开发,已成为Apache项目;PinPoint为韩国公司开源;

微服务、分库分表、分布式事务管理、APM链路跟踪性能分析演示项目的更多相关文章

  1. 转数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  2. 数据库分库分表(sharding)系列(一)拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  3. 据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

    本文原文连接: http://blog.csdn.net/bluishglc/article/details/7696085 ,转载请注明出处!本文着重介绍sharding切分策略,如果你对数据库sh ...

  4. mysql 分库分表 ~ 柔性事务

    一 定义 TCC方案是可能是目前最火的一种柔性事务方案二 具体 内容 TCC=try(预设)-confrim(应用确认)-canal(回滚取消)三 目的 解决跨服务调用场景下的分布式事务问题,避免使用 ...

  5. Microservices 微服务概念和优点 自治 弹性 级联故障 微服务的问题 CAP 分布式事务 修改一个服务并对其部署而不影响其他任务服务

    https://en.wikipedia.org/wiki/Microservices https://zh.wikipedia.org/wiki/微服務 微服務 (Microservices) 是一 ...

  6. 分布式事务-Sharding 数据库分库分表

      Sharding (转)大型互联网站解决海量数据的常见策略 - - ITeye技术网站 阿里巴巴Cobar架构设计与实践 - 机械机电 - 道客巴巴 阿里分布式数据库服务原理与实践:沈询_文档下载 ...

  7. Mycat读写分离、主从切换、分库分表的操作记录

    系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...

  8. mycat+ mysql集群 分库分表

    mycat介绍Mycat数据库分库分表中间件国内最活跃的.性能最好的开源数据库中间件!Mycat关键特性关键特性支持SQL92标准支持MySQL.Oracle.DB2.SQL Server.Postg ...

  9. 分库分表之ShardingSphere

    目录 分库分表诞生的前景 分库分表的方式(垂直拆分,水平复制) 1.垂直拆分 1.1 垂直分库 1.2 垂直分表 2.水平拆分 2.1 水平分库 2.2 水平分表 分库分库中间件 ShardingSp ...

随机推荐

  1. http请求常见错误状态码

    一.HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求. 原因:(调用方接口方法的实参和服务器接口方法的形参不一致) 1.前端提交数据 ...

  2. php/js将 CST时间转成格式化时间

    PHP :比较简单 $str = 'Wed Jul 24 11:24:33 CST 2019'; echo date('Y-m-d H:i:s', strtotime($str)); echo dat ...

  3. 【Markdown】新手快速入门基础教程

    Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档.当前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息.例如:GitHub.简书.reddi ...

  4. 基于SILVACO ATLAS的a-IGZO薄膜晶体管二维器件仿真(01)

    最近因为肺炎的缘故,宅在家里不能出门,就翻了下一些资料,刚好研究方向是这个,就简单研究了下.参考资料主要如下: 1.<半导体工艺和器件仿真软件Silvaco TCAD实用教程> 唐龙谷 2 ...

  5. Integer.parseInt(s)、Integer.valueOf(s)与new Integer()的异同

    我们在开发过程中,很多时候需要将String类型数据转换成Integer,而比较常用的方式就是--nteger.parseInt(s).Integer.valueOf(s)与new Integer() ...

  6. 如何预测股票分析--自动ARIMA

    在上一篇中,我们发现knn和线性回归一样,表现的不是特别好,来看看时间序列的表现 时间序列预测法其实是一种回归预测方法,属于定量预测,其基本原理是;一方面承认事物发展的延续性,运用过去时间序列的数据进 ...

  7. 【做题笔记】P1969 积木大赛

    非常感谢 rxz 大佬提供的思路. 首先放个图(rxz 画的) 采用贪心的策略:对于一个期望高度 \(h_i\) ,如果大于 \(h_{i-1}\),那么最终答案要加上二者之差:如果小于或等于,那么说 ...

  8. Discovering Gold lightoj 1030

    一排1到n的格子,每个格子上有黄金 ai ,你最开始在 1 号,每一次投骰子决定到哪一个格子,超出1~n范围则重新投掷,你到了哪个格子就得到哪个格子的金币,问最终在n 能得到金币的期望. 思路:做题经 ...

  9. 什么情况下用vue.use方法

    链接:https://blog.csdn.net/lxiang222/article/details/103376150 简而言之

  10. Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试

    这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功. 一.交叉编译 在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有 ...