Talk is Cheap, Show me the Code! <<网站首页文章列表

  • 从零开发参数同步框架(六)—— 简版配置中心

    零、前言前面五章已经详细介绍了如何从零开始开发一个参数同步框架。如果按照前面五章一步一步实践,应该是可以成功开发出一个可投入使用的框架的。如果不行,那应该是文章文字组织的问题了,没有将很多内容描述的通俗易懂。我们抽时间从头读一遍每一篇文章,争取逐步修改、统一名词、理清逻辑,各位海涵。 一、关于配置中心本文中定义:将那些公共配置信息统一推送到zk节点,需要使用的客户端按需加载即可。公共配置:所有客户端都会使用的、并且其值都是一致的。例如:1. mySQL数据库连接信息:url、driverClass、username、password。shelljdbc.oneblog.urljdbc:mysql://192.168.1.1:3306/oneblog?useUnicodetrue&characterEncodingUTF-8&autoReconnecttruejdbc.oneblog.usernametestjdbc.oneblog.passwordtest2. redis配置信息:host、port。shellredis.host192.168.1.2redis.port63793. zookeeper配置信息:host:port。shellzk1.address192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:21814. hessian服务地址:host:port/service。Properties 账户服务auth.remote.urlhttp://192.168.1.4:8680/remote 文件服务file.remote.urlhttp://192.168.1.5:8028/remote 文章服务article.remote.urlhttp://192.168.1.6:8780/remote5. mongodb配置信息:hostport、username、password、db。shellmongo.hostportmongo.uat.com:27017mongo.usernameoneblogmongo.password123456mongo.dboneblog 以上需要存放在配置中心,以下是各个客户端根据实际负载选择的个性化参数,不必放在配置中心mongo.connectionsPerHost10mongo.threadsAllowedToBlockForConnectionMultiplier5mongo.connectTimeout10000mongo.maxW

    参数同步   2019-02-21 浏览(2233) 阅读原文>>
  • 从零开发参数同步框架(五)—— Spring集成

    前面几章详细介绍了这个参数同步框架代码中的工具类、服务端、客户端等代码以及相关解释。不过由于个人的语言组织能力比较弱,可能写的比较乱,部分名词容易混淆,还请各位看官连看带猜吧。截止到上一章为止,参数同步框架以及可以投入生产使用了。只是不管是客户端还是服务端的项目,都需要在web项目启动之后,手动调用一遍zk连接初始化的代码。我们回顾一下服务端初始化:java Object zkHostString props.get("ggframework.zookeeper"); //直接指定zookeeper地址 if(zkHostString ! null && String.valueOf(zkHostString).length() 0) { GgFrameworkUtil.initCuratorFramework(String.valueOf(zkHostString)); } else { //从默认配置文件加载 GgFrameworkUtil.initCuratorFramework(); }客户端初始化:java //初始化zk连接 GgFrameworkUtil.initCuratorFramework(); //创建连接池 ExecutorService pool Executors.newCachedThreadPool(); //创建需要监听的信息,这里是按约定的库和表 GgTable table new GgTable(); table.setDb("searchmanager"); table.setTable("tbmgrparameters"); try { //添加监听节点信息 GgFrameworkClient.listener(table, new IChangedService() { @Override public void excute(GgTable table) { cacheService.loadPortraitParameters(); } }, pool); } catch (Exception e) { e.printStackTrace(); }从上面的代码中不难看出,服务端和客户端都有相同的代码,那就是初始化zk连接:GgFrameworkUtil.initCuratorFr

    参数同步   Spring   2018-10-30 浏览(2157) 阅读原文>>
  • 从零开发参数同步框架(四)—— 客户端编码

    客户端框架的客户端代码完成的主要功能分为以下几个方面:1. 初始化zk连接(initClient):根据默认或者指定的zk集群地址,创建一个Curator维护的zk连接对象。2. 添加节点监听(listener):根据指定的数据库+数据表,在zk上创建对应的节点,并添加监听事件。特别地,如果调用该方法的时候客户端已完成zk连接的初始化,则直接调用addListenerToNode方法,为实际zk节点添加监听事件,否则会将节点信息暂存在内存中,等待zk连接完成之后回调addListenerFromCache方法3. 给节点添加监听事件(addListenerToNode):为实际的zk节点(与listener方法添加的数据库、数据表关联)添加监听事件,当这个节点(本系列文章中的参数表,即服务端管理的配置持久化表)的数据发生变更,会在当前客户端上触发刚刚添加的监听事件。4. 根据缓存给节点添加监听事件(addListenerFromCache):根据内存中所有节点信息,通过调用addListenerToNode方法,为每个节点创建监听事件。然后从内存删除已创建事件的节点信息。5. 释放节点的监听事件(releaseListener):删除已创建事件的节点上的监听事件。--- 客户端功能详解 初始化zk连接这个比较简单,直接调用之前介绍的工具类即可:java //初始化连接zookeeper public static void initClient(String zkHost) { if(StringUtils.isBlank(zkHost)) { GgFrameworkUtil.initCuratorFramework(); } else { GgFrameworkUtil.initCuratorFramework(zkHost); } } 添加节点监听这个方法有三个参数: GgTable:维护这个节点的监听目标,指定数据库、数据表即可。 IChangedService:这个接口就是当GgTable对应节点信息发生变动,即服

    参数同步   2018-10-27 浏览(1393) 阅读原文>>
  • 从零开发参数同步框架(三)—— 服务端编码

    服务端功能仅就框架而言,服务端(GgFrameworkServer)代码的功能只有一个,向客户端发送(方法是:broadcast(GgTable table))某个数据发生变动的信息。注意:这里服务端提供的broadcast方法不会指定通知哪个客户端,只会通知参数对应的节点,这样就达到与客户端解耦的目的。客户端也无需知道谁是服务端,它只要告诉zookeeper自己想要监听的参数信息即可。不过,作为一个完整的参数同步框架,其服务端还需要提供完整的如下功能:1. 参数管理:这是一个可视化界面,方便用户进行参数查询、分组查询、参数权限控制等。2. 修改日志:记录每一个参数的详细修改记录,包括参数初始导入信息、修改信息。信息包含时间、当时值、修改之后的值。3. 变动通知:当参数发生变动时,需要服务端通过框架代码提供的功能(GgFrameworkServer.broadcast),向客户端发送变动通知同时传递约定好的数据(本框架中就是GgTable)。4. 参数查询:当客户端接到变动通知后,将会通过这个接口从服务端查询参数的最新值。这是一个dubbo接口,因此服务端和客户端同样也无需知晓对方的地址,可以解耦。接口接收的主要参数是客户端指定的参数key列表。--- 服务端初始化在web项目启动之后,调用GgFrameworkUtil.initCuratorFramework方法既可以初始化对zookeeper的连接:java Object zkHostString props.get("ggframework.zookeeper"); //直接指定zookeeper地址 if(zkHostString ! null && String.valueOf(zkHostString).length() 0) { GgFrameworkUtil.initCuratorFramework(String.valueOf(zkHostString)); } else { //从默认配置文件加载 GgFrameworkUtil.initCuratorFramework(); }项目启动

    参数同步   2019-02-20 浏览(2418) 阅读原文>>
  • 从零开发参数同步框架(二)—— 前期准备之工具类

    零、基础定义 约定本框架对与监听参数的设计功能是通用的,它维护一个监听的数据节点信息,包含监听的db、table以及id信息。在zookeeper上,创建一个广播节点(broadcasetnode)作为根节点;在根节点下的目录结构是/broadcasetnode/db/table/id,每个客户端可以监听对应的节点以获取不同范围的触发事件。 GgTable当平台管理的参数发生变动时,服务端代码会将该对象传递给zk节点,然后通过监听事件传递给对应的客户端。它保存了监听的详情,包括监听的数据库、数据表、数据字段。框架默认实现的功能是触发table级别的事件,另外两个级别需要大家自行实现,比较简单。javaimport java.io.Serializable;public class GgTable implements Serializable { private static final long serialVersionUID 5755663143906038786L; //数据库 private String db; //表 private String table; //默认的id主键值,long型 private Long id; //自定义字段名 private String field; //field 相对于 数据记录的 value值 private Object value; public GgTable(String db, String table) { super(); this.db db; this.table table; } //get、set、equals、toString等方法省略} Curator实例缓存CuratorFrameworkUtil工具类对Curator实例对象CuratorFramework进行了缓存,缓存的Key就是zk地址,它负责创建最简洁的连接对象并复用。这个简洁的对象与框架路径无关。javapublic class CuratorFrameworkUtil extends GgFrameworkAbstract { private static final String LOGPREV "[CuratorFrameworkUtil] "; //注册zk地址,命名前缀解析 private static final String PREFIX "://"; //zk连接客户端

    参数同步   Curator   2018-10-24 浏览(3788) 阅读原文>>
  • 从零开发参数同步框架(一)—— 项目起源

    前言从事Java开发已经有八个多年头了,从开始参加工作,就一直自诩热爱技术、喜欢钻研、喜欢写代码。三年前,我开始意识到,自己也并没有哪一个方面的技术达到足够的深度,甚至技术广度也远远不足。所以,从那时开始,有意识的折腾一些整体性的应用,俗称造轮子。三年前,我刚好从工作了四年多的爱裳邦购离职加入了现在这家公司——猎上网。新公司接触的项目确实比较多,加上一年后升职为后端技术经理,接触并负责公司所有的后端项目。当时,公司处于一个高速发展的阶段,所以很多基础建设不是很全面,整个技术部门都是以快速支撑为目的。当时公司很多项目已经开始服务化部署,因此项目划分很细,不同的项目大概有20来个,线上的容灾部署约有60台虚拟机。加上,公司业务发展迅速,各种活动、产品迭代频繁,而当时项目参数配置还是传统的resource.properties方式。所以矛盾很明显,这种参数配置方式需要重启项目才能使更改之后的值生效,而且几十台项目的参数无法集中管理。于是,能够集中化管理所有项目参数并实时推送的一个框架/平台对我们来说就显得非常重要和必须了。原谅我当时孤陋寡闻,并没有接触过阿波罗这个框架,加上一些的小自私(锻炼下技术),我决定自己利用闲暇时间,研发一个适用于公司的参数同步框架。--- 设计思路通过一个中心化数据管理平台,集中管理所有项目的配置参数,尤其是需要实时动态管理的那些。定义:参数管理平台称为服务端,所有接入平台的项目称为客户端。它有以下功能:1. 所有参数可以按照项目、描述等信息进行管理和查询。2. 所有参数支持动态修改,并由平台实时推送到那些使用它的服务器上。3. 所有参数都保留完整的修改历史,方便回退。4. 所有参数都以字符串形式存

    参数同步   zookeeper   2018-10-22 浏览(2874) 阅读原文>>
  • 1 
    blogTest
    分享文章
     
    使用APP的"扫一扫"功能,扫描左边的二维码,即可将网页分享给别人。
    你也可以扫描右边本博客的小程序二维码,实时关注最新文章。