星辰大海

My Conquest Is the Sea of Stars.


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

zookeeper入门摘要

发表于 2020-02-14 | 更新于 2020-02-25 | 分类于 架构设计
本文字数: 11k | 阅读时长 ≈ 10 分钟

1.ZooKeeper是什么?

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所连接的zookeeper机器来处理。对于写请求,这些请求会同时发给其他zookeeper机器并且达成一致后,请求才会返回成功。因此,随着zookeeper的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。

有序性是zookeeper中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,这个时间戳称为zxid(Zookeeper Transaction Id)。而读请求只会相对于更新有序,也就是读请求的返回结果中会带有这个zookeeper最新的zxid。

阅读全文 »

MyBatis中的九种设计模式

发表于 2020-02-12 | 更新于 2020-02-25 | 分类于 JAVA
本文字数: 51k | 阅读时长 ≈ 46 分钟

虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。

阅读全文 »

不可不说的Java锁事

发表于 2020-02-12 | 更新于 2020-02-25 | 分类于 JAVA
本文字数: 95k | 阅读时长 ≈ 1:26

前言

Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。

阅读全文 »

从ReentrantLock的实现看AQS的原理及应用

发表于 2020-02-12 | 更新于 2020-02-25 | 分类于 JAVA
本文字数: 84k | 阅读时长 ≈ 1:17

前言

Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。本文会从应用层逐渐深入到原理层,并通过ReentrantLock的基本特性和ReentrantLock与AQS的关联,来深入解读AQS相关独占锁的知识点,同时采取问答的模式来帮助大家理解AQS。由于篇幅原因,本篇文章主要阐述AQS中独占锁的逻辑和Sync Queue,不讲述包含共享锁和Condition Queue的部分(本篇文章核心为AQS原理剖析,只是简单介绍了ReentrantLock,感兴趣同学可以阅读一下ReentrantLock的源码)。

下面列出本篇文章的大纲和思路,以便于大家更好地理解:

img

阅读全文 »

MySQL增删改查都会用到什么锁?

发表于 2020-02-12 | 更新于 2020-02-26 | 分类于 MySQL
本文字数: 28k | 阅读时长 ≈ 25 分钟

日常的操作中,增删改查都会使用什么类型的锁?其实这个问题,可以分为两个方面,一方面是读,一方面是写。

读(select)

我们先来看读的部分。读的操作,其实分为两种,分别是一致性读和锁定读,

这里我们温习一下,一致性读其实就是利用事务的MVCC机制,来读取一份数据的快照,所以有的书上也称之为快照读,一致性读是不加锁的,其他的事务是可以对表中的数据记录进行改动的。一般情况下,常见的读,例如:

select * from table;

select * from table left join table2;

这种操作,在RU,RC,RR隔离级别下都是采用一直性读,不加锁的操作。这种情况下,读的并发可以非常高。

再来看看锁定读,如果我们的表当中有索引,我们想在读取记录的时候,获取某一条记录的锁,禁止别的事务对这条记录进行修改,那么我们可以使用下面的语句来对读取的记录加锁:

阅读全文 »

Linux实用的服务异常处理指南

发表于 2020-02-12 | 更新于 2020-02-26 | 分类于 Linux
本文字数: 40k | 阅读时长 ≈ 37 分钟

服务异常的处理流程

img

阅读全文 »

操作系统基础概念简述

发表于 2020-02-11 | 更新于 2020-02-25 | 分类于 架构
本文字数: 30k | 阅读时长 ≈ 27 分钟

操作系统概念

大部分操作系统提供了特定的基础概念和抽象,例如进程、地址空间、文件等,它们是需要理解的核心内容。下面我们会简要介绍一些基本概念,为了说明这些概念,我们会不时的从 UNIX 中提出示例,相同的示例也会存在于其他系统中,我们后面会进行介绍。

阅读全文 »

14个Java并发容器

发表于 2020-02-11 | 更新于 2020-02-17 | 分类于 JAVA
本文字数: 21k | 阅读时长 ≈ 19 分钟
并发容器介绍 ConcurrentHashMap:并发版HashMap CopyOnWriteArrayList:并发版ArrayList CopyOnWriteArraySet:并发Set ConcurrentLinkedQueue:并发队列(基于链表) ConcurrentLinkedDeque:并发队列(基于双向链表) ConcurrentSkipListMap:基于跳表的并发Map ConcurrentSkipListSet:基于跳表的并发Set ArrayBlockingQueue:阻塞队列(基于数组) LinkedBlockingQueue:阻塞队列(基于链表) LinkedBlo ...
阅读全文 »

Java8开发的4个小技巧

发表于 2020-02-11 | 更新于 2020-02-28 | 分类于 Java
本文字数: 14k | 阅读时长 ≈ 13 分钟

Optional

Optional是一个评价过低的特性,它可以显著的降低代码抛出NullPointerException的可能。它在边界代码(你正在使用的API或者你发布的API)中特别有用。

但是对于它的不适当的使用和设计很容易使一个小的变动影响到很多的类,或者降低代码的可阅读性。这里有一些如何更加高效使用Optional的建议。

阅读全文 »

如何提高服务器的并发处理能力

发表于 2020-02-11 | 更新于 2020-02-25 | 分类于 架构设计
本文字数: 16k | 阅读时长 ≈ 15 分钟

以下内容为入门级介绍,意在对老技术作较全的总结而不是较深的研究。主要参考《构建高性能Web站点》一书。

什么是服务器并发处理能力

一台服务器在单位时间里能处理的请求越多,服务器的能力越高,也就是服务器并发处理能力越强

阅读全文 »
1234…6
Vincent

Vincent

The King is dead, long live the King!

55 日志
23 分类
72 标签
RSS
GitHub E-Mail
© 2020 Vincent | 629k | 9:31
由 Hexo 强力驱动 v3.9.0
|
主题 — NexT.Muse v6.3.0