秒懂mycat

背景

阿里开源的一个数据库中间件,专门为大数据量的项目做分库分表用的。有如下特点:

  • 一个彻底开源的,面向企业应用开发的大数据库集群

  • 支持事务、ACID、可以替代MySQL的加强版数据库

  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群

  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server

  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

  • 一个新颖的数据库中间件产品

官网地址: http://www.mycat.org.cn/

mycat权威指南: http://www.mycat.org.cn/document/mycat-definitive-guide.pdf

mycat架构

话不多说,一张mycat架构图就能让你知道mycat的角色以及作用。

mycat1.6版本架构如下:

由图可知,mycat位于数据库和应用层(APP)之间,它的角色就是帮我们管理数据库集群,而提供应用统一访问数据库接口。

阅读全文 »

Java应用线上排查总结

背景

本文总结了一些常见的线上应急现象和对应排查步骤和工具。分享的主要目的是想让对线上问题接触少的同学有个预先认知,免得在遇到实际问题时手忙脚乱。毕竟作者自己也是从手忙脚乱时走过来的。

只不过这里先提示一下。在线上应急过程中要记住,只有一个总体目标:尽快恢复服务,消除影响。 不管处于应急的哪个阶段,我们首先必须想到的是恢复问题,恢复问题不一定能够定位问题,也不一定有完美的解决方案,也许是通过经验判断,也许是预设开关等,但都可能让我们达到快速恢复的目的,然后保留部分现场,再去定位问题、解决问题和复盘

在大多数情况下,我们都是先优先恢复服务,保留下当时的异常信息(内存dump、线程dump、gc log等等,在紧急情况下甚至可以不用保留,等到事后去复现),等到服务正常,再去复盘问题。

好,现在让我们进入正题吧。

CPU 利用率高/飙升

场景预设:

监控系统突然告警,提示服务器负载异常。

预先说明:

CPU飙升只是一种现象,其中具体的问题可能有很多种,这里只是借这个现象切入。

注:CPU使用率是衡量系统繁忙程度的重要指标。但是CPU使用率的安全阈值是相对的,取决于你的系统的IO密集型还是计算密集型。一般计算密集型应用CPU使用率偏高load偏低,IO密集型相反。

阅读全文 »

使用jstack和jmap分析线上故障

背景

下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。

操作步骤

1、排查思路

简单分析下可能出问题的地方,分为5个方向:

  • 系统本身代码问题

  • 内部下游系统的问题导致的雪崩效应

  • 上游系统调用量突增

  • http请求第三方的问题

  • 机器本身的问题

阅读全文 »

MySQL中varchar最大长度是多少?

一. varchar存储规则:

  • 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
  • 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节

二. varchar和char 的区别:

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是: char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).

阅读全文 »

基于模板使用giter8创建项目

背景

进行分布式服务开发, 各服务均划分了各自的消息协议项目/应用服务项目, 这些项目骨架相同, 仅仅是项目名和包名有个别字的区别; 为此, 笔者经过调研后选择使用giter8来创建项目骨架模板, 后期项目均使用该模板生成项目.

安装giter8

阅读全文 »

使用nexus发布和获取依赖包

背景

开发分布式服务, 各服务会根据命名规范定义各自的消息协议, 某一服务A调用指定服务B时, 服务A需要依赖服务B的消息协议, 使用构建工具(maven/sbt/gradle)+nexus私服可以满足多服务并行开发时, 服务间消息协议构件(artifact)最新版本的发布和获取.

搭建nexus私服

详见参考文章.

仓库

仓库类型

  • group:组仓库,用于方便开发人员自己设定仓库, 该类型可以引用多个已有仓库.
  • hosted: 内部项目的发布仓库
    • maven-releases: 内部发布的正式版本, 即版本不带-SNAPSHOT标识.
    • maven-snapshots: 内部发布的快照版本, 发布上去的构件会自带实践戳, 当有客户端获取时, nexus会取最近生成的进行返回,版本带-SNAPSHOT标识
  • proxy: 从远程仓库中寻找数据的仓库, 例如: 中央库

配置多仓库

创建类型为group的仓库(命名为xxx-central), 同时把需要的远程仓库纳入其中, 目前纳入的仓库有maven-central, maven-releases, maven-snapshots

阅读全文 »

Akka开发手册

背景

  1. 保证多人协作也只写出一种代码, 而非多种代码; 例如: 保证10人只写出一套代码, 避免10人写出100种代码.
  2. 有利于与异构系统进行交互
  3. 有利于工作交接
  4. 系统做大做强的基础

命名规范

交互协议

  • 交互协议根据业务类型封装在object中, 例如: DeviceProtocol
  • 与外围系统交互封装在包protocol/api
  • 内部系统交互封装在包protocol/service
阅读全文 »

理解本真的AKKA架构风格

背景

传统编程模型认为写一个变量就是直接写了相应的内存地址,但是在现代计算机架构,简单点说CPU写的是cache lines而不是直接写内存,这些缓存大部分是L1一级缓存,也就是说CPU的一个核写的内容另外的核看不见,为了把变化广播给别的核(这样才能同样广播到别的线程),需要(做额外动作)把cache line的变化同步到其他核的cache.

JVM运行环境下,要做到上述的线程间共享,需要显式地给变量(memory locations)打上volatile 标记 或者使用Atomic原子包装数据结构,否则,一般变量值的变化不保证能实时同步给其它线程可见,要么就使用锁,你可能会问为什么不标记所有变量都是volatile的呢?因为在CPU的多个核之间同步cache lines是很昂贵的操作!会拖慢CPU内核速度并且导致cache coherence protocol (the protocol CPUs use to transfer cache lines between main memory and other CPUs) 瓶颈,结果就是明显的拖慢运行.

当你看源码时你以为的方法调用

阅读全文 »

Flyway规范

背景

Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。

Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

https://flywaydb.org/documentation/migrations

阅读全文 »

打造一劳永逸的word常规模板

背景

word作为office的一部分,是微软提供的办公文档写作软件.除了文字编辑的功能之外,它还包含很多提高写作效率的自动化功能,目前已成为办公文档、专业论文写作等必不可少的利器.本文内容涵盖了word自动化列表、段落文字样式批量设置、图表名称和编号设置、目录设置、制表位等等功能,并一步步教大家打造一个word常规模板,阅读完本文后,大家可以自己配置专属的文本模板,并应用到以后的工作中,提高文档写作、格式调整等工作的效率.

样例和模板下载地址

阅读全文 »