《分布式系统:概念与设计》一1.4 关注资源共享

简介: 本节书摘来华章计算机《分布式系统:概念与设计》一书中的第1章 ,第1.4节,(英) George Coulouris Jean DollimoreTim Kindberg Gordon Blair 著 金蓓弘 马应龙 等译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.4 关注资源共享

用户已经习惯了资源共享带来的好处,以致很容易忽视它们的重要性。大家通常共享硬件资源(如打印机)、数据资源(如文件)和具有特定功能的资源(如搜索引擎)。14
从硬件资源的观点看,大家共享设备(如打印机和磁盘)可以减少花费,但对用户具有更大意义的是共享与用户应用、日常工作和社会活动有关的更高层的资源。例如,用户关心以共享数据库或Web页面集方式出现的共享数据,而不是实现上述服务的硬盘和处理器。类似地,用户关心诸如搜索引擎或货币换算器之类的共享资源,而不关心提供这些服务的服务器。
实际上,资源共享的模式随其工作范围和与用户工作的密切程度的不同而不同。一种极端是,Web上的搜索引擎给全世界的用户提供工具,而用户之间并不需要直接接触;另一种极端是,在计算机支持协同工作(Computer Supported Cooperative Working,CSCW)中,若干直接进行合作的用户在一个小型封闭的小组中共享诸如文档之类的资源。用户在地理上的分布以及用户之间进行共享的模式决定了系统必须提供协调用户动作的机制。
我们使用术语服务表示计算机系统中管理相关资源并提供功能给用户和应用的一个单独的部分。例如,我们通过文件服务访问共享文件;通过打印服务发送文件到打印机;通过电子支付服务购买商品。仅仅通过服务提供的操作可以实现对服务的访问。例如,一个文件服务提供了对文件的read、write和delete操作。
服务将资源访问限制为一组定义良好的操作,这在某种程度上属于标准的软件工程实践,同时它也反映出分布式系统的物理组织。分布式系统的资源是物理地封装在计算机内的,其他计算机只能通过通信才能访问。为了实现有效的共享,每个资源必须由一个程序管理,这个程序提供通信接口使得对资源进行可靠和一致的访问和更新。
大多数读者很熟悉术语服务器,它指的是在连网的计算机上的一个运行程序(一个进程),这个程序接收来自其他计算机上正在运行的程序的请求,执行一个服务并适当地做出响应。发出请求的进程称为客户,整个方案称为客户-服务器计算。在这个方案中,请求以消息的形式从客户发送到服务器,应答以消息的形式从服务器发送到客户。当客户发送一个要执行的操作请求时,就称客户调用那个服务器上的操作。客户和服务器之间的完整交互,即从客户发送一个请求到它接收到服务器的应答,称为一个远程调用。
同一个进程可能既是客户又是服务器,因为服务器有时调用其他服务器上的操作。术语“客户”和“服务器”仅仅是针对在一个请求中扮演的角色而言。客户是主动的(发起请求),服务器是被动的(仅在它们收到请求时唤醒);服务器是连续运行的,而客户所持续的时间只是客户所属的那部分应用程序持续的时间。
注意,默认情况下,术语“客户”和“服务器”指的是进程而不是运行客户或服务器的计算机,15虽然在日常用法中这些术语也指计算机。另一个不同(我们将在第5章讨论)是在用面向对象语言实现的分布式系统中,资源被封装成对象,并由客户对象访问,这时,称一个客户对象调用了一个服务器对象上的方法。
许多(但不是所有的)分布式系统可以完全用客户和服务器交互的形式来构造,万维网、电子邮件和连网的打印机都符合这种模式。第2章将讨论除客户-服务器系统之外的其他系统类型。
一个正在执行的Web浏览器是一个客户的例子。Web浏览器与Web服务器通信,从服务器上请求Web页面。我们在1.6节详细讨论Web和其相关的客户-服务器体系结构。

相关文章
|
NoSQL 关系型数据库 MySQL
使用redis分布式锁解决并发线程资源共享问题
使用redis分布式锁解决并发线程资源共享问题众所周知, 在多线程中,因为共享全局变量,会导致资源修改结果不一致,所以需要加锁来解决这个问题,保证同一时间只有一个线程对资源进行操作 但是在分布式架构中,我们的服务可能会有n个实例,但线程锁只对同一个实例有效,就需要用到分布式锁----redis s...
1229 0
|
17天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
119 2
|
1月前
|
NoSQL Java Redis
redis分布式锁
redis分布式锁
|
2月前
|
缓存 NoSQL Java
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson(一)
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson
61 0
|
12天前
|
监控 NoSQL 算法
探秘Redis分布式锁:实战与注意事项
本文介绍了Redis分区容错中的分布式锁概念,包括利用Watch实现乐观锁和使用setnx防止库存超卖。乐观锁通过Watch命令监控键值变化,在事务中执行修改,若键值被改变则事务失败。Java代码示例展示了具体实现。setnx命令用于库存操作,确保无超卖,通过设置锁并检查库存来更新。文章还讨论了分布式锁存在的问题,如客户端阻塞、时钟漂移和单点故障,并提出了RedLock算法来提高可靠性。Redisson作为生产环境的分布式锁实现,提供了可重入锁、读写锁等高级功能。最后,文章对比了Redis、Zookeeper和etcd的分布式锁特性。
122 16
探秘Redis分布式锁:实战与注意事项
|
14天前
|
NoSQL Java 大数据
介绍redis分布式锁
分布式锁是解决多进程在分布式环境中争夺资源的问题,与本地锁相似但适用于不同进程。以Redis为例,通过`setIfAbsent`实现占锁,加锁同时设置过期时间避免死锁。然而,获取锁与设置过期时间非原子性可能导致并发问题,解决方案是使用`setIfAbsent`的超时参数。此外,释放锁前需验证归属,防止误删他人锁,可借助Lua脚本确保原子性。实际应用中还有锁续期、重试机制等复杂问题,现成解决方案如RedisLockRegistry和Redisson。
|
14天前
|
缓存 NoSQL Java
【亮剑】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护,如何使用注解来实现 Redis 分布式锁的功能?
【4月更文挑战第30天】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护。基于 Redis 的分布式锁利用 SETNX 或 SET 命令实现,并考虑自动过期、可重入及原子性以确保可靠性。在 Java Spring Boot 中,可通过 `@EnableCaching`、`@Cacheable` 和 `@CacheEvict` 注解轻松实现 Redis 分布式锁功能。
|
15天前
|
NoSQL Redis 微服务
分布式锁_redis实现
分布式锁_redis实现
|
19天前
|
NoSQL Java Redis
Redis入门到通关之分布式锁Rediision
Redis入门到通关之分布式锁Rediision
15 0
|
19天前
|
NoSQL 关系型数据库 MySQL
Redis入门到通关之Redis实现分布式锁
Redis入门到通关之Redis实现分布式锁
18 1