摘要: 架构的演进历程 分布式理论 CAP理论 正常情况,写入A1,同步到A2,这样的话,A1和A2都能读取到最新的数据。 但是网络如果不可靠 A1和A2会变成两个子网 保证A和P 保证C和P redis属于AP 实际应该考虑的是数据同步测时延。 PACELC理论 BASE理论 微服务不适合ZK Eurek 阅读全文
posted @ 2022-05-04 22:58 灯塔下的守望者 阅读(55) 评论(0) 推荐(0)
摘要: 架构设计基本原则知识扩展 SOLID原则 前五种统一称为SOLID原则 SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期 引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。 当这些原则被一起应用时,它们使得一个程序员开发一个容 阅读全文
posted @ 2022-05-04 22:57 灯塔下的守望者 阅读(16) 评论(0) 推荐(0)
摘要: 依赖倒置原则(DIP) , , 依赖倒置原则 依赖倒置原则的定义 原始定义:高层模块不要依赖低层模块,两种都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。 核心思想是: 要面向接口编程,不要面向实现编程 。 依赖倒置原则的作用 1. 降低类之间的耦合性 2. 提高系统的稳定性 3. 减少并行开 阅读全文
posted @ 2022-05-04 22:56 灯塔下的守望者 阅读(49) 评论(0) 推荐(0)
摘要: 里式替换原则(LSP) , , 里氏替换原则 里氏替换原则的定义 里式替换阐述了继承的原则,可描述为:子类可以扩展父类的功能,但是不能改变父类原有的功能。 "https://zhuanlan.zhihu.com/p/268574641" 里式替换的作用 1. 里式替换是实现开闭原则的重要方式之一。 阅读全文
posted @ 2022-05-04 22:55 灯塔下的守望者 阅读(28) 评论(0) 推荐(0)
摘要: 接口隔离原则(ISP) , 接口隔离原则 接口隔离原则的定义 将接口拆分成更小更具体的接口,让接口中只包含用户感兴趣的方法。 接口隔离和单一职责都是为了高类聚、低耦合,体现了封装思想。两者区别: 1. 单一职责注重的是职责,接口隔离注重对接口依赖的隔离 2. 单一职责主要约束类,针对的是程序中的实现 阅读全文
posted @ 2022-05-04 22:54 灯塔下的守望者 阅读(30) 评论(0) 推荐(0)
摘要: 单一职责原则(SRP) , 单一职责原则 单一职责原则的定义 单一职责又称单一功能,职责指的是变化的原因,单一职责规定 一个类有且仅有一个引起他变化的原因 ,否则应该被拆分。 对象不应该承担太多职责,如果一个对象承担太多职责,至少有两个缺点: 1. 一个职责的变化可能削弱或者抑制其他的职责的能力。 阅读全文
posted @ 2022-05-04 22:53 灯塔下的守望者 阅读(19) 评论(0) 推荐(0)
摘要: 本文介绍了一个良好的可扩展性的架构需要遵守的原则。 <! more 架构设计基本原则 2022/04/16 校对完成 文章更新历史 2022/04/16 初稿。 开闭原则(OCP) , 开闭原则 开闭原则的定义 开闭原则:软件实体应该对扩展开放,对修改关闭 软件实体包含几个部分 1. 项目中划分出来 阅读全文
posted @ 2022-05-04 22:52 灯塔下的守望者 阅读(18) 评论(0) 推荐(0)
摘要: 服务链路追踪 什么是服务链路追踪 分布式微服务架构上是通过业务来划分服务的,通过Rest调用对外暴露一个接口,可能需要很多服务协同才能完成这个接口的功能。 如果链路上任何一个服务出现问题或者出现网络超时,都会导致接口调用失败。随着业务的扩张,接口调用会越来越复杂。 极端情况: 分布式链路追踪(Dis 阅读全文
posted @ 2022-05-04 22:51 灯塔下的守望者 阅读(106) 评论(0) 推荐(0)
摘要: 服务限流 什么是服务限流 限流就是为了提供稳定的服务,限制使用人数。 限流的目的是通过对并发请求进行限速,或者对一个时间窗口内的请求数量进行限速来保护系统。 一旦达到限制速率可以拒绝服务、排队或者等待。 多维度进行限流 请求到达服务接口时,可以采用多维度限流策略。 限流算法 1. 限流算法 计数器( 阅读全文
posted @ 2022-05-04 22:49 灯塔下的守望者 阅读(57) 评论(0) 推荐(0)
摘要: 服务熔断 什么是服务熔断 牺牲局部,保存整体的措施叫做熔断。 不采取熔断的后果,例子: 一旦下游服务C变的不可用,积压了大量请求,服务B的请求也会随之阻塞。 线程资源逐渐耗尽,使得服务B也变的不可用。紧接着,服务A也会变得不可用,整个服务链路被拖垮。 这种调用链路的连锁故障,叫做雪崩。 熔断机制 可 阅读全文
posted @ 2022-05-04 22:49 灯塔下的守望者 阅读(150) 评论(0) 推荐(0)
摘要: 服务降级 什么是服务降级 在服务器压力剧增的情况下,对一些服务和页面进行有策略的不处理或者换种简单的方式处理,从而释放服务器资源以保证核心服务正常运作或者高效运作。 当架构整体的负载超过了预设的上线阈值,或者即将到来的流量预计将会超过预设的阈值时,为了保证重要的基本服务能够正常运行,可以将一些不重要 阅读全文
posted @ 2022-05-04 22:48 灯塔下的守望者 阅读(62) 评论(0) 推荐(0)
摘要: 服务削峰 为什么要进行服务削峰 为了应对瞬间高并发的流量。 流量削峰的方案 1. 消息队列解决削峰 用消息队列缓存瞬时流量,把同步的直接调用转换为异步的间接推送,中间通过队列在一端承接瞬时流量洪峰,在另一端将消息平滑的推送出去。 消息队列中间件主要解决应用耦合,异步消息,流量削峰等问题。 常见的队列 阅读全文
posted @ 2022-05-04 22:47 灯塔下的守望者 阅读(54) 评论(0) 推荐(0)
摘要: 分布式服务治理 服务协调 分布式协调主要用来解决分布式环境中多个进程之间的同步,让他们有序的去访问临界资源,防止造成脏数据的后果。 分布式锁是分布式协调技术的核心内容。 分布式锁的实现方式 1. 基于缓存(redis)实现分布式锁 获取锁的时候,使用 加锁,并使用 命令为锁添加一个超时时间,超过该时 阅读全文
posted @ 2022-05-04 22:46 灯塔下的守望者 阅读(55) 评论(0) 推荐(0)
摘要: 分布式架构服务调用 服务调用 和传统单体架构相比,分布式多了一个远程服务之间的通信,不管soa还是微服务,本质都是对业务服务的提炼和复用。 远程服务之间的调用,才是实现分布式的关键因素。 实现方式 HTTP通信协议的框架 1. HttpURLConnection "https://docs.orac 阅读全文
posted @ 2022-05-04 22:45 灯塔下的守望者 阅读(56) 评论(0) 推荐(0)
摘要: 负载均衡 使用多台服务器共同分担计算任务,将网络请求与计算分配到集群可用的不同服务器节点上,从而达到高可用性以及良好的操作体验。 Client1、Client2、Client3通过负载均衡分配到不同的节点上。 负载均衡有硬件解决方案,也有软件解决方案。硬件解决方案有著名的F5,软件有LVS、HAPr 阅读全文
posted @ 2022-05-04 22:44 灯塔下的守望者 阅读(44) 评论(0) 推荐(0)
摘要: 容错性 容错就是IT系统对错误的包容能力。 容错处理保障了分布式系统环境下相应系统高可用和健壮性。 常见的案例是对于 问题的解决方案。 解决办法 1. 临时存放null值 2. 使用布隆过滤器 "https://baike.baidu.com/item/%E5%B8%83%E9%9A%86%E8%B 阅读全文
posted @ 2022-05-04 22:43 灯塔下的守望者 阅读(56) 评论(0) 推荐(0)
摘要: 高可用 高可用HA设计 高可用(Hign Availability)是系统架构中必须考虑的因素之一,指的是,经过设计来减少系统不能提供服务的时间。 系统高可用性的设计模式通常有三种:主备(master slave)、互备(active active)和集群(cluster)。 1. 主备模式 主备模 阅读全文
posted @ 2022-05-04 22:42 灯塔下的守望者 阅读(189) 评论(0) 推荐(0)
摘要: 本文阐述了分布式系统中常见的设计策略。 <! more 分布式系统设计策略 2022/03/01 校对完成 文章更新历史 2022/03/01 初稿。 分布式系统中需要解决的问题 1. 如何检测当前节点是否存活? 2. 如何保障高可用 3. 容错处理 4. 负载均衡 心跳检测 检测节点故障的通用手段 阅读全文
posted @ 2022-05-04 22:41 灯塔下的守望者 阅读(162) 评论(0) 推荐(0)
摘要: Lease机制 什么是Lease机制 Lease机制,就是租约机制,是一种在分布式协议中常用的协议,是维护分布式系统中数据一致性的常用工具。 Lease机制的特点: Lease是颁发者对一段时间内数据一致性的承诺 颁发者发出Lease后,不管是否被接受,只要Lease不过期,颁发者都会按照协议,遵守 阅读全文
posted @ 2022-05-04 22:40 灯塔下的守望者 阅读(119) 评论(0) 推荐(0)
摘要: Raft协议 什么是Raft协议 Paxos论证了一致性协议的可行性,但是不好懂,缺少必要的细节,工程实现难度高。广为人知的实现目前只zk的zab协议。 Paxos的出现为分布式的强一致性提供了很好的理论基础,但是paxos协议本身理解起来困难,实现复杂。 斯坦福大学的RamCloud项目中提出了易 阅读全文
posted @ 2022-05-04 22:38 灯塔下的守望者 阅读(123) 评论(0) 推荐(0)
摘要: Paxos协议 什么是Paxos Paxos协议说的是Paxos算法,Paxos算法是基于消息传递且具有高容错性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。 为描述Paxos算法,Lamport(Leslie Lamport)虚拟了一个叫做Paxos的 "希腊城邦" ,这个岛按照 阅读全文
posted @ 2022-05-04 22:37 灯塔下的守望者 阅读(206) 评论(0) 推荐(0)
摘要: Gossip协议 什么是Gossip协议 Gossip协议,也叫 Epidemic协议(流行病协议)。原本用于分布式数据库中节点同步数据使用,后来被广泛应用于数据库复制、信息扩散、集群成员身份确认、故障探测等。 Gossip协议利用随机方式将信息传播到整个网络,并在一定时间内,使系统内所有节点的数据 阅读全文
posted @ 2022-05-04 22:36 灯塔下的守望者 阅读(443) 评论(0) 推荐(0)
摘要: NWR协议 什么是NWR协议 NWR是一种在分布式存储系统中用于控制一致性级别的一种策略。在亚马逊的存储系统中,应用了NWR协议来控制一致性。 N:在分布式系统中,有多少分备份数据 W:代表一次成功的更新操作要求至少有W份写入成功 R:代表一次成功的读取操作至少有R份读取成功 原理 NWR值的不同组 阅读全文
posted @ 2022-05-04 22:35 灯塔下的守望者 阅读(139) 评论(0) 推荐(0)
摘要: 三阶段提交协议(3PC) 三阶段提交协议出现的背景:一致性协议中设计出了二阶段提交协议,但是2PC设计存在缺陷,于是有了三阶段提交协议。 三阶段提交协议 3PC,全称为“Three phase commit”,是2PC的改进版,将2PC的“事务提交过程”一分为二,并形成了canCommit、preC 阅读全文
posted @ 2022-05-04 22:34 灯塔下的守望者 阅读(136) 评论(0) 推荐(0)
摘要: 本文阐述了分布式系统中一些常见的协议以及原理分析。 <! more 分布式一致性协议 2022/03/01 校对完成 文章更新历史 2022/03/01 初稿。 两阶段提交协议(2PC) 两阶段提交协议 两阶段提交协议,简称2PC(2 prepare commit),是比较常见的解决分布式事务的方式 阅读全文
posted @ 2022-05-04 22:33 灯塔下的守望者 阅读(145) 评论(0) 推荐(0)
摘要: BASE定理 CAP不可能同时满足,但是分区容错性对于分布式系统来说,是必须的。如果能够同时满足CAP就好了,于是出现了BASE理论。 BASE:全称Basically Availability(基本可用),Soft State(软状态),和Eventually Consistency(最终一致性) 阅读全文
posted @ 2022-05-04 22:32 灯塔下的守望者 阅读(179) 评论(0) 推荐(0)
摘要: CAP定理 CAP定理介绍 CAP定理(CAP Theorem),又称布鲁尔定理(Brewer's throrem)。它指出,对一个分布式系统来说,不可能同时满足以下三点: | 选项 | 具体意义 | | | | | 一致性(Consistency) | 所有节点访问时都是同一份最新的数据副本 | 阅读全文
posted @ 2022-05-04 22:30 灯塔下的守望者 阅读(174) 评论(0) 推荐(0)
摘要: 分布式理论 数据一致性 什么是分布式数据一致性 分布性数一致性,指的是数据在多份副本中存储时,各副本中的数据是一致的。 副本一致性 分布式系统中,数据往往会有读个副本。多个副本就需要保证数据一致性。这就带来了同步的问题,因为网络阻塞等因素,我们几乎无法保证可以同时更新所有机器中的所有数据,就会有数据 阅读全文
posted @ 2022-05-04 22:29 灯塔下的守望者 阅读(134) 评论(0) 推荐(0)
摘要: 本文分析了分布式架构应用广泛的理论。 <! more 分布式架构理论 2022/04/6 校对完成 文章更新历史 2022/04/02 初稿。 分布式架构介绍 什么是分布式系统 分布式系统是一个硬件或者软件分布在不同的网络计算机上,彼此之间仅仅通过消息传递通信和协调的系统。 通俗的理解,分布式系统是 阅读全文
posted @ 2022-05-04 22:27 灯塔下的守望者 阅读(86) 评论(0) 推荐(0)
摘要: 基于Netty实现RPC框架 底层使用 作为网络通讯框架,要求使用 实现一个简单的 框架,消费者和提供者约定协议和接口,消费者远程调用提供者的服务。 1、创建一个接口,定义抽象方法,用于消费者和提供者之间的约定。 2、创建一个提供者,该类需要监听消费者的请求,并按照约定返回数据。 3、创建一个消费者 阅读全文
posted @ 2022-05-04 22:25 灯塔下的守望者 阅读(71) 评论(0) 推荐(0)
摘要: 本文阐述了自定义rpc框架需要知道理论,并探索了rpc框架需要解决的问题,并且进行了传统的RMI方式的实现。 <! more 自定义RPC框架之分布式架构网络通信理论 2022/03/14 校对完成 文章更新历史 2022/03/14 初稿。 2022/03/25 修复图片问题。 分布式架构网络通信 阅读全文
posted @ 2022-05-04 22:23 灯塔下的守望者 阅读(127) 评论(0) 推荐(0)
摘要: 本文对Netty源码进行了深入剖析,透过Netty源码来理解Netty框架背后的原理。 <! more Nety源码剖析 下载netty源码 "https://github.com/netty/netty" 导入netty源码 直接IDEA导入Maven项目选择 即可。 新建demo项目 在exam 阅读全文
posted @ 2022-05-04 22:21 灯塔下的守望者 阅读(168) 评论(0) 推荐(0)
摘要: 本文阐述了Netty中常见的粘包和拆包问题,并深入分析了常用的解决方案。 <! more Netty高级进阶之Netty中的粘包和拆包的解决方案 粘包和拆包简介 粘包和拆包是TCP网络编程中不可避免的,无论是服务端和客户端,当读取或发送消息时,都需要考虑TCP底层的粘包/拆包机制。 TCP是个流协议 阅读全文
posted @ 2022-05-04 22:20 灯塔下的守望者 阅读(337) 评论(0) 推荐(0)
摘要: 本通过实战演练,学习了如何基于Netty的websocket开发一个网页聊天室。 <! more Netty高级进阶之基于Netty的Websocket开发网页聊天室 Webdocket简介 Websockt是一种在单个TCP连接上进行全双工通信的协议。 Websocket使客户端和服务端的数据交互 阅读全文
posted @ 2022-05-04 22:19 灯塔下的守望者 阅读(149) 评论(0) 推荐(0)
摘要: 本通过实战演练,学习了如何基于Netty开发一个HTTP服务器。 <! more Netty高级进阶之基于Netty的HTTP服务器开发 介绍 Netty的HTTP协议栈可靠性高,性能优异。相对于传统的Tomcat、Jetty等服务器,它更加轻量级和小巧,灵活性和定制型也更好。 功能需求 1. Ne 阅读全文
posted @ 2022-05-04 22:17 灯塔下的守望者 阅读(46) 评论(0) 推荐(0)
摘要: 本文通过实战演练,学习了如何使用Netty开发一个群聊天室。 <! more Netty高级进阶之基于Netty的群聊天室案例 案例 要求 1. 编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯 2. 实现多人群聊 3. 服务器端:可以监测用户上线,离线,并实现消息转发功能 4 阅读全文
posted @ 2022-05-04 22:16 灯塔下的守望者 阅读(75) 评论(0) 推荐(0)
摘要: 本文介绍了Netty编解码器的继承体系、常用API以及实际应用。 <! more netty高级 Netty编解码器 Java的编解码 1. 编码(Encode)称为序列化,它将对象序列为字节数组,用于网络传输、数据持久化或者其他用途。 2. 解码(Decode)称为反序列化,它将从网络、磁盘等读取 阅读全文
posted @ 2022-05-04 22:15 灯塔下的守望者 阅读(99) 评论(0) 推荐(0)
摘要: 本文通过一个Netty入门案例来阐述Netty的异步模型。 <! more netty入门案例 Netty是由JBOSS提供的一个开源框架,它的Maven坐标如下: Netty服务端编写 服务端实现步骤 1. 创建bossGroup线程组: 处理网络事件 连接事件 2. 创建workerGroup线 阅读全文
posted @ 2022-05-04 22:14 灯塔下的守望者 阅读(39) 评论(0) 推荐(0)
摘要: 本文介绍了Netty的核心API以及他们的使用。 <! more Netty核心API介绍 ChannelHandler及其实现类 API关系如下: 如果图片无法显示,请看这里 Netty开发中需要定义一个Handler类去实现ChannelHandler接口或其子类或其实现类,然后通过重写相关方法 阅读全文
posted @ 2022-05-04 22:13 灯塔下的守望者 阅读(34) 评论(0) 推荐(0)
摘要: Netty线程模型 Netty的设计主要基于主从Reactor的多线程模式,并做了一定的改进。 1. 简单版Netty模型 BossGroup线程维护Selector,ServerSocketChannel注册到Selector上,只关注连接请求处理事件(主Reactor) 当接收到来自客户端的连接 阅读全文
posted @ 2022-05-04 22:11 灯塔下的守望者 阅读(60) 评论(0) 推荐(0)
摘要: Reactor模型 通过一个或者多个输入传递给服务器的模式,服务端程序处理传入的多个请求,并将他们同步分派到处理线程,Reactor模式也叫Dispatch模式。 Reactor模式使用IO复用监听事件,分发给某个线程(进程),这是网络服务器高并发处理的关键。 1. 单Reactor单线程 Sele 阅读全文
posted @ 2022-05-04 22:10 灯塔下的守望者 阅读(111) 评论(0) 推荐(0)
摘要: 线程模型 线程模型基本介绍 不同的线程模型对性能影响很大,目前存在的线程模型有: 传统阻塞I/O服务模型 Reactor模型 根据Reactor的数量和处理资源池线程的数量不同,可以分为3种 单Reactor单线程 单Reactor多线程 多Reactor多线程 传统阻塞I/O服务模型 采用阻塞I/ 阅读全文
posted @ 2022-05-04 22:09 灯塔下的守望者 阅读(35) 评论(0) 推荐(0)
摘要: Netty提供异步的、基于事件驱动的网络应用程序框架,用于快速开发高性能、高可靠性的网络IO程序。 <! more netty核心原理 netty介绍 官网: "https://netty.io/" 原生NIO存在的问题 1. NIO类库和API繁杂,使用麻烦。需要熟练掌握Selector、Serv 阅读全文
posted @ 2022-05-04 22:07 灯塔下的守望者 阅读(71) 评论(0) 推荐(0)
摘要: 选择器(Selector) 基本介绍 用一个线程,处理多个客户端连接,就会用到NIO的Selector(选择器)。 Selector能够检测多个注册的服务端通道上是否有事件发生。如果有事件发生,便获取事件,然后针对每个事件进行响应的处理。 这样可以用单线程去管理多个通道,也就是管理多个连接和请求。 阅读全文
posted @ 2022-05-04 15:20 灯塔下的守望者 阅读(50) 评论(0) 推荐(0)
摘要: 通道(Channel) 基本介绍 NIO中所有的IO都是从通道(Channel)开始的。NIO的通道类似于流,但是有区别: 1. 通道可读可写,流一般是单向的(只能读或者写,所以之前socket的demo里面分别创建一个输入流和输出流)。 2. 通道可以异步读写。 3. 通道总是基于缓冲区Buffe 阅读全文
posted @ 2022-05-04 15:18 灯塔下的守望者 阅读(101) 评论(0) 推荐(0)
摘要: 缓冲区(Buffer) 基本介绍 缓冲区(Buffer):缓冲区本质上是一个可读可写的内存块。 可以理解成一个数组,该对象提供了一组方法,可以轻松的操作内存块。 缓冲区内置了一些机制,能够跟踪和记录缓冲区的状态变化情况。 Channel提供从网络读取数据的通道,但是读取或者写入数据都必须经过Buff 阅读全文
posted @ 2022-05-04 15:15 灯塔下的守望者 阅读(126) 评论(0) 推荐(0)
摘要: nio编程 NIO介绍 Java NIO,全称为 ,是指JDK提供得到新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(New IO),是同步非阻塞的。 1. NIO有三大核心部分,Channel(通道),Buffer(缓冲区),Selector(选择器)。 阅读全文
posted @ 2022-05-04 15:11 灯塔下的守望者 阅读(78) 评论(0) 推荐(0)
摘要: 本文阐述了socket编程、IO网络模型,以及各种IO模型的适用场景。 RPC架构设计 文章更新历史 2022/03/01 初稿。 2022/05/04 修改相关描述。 socket socket网络编程 socket概述 socket套接字是两台主机之间逻辑连接的端点。 TCP/IP协议是传输层协 阅读全文
posted @ 2022-05-04 15:01 灯塔下的守望者 阅读(161) 评论(0) 推荐(0)