生产者-消费者-中继服务(缓存)

Registry 通过1个端口提供他所有的接口服务,

注册上的接口 是以实现类为核心注册的,同时他也要表名自己代表的是哪个接口

Micro-Service

Application1-----zkhost----[一个服务大厅必须要有1个中继服务商IP:PORT]

Services[可靠的云计算]----IP:port#codec#

com.calc.api.IAdd1----com.api.impl.v1.H1————class

com.calc.api.ISub2----com.api.impl.v1.H1————class

com.calc.api.IPow3----com.api.impl.v1.H1————class

Services[可靠的云存储]----IP:port

Com.db.api.save1------com.api.impl.v1.H1————class

Com.db.api.save2------com.api.impl.v1.H1————class

Com.db.api.update3----com.api.impl.v1.H1————class

Com.db.api.delete4----com.api.impl.v1.H1————class

Services[可靠的云服务]------IP:port

Com.cloud.api.vps------com.api.impl.v1.H1————class

Com.cloud.api.memory---com.api.impl.v1.H1————class

Com.cloud.api.cpu------com.api.impl.v1.H1————class

Services[可靠的云通知]------IP:port

Com.notify.api.sms------com.api.impl.v1.H1————class

Com.notify.api.email----com.api.impl.v1.H1————class

Com.notify.api.phone----com.api.impl.v1.H1———class

Application2-----zkhost2----[一个服务大厅必须要有1个中继服务商IP:PORT]

Services[可靠的云盾]------IP:port

Com.safe.api.check1------com.api.impl.v1.H1————class

Com.safe.api.check2------com.api.impl.v1.H1————class

当1个服务不可用时,整组挂掉.最好的选择,真正的fast_fail

对外的服务应该保持简单,1个接口1个实现类;内部再复杂也要让用的人 觉着简单

Product:

比如说当前 服务小组 做的业务叫 [可靠的云计算],那么当前服务小组就叫Service[可靠的云计算],自己新建一个首席注册官(),前去收集可靠服务接口,等这些接口都收集齐了,如果有拿得出手的服务(api_count>0),那么就把这些接口都提交申请给部门老大(这里不能有同样包的同样的版本的同一个接口,出现相同的就抛异常),同时把 当前IP和Port都给部门老大老A。

首席注册官,汇报完接口后就可以GC回收了

Consumer:

首席会告诉消费者,哪里有服务大厅,也就是application的地址.通过世界领先的6G手机(ZKClient)连接上 服务大厅 Application, 在服务大厅内罗列了各路   [可靠服务接口],当前大屏幕上罗列了:Service[可靠的云计算],Service[可靠的云存储],Service[可靠的云通知],Service[可靠的云服务].....

为了跟紧市场的发展和为客户打造7*24服务,我们的P2P网站可能需要 下面这俩个服务:

Service[可靠的快速计算],Service[可靠的快速存储]

那么在消费者那里,就 填写基本信息,准备申请 服务大厅的Service[可靠的快速计算],Service[可靠的快速存储],

<soap:zookeeper zkhost=”127.0.0.1:2182” >

<Services>

[可靠的云计算]

[可靠的云存储]
    </Services>

</soap>

<soap:zookeeper zkhost=”127.0.0.2:2182” >

<Services>

[可靠的云认证]

</Services>

</soap>

<soap:zookeeper zkhost=”127.0.0.4:2182” >

<Services>

[可靠的云通知]

</Services>

</soap>

<soap:zookeeper zkhost=”127.0.0.3:2182” >

<Services>

[可靠的云验证]

[可靠的云认证]

</Services>

</soap>

当出现可以提供相同的业务接口的场景时,由中继服务商来路由,一般来说 拥有1个服务够用即可,当客户端请求队列满了时.就发送到第2个服务接口处;也可以是轮询的发送请求...(此次说法是个栗子)

你申请了哪几个服务,你就要领取相应的接口jar包.jar包的内容主要就是接口,也不排除含有实体Bean包含在里面.

Relay :

服务中继服务,名字这么绕,但丝毫不影响他做事雷厉风行的风格。

中继服务也有6G手机,而且该手机的信号是最好的,联系人里面是最全的,只要出现在服务大厅里的服务提供商,他都知道,因为不想错过与每位客户交(赚)流(钱)的机会. 他其实也是代理了下真实的服务,对于每一位客户,他都比较重视的,在记录了如下数据后:

客户(server-name)——调用服务——调用具体接口——消耗时间——成功|失败

相应的 至少会统计如下数据,(以便以后自己代理更可靠的服务,提高信誉度):

客户(server-name)—调用服务—调用具体接口—平均消耗时间—总调用次数-失败次数

同时他还会与每个服务提供商 保持好联系,以便处理好自己的控制能力,避免消费者给自己差评.
[Delete]

每当有服务提供商要金盆洗手时,他就把该提供商信息从联系人名单中删除;

[Add]

有新服务提供商在服务大厅报名时,他也及时添加人服务商信息[IP-Port,掌握的接口列表];

[Disconnect]

当有服务商联系不上了,这不是玩失踪,1般情况下就是 服务倒闭了,从联系人名单中删除;

[Reconnect]

消失了的服务商又联系上了,原来是信号不好,还好还可以继续提供服务,继续加到联系人;

[Update]

服务商的接口能力提升,单位时间内能处理更多的订单了,要及时更新到联系人中信息;

当然 自己作为[中继服务商],掌握了这么多 提供商消息,

通过 getProviderList()让自己更踏实1点.更踏实的是,自己花钱买了1个侦探紧盯着服务大厅,这样自己就有了第一手资源了

中继服务商的6G手机是个Subject,为了及时的调整缓存的远程服务实例,要准备1个关注(实现) 了上面[event] 的接口的一个Observer,由Observer来辅助管理自己的本地缓存。

别看中继服务商这么风光,但是内部维护着 千奇百怪的服务.所以要做世界上最快的服务提供商也不是那么轻松的.

按编解码分组,可能有:

<probuff,List<Service>>,<kyro,List<Service>>

按协议分组,可能有:

<http,List<Service>>,<tcp,List<Service>>

按接口名分组,可能就:

<com.calc.api.IAdd,List<Service[0,1]> //0,1是指当前含有0,1 俩个版本

当是远程的http提供服务时,通过hessian的方式序列话

远程的一个接口实例对象到当前[中继服务商的spring容器中]来提供服务,在服务时可强转为接口去使用,然后视该服务是单例还是多例的情况,每次 消费者调用时,每次由 spring去提供一个 实现(具体scope由提供商注册的接口参数定义).

当客户端调用

RelayClient.execute(com.calc.api.IAdd1.class,”add2”,....);

RelayClient.execute(com.calc.api.IAdd1.class,codecInt,”add2”,....);

RelayClient.execute(com.calc.api.IAdd1.class,)

未完待续

时间: 2024-08-04 20:17:29

生产者-消费者-中继服务(缓存)的相关文章

第3月第14天 生产者-消费者

1. 之前公司有个项目,有一个线程接收 tcp连接然后把socket放入队列,10个线程处理socket的数据,但10个线程还是处理不过来,客户端连上又关闭了,服务端处理完数据通过socket发送时,发现socket已经关闭了. 对于生产者-消费者问题,一定要设定缓冲区大小,当缓存区满的时候,生产者不会加入数据.而使用链表就会导致生产者不断的将数据放入缓冲区,而消费者处理不过来. iOS audioUnit播放声音时也是如此.生产者 解码数据放入缓冲区,播放时消耗缓冲区数据.当缓存区满的时候,就

生产者消费者模式

什么是生产者消费者模式   在工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者.在生产者与消费者之间在加个缓冲区,我们形象的称之为仓库,生产者负责往仓库了进商品,而消费者负责从仓库里拿商品,这就构成了生产者消费者模式.结构图如下: 生产者消费者模式的优点 1.解耦 假设生产者和消费者分别是两个类.如果让生产者直接调用消费者的某个方法,那

生产者消费者模式(吃包子例子)

生产者-消费者问题是一个经典的进程同步问 题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制.在同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放置在一个空 缓冲区中供消费者线程消费.消费者线程从缓冲区中获得物品,然后释放缓冲区.当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费 者线程释放出一个空缓冲区.当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来. 生产者消费者模式是并发.多线程编程中经典的设计

Java 并发编程(四)阻塞队列和生产者-消费者模式

阻塞队列 阻塞队列提供了可阻塞的 put 和 take 方法,以及支持定时的 offer 和 poll 方法.如果队列已经满了,那么put方法将阻塞直到有空间可以用:如果队列为空,那么take方法将一直阻塞直到有元素可用.队列可以使有界的,也可以是无界的,无界队列永远都不会充满,因此无界队列上的put方法永远不会阻塞.一种常见的阻塞生产者-消费者模式就是线程池与工作队列的组合,在 Executor 任务执行框架中就体现了这种模式. 意义:该模式能简化开发过程,因为他消除了生产者和消费者类之间的代

OpenMP实现生产者消费者模型

生产者消费者模型已经很古老了吧,最近写了个OpenMP版的此模型之实现,来分享下. 先说一下模型的大致做法是: 1.生产者需要取任务,生产产品. 2.消费者需要取产品,消费产品. 生产者在生产某个产品之后,要告知消费者此产品已经可以使用了.消费者通过获得可以使用这个信号来取得产品,进一步消费产品. 比如,我们有N个图像需要对每一个图像作滤波或者变换等处理,并且把处理后的结果存到硬盘上. 那么生产者可以将N个图像看成N个任务,每个任务都是独立的,每个任务的计算结果可以看成是产品,消费者就是取这个产

Java多线程实现生产者消费者延伸问题

在操作系统中有一类问题被称为生产者消费者问题:意为,有数个生产者生产产品,有数个消费者消费产品,他们共享一定数量的缓存. 这里用java多线程编程,实现生产者消费者问题的一种延伸,橘子苹果问题. 题目如下: 有苹果橘子生产者各20个,有苹果橘子消费者各20个,他们公用20个缓存区.要求能随时查看缓存区内容,随时查看生产消费内容情况,随时暂停生产开始生产. 我们的实现思路: 1.首先创建一个缓存区类,其中包含静态的,长度大小为20的数组,用来存放和取出生产的产品:一个静态的日志变量List,用来记

Java 多线程学习笔记:生产者消费者问题

前言:最近在学习Java多线程,看到ImportNew网上有网友翻译的一篇文章<阻塞队列实现生产者消费者模式>.在文中,使用的是Java的concurrent包中的阻塞队列来实现.在看完后,自行实现阻塞队列. (一)准备 在多线程中,生产者-消费者问题是一个经典的多线程同步问题.简单来说就是有两种线程(在这里也可以做进程理解)——生产者和消费者,他们共享一个固定大小的缓存区(如一个队列).生产者负责产生放入新数据,消费者负责取出缓存区的数据.具体介绍请参考 Producer-consumer

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把

生产者/消费者问题的多种Java实现方式--转

实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的.在博文<一种面向作业流(工作流)的轻量级可复用的异步流水开发框架的设计与实现>中将介绍一种生产者/消费者模式的具体应用. 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品.解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步