摘要:
由于微服务对应的库表拆分,导致原来在一个库中的数据可能被分散到多个数据库中,一个业务流程可能涉及多个数据库,如何保证在多个库中的数据的事务问题,是一个常见的微服务问题,一般会有强一致性和最终一致性两种解决方案,强一致性表示必须同时成功或同时失败,最终一致性表示只要最终的状态是同时成功或者同时失败即可 阅读全文
摘要:
shrink方法是DestroyTask线程中回收连接的具体执行方法。 首先获得锁: try { lock.lockInterruptibly(); } catch (InterruptedException e) { return; } 之后,要判断初始化状态是否完成,如果采用异步初始化,可能De 阅读全文
摘要:
一、main函数与package声明 1、main 函数概览 main函数要点:无参数、无返回值;main 方法必须要在 main 包里面;`go run main.go` 就可以执行;如果文件不叫 `main.go`,则需要`go build` 之后再 `go run`。 2、package 声明 阅读全文
摘要:
一、安装Golang (一)Mac安装 1、安装 Go 打开下载网站(https://gomirrors.org/),选择安装包,下载完成,双击,一路 next,记住安装路径,安装完成打开命令行,输入命令 “go”。 输入命令没反应 —— 环境变量配置出错 默认情况下,双击安装安装完成之后,Go 会 阅读全文
摘要:
DruidDataSource连接池实现了javaX.sql包中DataSource接口的全部方法。getConnection也来自于javaX.sql.DataSource接口。 而DruidPooledConnection也实现了接口java.sql.Connection。 这样就能在各种场景中 阅读全文
摘要:
一、双重检测锁 在线程池初始化时,为了保证并发安全,同时为了保证初始化性能,使用了双重检测锁进行初始化,代码如下所示, 第一步的判断是为了保证效率:毕竟初始化只是在连接池没有初始化或没有初始化完成时才会去调用初始化逻辑,在大多数场景,连接池已经初始化完成,所以如果不加第一个是否已完成初始化的判断,那 阅读全文
摘要:
在获取连接时,会执行初始化方法 init() ,使用 DruidDataSource的入口。 一、双检测保证并发安全与性能 为了保证不会重复初始化并且保证性能,使用了类似双重检测锁的方式来处理,第一次判断 inited 标识,如果已经初始化,则则直接返回,如果没有初始化,则使用ReentrantLo 阅读全文
摘要:
一、项目介绍 1、Druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。 Github项目地址 https://github.com/alibaba/dr 阅读全文
摘要:
一、线上问题分类及排查手段 如果发现线上服务变慢等情况,应该如何排查? 1、查询业务日志: 可以发现这类问题:请求压力大,波峰,遭遇降级,熔断等等, 基础服务、外部 API 依赖出现故障。 2、查看系统资源和监控信息: 硬件信息、操作系统平台、系统架构; 排查 CPU 负载、内存不足,磁盘使用量、硬 阅读全文
摘要:
一、JVM线程堆栈数据分析 JVM 内部线程主要分为以下几种: VM 线程:单例的 VMThread 对象,负责执行 VM 操作; 定时任务线程:单例的 WatcherThread 对象, 模拟在 VM 中执行定时操作的计时器中断; GC 线程:垃圾收集器中,用于支持并行和并发垃圾回收的线程; 编译 阅读全文