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

所有内容都在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. ASP.NET + MVC5 入门完整教程七 -—-- MVC基本工具(上)

    https://blog.csdn.net/qq_21419015/article/details/80474956 这里主要介绍三类工具之一的 依赖项注入(DI)容器,其他两类 单元测试框架和模仿工 ...

  2. Java-POJ1012-Joseph

    打表啦 约瑟夫环,处理时下表统一为从0开始更方便! import java.util.Scanner; public class poj1012 { public static boolean cal ...

  3. 1060 Are They Equal (25分)

    1060 Are They Equal (25分) 题目 思路 定义结构体 struct fraction{ string f; int index; } 把输入的两个数先都转换为科学计数法,统一标准 ...

  4. js实现图片无缝轮播

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. MyBatis(6)——分页的实现

    分页的实现 a)通过mysql的分页查询语句: 说明:sql的分页语句格式为select * from aaa limit #{startIndex},#{pageSize} //---------- ...

  6. VMware 搭建linux虚拟机环境

    1.任务管理器-服务 确认VMware服务是否启动 2.VMware生成网关地址 编辑--虚拟网络编辑器 VMnet8 NAT设置子网IP,子网掩码,网关 3.windows网络--更改适配器设置-- ...

  7. jquery 复制

    Jq将字符串复制粘贴到剪贴板     第一种: 自己测试时 只适合于input 和textarea 但是针对于其他标签的复制就不能用了.代码如下: <!DOCTYPE html> < ...

  8. jeecg /ant-design-vuepro 前端使用

    1.原生axios使用 <script> import Vue from 'vue'; import axios from 'axios'; axios.defaults.baseURL ...

  9. 删除文件时提示,你需来自SYSTEM的权限

    1. 提示如下 2. 对要删除的文件操作如下 2.1 为删除的文件添加本地账户 2.2 提示如下,多点几次继续就好 2.3 给本地账户添加完全控制权限

  10. LinuxC下argv,argc[]的意义

    MarkdownPad Document *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...