背景

某项目需要升级kubernetes集群,考虑到原k8s版本较低,并且在部署结构上不是很合理,因此决定重新搭建一套新的k8s集群,做应用迁移。迁移过程也是非常曲折,这个后面会专门写一篇文章记录,应用迁移后有部分应用在注册中心状态为DOWN

如果服务状态为DOWN调用该服务就报404错误,因为应用配置了健康检查,怀疑是健康检查没有通过,进入后台调用接口查看检查结果

$ curl http://localhost:8080/management/health
{"description":"Remote status from Eureka server","status":"DOWN"}

服务使用jhipster框架生成,在配置文件里面有以下配置

eureka:
    client:
        enabled: true
        healthcheck:
            enabled: true
        fetch-registry: true
        register-with-eureka: true
        instance-info-replication-interval-seconds: 10
        registry-fetch-interval-seconds: 10

eureka.client.healthcheck.enabled设置为false后,注册中心恢复正常,因此可以肯定是健康检查的问题。但是在后台没有任何错误,甚至将日志级别调整到最低也未发现错误信息,这个给排查带来很大的困难。

Read the rest of this entry

,

背景

在docker中,为了尽可能缩减镜像大小,常常不会包含一些常用的工具,类似ping,curl,tcpdump等,虽然精简了镜像,但如果我们需要在容器内部测试网络联通性时,没有这些工具就非常的头疼。其实容器内部和主机之间的网络环境是互相隔离的,处于独立的命名空间下,那如果能在主机上切换命名空间,就可以在主机上以容器的网络环境进行操作,就可以利用主机上的工具,能够实现这种需求的工具就是我们今天要介绍的nsenter

使用

nsenter [options] [program [arguments]]
options:
-t, --target pid:指定被进入命名空间的目标进程的pid
-m, --mount[=file]:进入mount命令空间。如果指定了file,则进入file的命令空间
-u, --uts[=file]:进入uts命令空间。如果指定了file,则进入file的命令空间
-i, --ipc[=file]:进入ipc命令空间。如果指定了file,则进入file的命令空间
-n, --net[=file]:进入net命令空间。如果指定了file,则进入file的命令空间
-p, --pid[=file]:进入pid命令空间。如果指定了file,则进入file的命令空间
-U, --user[=file]:进入user命令空间。如果指定了file,则进入file的命令空间
-G, --setgid gid:设置运行程序的gid
-S, --setuid uid:设置运行程序的uid
-r, --root[=directory]:设置根目录
-w, --wd[=directory]:设置工作目录
如果没有给出program,则默认执行$SHELL。

Read the rest of this entry

Rancher安装

执行以下命令安装最新版本rancher

docker run --privileged -d --restart=unless-stopped -p 8080:80 -p 4443:443 rancher/rancher

导入kubernetes集群

rancher docker运行后访问http://host:4443设置密码即可进入rancher,点击导入集群选择导入现有的kubernetes集群

Read the rest of this entry

,

Redis安装

Redis的安装网上文档很多,官方也有非常详细的安装文档,这里就不再赘述,如果是个人开发,建议使用Docker进行安装,只需以下一行命令即可完成完整
docker run -itd --name redis -p 6379:6379 redis

执行以下命令查看是否运行成功

➜ docker exec -it redis redis-cli 
127.0.0.1:6379> ping
PONG

Read the rest of this entry

FeignClient调用原理

要启用FeignClient首先必须在启动类上加上注解@EnableFeignClients,EnableFeignClients代码如下

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients {
  ....

注意到注解@Import(FeignClientsRegistrar.class),FeignClientsRegistrar实现了ImportBeanDefinitionRegistrar,在启动时会执行registerBeanDefinitions动态注册

class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar {
  @Override
	public void registerBeanDefinitions(AnnotationMetadata metadata,
			BeanDefinitionRegistry registry) {
		registerDefaultConfiguration(metadata, registry);
		registerFeignClients(metadata, registry);
	}
  ...
}
,

Apache Atlas介绍

Apache Atlas是托管于Apache旗下的一款元数据管理和治理的产品,Apache Atlas提供api和一系列插件可以方便将数据库元数据信息导入到atlas中进行分析,atlas也提供web界面对元数据进行管理,通过atlas,企业可以对数据库元数据建立资产目录,并对这些资产进行分类和治理,为数据分析,数据治理提供高质量的元数据信息。

什么是元数据

企业内部可能运行多种类型数据库,从大类上可以分,大数据平台,sql数据库,nosql数据库,图数据库等,从具体的数据库类型可能是mysql,oracle,mongodb等,不管是什么类型的数据库,终归都是一个目的,存储数据,对怎么管理数据每个数据库有每个数据库的方式,以oracle为例

  • schema是一组数据库对象的集合
  • table是存储数据的实体
  • column列表示数据库的每个属性
  • view视图表示虚拟表,表示一组查询的逻辑集合
  • materialview物化视图则是对视图的实体化
  • 同义词表示数据库对象的别名
  • …等等

Read the rest of this entry

背景

某项目接口采用plsql开发,接口返回用户密码,但要求密码不能是明文返回,因为程序内部需要用到明文密码,所以只能在plsql中对密码进行对称加密,在程序内部进行解密,程序采用java开发。

实现

dbms_crypto是oracle自带的加密包,包含多种加密解密方法,非dba用户需要授权才能进行使用
grant execute on dbms_crypto to xxx;

下面是一个通过DES算法加密的function

function encrypt_password(p_password in varchar2) return varchar2 is
   v_key           varchar2(32) := 'TucM2fYDaxnd1UeRL7HVvyshXvXaMKO9';
   v_encrypted_raw RAW(256);
 begin
   v_encrypted_raw := dbms_crypto.Encrypt(src => UTL_RAW.CAST_TO_RAW(p_password),
                                          typ => DBMS_CRYPTO.DES_CBC_PKCS5,
                                          iv=>UTL_RAW.CAST_TO_RAW('12345678'),
                                          key => UTL_RAW.CAST_TO_RAW(v_key));
   return utl_raw.cast_to_varchar2(utl_encode.base64_encode(v_encrypted_raw));
  end;

背景

某项目流程使用activiti开发,现需要开发一个流程预测的功能,流程预测,也称流程预跑,是指用户在发起流程或者执行审批动作时希望看到流程后续流转的节点,方便用户跟踪流程。Activiti本身不提供流程预测的功能,实际上流程在运行时每一个变量的变化,比如审批结果,表单数据等,都会影响流程的走向,而这些变化是无法进行预见的,所以流程预测的前提条件就是,我们需要假设一些变量的值,比较典型的就是审批结果,我们需要假设审批结果都是通过的,基于这个前提,我们才能完成一个可以提供参考价值的预测数据。

实现

如果要看懂本文,你必须对activiti开发有基本的了解,对一些基本的概念熟悉,建议先阅读之前发表的Activiti教程

流程模型

这边准备了一个简单的报销流程模型示例

Read the rest of this entry

,

背景

在windows中,有诸如XShellSecureCRT等ssh连接神器,但在Mac中,可选择的工具并不多,ITerm2被一众程序员吹上了天,但自己实际用下来并不好用,对终端的执念让我基本上尝试了所有在Mac上能找得到的终端工具,最终选择了termius,该工具界面有点极客风,设计简洁,连接速度快,可惜的是如果用户退出所有记录将被清除,在被清除两次后终于无奈的放弃了Mac下唯一上手的终端工具,放弃termius后却很难再找一个满意的终端,mac自带的终端其实还行,就是不大好用,理想中的终端应该满足以下功能

  • 能够发送心跳包,不至于因为断网或者闲置时间过长连接断开需要重连
  • 能够有一定的管理功能,记住密码,不用每次输入地址和账号,这个也是最重要的需求
  • 支持tab页,支持分屏
  • 能够上传下载文件
  • 颜值要高
  • 可以选择复制,因为在终端经常需要复制,大部分终端都可以选择即可复制,无需手动ctrl+c

如果mac自带终端能够满足以上需求,就完全可以用于日常开发,那么接下来我们就一步步改造终端

Read the rest of this entry

hadoop环境

hadoop版本为

hadoop version
Hadoop 2.10.1
Subversion https://github.com/apache/hadoop -r 1827467c9a56f133025f28557bfc2c562d78e816
Compiled by centos on 2020-09-14T13:17Z
Compiled with protoc 2.5.0
From source with checksum 3114edef868f1f3824e7d0f68be03650

客户端开发

  • 引入依赖(使用maven)

Read the rest of this entry