配置池怎么设计

问题描述

1.有个后台服务A,访问它需要一些用户信息(用户名,密码等)2.想提供一个新的服务B,把这些配置信息管理起来,以池的方式对外提供服务。比如,配置10组用户信息,客户端C请求B时,从池里取出一组用户信息访问后台服务A,访问后,释放配置信息到池中供其他客户端使用问题:B可能是以集群方式部署的,即有B1,B2等多台物理或逻辑机器,C每次请求可能到B1,也可能到B2,如何设计配置池满足这种需求方案:采用缓存服务器存储配置信息。目前项目中没用到缓存服务器,如果因为这个功能增加一个,感觉有点小题大做了。是否还有其他更简单的方法。

解决方案

1楼建议在上层增加BX服务,但还是没解决BX从B1/B2/B3……访问到的数据一致性问题。但是这种方式可以增加扩展性(即:如果后面你增加了缓存服务器,那么客户端C可能就要更改实现方式了,如果有了BX服务,那么只要更改BX访问缓存服务器即可)我的理解是这样的。1.配置池类似于无顺序的栈。(客户端C获取配置,就是出栈;客户端C释放配置,就是压栈,不过栈内数据是随机的)2.由于配置池是放在B中,而B是随时可能做集群横向扩展的(目前不想增加缓存服务,但是又需要保证集群所有节点的配置信息一致)不知道我的理解是否正确。如果是这样的话,可以考虑以下方式:配置池实现:配置信息存放到集合中,配置池提供一个门面接口,只要访问这个门面接口,该接口通过随机算法(如果有特殊的均衡性要求),从集合中取出一个配置(并且从集合中remove掉取出的配置)缓存实现:1.在B服务中增加支持集群部署的分布式缓存(不需要单独部署缓存服务),只要缓存数据做变更,会通过底层的组播通信自动同步到所有节点。这样不管客户端C访问哪一台server,每个server都返回相同的数据:可考虑jbosscache、ehcache(oscache也能做到)。优点:利用现有的应用,不需要单独部署缺点:由于每次缓存数据做变更,会通过udp组播(jgroup)或者是jms通知所有集群节点更新数据,对生产环境有影响(如果缓存数据更新较少,则影响忽略不计)。2.单独部署缓存服务器(你已经忽略了,暂时不考虑)
解决方案二:
看你的需求类似于的数据库连接池实现1、写一个配置信息的应用/服务 单独部署2、写一个配置信息获取的客户端,从应用/服务获取配置/释放配置,其他项目依赖3、这样如果性能不好 还可以再扩展 比如加缓存之类的 因为有客户端 这些细节可忽略
解决方案三:
好复杂的池啊。在B1、B2上层增加一个Web服务BX,所有获取配置信息的客户端C1、C2、C3,直接访问BX即可,具体在集群中选择哪个节点的工作交由BX去做,BX中还可以做一下缓存。

时间: 2024-09-20 00:38:34

配置池怎么设计的相关文章

高并发服务器的设计之连接池的设计

高并发服务器需要有一些池的设计,如内存池,连接池,数据库连接池. 池(pool)的设计 主要考虑到一些资源的频繁申请和释放,尤其是在高并发的服务器中,几万甚至几十万并发每秒,设计 人员不得不去考虑这些. 比如数据库连接池(sql pool),是通过TCP来通信的,属于IO类,有 一定的延时,在高并发系统中频繁的创建会严重影响系统性能. 内存( mem )的分配是要涉及锁 ( mutex )的,有锁就会有延时,因此可以在开始申请一大块内存,后面进行分配与释放,来节省锁开 销. 服务器的连接处理不仅

基于C语言的内存池的设计与实现

介绍:        设计内存池的目标是为了保证服务器长时间高效的运行,通过对申请空间小而申请频繁的对象进行有效管理,减少内存碎片的产生,合理分配管理用户内存,从而减少系统中出现有效空间足够,而无法分配大块连续内存的情况. 目标:     此次设计内存池的基本目标,需要满足线程安全性(多线程),适量的内存泄露越界检查,运行效率不太低于malloc/free方式,实现对4-128字节范围内的内存空间申请的内存池管理(非单一固定大小对象管理的内存池). 内存池技术设计与实现     本内存池的设计方

高并发服务器的设计之内存池的设计

不同的业务,设计也不尽相同,但至少都一些共同的追求,比如性能. 做服务器开发很多年 了,有时候被人问到,服务器性能是什么呢?各种服务器间拼得是什么呢? 简单的回答就是QPS ,并发数,但有时候想想也许也不对. QPS与并发数是针对同样的业务而言的,业务不同,相同 的服务器能承受的压力也会不同. 性能,也许可以打个俗点的比方: 服务器就是一艘船 ,性能就是船的容量,开的速度,行得是否稳当. 该用的用,该省的省.能用内存就别用IO, CPU则能少用就少用,相同的QPS,CPU和内存用的少点的性能就要

深入浅出多线程(6)分析并行包线程池的设计与实现

接上篇,在上篇中介绍了线程池的设计需求以及使用,在这里我们分析 Concurrent包中线程池的实现类ThreadPoolExecutor的设计,是不是感觉没意义 ,人家都实现了还分析啥?当然是提高我们自身的设计能力了.对于设计能力的 提高,我认为一方面我们要在具体实践中,能够学习前人 总结的设计思想(比如设计模式之类的),根据具体上下文,能够融会贯通 的使用他们.另一方面分析优秀的框架设计与实现也是很好的方式,当然JDK设 计是最好的学习资料.闲话多了,切入主题,设计要点: 纵观在JDK1.5

java常量池是如何存放基本类型字面量的?和String 的处理方式是一样的吗?常量池的设计原则是什么?

问题描述 public class Test {public final int a=5;public final int b=5;public final int c=5;String d="abc";String e="abc";String f="abc";}常量池在存储 基本类型的字面量 ,和存储字符串 的存储方式是否一样,比如说 字符串"abc" ,在常量池中只存储一份, 那么基本类型 字面量 比如说上面定义的 5

看看GWT 2.0 新的界面设计 ( 通过配置 xml 进行设计.) UiBinder

技术上面的版本更新 1.7 到 2.0 究竟变了什么. 才发现.   多了一个UI的界面设计 通过配置 xml 进行界面 设计.   在 showcase里面的代码还是用老的办法去写代码..   在mail 的demo里面就不是了..而是通过xml进行.   在mail 类里面 属性.    写道 @UiField TopPanel topPanel;@UiField MailList mailList;@UiField MailDetail mailDetail;@UiField Shortc

4000元六代i5-6500/GTX960电脑配置推荐(兼顾设计和游戏)

  电脑硬件点评: 处理器方面,今年中高端游戏玩家非常青睐的处理器是i5-6500,对于不过分追求发烧配置且注重性价比的用户来说,中高端CPU性能完全可以满足其需求,也不盲目追求超频CPU,所以这里百事网小编推荐的是热销级i5-6500,虽说这款CPU不支持超频,但性能属于中等偏上的水准,性能足够优秀. i5-6500处理器默认主频大小为3.2GHz,其睿频可达3.6GHz,拥有6M三级缓存,属于四核四线程,支持最新一代DDR4内存,内置HD530核心显卡,定位中高端用户人群.此外,这套CPU选

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二.当Configuration对象承载的配置放生变换的时候如何向应用程序发送通知,最终让应用程序使用最新的配置. 一.配置与配置源的同步 配置模型提供了三个原生ConfigurationProvider(JsonConfigrationProvider.XmlConfigurationProvider和IniC

GWT UIBinder 通过配置xml 进行设计.

有些地方也是摸索着前进.    新建立一个uiBinderTest的工程   新建立一个UiBinder 这个是在最新的eclipse google 插件上面才有的.如果没有. 请自己更新eclipse 插件.      添加一个名字. !说明这个输入这个名字后会生成两个文件. 1,XXX.ui.xml 2,XXX.java     一个 xml 文件和一个java类. xml负责页面的布局.里面可以混写 html 和 GWT 组建代码. 有点像flex .     运行程序的时候有个问题.bu