- 博客(55)
- 收藏
- 关注
原创 本地消息表的设计与实现
前言很久没有更新过了,准备开始写一些质量高一些的文章,也会同步到SegmentFault,个人主页:https://segmentfault.com/u/jinhaozhi/articles,近期主要记录下接近一年的核心工作。背景本地消息表是什么? 一种通过单机事务来保障分布式数据一致性的策略,作用就是在分布式系统中保证上下游的数据最终一致;Case(以订单为例) 在任何一个电商系统中,订单都是属于核心链路部分,要求高可用和稳定,但是作为核心链路,对下游的其余依赖也是难以...
2020-07-18 17:49:17
3059
6
原创 java客户端访问ApiServer(kubernetes-client使用)
前言使用kubernetes-client访问k8s apiserver,直接贴代码了配置类ApiClientConfig(自己根据需要改)package com.pdd.transports.config;import com.yiran.arch.leo.client.ConfigCache;import io.kubernetes.client.ApiClient;im...
2019-11-26 14:50:56
4843
2
原创 kube-proxy的三种代理模式
前言Service是k8s中资源的一种,也是k8s能够实现减少运维工作量,甚至免运维的关键点,我们公司的运维都要把服务搭在我们集群里,接触过的人应该都能体会到其方便之处。Service能将pod的变化屏蔽在集群内部,同时提供负载均衡的能力,自动将请求流量分布到后端的pod,这一功能的实现靠的就是kube-proxy的流量代理,一共有三种模式,userspace、iptables以及ipvs。...
2019-11-06 22:23:00
6405
原创 k8s集群ingress controller压测记录
前言这两天老大让做k8s测试集群内ingress controller的压测报告,记录下。ingress-controller中nginx结构为1master4worker,结构如下:短连接测试最开始使用jmeter,配置如下:四个线程组(其实和单线程组的效果一致),从1000开始增加,得到的CPU使用率结果如下:当请求次数超过9500次之后,CPU负载不再增加,在...
2019-10-22 16:29:06
1132
1
转载 k8s服务暴露的三种方式(转载)
写的很好,转一下https://mritd.me/2016/12/06/try-traefik-on-kubernetes/https://mritd.me/2017/03/04/how-to-use-nginx-ingress/
2019-10-20 16:25:16
2403
原创 gradle高版本中编译lombok报错的问题
前言gradle版本换到5.6.2之后(高于5.0就会出现这个问题),build一直报如下错误即lombok @slf4j注解未识别。解决检查插件是否下载,版本是否对应:没问题,接着检查注解处理器是否开启:也没问题,开始怀疑是idea版本和lombok插件的问题,于是找了台低版本idea的机器试验,结果一样,接着把目标转向gradle,实验低版本gradle没有...
2019-10-16 14:37:53
3248
原创 k8s集群安装过程中的相关问题和解决
前言断点续传模式~记录我用的是ubuntu16.04,首先要做的是配置apt源,这里推荐阿里云的源地址https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg,centos的在这儿https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64,用梯子的...
2019-10-06 20:10:33
19084
2
原创 不用饿汉和锁实现线程安全的单例模式
前言面试官不让用饿汉和锁,要求实现线程安全的单例,记录下使用原子类的解法;代码SingletonWithoutLock.javaimport java.util.concurrent.atomic.AtomicReference;/** * @author jhz * @date 19-8-10 下午11:55 */public class SingletonWit...
2019-08-11 00:26:52
271
原创 聚簇索引和非聚簇索引(相关小知识点)
前言终于有时间写写博客,记录下聚簇索引与非聚簇索引的相关小知识点。知识点1、聚簇索引和非聚簇索引的各自适用场景?2、聚簇索引和非聚簇索引的优劣势?优势: 叶子节点会存储数据,找到叶子节点就找到了数据行,无需回表; 对于辅助索引,使用主键作为指针而不是地址值,,减少了出现行移动或者数据页分裂时辅助索引的维护工作; 在排序场景下,由于聚簇索引的物理位置...
2019-08-04 22:47:15
309
转载 Redis淘汰机制
前言正好最近工作上把C和C++捡回来一些,顺便跟着源码看看Redis的过期策略与内存淘汰机制。整理了下几篇文章,转载from:https://www.jianshu.com/p/8aa619933ebbhttps://blog.csdn.net/asdfsadfasdfsa/article/details/88339060https://www.jb51.net/article/1...
2019-07-03 23:36:18
862
转载 转载:从小白鼠试毒问题->海明码
问题提出:有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出哪瓶水有毒?问题分析:需要多少只小白鼠?这个很容易想到是10只(二进制),但是如何鉴别哪一瓶水有毒?(即如何安排小白鼠?)原贴如下:https://blog.csdn.net/mengtnt/article/details/8477747海明码计算:转载...
2019-06-25 00:08:25
678
原创 面试题:Zookeeper是如何解决脑裂问题
前言这是分布式系统中一个很实际的问题,书上说的不是很详细,整理总结一下。1、脑裂和假死1.1 脑裂官方定义:当一个集群的不同部分在同一时间都认为自己是活动的时候,我们就可以将这个现象称为脑裂症状。通俗的说,就是比如当你的 cluster 里面有两个结点,它们都知道在这个 cluster 里需要选举出一个 master。那么当它们两之间的通信完全没有问题的时候,就会达成共识,选出其中...
2019-06-20 23:29:52
18972
5
原创 面试题:从图的遍历到深拷贝的实现
前言非常好的一道面试题,leetcode上是没有的,记录下。原题public class N{ public int val; public List<N> list;}val可以唯一标示一个对象,即不同对象的val值都不相同,给定如下类,要求实现深拷贝,方法定义如下:N dp(N source) { //待实现}分析相信...
2019-06-13 23:40:23
517
原创 Redis面试题记录--缓存双写情况下导致数据不一致问题
前言这个去年就看到过项目中的实现方案,结果今天问还是忘了,记录下。1、问题描述在高并发的情况下,如果当删除完缓存的时候,这时去更新数据库,但还没有更新完,另外一个请求来查询数据,发现缓存里没有,就去数据库里查,还是以上面商品库存为例,如果数据库中产品的库存是100,那么查询到的库存是100,然后插入缓存,插入完缓存后,原来那个更新数据库的线程把数据库更新为了99,导致数据库与缓存不一致...
2019-06-11 23:06:20
1100
原创 从Paxos到Zookeeper(三)
前言前面已经介绍了Paxos,这章开始学习Paxos在Zookeeper中的应用,主要介绍ZAB协议,Chubby和Hypertable估计也接触不到,这里先简单介绍下Zookeeper。1、Zookeeper简介相信大部分从事分布式开发项目的人都有过使用经验,其设计目标是将那些复杂且容易出错的分布式服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用,分布式...
2019-06-10 23:04:12
306
原创 面试题分享
前言面试了三个月,也拿到了一些比较满意的offer,就把面试题发一下把,公司名字就不说了,因为都没去(我是菊厂员工,实在不愿意这时候离公司而去,应该现在有很多人跟我做了一样的选择吧)面试题因为前两个月的记在本子上,等以后整理了再发,先整理下最近的吧,小厂的和hr面也不发了:1、个人介绍和项目以及项目中的优化点2、ConcurrentHashMap 1.7和1.8的区别,项目中大...
2019-05-23 23:08:59
331
1
原创 从Paxos到Zookeeper(二)
前言这个月公司风波很多,比较忙,心态也有些变化,一个月没更了,终归还是要沉淀下来工作学习呀,继续学习Paxos。前面已经介绍了2PC和3PC,并了解了它们各自的特点以及解决的分布式问题,接着,我们来介绍Paxos:一种基于消息传递且具有高度容错性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法。1、背景在常见的分布式系统中,设计者必须要考虑的一个问题就是节点宕机或网络异常,这...
2019-05-20 23:34:43
452
原创 从Paxos到Zookeeper(一)
前言 随着计算器系统规模变得越来越大,计算机系统正在经历一场前所未有的从集中式到分布式架构的变革,相信有过分布式开发经验的都能明白其痛点--分布式一致性。Zookeeper的出现帮助很多系统在一定程度上解决了这个难点,使用也非常简单,作为分布式一致性问题的工业解决方案,paxos是理论算法,其中zab,raft和众多开源算法是对paxos的工业级实现。这本书是本人很早就想看的书了,...
2019-04-24 23:54:53
1765
原创 并发相关知识总结(四)
知识点(第八、九章)1、CountDownLatch基本的用法就是定义计数器N,并通过await方法阻塞线程,直到N变成0。和join最直观的使用区别就是不用手动的去挂起了,一两个线程可能并不会显得多方便,但是当线程数量较大时,区别还是很明显的。2、CyclicBarrier这个我也没用过,其字面意思就是可循环使用的屏障,让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到...
2019-04-16 23:41:37
220
原创 一道Netty面试题:boss线程池和worker线程池能不能合在一起?
前言这篇帖子我估计要反复修改,我不确定面试官是不是随口问的(就是可能他自己也没仔细想过这个问题。。。),我当时回答的是不能,我确实不大明白为啥要合在一起,合在一起你也是要有线程去处理连接,一部分线程去处理请求。而且放在一起不是增加复杂度(耦合)了吗?面试的时候思路容易不清晰,其实这段还是看过的,而且之前的帖子里还写过,netty源码默认就是支持的,只不过平时使用的都是主从多线程reactor。...
2019-04-03 23:47:23
8978
1
原创 并发相关知识总结(三)
知识点(第五、六、七章)1、Lock接口关键点:(1)lock和synchronized的区别,后者是通过monitor+对象头的方式控制线程的同步,锁的获取和释放都是隐式完成的,而lock则是手把手的获取与释放锁;(2)lock可以尝试非阻塞的获取锁,以及超时获取锁,并且,与synchronized不同,获取到锁的线程能够响应中断,同时释放锁。2、AQS这个是重中之重!!这个部分...
2019-03-29 23:13:02
133
原创 并发相关知识总结(二)
前言二和一之间拖了太久,相信看过这本书的都知道,后半章要真的学透要花很长的时间,看很多的源码,其实后半本我看完也只花了一个月不到,但是看完之后仔细回想一下,发现收货真的不大,于是狠狠的啃了很多源码,包括上班时在项目中使用时,都会特意的去瞧一瞧源码,现在虽不能说吃透,但是我觉得还是有收获把,就一边总结,一边再复习一次。知识点(第四章)1、线程线程定义和什么进程的区别啥的就不总结了,线...
2019-03-28 23:02:12
110
原创 面试题:ConcurrentHashMap 1.7和1.8的区别
前言面试官问到这个我觉得送分了,觉得自己答的挺好,面完看看其实发现还是有一些没答全,写个帖子记录下。ConcurrentHashMap 1.7和1.8的区别1、整体结构1.7:Segment + HashEntry + Unsafe1.8: 移除Segment,使锁的粒度更小,Synchronized + CAS + Node + Unsafe2、put()1.7:先定...
2019-03-20 22:06:17
34333
25
原创 如何用简单的十条命令快速检查Linux服务器性能
前言 部门DBA同时也是以为linux专家,跟着他学了点皮毛,记录下,由于我司搬运图片出来太困难,因此对比的效果图就没有了,有一些日志是用文本方式粘贴的,自己动手敲一下效果更直观。概述• uptime• dmesg | tail• vmstat 1• mpstat -P ALL 1• pidstat 1• iostat -xz 1• free -m...
2019-01-20 22:13:37
219
原创 记一次神秘空指针问题的定位
前言昨天在工作中遇到一个很奇怪的空指针问题,接下来看下问题的定位到解决。问题出现问题发生在一个平时都很稳定的微服务中,负责的责任田为整个产品的框架组,该服务也是框架服务中的核心之一,因此直接被测试提了严重单,该微服务已经接近三个月没有过新代码合入。报错日志如下:从日志中可以看到发生在Job.getJobId中,不用多想,肯定是该job对象为空了。接着贴一下问题发生处的代码:...
2019-01-20 21:51:22
613
原创 跟着源码学ConcurrentHashMap
前言 多线程环境下,使用Hashmap进行get操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap(这在前面学习hashmap的文章中已经介绍过)。ConcurrentHashMap作为JUC包中最重要最常用的线程安全容器,在并发编程中的使用频率非常高,本文就跟着源码来分析下ConcurrentHashMap的实现原理。1、核心类图 ...
2019-01-07 22:33:27
130
原创 leetcode-Product of Array Except Self
培训期间刷刷leetcode,描述如下:Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of numsexcept nums[i].Example:Input...
2018-12-09 22:30:23
183
原创 mysql索引学习(一)
前言MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是一种数据结构。数据库查询是数据库的主要功能之一,最基本的查询算法是顺序查找(linear search)时间复杂度为O(n),显然在数据量很大时效率很低。优化的查找算法如二分查找(binary search)、二叉树查找(binary tree search)等...
2018-12-02 22:15:01
224
原创 B树及B+树
前言 最近嗑了段时间的并发,现在要着手开始加强数据库方面知识的学习了,知其然也要知其所以然,今天学习下B树和B+树。B树B树即B-Tree,B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。具有...
2018-11-24 22:56:15
198
原创 设计模式学习--模板方法模式
前言 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。1、模板方法模式1.1 用途定义一个模板结构,将具体内容延迟到子类去实现,在不改变模板结构的前提下在子类中重新定义模板中的内容。1.2 UML1.3 示例...
2018-11-11 22:35:14
137
原创 并发相关知识总结(一)
前言这几天看了几章《java并发编程的艺术》,及时总结,别忘的太快。知识点1、如何减少上下文切换无锁并发编程:通过无锁设计来避免锁的使用,比如让不同的线程处理不同段的数据。 CAS:CAS即Compare And Set,通过CAS算法来更新数据,保证数据更新的安全性。 使用最小线程:在使用线程池时,尽量做到大池小队列(IO密集型)以及小池无队列(CPU密集型),后者使用小池可...
2018-11-07 22:41:56
165
原创 设计模式学习--策略模式
前言使用策略模式可以代替多重if-else和switch语句,让代码维护变得更加简单,乍一看跟工厂模式一模一样,下面是个简单的例子。策略模式包含以下三种角色:环境(Context)角色:持有一个Strategy的引用 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为示例抽象策略...
2018-10-31 20:51:57
181
1
原创 SpringBoot+Netty实现WebSocket服务器
前言 传统的请求-应答模式(http)越来越不能满足现实需求,服务器过于被动,而采用轮训或者long poll的方式过于浪费资源,这便有了WebSocket。WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来...
2018-10-22 22:59:08
12828
13
原创 职责链模式以及在Netty中的应用
前言 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。类图如下: 职责链模式中主要包括以下两个角色:抽象处理者(handler)和具体处理者(concreteHandler),抽象处理者中声明处理...
2018-10-20 00:20:40
269
原创 Reactor模式学习总结
前言 之前在JAVA IO中已经提到过reactor模式,reactor可以说是nio的核心,也是netty之所以高效的原因之一,今天我们来总结下reactor模式相关的知识点。在开始学习之前,我们需要了解常用IO模型的两种体系结构:1、thread-based architecture(基于线程):如BIO,一个客户端请求(连接)对应一个独立线程2、event-driven...
2018-10-14 14:24:26
424
原创 设计模式学习-状态模式
前言我们在日常开发中经常会面临if-else的选择,比如我刚刚登录csdn,想写一篇关于状态模式的博客,发现cookie又没有保存我的登录信息(可能是过期了),当我点击博客时,会先提示需要登录,这里我们可以看到,我们用户的行为是由当前是否登录这个状态来决定的,这就是典型的状态模式情景。在逻辑判断较多,分支较为复杂的场景,状态模式的合理使用能让我们少写很多if-else。UML如图,...
2018-10-09 22:26:13
280
原创 Java IO模型--边学边理解(二)
前言前面已经学习了BIO以及NIO,本篇学习AIO。2.3 AIO A即asynchronous,AIO即异步IO,前面学习的IO模型都是同步IO,回顾一下NIO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,...
2018-10-08 23:17:29
248
原创 Java IO模型--边学边写边理解(一)
前言中秋节不出去玩,除了加班一天,花两天时间死磕IO模型。1 IO定义 IO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间内核空间、内核空间设备空间(磁盘、网络等)。IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。1.1 磁盘I/O磁盘I/O的访问方式又包括以下几种:...
2018-09-24 23:11:03
2878
2
原创 SpringCloud集成Eureka+Fegin+Hystrix实现登录Demo
前言类似之前dubbo的小例子,本文接着对SSM与SpringCloud、SpringBoot进行整合,并集成Eureka、Feign与Hystrix,这些都是SpringCloud中的套件,使用起来非常方便。1、cloudserver服务端的项目结构如下:服务端包括Eureka注册中心以及登录服务loginserver,分开放完全也是可以的。1.1 Eureka服务注册中...
2018-09-16 01:27:40
4933
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人