我目前正在做一个项目,我将在数据库旁边构建一个应用程序(用Java创建)。所以这将是我正在开发的客户端服务器系统。我的项目的一部分是研究现有的客户端服务器系统。
所以我想知道是否有任何使用Java构建的好的客户端服务器系统,我可以看一下?我对专业程序的新手感兴趣,但不是太复杂,我无法理解。
我想在我的研究中讨论它们,看看它们是如何工作的。
谢谢。
答案 0 :(得分:0)
分布式系统中的某些资源可能需要互斥访问。锁定 service是一项服务,负责允许或拒绝客户端的独占访问权限。在此项目中,您将实现一个简单,高可用性的复制锁定服务。
客户端 - 服务器锁定。锁定服务由两个软件组件组成:a 客户端库和服务器。服务器负责维护有关谁被授予访问权限的信息。您应该实现的客户端库{负责为需要使用它的客户提供服务。该库应该为客户提供两个功能: int a c q u i r e(int c l i e n t i d,int r e s i d); (例如,国际直播); 第一个函数允许由clientid识别的客户端请求对由resid确认的资源的独占访问,而第二个函数允许客户端释放该独占访问。您可以假设客户端和资源都可以通过某个数字ID进行唯一标识。 此外,获取调用应返回:2如果服务器当前不可用,则返回1(如果客户端) 调用已经被另一个客户端获取的资源获取;或者如果服务器已启动,则为0,并且已授予对该资源的访问权限(或已授予该客户端)。
发布调用具有类似的返回值:如果服务器当前不可用,则返回2; 1如果客户端调用它从未调用过的资源上的release;如果服务器已启动,则为0,并且释放操作成功。
复制服务器。为了实现高可用性,您应该使服务器变得多余。 您应该通过将\ server“转换为一组进程{一个主服务器,再加上n个副本服务器来实现这一点。 副本将通过可靠的多播协议与主节点保持同步。
客户端仅连接到主服务器,直接向其发出获取/释放操作。每当新请求到达主服务器时,主服务器应将此请求多播到所有副本。在从主设备接收到这样的多播请求时,副本应该更新它们的内部状态以便反映它们。保持副本同步的要点是,如果主服务器发生故障,系统可以通过让其中一个副本取代它来继续运行。 为了确保正确操作,您可靠的多播协议应该保证,即使存在崩溃故障: 1.要么所有正确的副本都传递信息,要么没有传递信息,并且; 2.唯一允许\或无“案例”的情况是主机在任何正确的副本发送消息之前崩溃。
请注意,我们不关心崩溃的副本:这些可能会传递或不传递消息。为了完成这项任务,我们建议您调整两阶段提交(2PC)协议,但要记住以下内容:不像\ regular“2PC,崩溃的副本不会导致消息无法传递,并且唯一的情况是你需要担心的是协调员崩溃的时候。 故障转移。当主设备发生故障时,新主设备必须接管。你应该提供一个 新主人的机制(例如副本可以接受特殊的\成为主人) 当前主服务器失败时可以由客户端发出的消息)。 此外,一旦客户到位,客户必须以某种方式联系新主人。做事 更简单的是,可以在每个请求中查询所有副本,以便发现哪个是主服务器。 1 服务器假设。在实现服务器时,您应该做出以下假设。 1.复制品集是固定的,复制品可能会崩溃,但复制品永远无法恢复; 2.可以获取和释放的资源数量是固定的,并且事先已知; 3.底层网络不可靠,不保证FIFO(如果你使用UDP,你必须考虑到这一点)。
客户端库假设。 1.如果主服务器在请求的中途崩溃,则获取/释放功能可以返回错误代码2,然后客户端代码可以继续重试请求,直到新的主服务器就位;