热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

复习笔记存储

文章目录消息队列和RPCRPC:分布式服务分布式系统面试题CAP,BASE理论-最终一致性分布式事务分布式锁负载均衡消息队列和RPC消息队列的三个核心:解耦


文章目录

        • 消息队列和RPC
        • RPC:分布式服务
        • 分布式系统面试题
          • CAP,BASE理论-最终一致性
          • 分布式事务
          • 分布式锁
          • 负载均衡


消息队列和RPC

消息队列的三个核心:解耦,异步,削峰


  1. 解耦:添加一个MQ,生产者只需往MQ里添加消息,多个消费者只需从MQ里面取消息.[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaZvaAgC-1583678660119)(./image/mq-jiegou.jpg)]
  2. 异步:将MQ分成多个子MQ,服务各自的消费者,生产者产生的消息放入MQ中即可返回[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8oTCNgst-1583678660126)(./image/async.jpg)]
  3. 削峰:在峰值时刻,生产者产生的消息会被积压在MQ中,在空闲时刻,这些挤压的消息会被处理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgwbnDxC-1583678660130)(./image/mq-xuefeng.jpg)]

MQ的缺点:


  1. 系统可用性降低,系统引入的外部依赖越多,越容易挂掉.
  2. 系统复杂度提高
  3. 一致性问题

常见的MQ:kafka,activema,rabbitmq,rocketmq


RPC:分布式服务


  1. 概念:远程过程调用,分布式系统的常用通信方法,允许程序调用另一个地址的空间(通常是共享网络的另一台机器)的过程或者函数,除rpc外,多系统数据交互方案:分布式消息队列,HTTP请求调用,数据库,分布式缓存
  2. 目的:构建分布式应用,提供强大的远程调用能力时不损失本地调用的语义简洁性
  3. 解决的问题:Call ID映射(每个函数都不必须有自己的id),序列化和反序列化,网络传输(大部分rpc框架使用TCP协议)
  4. 高可用rpc框架需要考虑的问题:
    1. 分布式架构会有多个实例,因此需要解决如何获取实例的问题,因此需要服务注册中心
    2. 如何选择实例?负载均衡
    3. 注册中心查询列表效率低,加缓存
    4. 服务器不能调用完等待服务器返回数据,异步调用
    5. 服务端接口修改了,老的接口还有人在用,版本控制
    6. 服务端不能每次接收到一个请求就启动一个线程,线程池
  5. 理论结构模型
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hPjHIWZO-1583678660133)(./image/rpc.png)]

分布式系统面试题


CAP,BASE理论-最终一致性

  • CAP理论,web服务器无法同时满足以下三个属性:
    1. 一致性,consistency,客户端知道一系列操作都会同时生效
    2. 可用性,availability,每个操作都必须以可预期的响应结束
    3. 分区容错性,partition tolerance,即使单个组件无法可用,操作依然可以完成
  • BASE理论,高可用性,对CAP的一致性和可用性的权衡,理论的核心思想:我们无法做到强一致,但是每个应用都可以根据自身业务特点,采用适当的方法使系统达到最终一致性.
    1. 基本可用,basically alvailable
    2. 软状态,soft state
    3. 最终一致性,eventually consistent

分布式事务

  • 两阶段提交,2PC
  • TCC,采用补偿机制,核心思想:针对每个操作,都要注册一个与其对应的确认和补偿即撤销操作
  • 本地消息表,异步确保

分布式锁

  • 分布式锁具备的条件:

    • 在分布式系统下,一个方法在同一个时间只能被一个机器的一个线程执行
    • 高可用的获取锁和释放锁
    • 高性能的获取锁和释放锁
    • 具备可重入性
    • 具备锁失效机制,防止死锁
    • 具备非阻塞锁机制,即没有获取锁将直接返回获取失败
  • 分布式锁实现:

    • 基于数据库实现分布式锁
    • 基于缓存实现分布式锁,i.e.,redis
    • 基于zookeeper实现分布式锁

负载均衡

  • 背景:性能的瓶颈在单台服务器上
  • 一致性哈希:先建立很多虚拟节点,形成一个环,把真实的服务器放在环节点上,在执行hash(uuid)时,除数为虚拟节点数,当遇到不存在的桶时,则找相邻的下一个。因此在增加新桶时,只需同步/搬移部分数据即可使整个数据分布均匀.
    id)时,除数为虚拟节点数,当遇到不存在的桶时,则找相邻的下一个。因此在增加新桶时,只需同步/搬移部分数据即可使整个数据分布均匀.

推荐阅读
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 深入解析JWT的实现与应用
    本文深入探讨了JSON Web Token (JWT) 的实现机制及其应用场景。JWT 是一种基于 RFC 7519 标准的开放性认证协议,用于在各方之间安全地传输信息。文章详细分析了 JWT 的结构、生成和验证过程,并讨论了其在现代 Web 应用中的实际应用案例,为开发者提供了全面的理解和实践指导。 ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • 在处理分享功能时,以往通常会首先考虑使用第三方SDK,如友盟等。然而,通过实际项目经验发现,利用iOS原生的UIActivityViewController不仅可以实现高效、稳定的分享功能,还能更好地控制用户体验。本文将详细介绍如何利用iOS原生技术缓存HTML内容,并结合URL分享的最佳实践,帮助开发者在实际开发中提升应用性能和用户满意度。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • 本文介绍了在 Android 平台上的图片上传工具类优化方案,重点讨论了如何通过设置 `MultipartEntity` 来实现图片的高效上传。具体实现中,通过自定义 `UserUploadServiceImpl` 类,详细展示了如何构建和发送包含图片数据的 HTTP 请求。此外,还探讨了如何处理上传过程中的常见问题,如网络异常和文件格式验证,以确保上传的稳定性和可靠性。 ... [详细]
  • 阿里巴巴Java后端开发面试:TCP、Netty、HashMap、并发锁与红黑树深度解析 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 浏览器中 W3School JavaScript 的 Location 对象详解
    Location对象是浏览器Window对象的一部分,通过`window.location`属性可访问。它包含了当前页面URL的相关信息,如协议、主机名、路径和查询参数等,对于页面导航和URL操作非常有用。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有