分布式共识
什么是分布式共识
共识 (distributed consensus) 是分布式系统中最基本的问题,用来保证一个分布式系统的可靠性以及容错能力。简单来说,分布式共识性是指多个服务器的保持状态一致。
共识问题通常形式化如下:一个或多个节点可以提议(propose) 某些值,而集群中的所有有效节点根据共识算法进行协商,最终决议(decides) 采纳某个节点的提议。
而共识算法必须满足以下性质:
大道至简,知易行难
共识 (distributed consensus) 是分布式系统中最基本的问题,用来保证一个分布式系统的可靠性以及容错能力。简单来说,分布式共识性是指多个服务器的保持状态一致。
共识问题通常形式化如下:一个或多个节点可以提议(propose) 某些值,而集群中的所有有效节点根据共识算法进行协商,最终决议(decides) 采纳某个节点的提议。
而共识算法必须满足以下性质:
1978 年,Lamport 在 Time, Clocks, and the Ordering of Events in a Distributed System 中提出了逻辑时钟的概念,来解决分布式系统中区分事件发生的时序问题。
逻辑时钟指的是分布式系统中用于区分事件的发生顺序的时间机制。
ZooKeeper 并没有直接采用 Paxos 算法,而是采用了名为 ZAB 的一致性协议。ZAB 协议不是 Paxos 算法,只是比较类似,二者在操作上并不相同。Multi-Paxos 实现的是一系列值的共识,不关心最终达成共识的值是什么,不关心各值的顺序。而 ZooKeeper 需要确保操作的顺序性。
ZAB 协议是 Zookeeper 专门设计的一种支持崩溃恢复的原子广播协议。
ZAB 协议是 ZooKeeper 的数据一致性和高可用解决方案。
Python 是一种广泛使用的解释型、高级和通用的编程语言。Python 支持多种编程范型,包括结构化、过程式、反射式、面向对象和函数式编程。它拥有动态类型系统和垃圾回收功能,能够自动管理内存使用,并且其本身拥有一个巨大而广泛的标准库。
1991 年,Python 的第一个解释器诞生。
1994 年,Python 1.0 版本发布。它包含了异常处理、函数和模块等基本特性。
2000 年,Python 2.0 版本发布。它引入了新的特性,如列表推导式、垃圾回收机制等。
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:
# -*- coding: cp-1252 -*-
Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
Python 基本赋值
a = 1
b = 2.0
c = "test"
print(f'a={a}')
print(f'b={b}')
print(f'c={c}')
# 输出
# a=1
# b=2.0
# c=test
Python 语言支持以下类型的运算符:
假设变量: a=10,b=20
| 运算符 | 描述 | 实例 |
|---|---|---|
+ |
加 - 两个对象相加 | a + b 输出结果 30 |
- |
减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
* |
乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ |
除 - x 除以 y | b / a 输出结果 2 |
% |
取模 - 返回除法的余数 | b % a 输出结果 0 |
** |
幂 - 返回 x 的 y 次幂 | a**b 为 10 的 20 次方, 输出结果 100000000000000000000 |
// |
取整除 - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
Python 的选择语句的语法格式为:if...elif...else 语句。
if 语句至多有 1 个 else 语句,else 语句在所有的 elif 语句之后。if 语句可以有若干个 elif 语句,它们必须在 else 语句之前。elif 语句检测为 true,其他的 elif 以及 else 语句都将跳过执行。💧 dunwu.github.ioopen in new window 是个人的技术文档归档仓库。
- 🔁 项目同步维护:Githubopen in new window
- 📖 电子书阅读:Github Pagesopen in new window
Pattern、Matcher、捕获与非捕获、反向引用、零宽断言、贪婪与懒惰、元字符、DFA、NFABase64、消息摘要、数字签名、对称加密、非对称加密、MD5、SHA、HMAC、AES、DES、DESede、RSALocale、ResourceBundle、NumberFormat、DateFormat、MessageFormatStream、lambda、Optional、@FunctionalInterfaceSPI、ClassLoader
Collection、泛型、Iterable、Iterator、Comparable、Comparator、Cloneable、fail-fastList、ArrayList、LinkedListMap、HashMap、TreeMap、LinkedHashMap、WeakHashMapSet、HashSet、TreeSet、LinkedHashSet、EmumSetQueue、Deque、ArrayDeque、LinkedList、PriorityQueue
InputStream、OutputStream、Reader、Writer、阻塞Channel、Buffer、Selector、非阻塞、多路复用Serializable、serialVersionUID、transient、Externalizable、writeObject、readObjectSocket、ServerSocket、DatagramPacket、DatagramSocketFile、RandomAccessFile、System、Scanner
进程、线程、安全性、活跃性、性能、死锁、饥饿、上下文切换Thread、Runnable、Callable、Future、wait、notify、notifyAll、join、sleep、yeild、线程状态、线程通信synchronized、volatile、CAS、ThreadLocalAQS、ReentrantLock、ReentrantReadWriteLock、ConditionCAS、AtomicConcurrentHashMap、CopyOnWriteArrayListExecutor、ExecutorService、ThreadPoolExecutor、ExecutorsCountDownLatch、CyclicBarrier、SemaphoreJMM、volatile、synchronized、final、Happens-Before、内存屏障
程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池、直接内存、OutOfMemoryError、StackOverflowErrorGC Roots、Serial、Parallel、CMS、G1、Minor GC、Full GCClassLoader、双亲委派bytecode、asm、javassistjps、jstat、jmap 、jstack、jhat、jinfojconsole、jvisualvm、MAT、JProfile、Arthas配置、调优CPU、内存、磁盘、网络、GCTomcat 和 Jetty 都是 Java 比较流行的轻量级服务器。
Nginx 是目前最流行的反向代理服务器,也常用于负载均衡。
Java 项目需要通过 构建工具 来管理项目依赖,完成编译、打包、发布、生成 JavaDoc 等任务。
- 目前最主流的构建工具是 Maven,它的功能非常强大。
- Gradle 号称是要替代 Maven 等构件工具,它的版本管理确实简洁,但是需要学习 Groovy,学习成本比 Maven 高。
- Ant 功能比 Maven 和 Gradle 要弱,现代 Java 项目基本不用了,但也有一些传统的 Java 项目还在使用。
自从有了 IDE,写代码从此就告别了刀耕火种的蛮荒时代。
- Eclipse 是久负盛名的开源 Java IDE,我的学生时代一直使用它写 Java。
- 曾经抗拒从转 Intellij Idea ,但后来发现真香,不得不说,确实是目前最优秀的 Java IDE。
- 你可以在 vscode 中写各种语言,只要安装相应插件即可。如果你的项目中使用了很多种编程语言,又懒得在多个 IDE 之间切换,那么就用 vscode 来一网打尽吧。
监控/诊断 工具主要用于 Java 应用的运维。通过采集、分析、存储、可视化应用的有效数据,帮助开发者、使用者快速定位问题,找到性能瓶颈。
Java 领域比较流行的安全框架就是 shiro 和 spring-security。
shiro 更为简单、轻便,容易理解,能满足大多数基本安全场景下的需要。
spring-security 功能更丰富,也比 shiro 更复杂。值得一提的是由于 spring-security 是 spring 团队开发,所以集成 spring 和 spring-boot 框架更容易。
缓存可以说是优化系统性能的第一手段,在各种技术中都会有缓存的应用。
如果想深入学习缓存,建议先了解一下 缓存基本原理open in new window,有助于理解缓存的特性、原理,使用缓存常见的问题及解决方案。
关系型数据库 整理主流关系型数据库知识点。
Mysql 架构、Mysql 存储引擎、Mysql 索引、Mysql 事务、Mysql 锁、Mysql 高可用、Mysql 优化、Mysql 运维、Mysql 面试
MongoDB 是一个基于文档的分布式数据库,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系型数据库和非关系型数据库之间的产品。它是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。
MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
Redis 基本数据类型、Redis 高级数据类型、Redis 数据结构、Redis 过期删除和内存淘汰、Redis 持久化、Redis 事件、Redis 复制、Redis 哨兵、Redis 集群、Redis 发布订阅、Redis 独立功能、Redis 管道、Redis 脚本、Redis 运维、Redis 实战、Redis 面试
Elasticsearch 是一个基于 Lucene 的搜索和数据分析工具,它提供了一个分布式服务。Elasticsearch 是遵从 Apache 开源条款的一款开源产品,是当前主流的企业级搜索引擎。
如果你是做通信领域的开发,或者是 Web 应用的开发,那就或多或少需要了解一些计算机网络的知识 。
理解计算机网络,首先需要从宏观层面了解计算机网络通信的分层结构。最有代表性的是 OSI 七层结构模型,但现实中更流行的是五层结构模型。
了解网络分层结构,需要了解每个网络层级在网络通信中的定位,以及这个层级主要的通信设备、通信协议。
PPP、CSMA/CD、局域网、以太网、MAC、适配器、集线器、网桥、交换机IP、ICMP、ARP、路由UDP、TCP、滑动窗口、拥塞控制、三次握手HTTP、DNS、FTP、TELNET、DHCP错误的分布式假设逻辑时钟、向量时钟、版本时钟、全序、偏序ACID、CAP、BASE、一致性共识共识、Paxos共识、RaftGossip共识、ZAB、ZooKeeper限流、熔断、降级、计数器法、时间窗口法、令牌桶法、漏桶法轮询、随机、最少连接、源地址哈希、一致性哈希、虚拟 hash 槽路由、条件路由、脚本路由、标签路由粘性 Session、Session 复制共享、基于缓存的 session 共享UUID、自增序列、雪花算法、Leaf定义、演进、利弊、如何拆分、容量规划、核心组件服务定义、注册中心、元数据、健康检查、服务订阅、一致性RPC、通信协议、传输方式、序列化微服务、序列化、动态代理、通信、服务注册发现、健康检查、路由、负载均衡、容错处理、优雅上线下线、限流、熔断、业务分组创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。
结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
行为模式负责对象间的高效沟通和职责委派。