深入浅出Zookeeper(七):Leader选举

2020-06-14
阅读 26 分钟
6.9k
为什么是最简单的方式呢?我们想象一下,当我们写数据到Leader时,Leader写入自己的一份数据后,可能会做副本到Follower,那么拷贝的数量、及所在的位置都由该Leader来控制。但如果是多Leader调度,就要涉及到数据分区,请求负载均衡等问题了。

深入浅出Zookeeper(六):客户端的请求在服务器中经历了什么

2020-05-23
阅读 28 分钟
3.8k
当我们向zk发出一个数据更新请求时,这个请求的处理流程是什么样的?zk又是使用了什么共识算法来保证一致性呢?带着这些问题,我们进入今天的正文。

深入浅出Zookeeper(五):BadVersionException到底是怎么一回事

2020-04-19
阅读 3 分钟
3.1k
最近在开发时偶尔会观测到zk报出BadVersionException,后在搜索引起上得知了是乐观锁相关的问题,很快就解决了问题。不过学而不思则罔:无论是单体应用还是分布式系统,在运行过程中总要有一种机制来保证数据排他性。接下来,我们就来看看zk是如何实现这种机制的。

深入浅出Zookeeper(四):Watch实现剖析

2020-04-08
阅读 24 分钟
6.3k
本文首发于泊浮目的简书:[链接]版本日期备注1.02020.4.8文章首发1.12020.4.18优化小结部分描述,使其更加详细易懂1.22020.8.10删除部分不重要的代码,减少篇幅,优化描述方式1. 前言本文面向读者:有java基础并对zk源码实现感兴趣的同学。用过zookeeper的同学都知道watch是一个非常好用的机制,今天我们就来看看它的实现...

深入浅出Zookeeper(三):会话管理

2020-03-29
阅读 12 分钟
5.1k
我们知道zookeeper是一个分布式协同系统。在一个大型的分布式系统中,必然会有大量的client来连接zookeeper。那么zookeeper是如何管理这些session的生命周期呢?带着这个问题,我们进入今天的正文。

深入浅出Zookeeper(二):存储技术

2020-03-12
阅读 14 分钟
3.5k
本文首发于泊浮目的简书:[链接] 版本 日期 备注 1.0 2020.3.12 文章首发 1.0.1 2020.3.16 改进部分大小写问题及形容方式 1.0.2 2020.3.21 改进可能会引起错误理解的部分 1.0.3 2020.3.29 修改标题 1.0.4 2020.4.18 改进小结部分 1.0.5 2020.6.26 更新部分部分解释,改进注释风格 1.0.6 2020.7.6 增加部分详细解释 前言 ...

深入浅出Zookeeper(一):概览

2020-01-29
阅读 2 分钟
2.7k
这个可以通过官网来看[链接]。第一眼看过去,我们就知道它是一个分布式协同系统。并且提供了一些分布式系统中较常用的功能:如配置管理、DNS服务、分布式协同和组成员管理。

2019年总结

2020-01-01
阅读 4 分钟
2.4k
如果按照以往的惯例,我会在标题前面加个词简单描述一下。但在写这篇文章时,我想了很久,都没想出什么词可以满足“简单的描述一下”。所以就不写了。

谈谈代码:函数式编程

2019-08-11
阅读 7 分钟
2.8k
本文首发于泊浮目的简书:[链接]版本日期备注1.02019.8.11文章首发1.12021.5.21修改标题:浅谈函数式编程-> 谈谈代码:函数式编程1. 前言一个风和日丽的下午,我看着日常看代码做重构迁移,突然看到这么段代码: {代码...} 看了这段代码我整个人都不好了!首先是那火箭式的三个嵌套for循环,再者就是那些变量声明语句.为了...

谈谈代码:Java IO业务代码优化之路

2019-07-01
阅读 8 分钟
3.9k
简单解释一下这段代码——即通过ssh到一台机器上,然后执行一些命令.对命令输出的东西,开了一个循环,每一次读一定的位置,然后以字节流的形式读回来.

谈谈代码:漫谈代理模式

2019-04-27
阅读 2 分钟
1.8k
代理模式是在编程中非常常见的设计模式.笔者在面试的过程中也经常会问到相关的问题,但是很多同学答的并不尽人意.在这篇文章中,笔者想和大家聊聊代理模式的应用及一些实践.

技巧:我们在编写测试时,应该注意什么

2019-03-12
阅读 3 分钟
4.2k
最近项目在测试阶段陆陆续续的测出了一些bug.这个情况刚出现的时候,让笔者很困惑——平时我们的每个feature代码都是跟随着大量看起来考虑很周全的case进入代码仓库的,然而事实还是打了我们的脸.故在本文,笔者将会从最近的所学所想来谈谈编写测试的时候我们应该注意什么.

谈谈代码——如何避免写出糟糕if...else语句

2019-01-18
阅读 15 分钟
6.2k
在写代码的日常中,if...else语句是极为常见的.正因其常见性,很多同学在写代码的时候并不会去思考其在目前代码中的用法是否妥当.而随着项目的日渐发展,糟糕的if...else语句将会充斥在各处,让项目的可维护性急剧下降.故在这篇文章中,笔者想和大家谈谈如何避免写出糟糕if...else语句.

想做、想知道的还有很多——2018年总结

2019-01-01
阅读 3 分钟
1.3k
18年还是让我觉得过得很快,我想去年的我也是这么想的.不同的是,我觉得我今年经历了许多事,这让我变得...或者说,在那么几个瞬间,我又老了一点.

基于ZStack设计一个较为简单的自动化测试系统

2018-10-06
阅读 2 分钟
2.8k
众所周知,ZStack管理节点部分有一套较为完善的自动化测试框架,可以满足大多数场景。而Utility并非如此,只能通过黑盒测试来保证其质量,且许多测试场景需要start up一个真实的ZStack的环境,测试成本较高。

ZStack源码剖析之二次开发——Debug的常用技巧

2018-08-11
阅读 20 分钟
3k
在前文 ZStack源码剖析之二次开发——可扩展框架中,我们大概的了解了如何在ZStack中进行二次开发。在本文,笔者将和大家一起了解一下常用debug管理节点的方法,用于更好的了解运行时的情况。

尝试使用GitLab-CI

2018-06-20
阅读 6 分钟
4.8k
我经常写测试——这算是我对软件工程的一点执念。前阵子折腾了基于ZStack的二次开发,每次提交代码前都要自己跑一趟测试,着实有点慢。自己撸一套系统成本又太高,正发愁时发现GitLab自带了CI系统,便开始了折腾之旅。

ZStack源码剖析之二次开发——在Utility上堆代码

2018-05-25
阅读 27 分钟
4.5k
在上篇文章中(ZStack源码剖析之二次开发——可扩展框架),我们简单的了解了一下ZStack核心引擎的二次开发技巧。在这篇文章中,我们将一起来了解ZStack-Utility(即ZStack的Agent端)的二开姿势。

ZStack源码剖析之二次开发——可扩展框架

2018-04-16
阅读 3 分钟
4.2k
在ZStack博文-5.通用插件系统中,官方提出了几个较为经典的扩展方式。但在实际的二次开发中,这些做法未必能够完全满足需求。今天笔者就和大家一起来看一看一些常见的扩展方法。

ZStack源码剖析之模块鉴赏——LongJob

2018-03-11
阅读 16 分钟
2.9k
在ZStack中,当用户在UI上发起操作时,前端会调用后端的API对实际的资源发起操作请求。但在一个分布式系统中,我们不能假设网络是可靠的(同样要面对的还有单点故障等)——这往往导致API会超时。ZStack有默认的API超时机制,为30mins。但从UI上看来,用户的体验不是很好,如下:

ZStack源码剖析之设计模式鉴赏——策略模式

2018-03-01
阅读 5 分钟
3.9k
无论什么程序,其目的都是解决问题。而为了解决问题,我们又需要编写特定的算法。使用Strategy模式可以整体地替换算法的实现部分。能够整体地替换算法,能让我们轻松地以不同的算法去解决一个问题,这种模式就是Strategy模式。

ZStack源码剖析之核心库鉴赏——EventFacade与CloudBus

2018-02-21
阅读 48 分钟
5.5k
EventFacade是一个很有意思的组件,因为它几乎是自举的。这就意味着有兴趣的朋友可以copy and paste,然后稍作修改就可以在自己的项目里工作起来了。

技巧:ZStack如何做Integration Test

2018-02-01
阅读 28 分钟
4.7k
笔者工作2年有余,刚开始实习的时候是不知道自动化测试这种神器的,在刚开始工作的时候往往苦于救火灭火再救火,搞的心力憔悴,一度怀疑猿生。实践自动化测试后感觉生产力慢慢的解放了,那个时候搞的还是偏单机应用,测试的Cover也是止步在单机应用上。在接触到了ZStack以后,由于其产品化的特性,对软件质量要求偏高,...

ZStack源码剖析之设计模式鉴赏——三驾马车

2018-01-19
阅读 5 分钟
4.2k
随着ZStack的版本迭代,其可以掌管的资源也越来越多。但新增模块的结构却还是大致相同,此即是ZStack的经典设计模式——这套模式也被开发者称为ZStack三驾马车。

苦逼并思考着——我的2017年总结

2018-01-02
阅读 2 分钟
2.4k
前阵子出去玩了一趟,回来思衬着年度总结还没写,就过来补了。 回看,在ZStack待了1年多,从30多人到团队到近百人团队,从A轮前到B轮展望——有好有坏,尽收眼里。一句话概括:我肥了,也变强了。 今年在内部GitLab的Activity记录(六月的时候我们从GitHub上切到了GitLab): 接下来说说今年我在工作中意识到的一些事情吧—...

ZStack源码剖析之核心库鉴赏——FlowChain

2017-12-19
阅读 15 分钟
3.7k
在ZStack(或者说产品化的IaaS软件)中的任务通常有很长的执行路径,错误可能发生在路径的任意一处。为了保证系统的正确性,需提供一种较为完善的回滚机制——在ZStack中,通过一个工作流引擎,ZStack的每一个步骤都被包裹在独立的工作流中,可以在出错的时候回滚。此外,通过在配置文件中组装工作流的方式,关键的执行路...

ZStack源码剖析之核心库鉴赏——ThreadFacade

2017-12-10
阅读 16 分钟
4.7k
在ZStack中,最基本的执行单位不仅仅是一个函数,也可以是一个任务(Task。其本质实现了Java的Callable接口)。通过大小合理的线程池调度来并行的消费这些任务,使ZStack这个Iaas软件有条不紊运行在大型的数据中心里。

简谈Java String

2017-11-09
阅读 6 分钟
2.3k
前言 前阵子和同事在吃饭时聊起Java的String,觉得自己之前的笔记写的略显零散。故此又重新整理了一下。 String在Java中算是一个有意思的类型,是final类型,因此不可以继承这个类、不能修改这个类。 两个小问题 我们先来看一段代码: {代码...} 试问:这两行代码执行后,原始的 String 对象中的内容到底变了没有? 答案...

ZStack源码剖析之核心库鉴赏——Defer

2017-10-03
阅读 3 分钟
2.6k
本文首发于泊浮目的专栏:[链接] 在Go语言中,有一个关键字叫做defer——其作用是在函数return前执行。在ZStack中也有类似的工具类,让我们来看看吧。 演示代码 {代码...} 这段代码是ZStack ManageNode(简称MN)在接收到创建计算规格的请求后的处理逻辑,大致的逻辑即: 在DB中创建一条记录 添加当前账户与该计算规格的关联...

ZStack源码剖析:如何在百万行代码中快速迭代

2017-09-23
阅读 4 分钟
7.8k
ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。它主要面向的是未来的智能数据中心,通过提供的API来管理包括计算、存储和网络在内的数据中心的各种资源。跟OpenStack相比,ZStack具有易用、稳定、灵活、超高性能等特点。其单管理节点可以管理1万台物理机规模集群,多个管理节点构建的集群可以做到使用一个数据...