Classload是java语言较为底层的技术,对于自定义框架,中间件开发等都有广泛的应用场景,可以利用它设置出较为灵活的应用。像duckula就是使用它完成插件机制,为扩展duckula提供了可能。还有[插件平台],也是使用它来实现ES业务插件的热加载等功能。

Cassandra在2008年7月被Facebook开源。Cassandra最初的版本主要是由亚马逊(Amazon)和微软(Microsoft)的一名前雇员编写的。它深受亚马逊首创的分布式key/value数据库Dynamo的影响。Cassandra实现了一个没有单点故障的动态复制模型,但是添加了一个更强大的列家族数据模型。下面我基于对它的理解说说它的一些概念。

互联网体系架构具有可控性差、 数据量大、 架构复杂等特点,错综复杂的各业务模块需要解耦,各异构数据需要同步,双活/多活的容灾方案需要高实时性 等,在各种场合都需要一套可靠的数据实时推送方案。mysql已成为互联网项目存储的主力,围绕着它的各外围模块急需实时地获取它的数据,binlog监听是解决此实时同步问题的不二之选。

一提到配置中心,大家想得最多的是configserver,阿波罗,consule等微服务系统较为典型的配置中心,集中存放项目的配置信息,起到权限管理、发布审核、操作审计、灰度发布等重要作用。但这些都是依赖第三方中间件来达到配置集中管理的目的,怎么选都是较重的一种方案,但有些场景需要配置中心但又不想有太重的依赖,只想把这些配置存放到内存就够用了。

连接一个数据库很容易,直接引入依赖包,组装好jdbc地址,加载驱动类,如果想用连接池又得引入连接池的依赖包,一连串的动作简单而乏味,一般的做法是自己存一个工具类,要的时候复制,改改相应的链接了事。common-jdbc依赖包也就是把这些乏味的事做到一个api中,到要的时候只要修改配置文件的配置项,直接调用api就可以了。

现在互联网框架层出不穷,知识也是一个更新的过程,从传统行业的SSH,dubbo,grpc,springcloud,满足不同场景的业务需求,应该说框架技术没有好坏之分。但由于历史原因,我们经常性的有系统改造需求,如果是功能性的重新划分,连数据模型都推倒重来,那要考虑的问题倒少了,但如果修修补补,甚至只是切换一下底下的实现方式,把http改为rpc的,把原来的那种单体的改为微服务体系架构,如果之前没有把业务与框架做分离,那改起来也是一个较头疼的任务,单一个接口的输入输出就够喝一壶的。如果我们实现一个与业务无关的封装,把接口输入输出这部管控好,那对于以后的框架转换,系统升级那就是分分钟的事了。common/connector的工具模块就是解决这一痛点而来。

在java世界里,后端通过http协议来调用服务是非常常见的情形,犹其是现在微服务盛行,java一般是通过httpclient工具来做http调用的,但由于其功能较为强大,使用上倍感复杂,今天写的代码,过几天都快看不懂的事经常发生,common-http模块就是试图降低httpclient的复杂性,希望通过简单的的api,传几个我们一看就明白的参数来解决我们的问题。

jedis是redis的一款java客户端,对redis连接进行了池化,把短连接改为长连接,减小了网络连接的消耗,在项目中使用也比较多。但jedis也存在一些使用不方便的地方.

在kubernetes成为容器服务编排方案“标准”的今天,谈自动化运维就不能离开k8s,现在操作k8s有多种方式,集群外面k8s client通过kubeconfig配置文件连接k8s集群,通过k8s 暴露的apiserver服务操作k8s。通过暴露helm的服务service/tiller-deploy来操作k8s 等。k8s client和helm Client对于手工部署确实方便,但当应用程序量大的时候,通过手工来部署显然不够。通过apiserver的restfull形式的api来部署我们的应用确实可行,但k8s的相关配置文件非常多,通过apiserver这种原始的api来管理有很多的问题:难管理,不能重用,缺少依赖管理等,所以我们会引用helm来发布我们的应用,helm的服务端service/tiller-deploy也提供了grpc的接入方式,helm的客户端也就是使用了这种接入方式提交任务给到服务端的。但是它是helm的客户端是手工操作的,如何用程序来驱动tiller-deploy服务呢?这就是我们这次想要解决的问题。

common-*.jar的所有模块就是基于java开发,跟spring没有关系。在现在,springboot和springcloud非常流行的情况下,如果不对spring进行支持,则会大大限制它的使用场景,也就是说这些公用模块在springboot中使用会觉得非常的不自然。common-spring就是为了方便common-*.jar的相关模块在spring和springboot中的方便自然的使用 而开发的。里面会有不少的spring的技巧。下面所有的代码都在下面模块,使用时只需引入maven坐标即可