AUTHER
SakuraDon
努力しないと、何も得られない
Latest articles
Hot articles
27
Oct
实现一个基于Http和Spring的简易RPC
客户端与服务端的请求,主要是对服务端资源的增删改查,所以大多数人会想到REST,而服务与服务之间的通信,主要是传入参数,调用方法,得到结果,所以大多数人会想到RPC。提到RPC的话,网络上已经有各种成熟的方案,诸如grpc,brpc等等。这些方案通常用在大型项目上,如果只是小项目乃至单机部署,不需要集群,使用网络上的方案颇有种大炮打蚊子的感觉。所以我们可以自己实现一个简易的RPC框架。需求分析开始前我们先来想想要实现一个怎样的效果。服务端@Service("demoService") public class DemoServiceImpl implements De...
17
2020/10/27
24
June
Docker内如何访问宿主机
不少人初时Docker时应该都遇到过这个问题,例如宿主机安装了mysql,但应用是Docker部署的,且需要连接mysql,那么就会遇到这个问题。一般人会选择直接使用公网ip或服务器组内私网ip的方式,实际中这样做的也更多,因为一台服务器上一般只会有一个服务,但也不排除个别情况,今天就更别情况讲一讲。Docker与宿主机的关系如上图,docker与宿主机之间会有一块网卡,通常名为docker0。在宿主机中使用ifconfig命令可以查看。宿主机的ip即为所有容器的网关,直接启动的容器都会在172.17.0.0/16这个网段上分配得到ip。因此在Docker内就可以通过宿主机docker0...
172
2020/06/24
02
June
Jenkins + Docker 构建自己的自动化部署
当你写完代码后,点下push按钮,不到一会你的线上应用就完成了更新并且运行了起来,这就是完美的工作流。准备流程这样的工作流也称自动化部署,具体的流程:开发人员推送代码到git仓库git仓库触发webhook请求build服务器build服务器执行构建任务build服务器打包docker并push到docker仓库build服务器登录生产服务器,停止旧服务,pull新镜像并运行要构建这么一套自动化部署,我们需要有:git仓库构建服务器docker镜像仓库生产服务器git仓库github,码云,或者私有的gitea、gitlab都是可行的。构建服务器构建过程通常会占用较多的服务器资源,如果服...
188
2020/06/02
09
Apr
JVM的类加载
生命周期一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为连接(Linking)。类加载加载通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口(反射机...
175
2020/04/09
06
Apr
关于JVM Safepoint(安全点)的理解
首先从垃圾回收说起,当发生GC时,需要从方法区或本地变量表等地方获取GC Roots,但如果是单纯的遍历查找的话是非常亏的,GC发生时本身就停止了所有的线程,不能让这一操作耗费太多的时间。HotSpot为优化GC Roots的查找,采用了OopMap这一数据结构,一旦类加载动作完成的时候,HotSpot就会把对象内什么偏移量上是什么类型的数据计算出来,在即时编译过程中,也会在特定的位置记录下栈里和寄存器里哪些位置是引用。通过OopMap,JVM可以快速枚举出GC Roots,但是对象引用随时都在变,如何维护OopMap又是一个问题。HotSpot的做法就是设置Safepoint。在一个方...
309
2020/04/06