当前位置: 首页 > news >正文

株洲网站建设服务山西做网站如何选择

株洲网站建设服务,山西做网站如何选择,山西太原制作网站人有吗,dw做购物网站2019独角兽企业重金招聘Python工程师标准 摘要 为了更好的解决分布式环境下多台服务实例的配置统一管理问题#xff0c;本文提出了一套完整的分布式配置管理解决方案#xff08;简称为disconf[4]#xff0c;下同#xff09;。首先#xff0c;实现了同构系统… 2019独角兽企业重金招聘Python工程师标准 摘要 为了更好的解决分布式环境下多台服务实例的配置统一管理问题本文提出了一套完整的分布式配置管理解决方案简称为disconf[4]下同。首先实现了同构系统的配置发布统一化提供了配置服务server该服务可以对配置进行持久化管理并对外提供restful接口在此基础上基于zookeeper实现对配置更改的实时推送并且提供了稳定有效的容灾方案以及用户体验良好的编程模型和WEB用户管理界面。其次实现了异构系统的配置包管理提出基于zookeeper的全局分布式一致性锁来实现主备统一部署、系统异常时的主备自主切换。通过在百度内部以及外部等多个产品线的实践结果表明本解决方案是有效且稳定的。 技术背景 在一个分布式环境中同类型的服务往往会部署很多实例。这些实例使用了一些配置为了更好地维护这些配置就产生了配置管理服务。通过这个服务可以轻松地管理成千上百个服务实例的配置问题。 王阿晶提出了基于zooKeeper的配置信息存储方案的设计与实现[1], 它将所有配置存储在zookeeper上这会导致配置的管理不那么方便而且他们没有相关的源码实现。淘宝的diamond[2]是淘宝内部使用的一个管理持久配置的系统它具有完整的开源源码实现它的特点是简单、可靠、易用淘宝内部绝大多数系统的配置都采用diamond来进行统一管理。他将所有配置文件里的配置打散化进行存储只支持KV结构并且配置更新的推送是非实时的。百度内部的BJF配置中心服务[3]采用了类似淘宝diamond的实现也是配置打散化、只支持KV和非实时推送。 同构系统是市场的主流特别地在业界大量使用部署虚拟化如JPAAS系统SAEBAE的情况下同一个系统使用同一个部署包的情景会越来越多。但是异构系统也有一定的存在意义譬如对于“拉模式”的多个下游实例同一时间点只能只有一个下游实例在运行。在这种情景下就存在多台实例机器有“主备机”模式的问题。目前国内并没有很明显的解决方案来统一解决此问题。 功能特点与设计理念 disconf是一套完整的基于zookeeper的分布式配置统一解决方案。 它的功能特点是 支持配置配置项配置文件的分布式化管理 配置发布统一化配置发布、更新统一化云端存储、发布:配置存储在云端系统用户统一在平台上进行发布、更新配置。配置更新自动化用户在平台更新配置使用该配置的系统会自动发现该情况并应用新配置。特殊地如果用户为此配置定义了回调函数类则此函数类会被自动调用。配置异构系统管理 异构包部署统一化这里的异构系统是指一个系统部署多个实例时由于配置不同从而需要多个部署包jar或war的情况下同。使用Disconf后异构系统的部署只需要一个部署包不同实例的配置会自动分配。特别地在业界大量使用部署虚拟化如JPAAS系统SAEBAE的情况下同一个系统使用同一个部署包的情景会越来越多Disconf可以很自然地与他天然契合。 异构主备自动切换如果一个异构系统存在主备机主机发生挂机时备机可以自动获取主机配置从而变成主机。异构主备机Context共享工具异构系统下主备机切换时可能需要共享Context。可以使用Context共享工具来共享主备的Context。注解式编程极简的使用方式我们追求的是极简的、用户编程体验良好的编程方式。通过简单的标注极简单的代码撰写即可完成复杂的配置分布式化。需要Spring编程环境它的设计理念是 简单用户体验良好 摒弃了打散化配置的管理方式[2,3]仍旧采用基于配置文件的编程方式这和程序员以前的编程习惯配置都是放在配置文件里一致。特别的为了支持较为小众的打散化配置功能还特别支持了配置项。采用了基于XML无代码侵入编程方式只需要几行XML配置即可实现配置文件发布更新统一化、自动化。采用了基于注解式的弱代码侵入编程方式通过编程规范一个配置文件一个配置类代码结构简单易懂。XML几乎没有任何更改与原springXML配置一样。真正编程时几乎感觉不到配置已经分布式化可以托管任何类型的配置文件这与[2,3]只能支持KV结构的功能有较大的改进。配置更新实时推送提供界面良好Web管理功能可以非常方便的查看配置被哪些实例使用了。 详细设计 架构设计 disconf服务集群模式 disconf的模块架构图 每个模块的简单介绍如下 Disconf-core 分布式通知模块支持配置更新的实时化通知路径管理模块统一管理内部配置路径URLDisconf-client 配置仓库容器模块统一管理用户实例中本地配置文件和配置项的内存数据存储配置reload模块监控本地配置文件的变动并自动reload到指定bean扫描模块支持扫描所有disconf注解的类和域下载模块restful风格的下载配置文件和配置项watch模块监控远程配置文件和配置项的变化主备分配模块主备竞争结束后统一管理主备分配与主备监控控制主备竞争模块支持分布式环境下的主备竞争Disconf-web 配置存储模块管理所有配置的存储和读取配置管理模块支持配置的上传、下载、更新通知模块当配置更新后实时通知使用这些配置的所有实例配置自检监控模块自动定时校验实例本地配置与中心配置是否一致权限控制web的简单权限控制Disconf-tools context共享模块提供多实例间context的共享。 流程设计 运行流程详细介绍 与2.0版本的主要区别是支持了主备分配功能/主备切换事件。 启动事件A以下按顺序发生。 A3扫描静态注解类数据并注入到配置仓库里。A4A2根据仓库里的配置文件、配置项去 disconf-web 平台里下载配置数据。这里会有主备竞争A5将下载得到的配置数据值注入到仓库里。A6根据仓库里的配置文件、配置项去ZK上监控结点。A7A2根据XML配置定义到 disconf-web 平台里下载配置文件放在仓库里并监控ZK结点。这里会有主备竞争。A8A1-A6均是处理静态类数据。A7是处理动态类数据包括实例化配置的回调函数类将配置的值注入到配置实体里。更新配置事件B以下按顺序发生。 B1管理员在 Disconf-web 平台上更新配置。B2Disconf-web 平台发送配置更新消息给ZK指定的结点。B3ZK通知 Disconf-cient 模块。B4与A4一样。B5与A5一样。B6基本与A4一样唯一的区别是这里还会将配置的新值注入到配置实体里。主备机切换事件C以下按顺序发生。 C1发生主机挂机事件。C2ZK通知所有被影响到的备机。C4与A2一样。C5与A4一样。C6与A5一样。C7与A6一样。 模块实现 disconf-web提供了前后端分离的web架构具体可见https://github.com/knightliao/disconf/tree/master/disconf-web 本部分会重点介绍disconf-client的实现方式。 注解式disconf实现 本实现会涉及到 配置仓库容器模块、扫描模块、下载模块、watch模块 使用AOP拦截的一个好处是可以比较轻松的实现配置控制比如并发环境下的配置统一生效。关于这方面的讨论可以见这里。 特别地本方式提供的编程模式非常简单例如使用以下配置类的程序在使用它时可以直接Autowired进来进行调用使用它时就和平常使用普通的JavaBean一样但其实它已经分布式化了。配置更新时配置类亦会自动更新。 Service DisconfFile(filename redis.properties) public class JedisConfig {// 代表连接地址private String host;// 代表连接portprivate int port;/*** 地址, 分布式文件配置* * return*/DisconfFileItem(name redis.host, associateField host)public String getHost() {return host;}public void setHost(String host) {this.host host;}/*** 端口, 分布式文件配置* * return*/DisconfFileItem(name redis.port, associateField port)public int getPort() {return port;}public void setPort(int port) {this.port port;} }基于XML配置disconf实现 本实现提供了无任何代码侵入方式的分布式配置。 ReloadablePropertiesFactoryBean继承了Spring Properties文件的PropertiesFactoryBean类管理所有当配置更新时要进行reload的配置文件。对于被管理的每一个配置文件都会通过 配置仓库容器模块、扫描模块、下载模块、watch模块 进行配置获取至配置仓库里。 ReloadingPropertyPlaceholderConfigurer继承了Spring Bean配置值控制类PropertyPlaceholderConfigurer。在第一次扫描spring bean里disconf会记录配置文件的配置与哪些bean有关联。 ReloadConfigurationMonitor是一个定时任务定时check本地配置文件是否有更新。 当配置中心的配置被更新时配置文件会被下载至实例本地ReloadConfigurationMonitor即会监控到此行为并且通知 ReloadingPropertyPlaceholderConfigurer 对相关的bean类进行值更新。 特别的此种方式无法解决并发情况下配置统一生效的问题。 主备分配实现 在实现中为每个配置提供主备选择的概念。用户实例在获取配置前需要先进行全局唯一性竞争才能得到配置值。在这里我们采用基于zookeeper的全局唯一性锁来实现。 Comparisons  淘宝Diamond[2]Disconf比较数据持久性存储在mysql上存储在mysql上都持久化到数据库里都易于管理推拉模型拉模型每隔15s拉一次全量数据基于Zookeeper的推模型实时推送disconf基于分布式的Zookeeper来实时推送在稳定性、实效性、易用性上均优于diamond配置读写支持实例对配置读写。支持某台实例写配置数据并广播到其它实例上只支持实例对配置读。通过在disconf-web上更新配置到达到广播写到所有应用实例从目前的应用场景来看实例对配置的写需求不是那么明显。disconf支持的中心化广播方案可能会与人性思考更加相似。容灾多级容灾模式配置数据会dump在本地避免中心服务挂机时无法使用多级容灾模式优先读取本地配置文件。双方均支持在中心服务挂机时配置实例仍然可以使用配置数据模型只支持KV结构的数据非配置文件模式支持传统的配置文件模式配置文件亦支持KV结构数据(配置项)使用配置文件的编程方式可能与程序员的编程习惯更为相似更易于接受和使用。编程模型需要将配置文件拆成多个配置项没有明显的编程模型在使用配置文件的基础上提供了注解式和基于XML的两种编程模型无并发性多条配置要同时生效时无法解决并发同时生效的问题基于注解式的配置可以解决并发性问题无 Reference 王阿晶邹仕洪: 基于ZooKeeper的配置信息存储方案的设计与实现淘宝diamod实现http://code.taobao.org/p/diamond/src/, 2012百度BJF配置中心, 2014disconf github: https://github.com/knightliao/disconf, 2014淘宝分布式配置管理服务DiamondzooKeeper和Diamond有什么不同diamond专题一-- 简介和快速使用 转载于:https://my.oschina.net/yq0128/blog/711310
http://www.pierceye.com/news/953777/

相关文章:

  • 雨颜色网站建设电器类网站设计
  • 网站建设模块化实现企业网站建设范文
  • 网站培训班有哪些课程中国工程建设标准化协会官方网站
  • 医院网站建设 费用做商业网站
  • 网站设计考虑因素wordpress录入表单写数据库
  • 个人博客网站设计网站优化方式有哪些
  • 网站建设文化教程网站开发建设成本
  • 洛阳做网站公司汉狮价格wordpress移动端悬浮导航
  • 免费网站的代码wordpress给分类添加自定义栏目
  • 网站建设额怎么自己做网站app
  • 长沙市网站推广电话兰州的互联网公司有哪些
  • 湖南网站设计亮点昆山高端网站设计公司
  • 自己做网站教程客户管理系统免费版
  • 购买域名后怎么使用山东seo
  • 单位写材料素材网站孝感建设局网站
  • 做win精简系统的网站免费找客户网站
  • 腾和企业网站 优帮云网站建设岗位说明
  • 城市建设网站淮安哪有专业做网站的公司
  • 作风建设提升年活动网站毕节公司做网站
  • access数据库网站广州建网站哪儿济南兴田德润简介
  • 上海网站建设seo抖音短剧推广怎么做
  • 京东网站建设策划书网站建设常用编程语言
  • 济南教育论坛网站建设page n wordpress
  • 网站域名在山东备案却在苏州产教融合信息门户网站建设方案
  • 南京网站网站建设传奇网页
  • 网站后台更新怎么做详情页怎么设计
  • 网站怎么做导航wordpress付费破解
  • 宁津网站建设国内免费设计素材网站
  • 泰安有口碑的企业建站公司二手汽车手机网站模板
  • 网站百度快照怎么做网站调用谷歌地图