前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一周技术学习笔记(第64期)-分布式系统是“小米加步枪”的集合

一周技术学习笔记(第64期)-分布式系统是“小米加步枪”的集合

作者头像
王新栋
发布2022-06-15 17:32:32
2160
发布2022-06-15 17:32:32
举报
文章被收录于专栏:程序架道程序架道

分布式系统是“小米加步枪”的集合

2008年阿里发起了去IOE运动,也就是我们说的IBM小型机、Oracle数据库和EMC存储设备。

当时我在工作的时候听到这个消息,想当然的理解为这是因为这些厂商的东西太贵了。

那么随着后来我对分布式系统的逐步理解,除了贵的原因,除了单机性能无法突破摩尔定律的约束。还有一个重要的原因,就是解决了大规模软件系统的开发效率和开发成本的问题

怎么解决的。

现在我们都知道了,一个大的单体应用是没有办法快速迭代发布的,编译、测试、发布这些动作一气呵成,在庞大的单体环境里面无法做到分布式系统集结了众多服务节点,就很容易得解决了不同版本,不同功能快速发布的问题。

我们常说微服务的主要目的是为了更快的开发节奏,就是因为微服务也是分布式系统。需要注意的是,反过来,说分布式系统是微服务系统则是不对的。这个问题,你可以自己思考一下。

另外一个,是成本。

分布式系统环境里面,各个服务节点都可以是廉价的PC机,当然不差钱还可以上更好的设备,数据库也可以是开源的MySQL,然后通过网络把它们连接在一起。

说分布式系统是“小米加步枪”的集合,从硬件成本上来说也不为过。

分布式锁最关键的一环是存储

实现一个锁的功能,最根本的必要条件之一是要有一个存储,然后大家都去这个存储这里拿东西,这个时候你用“权利”维护好这个存储:谁能获取,谁不能获取

这样锁的基本功能就有了。

环境不同,存储的介质也不同。

单进程多线程,用线程可以共享的内存,直接说就是用一个整数。

单机器多进程,用进程可以访问到的共享内存。

多机器多进程,就要考虑额外的一块地方来存储,Redis、etcd等都是可选项。

问题1:一般来说,一个分布式锁服务,它的正确性要求越高,性能可能就会越低。你认为这个说法是对还是错误,可以举个例子吗。

这个说法是正确的。

由于部分失败和异步网络的现实问题,分布式锁是没有办法达到100%正确性。如果要举个例子的话可以对比zookeeper、redis。

高可用选etcd、zk,高性能选Redis。

问题2:什么情况下会发生客户端以为没获取锁,但锁服务已经颁发锁了?若响应超时客户端不会返回error给锁服务让这次获取锁失败吗?

比如,锁服务的逻辑颁发锁成功,但是通过网络到客户端的时候发生丢包,还没有重试的时候,客户端已经超时了,或者是客户端已经收到锁,但是响应发送到锁服务的时候超时了。

对于锁服务来说,它不能区分超时是发生在客户端收到锁之前还是锁之后。

CAP理论是让我们三选二吗

大多数情况下,我们说的可用性,是指的系统的可用性,一致性,是指的数据的一致性。进而,这里的可用性我们又想追求100%,一致性又想追求强一致性。

CAP 理论给我们定义了系统的设计边界,虽然想要设计出超过边界的系统是徒劳的,但是我们却可以无限逼近边界,并且把它作为我们设计系统的目标。

问题3:CAP理论是让我们三选二吗?

说三选二,严格意义上不对,因为这种说法的言外之意,是要放弃第三个。

肯定不是这样。

由于分布式系统所处的网络环境所固有的特性,延迟、丢包等。是的,我们只能保证CP或者AP两个,但是并不意味着我们要放弃第三者,而是要尽量保证第三者。

如果说是三选二的话,言外之意,好像是要放弃一个。这就不对了。

负载均衡的核心是公平性

分布式系统环境下,会有很多个被称为后端服务的服务,客户端向那么多端额后端服务发送请求,到底该往哪里发送,这正是负载均衡要干的事情。

每一个后端服务的机器性能,可能存在差异,性能好的机器是不是要多承受点流量,性能不太好的机器是不是就可以减轻些负担。

是的,负载均衡在保证“雨露均沾”的同时,还要保证服务实例之间的公平性,不能“欺负”性能不好的机器。

怎么做呢。

我们以采用轮询机制的负载均衡来看,轮询是最简单的负载策略了。

这个时候,我们只需要加上权重就可以,彪悍的机器,权重高些。这样,我们就可以利用权重机制来解决服务实例处理性能差异的问题。

来保证负载均衡的公平性。

----END----

这里记录,我每周碰到的,或想到的,引起触动,或感动的,事物的思考及笔记。不见得都对,但开始思考记录总是好的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序架道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档