在上文中,我们讲解了分布式环境下的分库分表,从概念及案例上分析了何为分库分表及其优缺点。

我说分布式之分库分表

从本文开始我们一起学习一下如何使用当前比较成熟的分库分表框架 Sharding-JDBC 实现分库分表。

什么是Sharding-JDBC

Sharding-JDBC是分布式数据中间件Sharding-Sphere中的重要组成部分,官方的介绍如下:

Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。

Sharding-JDBC 是Sharding-Sphere的第一款产品,也是最接近开发者的一款分库分表中间件,很有代表性,也值得我们深入的学习与应用。

Sharding-JDBC官方文档地址

这里我贴出官方的文档地址,版本为3.x,有问题先看文档是比较直接快速准确的trouble-shooting方式。

如何使用Sharding-JDBC3.x 实现分库分表

简单了解一下背景之后,我们用一个案例先把它用起来,直观地感受一下Sharding-JDBC的魅力,后续我们会对它做进一步的讲解。

由于目前的后端Java开发主要以Spring Boot为主,因此我将主要依据Spring Boot的2.x进行讲解。

Read More

分布式应用架构下,数据量及接口并发量大幅上升后,单数据库由于无法抗住大流量、高并发的请求,从而造成数据库查询缓慢,频繁锁记录等问题。

为了解决上述的问题,在分布式环境下,常用的应对高并发、大流量场景的方案之一就是分库分表。

拆分主要分垂直和水平两种。

Read More

原文链接

本文我将带领大家在springboot2.x的开发框架中整合alibaba-nacos,实现配置获取及刷新等功能。

引用官方介绍:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Nacos 是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。

可以看到,Nacos主要面向分布式配置级服务发现等领域,由于之前使用过阿里云的ACM配置服务体验良好,而Nacos便是ACM的开源版本,因此我们选择了Nacos作为
业务框架的分布式配置中心。

接下来开始进行Nacos的整合。

Read More

在上文 文章链接 中,我从原理及代码实现的角度,完整的呈现了如何基于Dubbo的Filter及SPI机制开发TraceId的开发包。

本文中,我将着重从实战角度展现如何在项目中使用该工具包,实现TraceId的传递及日志打印。

引入依赖

将开发好的工具包(名为shield-dubbo-tracer,代码地址)打包并上传至私服,添加坐标到我们的dubbo项目的pom.xml中。注意,由于工具包依赖dubbo,因此同时要添加dubbo的依赖,完整的依赖如下:(服务提供方和服务消费方中都需要添加)

Read More

在近期的两篇文章中,我带领大家使用springboot2.x整合了dubbo,完成了一个基础的服务化开发框架的搭建。文章链接如下

[dubbo]springboot2.x整合dubbo之使用dubbo-spring-boot-starter

[dubbo]springboot2.x整合dubbo之基于xml整合dubbo2.6.5

但是在生产环境下还是存在一定的问题,比如我们关心的调用链追踪的问题。

本文中,我将继续带领大家基于dubbo2.6.5开发一个轻量级的TraceId获取及传递工具包,实现在dubbo服务的提供方及消费方中 设置/获取/传递 TraceId的需求。

代码地址

Read More

在上篇文章中,我们讲解了如何整合dubbo-spring-boot-starter实现服务化框架的搭建。

文章末尾,我给出了建议,dubbo-spring-boot-starter使用的注解方式的配置不如传统的xml文件灵活,因此我们在线上的开发框架是基于springboot2.x整合了dubbo2.6.5。

通过配置文件的方式更加直观的管理dubbo服务,并对其进行相关的优化操作等。

我们选择的springboot框架的版本为2.1.2.RELEASE,选择了dubbo2.6.5作为基础的整合版本,该版本相比更早的2.5.x修复了较多的遗留bug,且对nacos、sentinel等框架的适配度更好。

话不多说,进入正题。

Read More

本文主要讲解在springboot2.x中,整合官方版本的dubbo-spring-boot-starter实现RPC服务化框架的搭建。

服务提供方

首先讲解服务提供方的集成过程,我们在IDEA中通过spring-initializr建立一个springboot应用,使用springboot版本为2.1.2.RELEASE

引入dubbo依赖

在pom.xml中引入依赖,坐标如下

<!-- dubbo依赖开始 -->
<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>
<!-- dubbo依赖结束 -->

由于2.0.0版本的>dubbo-spring-boot-starter对应的dubbo版本为2.6.0,因此需要依赖zkclient,后续的高版本使用的zookeeper客户端为apache-curator。

Read More

最近使用springboot2.x访问mysql数据库时,报错 java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized…

详情可以查看上一篇文章 解决JDBC连接数据库报错java.sql.SQLException: The server time zone value is unrecognized的问题

问题的根本原因在于mysql驱动的版本问题。不同版本的驱动使用的驱动类是不同的,具体如下:

Read More

今天在使用mybatis建立到数据库的连接时,出现了一个时区报错。java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized…
这也是第一次遇到,感觉挺有意思的,写篇博客记录下。

报错如下:

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' 
is unrecognized or represents more than one time zone. 
You must configure either the server or JDBC driver (via the serverTimezone configuration property)
to use a more specifc time zone value 
if you want to utilize time zone support.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:127)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:87)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:61)

Read More

Fork me on GitHub