美文网首页
分布式基本理论概念

分布式基本理论概念

作者: sunpy | 来源:发表于2022-07-29 23:36 被阅读0次

    为什么要写一些基本概念?


    发现自己有时候学了一些技术,经常使用用,但是在学习和设计各种架构的时候,对一些技术概念理解不清晰,导致用错了。所以写本篇博客,想要记录下不同的概念,便于学习架构和理解一些技术的特性。打算经常去更新。

    为什么使用分布式?


    提升系统整体性能和吞吐量,尽量保证分布式系统的容错性。

    分布式系统设计思路(中心化vs去中心化)


    中心化:按角色分工,领导和干活的(主从节点)。
    发现有人偷懒或者病危,那么就给这个节点踢出去,然后将任务分配给其他人。
    中心化设计的缺陷:会出现领导安危问题。
    解决领导安危问题思路:采用主备两个领导的设计方案,热备或者冷备。也可以自动切换或者手动切换。而且越来越多心系统具备自动选举切换领导的能力,提升系统可用性。
    应用场景:Kubernetes 技术

    去中心化:去中心化的思路不是没有领导,而是自由选择领导,由节点自由选择中心。
    去中心化设计的缺陷:脑裂问题(出现了两个主机)
    解决脑裂问题思路:
    两个集群,出现通信不畅问题,两个集群各自单独工作,造成两个主机。解决方式就是让其自杀或者拒绝服务。
    应用场景:zookeeper、nacos、eureka

    分布式vs集群


    分布式,是将业务拆分成多个子业务,部署在不同的机器上。
    集群,是将一个业务部署在不同机器上,提高系统性能。

    分布式系统的性能标准


    性能、资源、可用性和可扩展性

    CAP定理


    • 一致性(Consistence) :所有节点访问同一份最新的数据副本 。
    • 可用性(Availability):每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。
    • 分区容错性(Partition tolerance) : 分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

    由于我们将系统部署到多台机器上,产生了多个节点(网络分区),所以一定要保证分区容错性。所以这就决定了CAP定理中,先要满足P。
    为了保证网络分区或者节点发生故障的时候,仍能保证对外提供服务。意思就是必须得保证分区容错性(P),那么我们只能在强一致性和可用性之间选择一个。那么这时候就出现了CA和CP两种架构。

    CP架构保证数据一致性


    举例:当前我们有两台服务器a和b,此时服务器a和服务器b的数据值value都为1。当前网络分区,随便一个客户端将服务器a的值value改为了2。现在为了保证数据一致性,将服务器b也需要改为2。但是现在有大量请求到服务器b,服务器b对于同步服务器a的请求没有处理成功,那么服务器b的value值仍为1。如果此时客户端,想要向服务器b获取value值。但是为了数据一致性,服务器b拒绝了客户端的请求,所以这意味着服务器b就不可用了,那么服务器b也就放弃了高可用。

    • a = b = 1
    • a = 2
    • 同步失败,b =1
    • 为了保证数据一致性,b拒绝提供服务。

    CP架构中高可用方面的思考:

    • 利用redis,将存取都放在同一个地方,并不依赖于网络数据间通信同步,所有人从同一个地方拿东西,那么就保证高可用问题。
    • 利用服务限流技术,限定访问流量在服务器可接受范围内,保证我们当前需要同步的服务器接口,不会被大流量冲到崩溃,那么就保证高可用问题。
    • 利用服务降级技术,如果当前我们需要同步的服务器接口,已经不可用了,那么我们提供一种备胎接口来处理同步问题,那么也保证了系统高可用问题。
    • 我将服务器集群b看做一个节点,主服务器出现问题,备胎服务器可以顶上来,主从结构来解决问题。
    • 我将服务器集群b看做一个节点,主服务器出现问题,我从多个备胎服务器里面选举出一台主服务器来解决问题。

    AP架构保证系统高可用


    举例:当前我们有两台服务器a和b,此时服务器a和服务器b的数据值value都为1。当前网络分区,随便一个客户端将服务器a的值value改为2。但是现在有大量请求到服务器b,服务器b对于同步服务器a的请求没有处理成功,那么服务器b的value值仍为1。如果此时客户端,想要向服务器b获取value值,但是为了保证系统的高可用。服务器b给客户端返回了旧的值value为1,所以这意味着服务器b牺牲了数据一致性。

    • a = b =1
    • a = 2
    • 同步失败 b =1
    • 为了保证系统高可用,b返回旧值 1

    上面的一致性,指的是强一致性,而AP很难保证强一致性,所以就有人设计了弱一致性,提出了Base理论。弱一致性:不保证任意时刻所有节点数据一样,有很多不同实现。

    Base理论核心思想是:既是无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

    最终一致性:在一段时间后,节点间的数据会最终达到一致状态(就是不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化)。

    服务限流vs服务降级vs服务熔断


    服务限流:服务限流的意识就是发现某个提供的接口,流量大,会造成其他服务接口崩溃,那么就限制该接口,同一时间内的访问接口的消费者数量。
    服务降级:服务降级的意思就是从一种方式降低到另一种方式。譬如原本调用方法a,发现不通,就调用备用方法b。
    服务熔断:服务熔断的意思就是多次降级,最后备用方案也不好使,只好放弃该服务。

    什么是脑裂?


    脑裂是指在主备切换时,由于切换不彻底或其他原因,导致客户端和Slave误以为出现两个active master,最终使得整个集群处于混乱状态。

    高并发三板斧


    缓存、异步、分流

    参考


    《大型网站技术架构》
    https://www.cnblogs.com/liujiarui/p/14725113.html

    相关文章

      网友评论

          本文标题:分布式基本理论概念

          本文链接:https://www.haomeiwen.com/subject/xeyairtx.html