
分布式软件架构
分布式系统系列文章
范桂飓
若抽象才是美之定义,追求明确性的我们是否象征着丑陋。
-
原创 RC4 加密算法
目录文章目录目录RC4RC4 的算法原理基本概念加密原理C 程序实现示例RC4RC4 于 1987 年提出,和 DES 算法一样,是一种对称加密算法。但不同于 DES 的是,RC4 不是对明文进行分组处理,而是以字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。RC4 算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为 1-256Byte(8-2048Bit),在如今技术支持的前提下,当密钥长度为 128Bit 时,暴力搜索密钥就不可行了。所以,2021-03-01 14:47:5817
0
-
原创 MD5 加密算法
目录文章目录目录消息摘要算法MD5消息摘要算法摘要算法,又称为哈希算法,表示:输入任意长度的数据,会输出固定长度的数据,主要用于验证数据的完整性。消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,所以不存在密钥的管理与分发问题,适合于分布式网络上使用。但由于其加密计算的工作量相当巨大(加密数据量大的数据时间会非常长),所以以前的这种算法通常只用于数据量有限的情况下的加密。消息摘要算法分为 3 类:MD(Message Digest):消息摘要。SHA(Secure H2021-03-01 14:14:3716
0
-
原创 互联网协议 — NTP 时间同步协议
目录文章目录目录数字化时间时间定义的类型服务器时间的类型常见的时间操作NTPNTP 的实现原理NTP 的处理流程Chrony安装与配置chronyc CLI使用 Chrony 作为 NTP ServerLinux NTPNTP ServerNTP Client数字化时间时间定义的类型UTC(Universal Time Coordinated,国际标准时间):地球分为二十四时区,每个时区都有自己的本地时间。GMT(Greenwich Mean Time,格林威治标准时间):指位于英国伦敦郊区的皇2021-01-31 00:57:218027
16
-
转载 集群的定义以及类别定义
目录文章目录目录集群定义集群类型scale on:向上扩展scale out:横向扩展LB:Load Balancing:负载均衡集群HA:High Availability 高可用集群HP:Hight Performance 高性能三种集群之间的区别集群定义集群(Cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其...2019-01-03 11:49:50598
0
-
原创 AK/SK 身份认证系统
目录文章目录目录基本认证Token 认证AK/SK 认证基本认证基本认证,即:用户输入账号、密码提交给服务端进行身份认证。Token 认证Token 认证,即:用户输入账号、密码通过基本认证后,服务端认颁发授权 Token(包含用户 ID 等基本信息)用作认证令牌,后续客户端发出的任何请求都要携带 Token 访问服务端,服务端根据 Token 判断请求是否合法。Token 认证的缺点是,如果报文在中途被劫持,Token 就会泄露,这时(Token 的有效期内)黑客就可以构造任意的请求了。AK2020-12-02 15:35:20471
0
-
原创 权限管理系统的分权分域设计
目录文章目录目录权限管理系统权限的抽象分权分域权限访问控制模型UGO(User、Group、Other)ACL(访问控制列表)DAC(自主访问控制)MAC(强制访问控制)RBAC(基于角色的访问控制)ABAC(基于属性的权限验证)权限管理系统ToB 产品的权限管理系统是一个非常重要的组成部分,没有权限管理的系统仿佛一个没有门的房子,任何人都可以随意查看甚至调整,对系统的安全性存在非常大的隐患。权限管理,即:根据系统设置的安全规则(Rule)或策略(Policy),用户可以且只能访问自己被授权的资源。2020-12-02 09:01:32858
0
-
转载 软件版本定义
目录文章目录目录版本定义alphabetarcga、release、stable、final版本定义alphaAlpha(α)是希腊字母的第一个,表示最早的版本,内部测试版,一般不向外部发布,Bug 较多,功能也不全,一般只有测试人员使用。betaBeta(β)是希腊字母的第二个,公开测试版,主要由 “粉丝用户” 测试,该版本仍然存在很多 Bug,但比 Alpha 版本稳定一些。这个阶段版本还会不断增加新功能。分为 beta1、beta2 等,直到逐渐稳定下来进入 RC 版本。rcRC(R2020-10-26 12:02:55196
2
-
原创 软件架构的本质
目录文章目录目录架构师到底是做什么的?什么是软件架构?软件架构的本质架构的过程,即:建模的过程业务建模系统建模抽象能力抽象纵向层次抽象横向模块抽象的评估原则抽象的方法论参考文档架构师到底是做什么的?什么是软件架构?在百度百科上的定义:架构,又名软件架构,是有关软件整体结构与组件的抽象描述,⽤于指导⼤型软件系统各个方面的设计。在 Wikipedia 上的定义:Architecture is both the process and the product of planning, des2020-09-20 15:11:41580
0
-
原创 分布式系统(Distributed Systems)架构基础理论
目录文章目录目录CAP 定理BASE 理论CAP 定理CAP 定理是分布式系统设计中最基础,也是最为关键的理论。它指出,分布式数据存储不可能同时满足以下三个条件。一致性(Consistency):每次读取要么获得最近写入的数据,要么获得一个错误。可用性(Availability):每次请求都能获得一个(非错误)响应,但不保证返回的是最新写入的数据。分区容忍(Partition tolerance):尽管任意数量的消息被节点间的网络丢失(或延迟),系统仍继续运行。也就是说,CAP 定理表明,2020-09-20 14:22:07275
0
-
原创 YAML 基本语法
目录文章目录目录YAMLBooleanString 对象List & Hash 对象YAML以 --- 开始,以 ... 结尾。同一级别的成员(e.g. List 元素)使用 - 来辨识。注释以 # 开头。Booleanboolean 值的写法没有严格限制。create_key: yesneeds_agent: noknows_oop: Truelikes_emacs: TRUEuses_cvs: falseString 对象使用 | 换行、> 忽略换行。i2020-09-12 18:28:37364
0
-
原创 API 设计规范
目录文章目录目录API 设计规范Design-First(设计优先)Code-First(编码优先)API 设计规范通常,设计 API 规范有两个方向,Design-First(设计优先) 或 Code-First(编码优先)。Design-First(设计优先)即优先设计 API 规范,设计完成后再着手进行代码开发工作。推荐使用 OpenAPI-GUI v3 来设计 API 描述文件。采用 Design-First 就意味着,将设计 API 路由、参数等工作提前,后续整个软件开发的流程都需要围2020-09-12 18:15:551011
0
-
原创 Swagger & OpenAPI Specification
目录文章目录目录Swagger 和 OpenAPIAPI 规范Design-First(设计优先)Code-First(编码优先)参考文档Swagger 和 OpenAPISwagger Specification 是一种 API Specification(API 规范),2015 年,SmartBear Software 将 Swagger Specification 捐赠给 Linux Foundation,并改称为 OpenAPI Specification,简称(OAS)。SmartBear2020-09-09 20:44:09679
0
-
原创 Web、HTTP Server、API Service、Application
目录文章目录目录WebHTTP ServerAPI ServiceApplicationWebWeb(World Wide Web,全球广域网),也称:万维网,它是一种基于 HTML(超文本标记语言)和 HTTP 协议的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在 Internet 之上的一种网络服务,为浏览者(浏览器)在 Internet 上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将 Internet 上的信息节点组织成一个互为关联的网状结构。一个典型的2020-09-08 23:58:56906
2
-
原创 Keepalived + LVS-NAT 实现高可用四层 TCP/UDP 负载均衡器
目录文章目录目录安装 LVS安装 LVS2019-01-04 19:55:101421
1
-
原创 LVS 四层 TCP/UDP 负载均衡器
目录文章目录目录LVSLVS 应用结构LVS 提供的三种模式LVS-NATLVS-TUNLVS_DRLVS 负载均衡算法静态负载均衡动态负载均衡LVS-ipvsadm 指令集查看添加修改删除参考文章LVS针对高可伸缩、高可用网络服务的需求,我们给出了基于 IP 层和基于内容请求分发的负载平衡调度解决方法,并在 Linux 内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服...2019-01-04 15:11:372476
0
-
原创 HAProxy & Keepalived L4-L7 高可用负载均衡解决方案
目录目录HAProxy 负载均衡器应用特性性能优势会话保持健康检查配置文件负载均衡策略ACL 规则Web 监控平台Keepalived 虚拟路由器核心组件VRRP 虚拟路由冗余协议VRRP 的工作机制高可用原理高可用模式健康检查原理HAProxy & Keepalived主从模式的 Keepalived 配置双活模式的 Keepal...2018-07-29 01:54:451720
0
-
原创 经典软件架构指标
目录文章目录目录性能可靠性可用性弹性可信赖性可伸缩性安全性互操作性可调整性可部署性可测试性简单性可移植性易用性可扩展性抗脆弱性可升级性合规性成本可存档性可审核性 / 可跟踪性性能性能是指响应能力:响应特定事件所需的时间,或给定时间间隔内处理的事件数。性能具有以下指标:延迟 :表示获得响应之前经过的时间间隔。吞吐量:是指在固定时间间隔内获得的响应数。可用容量:以上度量的结合体。可调度的利用率:利用率是资源繁忙时间的百分比,而可调度的利用率是满足一定时间要求的最大利用率。数据丢失:如果使用缓存2020-08-30 22:49:251068
2
-
原创 经典软件架构模式
目录文章目录目录软件架构模式分层架构模式(Layered Architecture Pattern)基于事件的模式(Event-based Pattern)微内核模式(Microkernel Pattern)微服务模式(Microservices Pattern)基于空间的架构模式(Space-based Pattern)客户端-服务器模式(Client-server pattern)主从模式(Master-slave pattern)管道-过滤器模式(Pipe-filter pattern)代理模式(B2020-08-30 22:20:26941
0
-
原创 软件质量黄金法则
目录文章目录目录优秀软件的指标1. Upstream Fixed 原则2. KISS(Keep it simple and stupid)原则认知负荷的产生影响协同成本的因素降低软件的复杂度3. 功能模块高内聚原则4. 单元测试高覆盖率原则5. Code Review 原则优秀软件的指标正确性可读性鲁棒性可测试性可扩展性可移植性性能1. Upstream Fixed 原则宁可在 Upstream (上游,接近问题的根源层面) 推送补丁,也不要在 Downstream (下游,远离问2020-08-30 14:49:435405
15
-
原创 性能测试方法论
目录文章目录目录基准的确定测试模型设计网络性能的关键参数基准的确定性能测试的第一步就是根据当前的测试环境确定基准。不然如何判定性能的好坏?如何判定优化的方向?所以,基准测试是非常重要的第一步。性能参数跟测试环境的方方面面都有关联,为了追求某一项性能很可能会为此放弃其他的性能项目,所以即便已经通过官方渠道掌握了一个业界水准的性能数据,也不能作为当前环境的判断依据。所以,不应该将任何外部公开的性能指标作为基准,而是应该以自己的测试环境为准。以运行在虚拟机上的 HAProxy 性能测试为例,首先进行的基2020-08-29 13:30:36940
0
-
原创 RESTful API 设计规范
目录文章目录目录RESTRESTful APIRESTful API 设规范REST早古时期,软件和网络是两个不同的领域,前者围绕着单机环境展开,而后者则研究系统之间的通信。随着互联网的兴起,使得这两个领域开始融合,首当其冲的就是基于 HTTP 协议的 Web 服务,越来越多的人开始意识到,“网站” 即是 “软件”。其中的先驱者就是 Tim Berners-Lee(万维网的发明者,万维网联盟负责人)和 Roy Thomas Fielding(1996 HTTP/1.0、1999 HTTP/1.1 的2020-07-26 14:05:543503
0
-
原创 高可用集群架构 — N+1 模型
目录文章目录目录前言高可用集群架构高可用集群模型模型N+1 模型N+1 模型关键技术单进程多定时器的设计冗余节点快速切换技术服务器池多级检测机制前言本地是对论文《服务器池的高可用 N+1 冗余结构模型》的学习记录,详细请浏览论文。高可用集群架构一主多备架构:同一时间只有一个 Master 节点提供服务,多个 Slave 备份节点用于替换。多活架构:同一时间有多个处于 ACTIVE 状态的节点提供服务,通常结合负载均衡策略使用。高可用集群模型模型N+1 模型:有 N 个在工作,1 个空闲2020-07-02 13:22:301066
0
-
原创 主备 HA 系统中的脑裂问题
目录文章目录目录脑裂(Split Brain)脑裂的原因防止脑裂的办法Fence 技术Keepalived vs Pacemaker参考文档脑裂(Split Brain)在 HA(高可用)系统中,当联系主、从节点之间的 “心跳线路” 断开时,本来作为一个整体、动作协调的 HA 系统,就分裂成为两个独立的节点,即两者都认为自己是 Master。导致两个 “Master” 本能的争抢资源、互相冲突,继而导致严重的后果。对于无状态的 HA 系统而言,无所谓脑裂的存在,但对有状态的 HA 系统而言,必须要严2020-06-18 00:28:491846
0
-
原创 分布式任务队列 Celery —— 深入 Task
目录目录前文列表前言Task 的实例化任务的名字任务的绑定任务的重试任务的请求上下文任务的继承前文列表分布式任务队列 Celery 分布式任务队列 Celery —— 详解工作流 分布式任务队列 Celery —— 应用基础前言紧接前文,继续深入了解 Celery Tasks。示例代码依旧在前文的基础上进行修改。Tasks...2018-02-09 13:33:292876
0
-
原创 分布式任务队列 Celery —— 应用基础
目录目录前文列表前言Celery 的周期定时任务Celery 的同步调用Celery 结果储存Celery 的监控Celery 的调试前文列表分布式任务队列 Celery 分布式任务队列 Celery —— 详解工作流前言紧接前文,继续看 Celery 应用基础,下列样例依旧从前文 proj 中进行修改。Celery 的周期(定时)任务2018-01-28 17:54:401275
0
-
原创 分布式任务队列 Celery —— 详解工作流
目录目录前文列表前言任务签名 signature偏函数回调函数Celery 工作流group 任务组chain 任务链chord 复合任务chunks 任务块mapstarmap 任务映射前文列表分布式任务队列 Celery前言Celery 的工作流具有非常浓厚的函数式编程风格,在理解工作流之前,我们需要对「签名」、「偏函数」以及「2018-01-15 23:34:133753
0
-
原创 分布式任务队列 Celery
目录目录前言简介Celery 的应用场景架构组成Celery 应用基础前言分布式任务队列 Celery,Python 开发者必备技能,结合之前的 RabbitMQ 系列,深入梳理一下 Celery 的知识点。当然,这也将会是一个系列的文章。快速入门分布式消息队列之 RabbitMQ(1) 快速入门分布式消息队列之 RabbitMQ(2) 快速入门分2018-01-13 17:33:582206
0
-
原创 分布式消息队列 Celery 的最佳实践
目录目录不使用数据库作为 Broker不要过分关注任务结果实现优先级任务应用 Worker 并发池的动态扩展应用任务预取数保持任务的幂等性应用任务超时限制合理应用 ack_late 机制传递 ORM 对象的唯一标识预防内存泄漏合理安排定时任务的调度计划启用任务监控不使用数据库作为 BrokerBroker 的选择大致有消息队列和数据库两种,这...2018-01-05 13:59:086134
0
-
原创 快速入门分布式消息队列之 RabbitMQ(3)
目录目录前文列表前言通道 Channel一个基本的生产者消费者模式消费者生产者运行结果应用预取计数应用 ACK 机制最后前文列表快速入门分布式消息队列之 RabbitMQ(1) 快速入门分布式消息队列之 RabbitMQ(2)前言在前文列表中,分别介绍了 RabbitMQ 的对象概念及其关键特性,本篇将通过编程的方式来回溯这些知识点,从实践应用的角度继续深入 RabbitMQ。安2017-12-10 21:49:22977
0
-
原创 快速入门分布式消息队列之 RabbitMQ(2)
目录目录前文列表RabbitMQ 的特性Message Acknowledgment 消息应答Prefetch Count 预取数RPC 远程过程调用vhost 虚拟主机插件系统最后前文列表快速入门分布式消息队列之 RabbitMQ(1)RabbitMQ 的特性紧接上文,继续来看 RabbitMQ 都有哪些值得我们关注的特性。Message Acknowledgment 消息应答假设2017-12-05 00:21:56937
0
-
原创 快速入门分布式消息队列之 RabbitMQ(1)
目录目录前言简介安装 RabbitMQ基本对象概念Message 消息Producer 生产者Consumer 消费者Queue 队列Exchange 交换机Binding 绑定Binding Key 绑定键Routing Key 路由键Exchange Type 交换机类型最后前言在《消息队列在分布式系统中的应用》一文中我们介绍了消息队列与分布式系统两者间的密切关系以及消2017-12-03 23:06:291174
0
-
原创 消息队列在分布式系统中的应用
目录目录消息队列消息队列的种类消息队列消息队列(Message Queue,MQ)是大型分布式系统中不可或缺的重要组成部分,主要解决了 应用解耦,异步处理,流量削峰,消息通讯 等问题,支撑实现分布式系统的高并发,高性能,高可用,可伸缩和最终一致性。目前在生产环境中使用较多的消息队列有 ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ 等。消息队列一般会2017-11-27 10:16:231193
0