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

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

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

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

SkyWalking是一款分布式系统中用于提供分布式追踪功能的开源软件。

从5.x开始,项目进化为一个功能完备的APM(Application Performance Management)系统。被用于追踪、监控和诊断分布式系统,特别是使用微服务架构,云原生或容器技术。提供以下主要功能:

分布式追踪和上下文传输
应用、实例、服务性能指标分析
根源分析
应用拓扑分析
应用和服务依赖分析
慢服务检测
性能优化

它的主要特性如下:

多语言探针或类库
    Java自动探针,追踪和监控程序时,不需要修改源码。
    社区提供的其他多语言探针
        .NET Core
        Node.js
多种后端存储: ElasticSearch, H2
支持OpenTracing
    Java自动探针支持和OpenTracing API协同工作
轻量级、完善功能的后端聚合和分析
现代化Web UI
日志集成
应用、实例和服务的告警

Read More

Fork me on GitHub