1.问题

  • 1、何为分布式何为微服务?

  • 2、为什么需要分布式?

  • 3、分布式核心理论基础,节点、网络、时间、顺序,一致性?

  • 4、分布式是系统有哪些设计模式?

  • 5、分布式有哪些类型?

  • 6、如何实现分布式?

2.关键词

节点,时间,一致性,CAP,ACID,BASE,P2P,机器伸缩,网络变更,负载均衡,限流,鉴权,服务发现,服务编排,降级,熔断,幂等,分库分表,分片分区,自动运维,容错处理,全栈监控,故障恢复,性能调优

3.全文概要

随着移动互联网的发展智能终端的普及,计算机系统早就从单机独立工作过渡到多机器协作工作。计算机以集群的方式存在,按照分布式理论的指导构建出庞大复杂的应用服务,也已经深入人心。本文力求从分布式基础理论,架构设计模式,工程应用,部署运维,业界方案这几大方面,介绍基于MSA(微服务架构)的分布式的知识体系大纲。从而对SOA到MSA进化有个立体的认识,从概念上和工具应用上更近一步了解微服务分布式的本质,身临其境的感受如何搭建全套微服务架构的过程。

4.基础理论

4.1SOA到MSA的进化

SOA面向服务架构

由于业务发展到一定层度后,需要对服务进行解耦,进而把一个单一的大系统按逻辑拆分成不同的子系统,通过服务接口来通讯,面向服务的设计模式,最终需要总线集成服务,而且大部分时候还共享数据库,出现单点故障的时候会导致总线层面的故障,更进一步可能会把数据库拖垮,所以才有了更加独立的设计方案的出现。

MSA微服务架构

微服务是真正意义上的独立服务,从服务入口到数据持久层,逻辑上都是独立隔离的,无需服务总线来接入,但同时增加了整个分布式系统的搭建和管理难度,需要对服务进行编排和管理,所以伴随着微服务的兴起,微服务生态的整套技术栈也需要无缝接入,才能支撑起微服务的治理理念。

4.2节点与网络

节点

传统的节点也就是一台单体的物理机,所有的服务都揉进去包括服务和数据库;随着虚拟化的发展,单台物理机往往可以分成多台虚拟机,实现资源利用的最大化,节点的概念也变成单台虚拟机上面服务;近几年容器技术逐渐成熟后,服务已经彻底容器化,也就是节点只是轻量级的容器服务。总体来说,节点就是能提供单位服务的逻辑计算资源的集合。

网络

分布式架构的根基就是网络,不管是局域网还是公网,没有网络就无法把计算机联合在一起工作,但是网络也带来了一系列的问题。网络消息的传播有先后,消息丢失和延迟是经常发生的事情,我们定义了三种网络工作模式:

同步网络

  • 节点同步执行

  • 消息延迟有限

  • 高效全局锁

半同步网络

  • 锁范围放宽

异步网络

  • 节点独立执行

  • 消息延迟无上限

  • 无全局锁

  • 部分算法不可行

    常用网络传输层有两大协议的特点简介:

TCP协议

  • 首先tcp尽管其他可以更快

  • tcp解决重复和乱序问题

UDP协议

  • 常量数据流

  • 丢包不致命

4.3时间与顺序

时间

慢速物理时空中,时间独自在流淌着,对于串行的事务来说,很简单的就是跟着时间的脚步走就可以,先来后到的发生。而后我们发明了时钟来刻画以往发生的时间点,时钟让这个世界尽然有序。但是对于分布式世界来说,跟时间打交道着实是一件痛苦的事情。分布式世界里面,我们要协调不同节点之间的先来后到关系,但是不同节点本身承认的时间又各执己见,于是我们创造了网络时间协议(NTP)试图来解决不同节点之间的标准时间,但是NTP本身表现并不如人意,所以我们又构造除了逻辑时钟,最后改进为向量时钟:

NTP的一些缺点,无法完全满足分布式下并发任务的协调问题

  • 节点间时间不同步

  • 硬件时钟漂移

  • 线程可能休眠

  • 操作系统休眠

  • 硬件休眠

逻辑时钟

  • 定义事件先来后到

  • t’ = max(t, t_msg + 1)

     

向量时钟

  • t_i’ = max(t_i, t_msg_i)

原子钟

顺序

有了衡量时间的工具,解决顺序问题自然就是水到渠成了。因为整个分布式的理论基础就是如何协商不同节点的一致性问题,而顺序则是一致性理论的基本概念,所以前文我们才需要花时间介绍衡量时间的刻度和工具。

4.4一致性理论

说到一致性理论,我们必须看一张关于一致性强弱对系统建设影响的对比图:

该图对比了不同一致性算法下的事务,性能,错误,延迟的平衡。

强一致性ACID

单机环境下我们对传统关系型数据库有苛刻的要求,由于存在网络的延迟和消息丢失,ACID便是保证事务的原则,这四大原则甚至我们都不需要解释出来就耳熟能详了:

  • Atomicity:原子性,一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。

  • Consistency:一致性,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

  • Isolation:隔离性,数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

  • Durabilit:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

分布式一致性CAP

分布式环境下,我们无法保证网络的正常连接和信息的传送,于是发展出了CAP/FLP/DLS这三个重要的理论:

  • CAP:分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition)。

  • FLP:在异步环境中,如果节点间的网络延迟没有上限,只要有一个恶意的节点存在,就没有算法能在有限的时间内达成共识。

  • DLS:

    (1)在一个部分同步网络的模型(也就是说:网络延时有界限但是我们并不知道在哪里)下运行的协议可以容忍1/3任意(换句话说,拜占庭)错误;

    (2)在一个异步模型中的确定性的协议(没有网络延时上限)不能容错(不过这个论文没有提起随机化算法可以容忍1/3的错误);

    (3)同步模型中的协议(网络延时可以保证小于已知d时间)可以,令人吃惊的,达到100%容错,虽然对1/2的节点出错可以发生的情况有所限制

弱一致性BASE

多数情况下,其实我们也并非一定要求强一致性,部分业务可以容忍一定程度的延迟一致,所以为了兼顾效率,发展出来了最终一致性理论BASE,BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)

  • 基本可用(Basically Available):基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

  • 软状态(Soft State):软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。

  • 最终一致性(Eventual Consistency):最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

一致性算法

分布式架构的核心就在一致性的实现和妥协,那么如何设计一套算法来保证不同节点之间的通信和数据达到无限趋向一致性,就非常重要了。保证不同节点在充满不确定性网络环境下能达成相同副本的一致性是非常困难的,业界对该课题也做了大量的研究。

首先我们要了解一致性的大前提原则(CALM):

CALM原则的全称是 Consistency and Logical Monotonicity ,主要描述的是分布式系统中单调逻辑与一致性的关系,它的内容如下,参考consistency as logical monotonicity

  • 在分布式系统中,单调的逻辑都能保证 “最终一致性”,这个过程中不需要依赖中心节点的调度

  • 任意分布式系统,如果所有的非单调逻辑都有中心节点调度,那么这个分布式系统就可以实现最终“一致性”

然后再关注分布式系统的数据结构CRDT(Conflict-Free Replicated Data Types):

我们了解到分布式一些规律原则之后,就要着手考虑如何来实现解决方案,一致性算法的前提是数据结构,或者说一切算法的根基都是数据结构,设计良好的数据结构加上精妙的算法可以高效的解决现实的问题。经过前人不断的探索,我们得知分布式系统被广泛采用的数据结构CRDT。

参考《谈谈CRDT》,A comprehensive study of Convergent and Commutative Replicated Data Types

  • 基于状态(state-based):即将各个节点之间的CRDT数据直接进行合并,所有节点都能最终合并到同一个状态,数据合并的顺序不会影响到最终的结果。

  • 基于操作(operation-based):将每一次对数据的操作通知给其他节点。只要节点知道了对数据的所有操作(收到操作的顺序可以是任意的),就能合并到同一个状态。

了解数据结构后,我们需要来关注一下分布式系统的一些重要的协议HATs(Highly Available Transactions),ZAB(Zookeeper Atomic Broadcast):

参考《高可用事务》,《ZAB协议分析》

最后要学习的是业界主流的一致性算法

说实话具体的算法我也还没完全搞懂,一致性算法是分布式系统最核心本质的内容,这部分的发展也会影响架构的革新,不同场景的应用也催生不同的算法

  • Paxos:《优雅的Paxos算法》

  • Raft :《Raft 一致性算法》

  • Gossip:《Gossip Visualization》

这一节我们说完分布式系统里面核心理论基础,如何达成不同节点之间的数据一致性,下面我们将会讲到目前都有哪些主流的分布式系统。

5.场景分类

5.1文件系统

单台计算机的存储始终有上限,随着网络的出现,多台计算机协作存储文件的方案也相继被提出来。最早的分布式文件系统其实也称为网络文件系统,第一个文件服务器在1970年代被发展出来。在1976年迪吉多公司设计出File Access Listener(FAL),而现代分布式文件系统则出自赫赫有名的Google的论文,《The Google File System》奠定了分布式文件系统的基础。现代主流分布式文件系统参考《分布式文件系统对比》,下面列举几个常用的文件系统

  • HDFS

  • FastDFS

  • Ceph

  • mooseFS

5.2数据库

数据库当然也是属于文件系统,主数据增加了事务,检索,擦除等高级特性,所以复杂度又增加了,既要考虑数据一致性也得保证足够的性能。传统关系型数据库为了兼顾事务和性能的特性,在分布式方面的发展有限,非关系型数据库摆脱了事务的强一致性束缚,达到了最终一致性的效果,从而有了飞跃的发展,NoSql(Not Only Sql)也产生了多个架构的数据库类型,包括KV,列式存储,文档类型等。

  • 列式存储:Hbase

  • 文档存储:Elasticsearch,MongoDB

  • KV类型:Redis

  • 关系型:Spanner

5.3计算

分布式计算系统构建在分布式存储的基础上,充分发挥分布式系统的数据冗余灾备,多副本高效获取数据的特性,进而并行计算,把原本需要长时间计算的任务拆分成多个任务并行处理,从而提高了计算效率。分布式计算系统在场景上分为离线计算,实时计算和流式计算。

  • 离线:Hadoop

  • 实时:Spark

  • 流式:Storm,Flink/Blink

5.4缓存

缓存作为提升性能的利器无处不在,小到CPU缓存架构,大道分布式应用存储。分布式缓存系统提供了热点数据的随机访问机制,大大了提升了访问时间,但是带来的问题是如何保证数据的一致性,引入分布式锁来解决这个问题,主流的分布式存储系统基本就是Redis了

  • 持久化:Redis

  • 非持久化:Memcache

5.5消息

分布式消息队列系统是消除异步带来一系列的复杂步骤的一大利器,多线程高并发场景先我们常常要谨慎的去设计业务代码,来保证多线程并发情况下不出现资源竞争导致的死锁问题。而消息队列以一种延迟消费的模式将异步任务都存到队列,然后再逐个消化。

  • Kafka

  • RabbitMQ

  • RocketMQ

  • ActiveMQ

5.6监控

分布式系统从单机到集群的形态发展,复杂度也大大提高,所以对整个系统的监控也是必不可少。

  • Zookeeper

5.7应用

分布式系统的核心模块就是在应用如何处理业务逻辑,应用直接的调用依赖于特定的协议来通信,有基于RPC协议的也有基于通用的HTTP协议。

  • HSF

  • Dubbo

5.8日志

错误对应分布式系统是家常便饭,而且我们设计系统的时候本身就需要把容错作为普遍存在的现象来考虑。那么当出现故障的时候,快速恢复和排查故障就显得非常重要了。分布式日志采集存储和检索则可以给我提供有力的工具来定位请求链路中出现问题的环节。

  • 日志采集:flume

  • 日志存储:ElasticSearch/Solr,SLS

  • 日志定位:Zipkin

5.9账本

前文我们提到所谓分布式系统,是迫于单机的性能有限,而堆硬件却又无法无休止的增加,单机堆硬件最终也会遇到性能增长曲线的瓶颈。于是我们才采用了多台计算机来干同样的活,但是这样的分布式系统始终需要中心化的节点来监控或者调度系统的资源,即使该中心节点也可能是多节点组成。而区块链则是真正的区中心化分布式系统,系统里面才有P2P网络协议各自通信,没有真正意义的中心节点,彼此按照区块链节点的算力,权益等机制来协调新区块的产生。

  • 比特币

  • 以太坊

6.设计模式

上节我们列举了不同场景下不同分布式系统架构扮演的角色和实现的功能,本节我们更进一步归纳分布式系统设计的时候是如何考虑架构设计的,不同设计方案直接的区别和侧重点,不同场景需要选择合作设计模式,来减少试错的成本,设计分布式系统需要考虑以下的问题。

6.1可用性

可用性是系统运行和工作的时间比例,通常以正常运行时间的百分比来衡量。它可能受系统错误,基础架构问题,恶意攻击和系统负载的影响。分布式系统通常为用户提供服务级别协议(SLA),因此应用程序必须设计为最大化可用性。

  • 健康检查:系统实现全链路功能检查,外部工具定期通过公开端点访问系统

  • 负载均衡:使用队列起到削峰作用,作为请求和服务之间的缓冲区,以平滑间歇性的重负载

  • 节流:限制应用级别、租户或整个服务所消耗资源的范围

6.2数据管理

数据管理是分布式系统的关键要素,并影响大多数质量的属性。由于性能,可扩展性或可用性等原因,数据通常托管在不同位置和多个服务器上,这可能带来一系列挑战。例如,必须维护数据一致性,并且通常需要跨不同位置同步数据。

  • 缓存:根据需要将数据从数据存储层加载到缓存

  • CQRS(Command Query Responsibility Segregation):    命令查询职责分离

  • 事件溯源:仅使用追加方式记录域中完整的系列事件

  • 索引表:在经常查询引用的字段上创建索引

  • 物化视图:生成一个或多个数据预填充视图

  • 拆分:将数据拆分为水平的分区或分片

6.3设计与实现

良好的设计包括诸如组件设计和部署的一致性,简化管理和开发的可维护性,以及允许组件和子系统用于其他应用程序和其他方案的可重用性等因素。在设计和实施阶段做出的决策对分布式系统和服务质量和总体拥有成本产生巨大影响。

  • 代理:反向代理

  • 适配器:    在现代应用程序和遗留系统之间实现适配器层

  • 前后端分离:    后端服务提供接口供前端应用程序调用

  • 计算资源整合:将多个相关任务或操作合并到一个计算单元中

  • 配置分离:将配置信息从应用程序部署包中移出到配置中心

  • 网关聚合:使用网关将多个单独的请求聚合到一个请求中

  • 网关卸载:将共享或专用服务功能卸载到网关代理

  • 网关路由:使用单个端点将请求路由到多个服务

  • 领导人选举:通过选择一个实例作为负责管理其他实例管理员,协调分布式系统的云

  • 管道和过滤器:将复杂的任务分解为一系列可以重复使用的单独组件

  • 边车:将应用的监控组件部署到单独的进程或容器中,以提供隔离和封装

  • 静态内容托管:将静态内容部署到CDN,加速访问效率

6.4消息

分布式系统需要一个连接组件和服务的消息传递中间件,理想情况是以松散耦合的方式,以便最大限度地提高可伸缩性。异步消息传递被广泛使用,并提供许多好处,但也带来了诸如消息排序,幂等性等挑战

  • 竞争消费者:多线程并发消费

  • 优先级队列:    消息队列分优先级,优先级高的先被消费

6.5管理与监控

分布式系统在远程数据中心中运行,无法完全控制基础结构,这使管理和监视比单机部署更困难。应用必须公开运行时信息,管理员可以使用这些信息来管理和监视系统,以及支持不断变化的业务需求和自定义,而无需停止或重新部署应用。

6.6性能与扩展

性能表示系统在给定时间间隔内执行任何操作的响应性,而可伸缩性是系统处理负载增加而不影响性能或容易增加可用资源的能力。分布式系统通常会遇到变化的负载和活动高峰,特别是在多租户场景中,几乎是不可能预测的。相反,应用应该能够在限制范围内扩展以满足需求高峰,并在需求减少时进行扩展。可伸缩性不仅涉及计算实例,还涉及其他元素,如数据存储,消息队列等。

6.7弹性

弹性是指系统能够优雅地处理故障并从故障中恢复。分布式系统通常是多租户,使用共享平台服务,竞争资源和带宽,通过Internet进行通信,以及在商用硬件上运行,意味着出现瞬态和更永久性故障的可能性增加。为了保持弹性,必须快速有效地检测故障并进行恢复。

  • 隔离:将应用程序的元素隔离到池中,以便在其中一个失败时,其他元素将继续运行。

  • 断路器:处理连接到远程服务或资源时可能需要不同时间修复的故障。

  • 补偿交易:撤消一系列步骤执行的工作,这些步骤共同定义最终一致的操作

  • 健康检查:系统实现全链路功能检查,外部工具定期通过公开端点访问系统

  • 重试:通过透明地重试先前失败的操作,使应用程序在尝试连接到服务或网络资源时处理预期的临时故障

6.8安全

安全性是系统能够防止在设计使用之外的恶意或意外行为,并防止泄露或丢失信息。分布式系统在受信任的本地边界之外的Internet上运行,通常向公众开放,并且可以为不受信任的用户提供服务。必须以保护应用程序免受恶意攻击,限制仅允许对已批准用户的访问,并保护敏感数据。

  • 联合身份:将身份验证委派给外部身份提供商

  • 看门人:    通过使用专用主机实例来保护应用程序和服务,该实例充当客户端与应用程序或服务之间的代理,验证和清理请求,并在它们之间传递请求和数据

  • 代客钥匙:使用为客户端提供对特定资源或服务的受限直接访问的令牌或密钥。

7.工程应用

前文我们介绍了分布式系统的核心理论,面临的一些难题和解决问题的折中思路,罗列了现有主流分布式系统的分类,而且归纳了建设分布式系统的一些方法论,那么接下来我们将从工程角度来介绍真刀真枪搭建分布式系统包含的内容和步骤。

7.1资源调度

巧妇难为无米之炊,我们一切的软件系统都是构建在硬件服务器的基础上,从最开始的物理机直接部署软件系统,到虚拟机的应用,最后到了资源上云容器化,硬件资源的使用也开始了集约化的管理。本节从对比的是传统运维角色对应的职责范围,在devops环境下,开发运维一体化,我们要实现的也是资源的灵活高效使用。

弹性伸缩

过去软件系统随着用户量增加需要增加机器资源的话,传统的方式就是找运维申请机器,然后部署好软件服务接入集群,整个过程依赖的是运维人员的人肉经验,效率低下而且容易出错。微服务分布式则无需人肉增加物理机器,在容器化技术的支撑下,我们只需要申请云资源,然后执行容器脚本即可。

  • 应用扩容

    用户激增需要对服务进行扩展,包括自动化扩容,峰值过后的自动缩容

  • 机器下线

    对于过时应用,进行应用下线,云平台收回容器宿主资源

  • 机器置换

    对于故障机器,可供置换容器宿主资源,服务自动启动,无缝切换

网络管理

有了计算资源后,另外最重要的就是网络资源了。在现有的云化背景下,我们几乎不会直接接触到物理的带宽资源,而是直接的由云平台统一管理带宽资源,我们需要的是对网络资源的最大化应用和有效的管理。

  • 域名申请

    应用申请配套域名资源的申请,多套域名映射规则的规范

  • 域名变更

    域名变更统一平台管理

  • 负载管理

    多机应用的访问策略设定

  • 安全外联

    基础访问鉴权,拦截非法请求

  • 统一接入

    提供统一接入的权限申请平台,提供统一的登录管理

故障快照

在系统故障的时候我们第一要务是系统恢复,同时保留案发现场也是非常重要的,资源调度平台则需要有统一的机制保存好故障现场。

  • 现场保留

    内存分布,线程数等资源现象的保存,如JavaDump钩子接入

  • 调试接入

    采用字节码技术无需入侵业务代码,可以供生产环境现场日志打点调试

7.2流量调度

在我们建设好分布式系统后,最先受到考验的关口就是网关了,进而我们需要关注好系统流量的情况,也就是如何对流量的管理,我们追求的是在系统可容纳的流量上限内,把资源留给最优质的流量使用,而把非法恶意的流量挡在门外,这样节省成本的同时确保系统不会被冲击崩溃。

负载均衡

负载均衡是我们对服务如何消化流量的通用设计,通常分为物理层的底层协议分流的硬负载均衡和软件层的软负载。负载均衡解决方案已经是业界成熟的方案,我们通常会针对特定业务在不同环境进行优化,常用有如下的负载均衡解决方案

  • 交换机

  • F5

  • LVS/ALI-LVS

  • Nginx/Tengine

  • VIPServer/ConfigServer

网关设计

负载均衡首当其冲的就是网关,因为中心化集群流量最先打到的地方就是网关了,如果网关扛不住压力的话,那么整个系统将不可用。

  • 高性能

    网关设计第一需要考虑的是高性能的流量转发,网关单节点通常能达到上百万的并发流量

  • 分布式

    出于流量压力分担和灾备考虑,网关设计同样需要分布式

  • 业务筛选

    网关同设计简单的规则,排除掉大部分的恶意流量

流量管理

  • 请求校验

    请求鉴权可以把多少非法请求拦截,清洗

  • 数据缓存

    多数无状态的请求存在数据热点,所以采用CDN可以把相当大一部分的流量消费掉

流控控制

剩下的真实流量我们采用不同的算法来分流请求

  • 流量分配

    • 计数器

    • 队列

    • 漏斗

    • 令牌桶

    • 动态流控

  • 流量限制

    在流量激增的时候,通常我们需要有限流措施来防止系统出现雪崩,那么就需要预估系统的流量上限,然后设定好上限数,但流量增加到一定阈值后,多出来的流量则不会进入系统,通过牺牲部分流量来保全系统的可用性。

    • QPS粒度

    • 线程数粒度

    • RT阈值

    • 限流策略

    • 限流工具 - Sentinel

7.3服务调度

所谓打铁还需自身硬,流量做好了调度管理后,剩下的就是服务自身的健壮性了。分布式系统服务出现故障是常有的事情,甚至我们需要把故障本身当做是分布式服务的一部分。

注册中心

我们网络管理一节中介绍了网关,网关是流量的集散地,而注册中心则是服务的根据地。

  • 状态类型

    第一好应用服务的状态,通过注册中心就可以检测服务是否可用

  • 生命周期

    应用服务不同的状态组成了应用的生命周期

版本管理

  • 集群版本

    集群不用应用有自身对应的版本号,由不同服务组成的集群也需要定义大的版本号

  • 版本回滚

    在部署异常的时候可以根据大的集群版本进行回滚管理

服务编排

服务编排的定义是:通过消息的交互序列来控制各个部分资源的交互。参与交互的资源都是对等的,没有集中的控制。微服务环境下服务众多我们需要有一个总的协调器来协议服务之间的依赖,调用关系,K8S则是我们的不二选择。

  • K8S

  • Spring Cloud

    • HSF

    • ZK+Dubble

服务控制

前面我们解决了网络的健壮性和效率问题,这节介绍的是如何使我们的服务更加健壮。

  • 发现

    资源管理那节我们介绍了从云平台申请了容器宿主资源后,通过自动化脚本就可以启动应用服务,启动后服务则需要发现注册中心,并且把自身的服务信息注册到服务网关,也即是网关接入。注册中心则会监控服务的不同状态,做健康检查,把不可用的服务归类标记。

    • 网关接入

    • 健康检查

  • 降级

    当用户激增的时候,我们首先是在流量端做手脚,也就是限流。当我们发现限流后系统响应变慢了,有可能导致更多的问题时,我们也需要对服务本身做一些操作。服务降级就是把当前不是很核心的功能关闭掉,或者不是很要紧的准确性放宽范围,事后再做一些人工补救。

    • 降低一致性约束

    • 关闭非核心服务

    • 简化功能

  • 熔断

    当我们都做了以上的操作后,还是觉得不放心,那么就需要再进一步操心。熔断是对过载的一种自身保护,犹如我们开关跳闸一样。比如当我们服务不断对数据库进行查询的时候,如果业务问题造成查询问题,这是数据库本身需要熔断来保证不会被应用拖垮,并且访问友好的信息,告诉服务不要再盲目调用了。

    • 闭合状态

    • 半开状态

    • 断开状态

    • 熔断工具- Hystrix

  • 幂等

    我们知道,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。那么久需要对单次操作赋予一个全局的id来做标识,这样多次请求后我们可以判断来源于同个客户端,避免出现脏数据。

    • 全局一致性ID

    • Snowflake

7.4数据调度

数据存储最大的挑战就是数据冗余的管理,冗余多了效率变低而且占用资源,副本少了起不到灾备的作用,我们通常的做法是把有转态的请求,通过转态分离,转化为无状态请求。

状态转移

分离状态至全局存储,请求转换为无状态流量,比如我们通常会将登陆信息缓存至全局redis中间件,而不需要在多个应用中去冗余用户的登陆数据。

分库分表

数据横向扩展

分片分区

多副本冗余

7.5自动化运维

我们从资源申请管理的时候就介绍到devops的趋势,真正做到开发运维一体化则需要不同的中间件来配合完成。

配置中心

全局配置中心按环境来区分,统一管理,减少了多处配置的混乱局面

  • switch

  • diamend

部署策略

微服务分布式部署是家常便饭,如何让我们的服务更好的支撑业务发展,稳健的部署策略是我们首先需要考虑的,如下的部署策略适合不同业务和不同的阶段。

  • 停机部署

  • 滚动部署

  • 蓝绿部署

  • 灰度部署

  • A/B测试

作业调度

任务调度是系统必不可少的一个环节,传统的方式是在Linux机器上配置crond定时任务或者直接在业务代码里面完成调度业务,现在则是成熟的中间件来代替。

  • SchedulerX

  • Spring定时任务

应用管理

运维工作中很大一部分时间需要对应用进行重启,上下线操作,还有日志清理。

  • 应用重启

  • 应用下线

  • 日志清理

7.6容错处理

既然我们知道分布式系统故障时家常便饭的事情,那么应对故障的方案也是不可或缺的环节。通常我们有主动和被动的方式来处理,主动是在错误出现的时候,我们试图再试试几次,说不定就成功了,成功的话就可以避免了该次错误。被动方式是错误的事情已经发生了,为了挽回,我们只是做时候处理,把负面影响降到最小。

重试设计

重试设计的关键在于设计好重试的时间和次数,如果超过重试次数,或是一段时间,那么重试就没有意义了。开源的项目 spring-retry可以很好的实现我们重试的计划。

事务补偿

事务补偿符合我们最终一致性的理念。补偿事务不一定会将系统中的数据返回到原始操作开始时其所处的状态。 相反,它补偿操作失败前由已成功完成的步骤所执行的工作。补偿事务中步骤的顺序不一定与原始操作中步骤的顺序完全相反。 例如,一个数据存储可能比另一个数据存储对不一致性更加敏感,因而补偿事务中撤销对此存储的更改的步骤应该会首先发生。对完成操作所需的每个资源采用短期的基于超时的锁并预先获取这些资源,这样有助于增加总体活动成功的可能性。 仅在获取所有资源后才应执行工作。 锁过期之前必须完成所有操作。

7.7全栈监控

由于分布式系统是由众多机器共同协作的系统,而且网络也无法保证完全可用,所以我们需要建设一套对各个环节都能监控的系统,这样我们才能从底层到业务各个层面进行监控,出现意外的时候可以及时修复故障,避免更多的问题出现。

基础层

基础层面是对容器资源的监测,包含各个硬件指标的负载情况

  • CPU,IO,内存,线程,吞吐

中间件

分布式系统接入了大量的中间件平台,中间件本身的健康情况也需要监控

应用层

  • 性能监控

    应用层面的需要对每个应用服务的实时指标(qps,rt),上下游依赖等进行监控

  • 业务监控

    除了应用本身的监控程度,业务监控也是保证系统正常的一个环节,通过设计合理的业务规则,对异常的情况做报警设置

监控链路

  • zipkin/eagleeye

  • sls

  • goc

  • Alimonitor

7.8故障恢复

当故障已经发生后,我们第一要做的是马上消除故障,确保系统服务正常可用,这个时候通常的做回滚操作。

应用回滚

应用回滚之前需要保存好故障现场,以便排查原因。

基线回退

应用服务回滚后,代码基线也需要revert到前一版本。

版本回滚

整体回滚需要服务编排,通过大版本号对集群进行回滚。

7.9性能调优

性能优化是分布式系统的大专题,涉及的面非常广,这块简直可以单独拿出来做一个系列来讲,本节就先不展开。本身我们做服务治理的过程也是在性能的优化过程。

分布式锁

缓存是解决性能问题的一大利器,理想情况下,每个请求不需要额外计算立刻能获取到结果返回时最快的。小到CPU的三级缓存,大到分布式缓存,缓存无处不在,分布式缓存需要解决的就是数据的一致性,这个时候我们引入了分布式锁的概念,如何处理分布式锁的问题将决定我们获取缓存数据的效率。

高并发

多线程编程模式提升了系统的吞吐量,但也同时带来了业务的复杂度。

异步

事件驱动的异步编程是一种新的编程模式,摒弃了多线程的复杂业务处理问题,同时能够提升系统的响应效率。

8.总结

最后总结一下,如果有可能的话,请尝试使用单节点方式而不是分布式系统。分布式系统伴随着一些失败的操作,为了处理灾难性故障,我们使用备份。为了提高可靠性,我们引入了冗余。分布式系统本质就是一堆机器的协同。而我们要做的就是搞出各种手段来然机器的运行达到预期。这么复杂的系统,需要了解各个环节,各个中间件的接入,是一个非常大的工程。庆幸的是,在微服务背景下,多数基础性的工作已经有人帮我们实现了。前文所描述的分布式架构,在工程实现了是需要用到分布式三件套(Docker+K8S+Srping Cloud)基本就可以构建出来了。

分布式架构核心技术分布图如下:

分布式技术栈使用中间件:

最后用一张图来概括分布式系统的知识体系。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 9.Pandas练习:美国个州的统计数据

    Pandas练习:美国各州的统计数据 前面讲解了那么多Pandas中的内容,下面将结合真实的数据集来进行Pandas数据分析练习, 我们这个练习只进行最简单的分析,目的是找出人口密度最高和最稀疏的州 数据集为美国各州的统计数据,包括每个州的缩写,人口信息和面积 数据集原地址为原书作者…...

    2024/4/23 5:32:24
  2. 简述RAKsmart香港服务器的的优势

    当今,我们处于互联网无处不在的时代,企业的发展更是少不了互联网的帮助,那么互联网之所以能够稳定的运行供我们使用其根本原因是因为有强大的服务器作为支撑。现在很多中小型企业以及外贸企业建站都会选择一些主机商进行服务器租用或者托管,其中RAKsmart香港服务器受到很多…...

    2024/5/9 14:23:18
  3. 这4款Python开发工具,帮你快速提升工作效率!

    “工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了。一个好的工具能让起到事半功倍的效果!但IDE并非功能越多越好,因为更多的功能往往意味着更大的复杂度,这不但会分散程序员本来的精力,而且还可能带来更多的错误。只要基本功能满足需…...

    2024/5/2 17:16:51
  4. 高德智慧景区随身听播放器框架设计与实现

    简介:我们开发选型并没有采用传统的TTS技术(由文本内容生成机器语音),而是采用了更加通用音频格式(比如mp3),作为讲解的音频输入源,方便讲解者进行二次创作。本文将简单回顾高德智慧景区随身听播放器的框架设计与实现。一、背景“远看山有色,近听水‘有’声”,景区语音…...

    2024/4/28 10:32:27
  5. 学习笔记(3):软件设计是怎样炼成的?-优秀设计从分析需求开始

    立即学习:https://edu.csdn.net/course/play/1058/15636?utm_source=blogtoedu需求分析考虑点:1.什么人会使用这个系统2.不同的人将会使用这个系统的什么功能3.还有哪些不确定或不具体的需求点4.哪些需求对技术提出了怎样的需求【需求和技术怎么关联起来】...

    2024/4/30 9:45:52
  6. python 爬虫爬取中国新闻网

    中国新闻网的新闻种类较多、而且新闻比较丰富,如果需要获取大量新闻的话,中国新闻网是个不错的选择。 界面是这样的:从url不难发现,改变日期就能获取不同日期的新闻那么,正文开始。。。 1、获取某一个链接的新闻详情页信息 import requests from bs4 import BeautifulSoup…...

    2024/4/24 0:16:55
  7. 哈尔滨工业大学计算学院保研预推免

    哈尔滨工业大学计算机学院预推免整体流程逻辑面试科技创新与项目经验专业课知识沟通能力总结 又到了一年一度的保研的时间,自己参加了一些夏令营和预推免,在这里记录一下哈工大计算机学院的预推免流程以及一些经验,分享给需要的人,希望可以帮到你。 整体流程 在2019年7月份…...

    2024/4/20 0:09:23
  8. 黑马程序员Java 全课程目录【999集】

    看过视频中的高级部分,老师讲的不错 。 视频链接 : https://www.bilibili.com/video/BV1uJ411k7wy下面是 999集全课程目录,tips : [ ctrl +f ]序号 视频名称1 01_Java语言发展史2 02_计算机进制转换3 03_计算机存储单元4 04_命令提示符_基本介绍5 05_命令提示符_常用命令…...

    2024/4/14 13:32:04
  9. 数据结构与算法之美:18 | 哈希算法(上):如何防止数据库中的用户信息被脱库?

    文章目录什么是哈希算法?应用一:安全加密应用二:唯一标识应用三:数据校验应用四:散列函数解答开篇课后思考 什么是哈希算法? 哈希算法的定义和原理非常简单,基本上一句话就可以概括:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而…...

    2024/5/9 12:41:06
  10. Oracle 又裁员,传 N+6 补偿

    ​整理 | 伍杏玲出品 | 程序人生(ID:coder_life)近日,某社交平台有甲骨文(Oracle)的员工爆料,正在裁员中,N+6 补偿。其实从去年开始,Oracle一直在北京裁员:去年5月7日,甲骨文确认中国区首批裁员900余人,其中超500人来自北京研发中心。而上述N+6的补偿方案也可能是真…...

    2024/4/9 1:55:47
  11. zookeeper的简单介绍

    1.功能 2.特点 3.结构数据 4.简单使用 5.选举机制 6.监听器原理 7.client像zookeeper写数据流程一 功能 1:文件系统,存储数据 2:通知,当数据发生变化,zookeeper集群会通知订阅的单位 二 特点 1:角色:leader和follower 2:leader进行投票,更新系统状态 3:follower接收客…...

    2024/4/22 7:35:16
  12. elementui获取未来的年月,表格可编辑

    1.生产日期点击是处理是elementui组件的日期框,根据选中的日期和选择的有效期来计算生产日期后面对应的有效期的时间,生产日期点击不可编辑是因为禁用的,这个是根据生产日期计算的,话不多说,上全部代码。 里面有计算未来时间的日期,也有表格可编辑。根据自己的需求找到需…...

    2024/4/22 4:54:21
  13. 程序员如何快速提升编程能力?

    俗话说得好,不想进大厂的程序员不是一个好程序员。那么作为即将步入程序员大军的小萌新/程序员界的老司机,你们都是如何备战大厂的呢?是否面对网络上纷繁复杂的资料茫然无从下手?抑或是坐在电脑旁埋头敲着代码却找不到一丝存在感?不用怕!今天我就来带大家一起解锁一款程序…...

    2024/5/9 11:47:47
  14. 云开发校园合伙人招募令|阿里实习生直通面试名额等你来PICK!

    简介:长假漫漫,宅家宅到压力山大。云开发平台喊你出道啦!首批云开发校园大使将面向所有对Serverless和云开发感兴趣的在校大学生进行招募。蜕变是青春必修课,别再犹豫,不负青春,乘风破浪。成为校园KOL,C位出道,带领Serverless云开发校园爱好者玩转云开发。一飞冲天吧,…...

    2024/5/9 12:38:08
  15. 【折腾系列—All In One主机】4、 iKuai软路由安装及配置

    iKuai软路由安装及配置1、开启虚拟机安装iKuai系统2、配置iKuai的相关设置3、iKuai设置动态域名4、iKuai设置端口映射 1、开启虚拟机安装iKuai系统2、配置iKuai的相关设置3、iKuai设置动态域名4、iKuai设置端口映射至此,关于iKuai 的系统安装及简单配置完成了,如果还想进行iK…...

    2024/5/9 13:31:15
  16. 分库分表基础

    分库分表简介 常规未进行分库分表的情况,随着时间的推移,表中的数据越来越多,表越来越庞大,那随之而来的影响就是:一台服务器的资源有限 数据库中的数据量不可控 库中的表会越来越多 表中的数据量也会越来越大 增删改查的开销会越来越大如何优化 分区表 根据所使用的不同分…...

    2024/4/17 3:53:06
  17. form- item 下拉 返显示

    下拉的返显示return [{ itemType: input, prop: creditNum, label: 信用额度 },{ itemType: select, prop: wayFlag, label: 了解途径, list: this.$store.getters.getSelectData(2043) || [] },{ itemType: select, prop: persionName, label: 介绍人, list: this.$store.gett…...

    2024/4/15 20:08:56
  18. NoClassDefFoundError解决思路

    标题canal监听器发送activeMQ消息失败原因分析 1、没有打印更详细的错误信息,只是打印出一句:2020-07-23 09:25:05.201 ERROR 15936 --- [pool-2-thread-1] .s.c.c.a.AbstractBasicMessageTransponder : pool-2-thread-1: 委托 canal 监听器发生错误!错误信息太少,不利于分析…...

    2024/4/9 1:55:39
  19. OUTLOOK切换邮件内容时,总是出现“正在联系//pic3.com/common...”等提示框,然后整个OUTLOOK卡死

    邮件查看过程中,有时会出现切换邮件过程中,出现“正在联系//pic3.iqxxx.com/common...”等提示框,然后整个outlook会卡死,要么等待很久恢复正常,要么需要杀死进程重启outlook,但是下次切换到同一邮件时仍会出现此问题。原因:邮件内容中的有部分信息为如下样式:<a hr…...

    2024/4/26 19:09:22
  20. 文件断点续传 RandomAccessFile

    文件断点续传 最近因为开发任务,涉及到一个文件断点续传,看了一下重点就是RandomAccessFile类 RandomAccessFile :随机存取文件。一个随机访问文件的行为就像一个大的存储在文件系统中的字节数组。有一种光标,或索引进入隐含数组,称为文件指针;输入操作从文件指针开始读取…...

    2024/4/12 6:11:35

最新文章

  1. 解析React Hooks的工作原理与影响

    解析React Hooks的工作原理与影响 React Hooks是React 16.8版本引入的一项重大特性&#xff0c;它们改变了React开发方式&#xff0c;为函数组件提供了状态管理和其他React特性的能力&#xff0c;从而使得函数组件可以拥有类组件的功能。下面我们将解释React Hooks的工作原理&…...

    2024/5/9 15:43:35
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. JSON格式转换

    文章目录 1. JSON 格式2. 细节 1. JSON 格式 实体类格式&#xff1a; public class Student {public string name {get; set;}public int age {get; set;} } public class Classs {public string teacher {get; set;}public List<Student> students {get; set;} }JSON格…...

    2024/5/3 2:18:04
  4. Spring集成MyBatis

    基本准备 创建Dynamic Web Project 引入相关jar包 Spring框架相关jar包 MyBatis连接Spring相关jar包 连接MySQL驱动包 JSTL标签库包 添加db.properties文件&#xff0c;该属性文件配置连接数据库相关信息 drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/myba…...

    2024/5/8 17:52:45
  5. 54.螺旋矩阵

    题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。示例 1&#xff1a;输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 示例 2&#xff1a;输入&#xff1a;matrix …...

    2024/5/8 11:31:17
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/8 19:32:33
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/9 7:40:42
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/9 2:44:26
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/8 20:33:13
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/9 3:15:57
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/9 5:40:03
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/9 7:40:40
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/8 20:58:56
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/9 1:35:21
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/9 4:12:16
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/9 7:40:35
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/8 18:06:50
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/9 7:40:34
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/9 1:42:21
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/9 5:02:59
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/9 4:31:45
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/8 12:44:41
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/8 9:51:44
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/9 6:36:49
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/9 4:33:29
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57