脑补可持续集成实现(番外)

发布在 系统

前言

该篇算是这个系列的一个番外篇,主要因为作者的一个痛点而引出的一篇文章。部署过Gitlab的同学估计了解过Gitlab服务部署的一个最低的推荐配置是4C4G,那么问题来了作者自己的服务器是2C2G,朋友的服务器是4C8G,虽然朋友的服务器能满足要求,但毕竟不是自己的,而且被作者用来当做K8s的Worker节点,因此也不太想在上面继续部署一个Gitlab。所幸作者自己还有一台配置还可以的Windows台式机,到时候安装一个Linux虚拟机就可以部署极狐,最后在通过内网穿透作者就能正常使用Gitlab了。你以为故事到这就结束了?NO!作者惊喜的发现Windows为了拥抱Linux开发推出了《Windows Subsytem For Linux(WSL)》这项功能使得Linux的开发人员无需虚拟机,直接提供无缝且高效的体验!!!所以下面作者也马上体验了一番。
阅读全文

Redis集群笔记

发布在 缓存

前言

该篇主要搬运作者之前记录的Redis集群笔记,内容包括:Redis主从、哨兵以及Redis集群。

主从

全量复制

从下图我们大致可以了解Redis全量复制的一个过程:

  1. Slave发送psync同步数据指令;
  2. Master接收命令后通过bgsave生成当前最新的一份rdb数据并发送给Slave,此时客户端针对修改指令Master会将其缓存一份至buffer中;
  3. Slave接收到Master的rdb数据后,清空老数据并开始加载主节点的rdb数据,加载完毕后再加载Master节点缓存在buffer中的数据;

image.png
阅读全文

脑补可持续集成实现(一)

发布在 运维

前言

出于作者对DevOps的兴趣,虽然之前也有想法自己实践一套基于GitLab的CI/CD的完整流程以及通过ElectronJs开发一个桌面版发布清单应用,奈何一直没有时间做这件事。其实想想也不奇怪要做成这件事情也有不少东西去做,首先需要一台配置足够能跑GitLab的服务器(最好4C8G,感觉有点小贵。。。),其次需要了解gitlab-ci脚本的编写规则(这个其实不是很难),最后还得学习一下ElectronJs。这次我们就根据下面这个流程图慢慢把这个流程当拼图一样一步一步拼好。
image.png
阅读全文

垃圾收集算法

分代收集理论

当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。
阅读全文

前言

JVM一直是面试中比较高频的要点,因此写该篇文章的目的一个是出于之前对JVM内存模型整理的相关知识点做个回顾,另一个则是对JVM问题排查过程中可能会使用到的Command、日志的配置等做一个记录。
image.png
阅读全文

从Blog响应速度优化谈缓存

发布在 缓存

前言

首先说下为啥要写这篇文章呢?因为本人的博客搭建用的是GithabPage+Hexo依托于Github的能力。但是我们平日正常访问Github的响应速度也就那样,很多时间本人都是通过科学上网并且开启全局代理才能快速渲染页面,可想而知*.github.io的速度并不是很让人满意。为了让该站点的打开速度加快,显而易见的是采用缓存技术(浏览器缓存、CDN、反向代理),该篇文章主要从Blog响应速度优化(图片加载、JS加载)来谈谈常用的缓存技术以及本人最后选择的缓存技术。
阅读全文

模拟Slave节点接收Binlog

发布在 后端技术

前言

不知道阅读该篇文章的同学有没有听说过阿里的Binlog增量订阅组件Canal。通过Canal的简介我们也能大致看出Canal Server模拟了Mysql的Slave节点向Master发送Dump请求推送Binlog日志,再Canal Server接收到请求后对日志文件做数据过滤、加工最终推送到下游客户端(如ES、Hbase、Kafka)以实现诸如业务Cache刷新、业务增量数据处理等。
canal-introduction
该篇文章主要针对Canal Server如何模拟Slave节点并让Master节点推送Binlog日志,Canal组件肯定会对性能如IO这块做优化,这里建议去学习Canal整体的架构设计。
阅读全文

K8s笔记--集群部署

发布在 运维

前言

在了解了K8s的基础架构之后我们就可以尝试去部署K8s集群,目前K8s集群部署的方式有3种:

方式名称 区别
MiniKube 仅支持单节点部署集群,相当于是初学者学习K8s集群的工具
Kubeadm 通过Kubeadm init初始化集群以及通过kubeadm join 加入Node节点,以此来实现集群部署。部署比较方便,执行init会自动初始化Master节点需要的服务
二进制包 从官网下载各个服务的二进制包单独部署

该篇文章将展示如何通过Kubeadm部署集群并且实现公网部署。(由于仅俩台服务器且处在不同的内网下导致只能通过公网部署,正常企业阿里云同一账户下的俩台ECS处在同一内网)

Kubeadm 集群部署

  1. 安装Docker(Master、Node)
    安装Docker可参考官方文档,注意这里Docker有个配置需要调整,我们需要调整Docker的Cgroup为systemd(目的是跟K8s保持一致),Docker默认的是groupfs。不确定的同学可以执行docker info | grep cgroup看一下。更改方式如下:
    执行vim /etc/docker/daemon.json
    1
    2
    3
    4
    5
    6
    {
    "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"] // 新增该行
    }
阅读全文

K8s笔记--基础架构

发布在 运维

前言

K8s目前也是比较主流的一套分布式容器编排工具,因此有着很好的社区,网络上与其相关的技术文章也是数不胜数,该篇文章只是之前学习K8s的笔记搬运。我一直觉得学习一个组件最好的方式还是先了解他的组成架构,然后才会尝试去搭建运行。因此在开始搭建K8s集群前还是应当先对其基础架构中的模块有所了解,该篇文章主要梳理K8s集群部署时我们需要运行的模块(或者说我们在搭集群实质上是在运行哪些模块)。以下是K8s的架构图(截取至K8s官方网站)。
k8s-structure
阅读全文

作者的图片

晨晨晨晨晨晨🐼

凛冬散尽,待春拂面,星河长明。


Java开发者、PHP开发者、DevOps爱好者


杭州,中国🇨🇳