Maxisvest的博客

技术 生活 原创


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

我们公司为什么从Mysql切换成TibDB

发表于 2022-05-07 | 分类于 杂谈 阅读次数:

我们为什么要换TiDB

在业务增长的情况下,伴随的是数据量的剧增,在传统Mysql的服务体系下,千万甚至上亿的数据对于数据存储和查询来说,似乎只有通过增加Mysql实例 ,分库分表等措施来应对,通常这些操作对于研发和运维来说都是很痛苦的,并且在做数据同步时更是需要小心翼翼

但此时另一端的TiDB应运而生,他的优点在于:
1.天生就是分布式的数据库,可以无限扩展,不用在考虑分库分表
2.对于大数据友好,支持Spark对主库进行实时查询
3.可以做到故障自动恢复
4.从Mysql切换至TiDB的成本对于研发来说非常小,TiDB支持Mysql的语法(比较严格,某些Mysql的特别语法TiDB并不会通过),并且使用kv结构模拟了关系型结构

TiDB的架构是怎样的

阅读全文 »

github pages + gitalk自动化部署与初始化

发表于 2022-04-25 | 分类于 教程 阅读次数:

要达到的效果

github pages是一个github提供的一种免费的静态页面管理服务,可以把页面托管给github并自动分配一个域名,也可以配置自定义的域名给这个页面管理服务
博客源码方面我使用的是hexo + next theme的一套组合,我们现在想要达到的效果是当hexo的页面源码推送完成后,让github自动帮我们编译页面文件,并且推送至仓库,然后部署静态页面服务,最后初始化文章gitalk评论区
总体流程是源码仓库收到推送,触发github actions脚本执行,首先检出代码,安装hexo环境,触发hexo deploy推送编译好的页面至页面仓库,页面收到推送后会自动触发github pages的部署脚本,进行网页部署,与此同时,源码仓库的第二部分python脚本开始运行,拉取源码中sitemap部分,获取最新的文章调用github api在文章仓库创建issue

关于仓库配置

关于这块源码的话,我会在账号底下新建一个私有化仓库,用来保存源码和配置,hexo编译好的页面我会放置在另一个公开的仓库,并配置github pages服务,里面仅仅包含编译好的页面以及对应文章的issue(也就是文章评论区),过去我是用hexo deploy命令进行仓库部署,现在这块会放到自动化里去做,我们后面去讲

关于源码中SEO、域名解析、以及readme部分

hexo deploy命令在将项目推送至仓库的时候,是会全量把编译好的项目覆盖推送至仓库,所以需要注意以下几点
通常不同搜索引擎会提供不同的SEO验证方式,如果你使用的是文件验证方式,那么你需要把你的验证文件放到源码根目录的的source文件夹下,这样会让搜索引擎在定期搜索的时候不会将你的网站标记为失效网站

阅读全文 »

关于我的博客从腾讯云迁移至github以及评论插件valine切换到gitalk的一些琐事

发表于 2022-04-11 | 分类于 杂谈 阅读次数:

为什么不用腾讯云而换github了?

最初最初有搭建博客的想法时,是采用腾讯coding的服务,代码和静态页面服务coding pages都在同一个仓库,那会是通过hexo老三套命令进行渲染和发布页面,然后按照教程将自己的域名解析到coding服务上,就可以实现页面访问了
后来coding的业务似乎一直在进行变化,曾经做好的配置直接失效,需要按照coding提供的最新教程重新做配置,而且却来越复杂,到今年,腾讯直接把coding的服务入口下线了,之前的服务还是保留,但是就是没法通过coding的静态页面入口进行配置了(当然可以花钱购买他们新的静态页面服务)
所以我决定迁移到更加灵活的github上,利用github的pages功能,代码放在私有仓库,hexo deploy的页面放在公共仓库,这样可以防止敏感数据泄漏,还可以利用到gitHub的actions工作流进行自动部署,可以说是很方便了,而且github绑定自定义域名不需要购买会员(没错,说的就是你,gitee),也不需要做认证和备案(个人觉得很爽),唯一一个不好就是服务器在境外,可能会受网络影响

为什么要切换评论插件valine到gitalk?

最开始是通过valine + leancloud进行博客文章的评论功能,但是leancloud十分不稳定,最近直接域名无法解析,导致博客评论无法展示
所以本着简洁省事的原则,找了个更古老的方案,就是使用gitalk,美观又优雅,但是需要登陆github账号才可以评论,而且发表文章后需要手动进行评论初始化才能进行评论

阅读全文 »

一种可以整合spring IoC机制的可插拔部署的技术思路

发表于 2022-01-13 | 分类于 java 阅读次数:

问题

对于一些需要在多方部署,代码大部分相同,但是只有部分逻辑或者业务不同的系统(比如一些管理系统需要根据当地法规或者标书中的要求去做一些改动适配),在以往实践中,基本会有两种管理方式
1.创建多个项目,其中会有冗余代码
2.在单个项目中,编写多个核心逻辑,部署时,在配置文件选择走哪个逻辑
对于这两种方案来说,都会产生冗余的代码,可扩展性和管理性都会受限,牵一发可能会动全身

思路

目前基于spring提供的可扩展接口来说,有一种实现方式可以比较好的来规避这些问题
核心的思路是只有一个框架服务,而核心代码从中

阅读全文 »

全链路日志追踪方案及MDC代码分析

发表于 2021-06-18 | 分类于 java 阅读次数:

在分布式服务中追踪一次请求的日志是一件非常重要的事,本文提供一种利用logBack + log4j的方案来解决这个问题
最终要实现的目的是通过一个traceId,然后再ELK中找到这个traceId对应请求所有打印的日志
来,一步一步看

1.设计思路

多个系统服务同时需要依赖一套生成和读取traceId的方案,所以,我们首先需要搞一套依赖,用来管理traceId
不同服务引用后,当一个请求进入服务中,服务首先检测他有没有携带traceId,没有的话将traceId补上,并放入MDC中,该请求进入下一个服务时,将traceId携带
各个服务间打印日志使用统一的工具类进行打印,打印中从MDC中取出traceId并打印,然后由ELK搜集整理

2.生成和读取traceId的方案

生成traceId可以使用UUID来做全局唯一标识
生成的traceId放入MDC中,用来给所有打印日志的地方使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 获取traceId
*/
public static String getTraceId() {
//获取
String traceId = MDC.get(TRACE_ID);
//如果traceId为空,则返回默认值
return StringUtils.isBlank(traceId) ? DEFAULT_TRACE_ID : traceId;
}

/**
* 生成traceId
*/
public static String gentraceId() {
return UUID.randomUUID().toString().replaceAll("-","");
}

阅读全文 »

使用netatalk打造一款属于自己的Time-Machine在线备份服务器

发表于 2021-02-23 | 分类于 mac 阅读次数:

前言

MAC系统的Time Machine功能曾经拯救过我电脑几次,对于我这种爱折腾的人来说十分有用
但是麻烦的点在于每次需要手动备份,需要插上移动硬盘来进行备份,就很不方便,有时会忘掉
其实MAC是可以在合适的网络硬盘上进行备份的,比如部分NAS,群辉等,但是都太贵了,于是我自己买了一套路由器大小的微型服务器,配置了一块2T硬盘,配置比较一般,但是作为服务器来说够用了,
之后就可以安装centos系统并且安装netatalk和avahi来让mac备份到这台服务器上

1.下载centos7的镜像,将该镜像刻录至U盘

1
2
3
4
5
6
7
8
9
10
#命令确定U盘的路径
diskutil list
#卸载U盘(这里/dev/disk2是查到的U盘路径,一定要确认对)
diskutil unmountDisk /dev/disk2
#安装pv工具
brew install pv
#可视化刻录进度并刻录镜像
pv -cN source < 镜像路径 | sudo dd of=/dev/rdisk2 bs=4m
## 显示下面进度
source: 5.2GiB 5:11:41 [ 503KiB/s] [=====================> ] 71% ETA 2:01:56

2.安装centos7

3.连接网络

可以选择网线直连或者wifi连接,我这里使用的是wifi连接
因为我的无线网卡为高通QCA9377,似乎属于旧版网卡,所以进入系统后打开终端,输入

1
2
3
cd lib/firmware/ath10k/QCA9377/hw1.0/
sudo mv firmware-6.bin ~
sudo mv notice_ath10k_firmware-6.txt ~

阅读全文 »

camunda流程引擎简明教程

发表于 2020-08-19 | 分类于 java 阅读次数:

前言

公司项目中使用到了camunda引擎,这个技术框架在国内的文章还是比较少,于是自己在使用中先做一部分总结

首先上官网doc地址,目前已经更新到了7.13版本 https://docs.camunda.org/manual/7.13/
如果学习使用可以搭配camunda modeler这个官方的应用,用来可视化的打开和编辑流程模型文件

一般来讲,流程引擎可以使用在像流程审批,请假,以及一些需要过程性的任务上,他可以提供一种可复用,简便以及易更改的特点,所以在有上述业务需求的场景下,可以考虑使用camunda

本文选用bpmn模型

概念

camunda的起源是来自于activity,在activity开发中团队内出现了分歧,所以一部分人转移到一个新的项目中,就是camunda

在camunda中,我们首先需要定义一个流程模型,有开始节点和结束节点,中间可以增加用户任务(userTask),门(gateway)和监听器(listener)等等
这个流程模型就叫做processDefinition(流程模型定义)

阅读全文 »

如何通过arthas在运行时执行代码

发表于 2020-06-10 | 分类于 java 阅读次数:

写在前面

公司内arthas已经打在了每个容器中,推荐切换到启动java程序的用户之后使用 java -jar arthas-boot.jar 命令启动

如果启动有问题,可以尝试如下命令现场下载jar包启动

curl -O https://alibaba.github.io/arthas/arthas-boot.jar

java -jar arthas-boot.jar

更多使用方法详见arthas官方文档 https://alibaba.github.io/arthas/

推荐一篇入门级的比较通俗的博文:https://www.cnblogs.com/theRhyme/p/10659265.html

里头是最基础常用的命令,如sc、sm命令等

用法

从spring context里获取任意bean并调用其方法或查看成员变量
启动arthas并attach到进程后,执行tt命令来记录RequestMappingHandlerAdapter#invokeHandlerMethod的请求

阅读全文 »

搭建一套简单的fabric网络

发表于 2020-04-15 | 分类于 区块链 阅读次数:

公司最近需要搭建一套区块链项目进行数据存储,于是研究了下HyperLedger Fabric这个IBM开发的重量级区块链框架,这个著名的项目采用了可插拔式的模块,提供联盟链和私链的区块链解决方案

一.安装环境

安装docker和docker-compose

首先安装go语言环境,其次配置GOPATH环境变量,例如配置到/Users/admin/go

cd $GOPATH
然后创建目录src/github.com/hyperledger/,注意必须是创建这样的目录
然后从github上clone一下fabric的源码,切换到1.4.6分支
进入scripts目录,运行bootstrap.sh,拉取所需镜像
这样基本的环境变量就搭好了

进入到fabric目录下,使用
make configtxgen
make cryptogen
生成之后可能需要的工具configtxgen、cryptogen,会生成到/build/bin下

阅读全文 »

排查一次线上connect reset by peer的异常

发表于 2020-03-29 | 分类于 网络 阅读次数:

公司业务系统中有一个功能是某个系统客户端要定时加载目标jar包到系统中实现功能的热扩展,线上出了一个很奇怪的异常,是jar包提供端出现了connect reset by peer,隔一段时间就会报异常
并且业务功能并没有受到影响,但是毕竟是生产环境,一点错误都有可能造成损失,问题还是要看的啊

首先定位问题,该异常由jar包提供端抛出,jar删除后便不再抛出,由此基本可以缩小范围至客户端加载jar包代码,但是光看代码似乎并没有什么大的问题
所以我需要看看服务端抛异常的时候究竟在干什么,这里就用到了tcpdump,用这个工具将服务端的tcp日志打印出来

服务端部署在docker容器中,首先使用nsenter将命名空间锁定到容器的pid

1
2
3
4
5
6
//获取容器id/name
docker ps | grep xxx
//获取PID
docker inspect --format "{{.State.Pid}}" container_id/name
使用nsenter切换网络命名空间
nsenter -n -t pid

之后查找客户端所在的ip地址,也就是tcpdump中要用到的host信息,我们要锁定查找范围为服务端到客户端之间的所有连接

使用命令
tcpdump host 你的host -w tcphistory.pcap

阅读全文 »

12…5
小于同学

小于同学

技术 生活 原创

41 日志
13 分类
32 标签
E-Mail
© 2016 – 2022 小于同学
总访客量 合计阅读数