ITPub博客

首页 > 数据库 > 数据库开发技术 > 架构师的视角:积累沉淀,知行合一

架构师的视角:积累沉淀,知行合一

原创 数据库开发技术 作者:greencoatman 时间:2024-01-28 19:52:33 0 删除 编辑

远程服务调用

  1. 核心概念:

  • 数据表示:如何在不同系统间标准化数据格式。

  • 数据传递:确保数据可靠、高效地在客户端和服务器间传输。

  • 方法表示:如何唯一标识并调用远程方法。

  • 模拟进程间方法调用:RPC旨在使远程服务器上的函数调用感觉就像本地函数调用一样,隐藏网络通信的复杂性。

  • 基本问题:

  • 发展方向:

    • 面向对象发展:支持复杂的数据类型和对象。

    • 性能发展:优化网络通信和数据处理的效率。

    • 简化发展:简化使用和部署过程,降低学习和使用的门槛。

  • 框架多样性:不同的RPC框架针对这些发展方向有不同的实现和优化,因此市场上存在多种RPC框架。

  • RESTful 服务

    1. 核心概念:

    • 面向资源编程:将问题空间中的数据对象视为核心,关注于资源的状态和状态转换。

    • 网络适应性:REST是基于网络的分布式系统的理想交互方式,适应当代网络主流的交互方式。

  • 特点:

    • 无状态:每个请求包含所有必要信息,服务器不需要保存会话状态。

    • 统一接口:标准化的方法(如GET、POST、PUT、DELETE)来操作资源。

    • 可缓存:响应可以被缓存以提高性能。

  • 适用场景:REST适用于需要大规模分布式系统,特别是需要广泛兼容性和可扩展性的Web服务。

  • 对于 REST,我的第一印象就是服务端无状态,有利于水平扩展,但更多的是停留于具体的技术层面。过程如果有意义的话,一定会产生一个结果,这个结果就是资源的状态发生了转移(幂等前提下的重试不算),但是过程的细节更多,所以抽象程度无法做到向面向资源看齐。

    在一个过程中,我们可以对有关联关系的不同层次与结构的资源同时进行处理,但是面向资源却不容易做到。我能想到的例子是转账操作,同时操作两个资源(即账户),而且要保证事务的 ACID。

    在转账的过程中要处理很多异常情况,尤其是涉及到多方交易的时候,所以写这样的交易就非常复杂,容易出错。如果用面向资源的角度去考察,可以看成是对三个资源的操作:转出账户、转入账户以及事务。

    这里把事务列为单独的资源,是为了呼应上面提到的一个资源状态变化引起的关联资源的变化。如果转账操作利用 TCC(Try-Confirm-Cancel)的方法,我觉得就是一种更偏向于面向资源的做法,每次只改变一个资源的状态。如果某个关联资源的状态改变失败,就对它发起一个逆操作(比如冲正)。

    这样可以做到很高的并发,在做到保序性的前提下,做差错处理也很简单。相当于把一个复杂操作分解成了多个简单操作,这样开发起来也很快,很容易复用。有点类似 CISC 和 RISC 指令集的关系。

    事务处理

    本地事务、全局事务、共享事务以及分布式事务是数据库事务管理的不同类型,它们各自应对特定的应用场景和需求。以下是对这些事务类型的另一种表述方式:

    本地事务

    • 概念:本地事务仅涉及单一数据库系统内的操作,不需要全局事务管理器的介入。

    • ARIES理论:该理论采用Write-Ahead Logging(预写日志)方法,确保了日志记录的效率和严谨性。通过分析、重做和回滚阶段,实施了STEAL和NO-FORCE策略,从而优化了故障恢复过程。

    • 隔离性与锁:不同的隔离级别(如幻读、脏读等)实际上是锁在不同阶段的应用结果,锁是维持隔离性的关键。

    全局事务

    • 定义:适用于单个服务访问多个数据源的场景。

    • 实现:通常使用两段式或三段式提交模式,以确保ACID的强一致性。

    • 局限性:这种追求强一致性的目标使得全局事务在复杂度、吞吐量和使用效率方面存在挑战。

    共享事务

    • 描述:指多个服务共享同一个数据源的情况。

    • 现状:尽管共享事务在现代应用中较少见,但理解其概念有助于深入了解其他事务类型。

    分布式事务

    • 主流趋势:现代系统设计趋向于采用强调BASE(基本可用、软状态、最终一致性)的弱一致性事务模型,即分布式事务。

    • 特点:适用于多个服务同时访问多个数据源的场景。

    • 设计挑战:在分布式系统中,不存在完美的事务解决方案。设计者必须根据具体场景,选择恰当的解决方案来平衡一致性和可用性。


    透明多级分流系统

    客户端缓存、域名解析、传输链路、内容分发网络(CDN)、负载均衡和服务端缓存是网络系统中的关键技术组件,它们各自扮演着不同但重要的角色。下面是对这些概念的重新表述:

    客户端缓存

    • 类型:包括状态缓存、强制缓存和协商缓存。

    • 作用:通过减少重复的数据请求,节省网络带宽,是提高网络应用并发能力的基本策略。

    域名解析

    • 功能:将用户友好的域名地址转换为计算机能够理解和处理的IP地址。

    • 重要性:对于基于互联网的系统来说,域名解析是一个必不可少的步骤。

    传输链路

    • 关联:与客户端紧密相连的传输优化机制。

    • 重点:不仅仅是内容的传输,还包括高效和无状态的传输目标。

    • 进步:HTTP/2引入了多路复用和头压缩等功能,显著提高了传输效率。

    内容分发网络(CDN)

    • 工作流程:包括路由解析、内容分发、负载均衡和支持的应用内容。

    • 优势:提高性能、增强安全防御和资源管理,且对开发者来说非常透明。

    负载均衡

    • 职责:决定处理用户请求的服务并进行请求转发。

    • 应用:在集群部署的环境中,负载均衡器作为技术组件,统一处理向多台机器的请求调度。

    服务端缓存

    • 目的:减少重复资源请求,降低服务器负担,作为分流手段的一部分。

    • 重要性:是提升服务处理能力和效率的关键技术。


    安全架构

    在网络安全和系统设计中,认证、授权、凭证、保密、传输和验证是六个关键方面,它们各自解决不同的安全问题。以下是对这些概念的另一种表述:

    认证

    • 目的:确定用户的真实身份。

    • 方法:包括基于通讯信道、通讯协议和通讯内容的认证方式。

    授权

    • 问题:决定用户可以访问和操作哪些资源。

    • 解决方案:使用OAuth 2.0解决跨系统的授权问题;采用基于角色的访问控制(RBAC)来管理授权的细节。

    凭证

    • 作用:确保用户承诺的真实性和不可否认性。

    • 实现:Cookie-Session机制和无状态的JWT,各适合于不同的应用场景。

    保密

    • 关注点:保护敏感数据不被未授权访问或滥用。

    • 考虑因素:实现更高级别的安全需要更多的资源和努力。

    传输

    • 目标:确保网络传输的数据安全,防止被第三方窃听、篡改或冒充。

    • 技术:包括哈希摘要、对称和非对称加密,以及数字证书和传输安全层(TLS)等。

    验证

    • 重要性:确保提交的数据不会影响系统的稳定性和数据的一致性。

    • 平衡:过少的验证可能影响数据质量,而过多的验证可能导致代码冗余甚至产生不良影响。

    原文作者:二进制跳动;如有侵权,请联系管理员删除。

    请登录后发表评论 登录
    全部评论

    注册时间:2022-07-08

    • 博文量
      312
    • 访问量
      141258