精华内容
下载资源
问答
  • 用dbschema工具导出Informix数据库的结构具体步骤: (1)导出数据库中所有的表结构到文件db.sql $>dbschema -d your_database -t all db.sql (2)导出数据库中所有的存储过程到文件db.sql $>dbschema...

    用dbschema工具导出Informix数据库结构的具体步骤:

    (1)导出数据库中所有的表结构到文件db.sql

    $>dbschema -d your_database -t all db.sql

    (2)导出数据库中所有的存储过程到文件db.sql

    $>dbschema -d your_database -f all db.sql

    (3)导出数据库中的所有对象(包含表,存储过程,触发器。。。)到文件db.sql

    $>dbschema -d your_database db.sql

    (4)导出数据库中一个表的结构到文件db.sql

    $>dbschema -d your_database_name -t your_table_name db.sql

    (5)导出一个存储过程定义到文件db.sql

    $>dbschema -d your_database_name -f your_PRocedure_name db.sql

    (6)如果导出更多的表的信息(EXTENT...)

    $>dbschema -d your_database_name -ss db.sql

    (7)导出数据库中对用户或角色的授权信息

    $>dbschema -d your_database_name -p all

    $>dbschema -d your_database_name -r all

    (8)导出数据库中的同义词

    $>dbschema -d your_database_name -s all

    展开全文
  • (三)配置中心基本流转图和支撑体系分析 具体可如图所示: (四)多种配置中心的选择与对比方案 具体对比分类 具体对比项 重要程度 Spring Cloud Config Netflix Archaius Ctrip Apollo DisConf 功能特性 静态配置...

    目录

    注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。

    一、配置中心的由来及选择

    (一)配置中心由来

    (二)配置中心要求具备的功能

    (三)配置中心基本流转图和支撑体系分析                       ​

    (四)多种配置中心的选择与对比方案

    二、Spring Cloud Config概述及基本实现方法介绍

    三、Spring Cloud Config结合Git实现配置中心方案

    (一)Git版基本工作原理(未加Spring Cloud Bus热刷新)

    (二)Git多种配置信息讲解

    (三)基本的手动刷新和结合Spring Cloud Bus热刷新

    四、Spring Cloud Config结合关系型数据库MYSQL实现配置中心方案

    (一)基本实现原理

    (二)基本要求讲解

    五、Spring Cloud Config结合非关系性数据库MongoDB实现配置中心方案

    (一)基本实现原理

    (二)基本要求讲解

    六、Spring Cloud Config使用技能及功能扩展

    (一)基本实用技能:本地参数覆盖远程参数

    (二)客户端自动刷新实现

    (三)客户端回退功能实现

    (四)客户端安全认证机制JWT实现

    七、Spring Cloud Config实现客户端及服务端高可用方案

    (一)客户端高可用原理及方案

    (二)服务端高可用原理及方案

    八、Spring Cloud Config与Apollo配置使用实现界面化操作

    (一)Apollo基本概述及基本功能介绍

    (二)Apollo总体架构模块分析

    (三)Apollo客户端设计与运行环境介绍

    参考书籍、文献和资料:


    注:主要只做理论性的总结与分析,相关实战代码会在后面的博客中和github中逐步增加。

    一、配置中心的由来及选择

    (一)配置中心由来

    互联网时代下的分布式系统,应用部署在N台服务器上或在云化环境以多实例呈现,如果一个实例一个实例(或一台服务器一台服务器)进行修改配置和重启,一是维护成本极高,二是不现实,配置中心的思想便应运而生。配置中心用作集中管理不同环境和不同集群配置,以及在修改配置后实时动态推送到应用动态更新。

    配置中心管理作为微服务六大实现技术之一,从模型上来分析,包括4大分类、4个核心需求和2个维度分析,在分布式下配置中心在实现上需要满足3大需求:高效获取、实时感知、分布式访问。基本理论在之前博客中已经讲解过,具体见以下博客链接:https://blog.csdn.net/xiaofeng10330111/article/details/85682513

    (二)配置中心要求具备的功能

    配置中心应该剧本具备以下基本功能,具体如图:

    这里只展示了基本的实现功能,从功能特性、技术路线、可用性和易用性方面还有更多的功能要求,具体可以见(四)以及对应的配置中心实现方案对比。

    (三)配置中心基本流转图和支撑体系分析

    具体可如图所示:

            

    (四)多种配置中心的选择与对比方案

    具体对比分类 具体对比项 重要程度 Spring Cloud Config Netflix Archaius Ctrip Apollo DisConf
    功能特性 静态配置管理 基于file 支持 支持
    动态配置管理 支持 支持 支持 支持
    统一管理 无,需要git、数据库等 支持 支持
    多维度管理 无,需要git、数据库等 支持 支持
    变更管理 无,需要git、数据库等
    本地配置缓存 支持 支持
    配置更新策略
    配置锁 支持 不支持 不支持 不支持
    配置校验
    配置生效时间 重启生效,手动刷新 手动刷新生效 实时 实时
    配置更新推送 需要手动触发 需要手动触发 支持 支持
    配置定时拉取 支持 配置更新目前依赖事件驱动,client重启或server推送操作
    用户权限管理 无,需要git、数据库等 支持 支持
    授权、审核、审计 无,需要git、数据库等 界面直接提供发布历史和回滚按钮 操作记录有赖数据库,但无查询接口
    配置版本管理 git 支持 无,需要git、数据库等
    配置合规检测 不支持 不支持 支持(还需完善)  
    实例配置监控 需要结合Spring Admin 不支持 支持 支持,可以查看每个配置在哪台机器上加载
    灰度发布 不支持 不支持 支持 不支持部分更新
    告警通知 不支持 不支持 支持邮件方式告警 支持邮件方式告警
    统计报表 不支持 不支持 不支持 不支持
    依赖关系 不支持 不支持 不支持 不支持
    技术路线 支持Spring Boot 原生支持 支持 与Spring Boot无关
    支持Spring Config 原生支持 支持 与Spring Cloud无关
    客户端支持 java java java、.net java
    业务系统入侵性 入侵性弱 入侵性弱 入侵性弱 入侵性弱,支持注解和xml
    可依赖组件        
    可用性 单点故障(SPOF) 支持HA部署 支持HA部署 支持HA部署 支持HA部署,高可用由ZK提供
    多数据中心部署 支持 支持 支持 支持
    配置获取性能 unkown unkown unkown unkown
    易用性 配置界面 无,需要git、数据库等操作 统一界面 统一界面

    结论:

    • 从整体上来看的话,携程的Apollo性能及各方面相对于其他配置中心而言是最好的,因为其支持pring Boot和Spring Config,所以在微服务架构中建议最好采用Apollo来作为配置中心;
    • Spring Cloud Config相对Apollo性能与支持没有很全面,但是可以采用一定的开源技术及现有技术进行改善加之原生支持pring Boot和Spring Config,在微服务架构中也是强烈建议采用的方案;
    • 其他两种方案在微服务架构中不建议采用,在此不做分析。

    我们主要对Spring Cloud Config进行分析和理解,Apollo做辅助分析,关于Apollo的相关知识有时间在进行学习和分享。

    二、Spring Cloud Config概述及基本实现方法介绍

    Spring Cloud Config是Spring Cloud微服务体系中的配置中心,是一个集中化外部配置的分布式系统,由服务端和客户端组成,其不依赖于注册中心,是一个独立的配置中心,支持多种存储配置信息形式,目前主要有jdbc、value、native、svn、git,其中默认是git。重点讨论功能有如下两个方面:

    • 将程序中配置的各种功能开关、参数配置、服务器地址------>修改后实时生效
    • 灰度发布、分环境、分集群管理配置--------->全面集中化管理

    因为采用native方式必然决定了每次配置完相关文件后一定要重启Spring Cloud Config,所以一般我们不会采用此方案,在实际操作中我们主要的实现方案有以下四种:Spring Cloud Config结合Git实现配置中心方案+Spring Cloud Config结合关系型数据库实现配置中心方案+Spring Cloud Config结合非关系型数据库实现配置中心方案+Spring Cloud Config与Apollo配置结合实现界面化配置中心方案。

    三、Spring Cloud Config结合Git实现配置中心方案

    (一)Git版基本工作原理(未加Spring Cloud Bus热刷新)

    配置客户端启动时会向服务器发起请求,服务端接收到客户端的请求后,根据配置的仓库地址将Git上的文件克隆到本地的一个临时目录中,这个目录是一个Git的本地仓库目录,然后服务端再读取本地文件返回给客户端。这样做的好处是,当Git服务器故障或者网络请求异常时,保证服务端仍然可以正常工作。

    在实际实现上,服务端需要配置好git的uri地址信息以及search-paths信息,并在对应Git中与之相对应,客户端在bootstrap文件中按照其内容和具体文件名进行配置label、uri、name、profile等消息即可,但是在基本实现上如果修改文件后依旧需要重启来解决此问题,所以需要进行手动刷新或结合Spring Cloud Bus进行热刷新。

    (二)Git多种配置信息讲解

    关于Git配置信息而言,其主要有以下几种方式:

    1.本地仓库

    Spring Cloud Config默认使用Git,对Git的配置也最简单,Config Server可用uri、username、password这三个参数就可以读取配置了,通过Git的版本控制可以使Config Server适应特殊的场景。

    测试时我们也可以使用本地仓库的方式,使用file://前缀,那么uri的配置就可以写作

    spring:
      cloud: 
        config: 
          server: 
            git: 
              uri: file://${user.home}/config-repo     #注意:Windows系统需要使用file:///前缀
                                                       #     ${user.home}代表当前用户的家目录

    2.占位符配置URI

    Spring Cloud Config Server支持占位符的使用,支持{application}{profile}{label}这些占位符对Git的uri配置,通过占位符使用应用名称来区分应用对应的仓库然后进行使用。这里需要注意仓库名称和仓库下面的配置文件名称一致才可以,因为配置了spring.cloud.config.name默认占位符匹配的是spring.application.name。

    spring:
      cloud: 
        config: 
          server: 
            git: 
              uri: https://github.com/hellxz/SpringCloudlearn/config-repo/{application}
                   #此时spring.application.name的值会填充到这个uri中,从而达到动态获取不同位置的配置
    

    3.匹配并配置多个仓库

    Spring Cloud Config Server除了使用{应用名}/{环境名}来匹配配置仓库外,还支持通过带有通配符的表达式来匹配。

    当有多个匹配规则的时候,可以用逗号分隔多个{应用名}/{环境名}配置规则。以官方文档例子举例:

    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo   #默认的仓库
              #注意:配置多个仓库时,Config Server 在启动时会直接克隆第一个仓库的配置库,其他配置库只有请求时才会clone到本地
              repos:
                simple: https://github.com/simple/config-repo
                special:
                  pattern: special*/dev*,*special*/dev*
                  uri: https://github.com/special/config-repo
                local:
                  pattern: local*
                  uri: file:/home/configsvc/config-repo
                test: 
                  pattern: 
                    - '*/development'
                    - '*/staging'
                  uri: https://github.com/development/config-repo

    如果{应用名}/{环境名}不能匹配到仓库,那么就在默认的uri下去查找配置文件。

    上边的例子中,

    • simple 仓库自动匹配到 simple/*
    • special 仓库的pattern,第一个是应用名以special开头,环境名以dev开头;第二个是应用名包含special,环境名以dev开头;多个匹配到同一uri的pattern用逗号分割
    • local 仓库的的pattern也会自动补全为local*/*
    • test仓库中的 pattern 是以通配符开始的,需要使用单引号

    4.子目录存储

    通过spring.cloud.config.server.git.searchPaths来定位到Git仓库的子目录中,相当于在uri后加上searchPaths的目录。

    searchPaths参数的配置也支持使用{应用名}、{环境名}、{分支名}占位符,比如spring.cloud.config.server.git.searchPaths={应用名},通过这样的配置,我们能让每一个应用匹配到自己的目录中。如下举例:

    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo
              searchPaths: '{application}'

    5.访问权限

    使用Git仓库的时候,使用HTTP认证需要使用username和password属性来配置账户,具体如下:

    (还可以使用SSH认证,Config Server本地的.ssh文件或使用私钥等进行配置,如:http://cloud.spring.io/spring-cloud-static/Finchley.RELEASE/single/spring-cloud.html#_git_ssh_configuration_using_properties)

    spring:
      cloud:
        config:
          server:
            git:
              uri: https://github.com/spring-cloud-samples/config-repo
              username: trolley
              password: strongpassword

    (三)基本的手动刷新和结合Spring Cloud Bus热刷新

    为了避免重启项目才能获取最新的配置信息,可以进一步优化做到手动刷新和结合Spring Cloud Bus进行热刷新,其基本要求一般不改动服务端相关配置和代码,但是需要各客户端增加断点访问依赖和安全依赖,这样就可以对外通过访问客户端刷新断点uri来进行刷新操作,手动刷新就是直接访问断点的方式,虽然简单,但是如果每次都要手动刷新的话,面对微服务很多的情况下,就会因为操作人员忘记或者遗漏的情况,从而造成服务出错。在生产实践中,我们往往要求结合Spring Cloud Bus进行热刷新。

    结合Spring Cloud Bus进行热刷新的操作如上图所示,用户更新配置信息时,检查到Git Hook变化,触发Hook配置地址的调用,Config Server接收到请求并发布消息,Bus将消息发送到Config Client,当Config Client接收到消息后重新发送请求加载配置消息。

    四、Spring Cloud Config结合关系型数据库MYSQL实现配置中心方案

    (一)基本实现原理

    Spring Cloud Config是一个独立的配置中心,支持多种存储配置信息形式,其中包括jdbc方式,其基本原理图如下: 

    git有它天然的优势,比如多版本管理、分支管理、提交审核策略等等,但是如果相对其中存储的数据做细粒度的权限控制,就力不从心了。我们可以将持久化从git迁移到MySQL上,这样的好处就是,可以针对配置中心,方便开发出一些对外接口,例如一些用户可配置的动态改更新的参数,同时,由于是数据库方式,当让可以自己在此基础上实现视图化和刷新机制,整体上显得更加优雅。

    (二)基本要求讲解

    具体实现上,需要Config Server端增加服务中心jar包、-配置中心jar包、连接msql数据库相关jar包这三个必须的jar包,在配置文件中需要增加对应的服务名称、连接配置信息、mysql 属性配置、指定注册中心地址等,具体我们要分析的是连接配置信息:

    #连接配置信息
     spring:
      application:
       name: config-server-jdbc
      profiles:
       active: jdbc
      cloud:
       config:
        server:
         default-label: dev
         jdbc:
          sql: SELECT akey , avalue FROM config_server where APPLICATION=? and APROFILE=? and LABEL=?

    连接配置信息中:

    • spring.profiles.active=jdbc ,自动实现JdbcEnvironmentRepository。
    • sql语句自定义,否则会默认为“SELECT KEY, VALUE from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?”,具体可以参考 JdbcEnvironmentRepository 实现。非必须,这里由于采用mysql数据源,keyvalue是保留关键词,原生的实现语句会报错,所以需要重写一下这句查询语句(如果存储的表结构设计不同于上面准备的内容,也可以通过这个属性的配置来修改配置的获取逻辑)
    • 数据库建表为config_server,由于key,value和profile是mysql关键字,所以都在最前面加了a。当然表名字段名都可以自定义。
    • {application} 对应客户端的"spring.application.name"属性;
    • {aprofile} 对应客户端的 "spring.profiles.active"属性(逗号分隔的列表); 
    • {label} 对应服务端属性,这个属性能标示一组配置文件的版本.
    • 只要 select出来是两个字段 ,框架会 自动包装到environment的map<key,value> 。

    然后便是启动类等注解配置和数据库相关操作与构建,相关代码具体见后面博客及github。

    注意,JDBC存储的使用思路,具体使用实际上还有很多可以优化的空间,比如:索引的优化、查询语句的优化;如果还需要进一步定制管理,对于表结构的优化也是很有必要的。

    五、Spring Cloud Config结合非关系性数据库MongoDB实现配置中心方案

    (一)基本实现原理

    Spring Cloud Config作为独立的配置中心,支持多种存储配置信息形式,但是没有提供MongoDB的方式,但是目前已经有相关孵化器,其基本原理图如下:

    其基本原理与关系型数据库原理相类似,相关代码具体见后面博客及github。

    (二)基本要求讲解

    具体实现上,需要Config Server端增加服务中心jar包、-配置中心jar包、连接mongo数据库相关jar包这三个必须的jar包,在配置文件中需要增加对应的服务名称、连接配置信息、mongo属性配置、指定注册中心地址等,相关代码具体见后面博客及github。

    六、Spring Cloud Config使用技能及功能扩展

    (一)基本实用技能:本地参数覆盖远程参数

    主要是指使用本地的参数覆盖远程的参数,这在开发的时候经常会用到,主要配合内容如下:

    spring:
      cloud:
        config:
          allowOverride: true
          overrideNone: true
          overrideSystemProperties: false

    这三个属性的意思是:

    • spring.cloud.config.allowOverride:如果想要远程配置优先级高,那么allowOverride设置为false;如果想要本地配置优先级高那么allowOverride设置为true,默认为true;
    • spring.cloud.config.overrideNone:overrideNone为true时本地配置优先级高,包括系统环境变量、本地配置文件等等,默认为false;
    • spring.cloud.config.overrideSystemProperties:只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置,默认为true。

    (二)客户端自动刷新实现

    在一些应用上面,不需要在服务端批量推送的时候,客户端本身需要获取变化参数的情况,这个时候需要使用客户端自动刷新来完成该功能。具体实现上,可以单独在二方包中增加一个用于自动刷新的功能,引入spring-cloud-config-client和spring-cloud-autoconfigure,并且增加自动配置类(增加间隔刷新时间),在该类中主要注入端点类,通过定时任务和刷新时间,进行配置请求刷新,添加配置后,我们将二方包引入到实际的客户端应用中。

    在客户端中需要引入spring-cloud-config-client、spring-boot-starter-security和我们刚刚新做的二方包,并且在对应的配置文件中增加spring.cloud.config.refreshInterval内容,写一个相关的控制器便可以开始测试了,相关代码具体见后面博客及github。

    (三)客户端回退功能实现

    客户端可以匹配回退机制,主要用于以下两种场景,应用回退手段来处理案例:

    • 因为一定原因出现了网络中断的情况;
    • 配置服务因为一定的原因进行维护而关闭。

    当启用回退时,客户端适配器将“缓存”本地文件系统中的计算属性。要启用回退功能,只需要指定存储缓存的位置即可。

    在具体实现上,我们同样需要在二方包增加对应可以实现客户端回退功能的内容,引入spring-cloud-config-client和spring-security-rsa,增加自动配置类(包含回退本地配置文件所在的文件和名称、要回退配置文件的路径、用来创建本地回退文件的方法)和相关配置内容,

    (四)客户端安全认证机制JWT实现

    Spring Cloud Config客户端使用JWT身份验证方法代替标准的基本身份验证,这种方式需要对服务端和客户端都要改造,具体如下:

    • 客户端向服务端授权Rest Controller发送请求并且带上用户名和密码;
    • 服务端返回JET Token;
    • 客户端查询服务端的配置需要在Header中带上token令牌进行认证。

    在具体实现上,需要在二方包中引入jwt相关内容,并将该二方包作为基本包使用,在此二方包中pom中必须需要引入一下这三项内容spring-boot-autoconfigure、spring-boot-autoconfiguration-processor、spring-cloud-starter-config,创建Config配置类(引入标示username和password以及endpoint内容,同时增加初始化init并采用注解@PostConstruct,表明在Servelt构造函数和Init()方法之间执行具体容器加载),并进一步创建实体类LoginRequest(对应请求username和password)和实体类Token(对应生成的token)。

    将此二方包引入到客户端的pom中,同时引入spring-cloud-config-client,并且在对应bootstrap文件中添加用于参与安全认证所需要的username、password、endpoint(是一个http地址,config server的访问授权地址)。增加启动类和控制器进行测试。

    接下来就需要对服务端的代码进行分析和讨论了,首先,需要在pom中引入spring-cloud-config-server、jwt、gson、spring-boot-starter-security,创建JwtAuthenticationRequest类用于传递用户名和密码,创建JwtAuthenticationResponse实体类返回token信息,创建JwtUser用户认证信息实体类,创建JWT的token认证过滤器和JWT工具类(用于生成token和token验证),创建JWT认证端点类(在认证过程中,未能认证通过的直接返回401状态码),接着创建一个认证账号的验证类MemberServiceImpl及将数据封装为json返回客户端的WebAuthenticationDetailsSourceImpl,最后创建Config进行安全和过滤的自动配置类,增加控制器用于测试,相关代码具体见后面博客及github。相关具体类调用时序图如下:

     

    七、Spring Cloud Config实现客户端及服务端高可用方案

    (一)客户端高可用原理及方案

    客户端的高可用方式,从方案角度来看,主要还是用file的形式,和前面客户端的回退方案思路大致一样,客户端高可用主要是解决当服务端不可用的情况下,在客户端仍然可以正常启动。从客户端的角度出发,不是增加配置中心的高可用性,而是降低客户端对配置中心的依赖程度,从而提高整个分布式架构的健壮性。

    具体实现上,仍然需要创建一个二方包,在二方包中引入spring-cloud-config-client,并且配置属性加载类,创建配置类命名为ConfigSupportConfiguration(主要是用于判断远程加载信息是否可用,如果不能用则将读取加载本地配置文件启动),同时在二方包中增加配置文件spring.factories指明org.springframework.cloud.bootstrap.BootstrapConfiguration。

    将该二方包引入对应的客户端的pom中,同时引入spring-cloud-config-client,在bootstrap文件中增加backup开关并指明你备份的本地地址fallbackLocation,增加对应的启动类和控制器用于测试,相关代码具体见后面博客及github。

    (二)服务端高可用原理及方案

    服务端的高可用在生产环境中也一样重要,通过结合Eureka注册中心的方式来搭建Spring Cloud Config Server高可用,通过Ribbon的负载均衡选择一个Config Server进行连接来获取配置信息,具体流程见上图。

    具体实现上,Eureka相关开发与之前是一样的,不用做多余的代码工作;服务端的pom文件中需要引入spring-cloud-config-server和spring-cloud-starter-netflix-eureka-client,其他按照之前的开发即可;客户端的pom文件中需要引入spring-cloud-config-client和spring-cloud-starter-netflix-eureka-client,并且在bootstrap中不在配置spring.cloud.config.uri信息用于指定Server端地址,而是增加了三个新的配置,具体如下:

    • spring.cloud.config.discovery.enabled:开启Config服务发现支持;
    • spring.cloud.config.discovery.serviceId:指定Server端的name,也就是Server端spring.application.name;
    • euraka.client.service-url.defaultZone:只想注册中心的地址。

    接着,按照以往的流程测试高可用就可以了,相关代码具体见后面博客及github。

    八、Spring Cloud Config与Apollo配置使用实现界面化操作

    (一)Apollo基本概述及基本功能介绍

    1.Apollo简介

    Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,其成熟度和企业级特性要远远强于Spring Cloud体系中的Spring Cloud Config产品。

    Apollo采用分布式微服务架构,它的架构有一点复杂,Apollo的作者宋顺虽然给出了一个架构图,但是如果没有一定的分布式微服务架构基础的话,则普通的开发人员甚至是架构师也很难一下子理解。

    2.Apollo基本功能介绍

    • 统一管理不同环境、不同集群的配置:Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置;同一份代码部署在不同的集群,可以有不同的配置,比如zk的地址等;通过命名空间(namespace)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
    • 配置修改实时生效(热发布): 用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
    • 版本发布管理: 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
    • 灰度发布: 支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
    • 权限管理、发布审核、操作审计:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。 所有的操作都有审计日志,可以方便的追踪问题
    • 客户端配置信息监控: 可以在界面上方便地看到配置在被哪些实例使用
    • 提供Java和.Net原生客户端:提供了Java和.Net的原生客户端,方便应用集成;支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+);同时提供了Http接口,非Java和.Net应用也可以方便的使用
    • 提供开放平台API:Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,对配置的修改不会做过多限制,只要符合基本的格式就能够保存。对于有些使用方,它们的配置可能会有比较复杂的格式,而且对输入的值也需要进行校验后方可保存,如检查数据库、用户名和密码是否匹配。对于这类应用,Apollo支持应用方通过开放接口在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制。
    • 部署简单:配置中心作为基础服务,可用性要求非常高,这就要求Apollo对外部依赖尽可能地少。目前唯一的外部依赖是MySQL,所以部署非常简单,只要安装好Java和MySQL就可以让Apollo跑起来。Apollo还提供了打包脚本,一键就可以生成所有需要的安装包,并且支持自定义运行时参数

    (二)Apollo总体架构模块分析

    总体架构模块如下图所示:

    其主要包含了四个核心模块和三个辅助模块:

    1.四个核心模块及其主要功能

    • ConfigService:提供配置获取接口、配置推送接口,服务于Apollo客户端;
    • AdminService:提供配置管理接口、配置修改发布接口,服务于管理界面Portal;
    • Client:为应用获取配置,支持实时更新,通过MetaServer获取ConfigService的服务列表,使用客户端软负载SLB方式调用ConfigService
    • Portal:配置管理界面,通过MetaServer获取AdminService的服务列表,使用客户端软负载SLB方式调用AdminService

    (ConfigService和AdminService都是多实例无状态的部署,需要将自身注册到Eureka中并保持心跳)

    2.三个辅助服务发现模块

    • Eureka:用于服务发现和注册,Config/AdminService注册实例并定期报心跳,和ConfigService在一起部署
    • MetaServer:Portal通过域名访问MetaServer获取AdminService的地址列表,Client通过域名访问MetaServer获取ConfigService的地址列表。相当于一个Eureka Proxy,逻辑角色和ConfigService在一起部署
    • NginxLB:和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表;和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表;和域名系统配合,协助用户访问Portal进行配置管理

    Apollo可以和Spring Cloud Config搭建的微服务进行无缝集成。

    3.为什么选择Eureka作为服务注册中心,而不是使用传统的zk、etcd呢?

    有以下几方面的原因:

    • 它提供了完整的Service Registry和Service Discovery实现。首先是提供了完整的实现,并且也经受住了Netflix自己的生产环境考验,相对使用起来会比较省心。
    • 和Spring Cloud无缝集成:项目本身就使用了Spring Cloud和Spring Boot,同时Spring Cloud还有一套非常完善的开源代码来整合Eureka,所以使用起来非常方便。另外,Eureka还支持在我们应用自身的容器中启动,也就是说我们的应用启动完之后,既充当了Eureka的角色,同时也是服务的提供者。这样就极大的提高了服务的可用性。这一点是我们选择Eureka而不是zk、etcd等的主要原因,为了提高配置中心的可用性和降低部署复杂度,我们需要尽可能地减少外部依赖。
    • Open Source:由于代码是开源的,所以非常便于了解它的实现原理和排查问题。

    (三)Apollo客户端设计与运行环境介绍

    1.Apollo客户端设计

    Apollo客户端的实现原理:

    • 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
    • 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。

           这是一个fallback机制,为了防止推送机制失效导致配置不更新

           客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified

           定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。

    • 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
    • 客户端会把从服务端获取到的配置在本地文件系统缓存一份

           在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置

    • 应用程序可以从Apollo客户端获取最新的配置、订阅配置更新通知

    2.配置更新推送实现

    Apollo客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过Http Long Polling实现的,具体而言:

    • 客户端发起一个Http请求到服务端
    • 服务端会保持住这个连接30秒
    • 如果在30秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的namespace信息,客户端会据此拉取对应namespace的最新配置
    • 如果在30秒内没有客户端关心的配置变化,那么会返回Http状态码304给客户端
    • 客户端在服务端请求返回后会自动重连

    考虑到会有数万客户端向服务端发起长连,在服务端使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。

    3.环境要求

    • Java1.7+
    • Guava15.0+ : Apollo客户端默认会引用Guava 19,如果你的项目引用了其它版本,请确保版本号大于等于15.0
    • 注:对于Apollo客户端,如果有需要的话,可以做少量代码修改来降级到Java 1.6

    Apllo这部分的内容目前我还没有在实践中应用,所以后续博客和github中可能暂不停工代码分析。

    参考书籍、文献和资料:

    【1】郑天民. 微服务设计原理与架构. 北京:人民邮电出版社,2018.

    【2】徐进,叶志远,钟尊发,蔡波斯等. 重新定义Spring Cloud. 北京:机械工业出版社. 2018.

    【3】https://blog.csdn.net/xiaofeng10330111/article/details/85682513.

    【4】http://blog.sina.com.cn/s/blog_17ea544680102xive.html.

    【5】https://www.cnblogs.com/hellxz/p/9306507.html.

    【6】https://www.jb51.net/article/147212.htm.

    【7】https://blog.csdn.net/hjbbjh0521/article/details/80363947.

    【8】http://blog.didispace.com/spring-cloud-starter-edgware-3-1/.

    【9】https://blog.csdn.net/john1337/article/details/82413837.

    【10】https://blog.csdn.net/zjh_746140129/article/details/86179522.

    【11】https://blog.csdn.net/ningjiebing/article/details/90638974.

     

    展开全文
  • 5.比对结果如下图所示,可以在上面的源对象和目标对象列表中看出哪些表或视图或函数等结构有不同,具体的不同则可以通过下面的查询语句来看。选中要执行的查询语句点击运行便可进行同步修改。 6.运行结果...

    Navicat 是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。Navicat提供多达 7 种语言供客户选择,被公认为全球最受欢迎的数据库前端用户界面工具。 
    Navicat旗下有多个产品成员 ,可以用来对本机或远程的 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 数据库进行管理及开发。因为文中介绍的是MySQL数据库,因此我们要用到的是Navicat旗下的Navicat For MySQL工具。Navicat For MySQL下载链接。 
    我们在开发项目时一般会用到一个开发版和一个正式版的数据库,在开发版中修改了数据库表结构如何才能快速同步到正式版呢?如果自己手动一个个字段或属性去修改,实在是太麻烦,而且容易遗漏,有了Navicat 工具,就能快速实现数据库直接的同步,包括结构同步,数据同步等。下面介绍如何利用Navicat For MySQL实现MySQL数据库间结构同步。

    <h4 id="1打开navicat-for-mysql">1.打开Navicat For MySQL

    2.创建数据库连接,可连接本地数据库服务器,也可远程连接。如图所示创建一个本地连接。

    这里写图片描述
    连接名可自己任意命名,方便自己识别就行。填好地址用户名密码等之后,可点击测试连接,看能够创建连接,若成功则会弹窗提示。 
    这里写图片描述

    3.连接成功后,选中工具→结构同步,便可对该连接下的数据库进行同步操作了。

    这里写图片描述

    4.选中要同步的数据的源和目标,源便是结构同步的参考数据库,目标则是要修改结构进行同步的那个数据库。并选择要对比的项。你可以选择仅同步表,或仅同步视图或存储过程等。都设置好后点击比对按钮即可对比这两个数据库的结构,找出其中的不同。

    这里写图片描述

    5.比对结果如下图所示,可以在上面的源对象和目标对象列表中看出哪些表或视图或函数等结构有不同,具体的不同则可以通过下面的查询语句来看。选中要执行的查询语句点击运行便可进行同步修改。

    这里写图片描述

    6.运行结果将在信息日志中显示,如果出现执行不成功的查询,则会以红色字体显示,可自己再手动进行修改。若无错误,则结构同步完成。可到数据库中查看,两个表要同步的部分是否结构已经一致。

    这里写图片描述

    展开全文
  • 结构化分析方法及其图形工具

    千次阅读 热门讨论 2019-06-12 17:35:57
    图形化的表达更加直观,清晰,往往一张图比文字更说服力; 有些图能表达系统立体的结构设计,强调逻辑功能; 用图形表达能很好的将系统各部门联系起来,而不是若干个子系统的拼凑 图表工具 数据流图: 数据流图...

    结构化分析方法

    是一种用图形化的方式来表示软件开发的方法,指注重软件设计的结构的合理性。

    优点:

    • 图形化的表达更加直观,清晰,往往一张图比文字更具说服力;
    • 有些图能表达系统立体的结构设计,强调逻辑功能;
    • 用图形表达能很好的将系统各部门联系起来,而不是若干个子系统的拼凑

    图形工具

    数据流图:

    数据流图(Data Flow Diagram)简称:DFD,通过系统对数据“流”的图形表示,是从数据传递和加工角度,显示了系统输入和输出的信息,数据的流向以及最终存储在哪里,能让用户更加直观的明白系统的工作原理。

    基本元素:

    • 数据源
    • 数据存储
    • 处理
    • 数据源点/终点(Input/Output)

    那么,如何画数据流图呢?
    举个栗子:

    • 画出整个系统概括的模型,系统实质上由若干个数据源点/终点以及一个处理组成。处理就代表了系统对数据加工的基本功能。

    在这里插入图片描述

    • 在概括模型的基础上对处理,也就是订货系统进行细化,并且给出数据的最终存储地,标明数据流的内容。

    在这里插入图片描述

    • 对系统细化后产生的两个分支再次进行细化,层层递进的展示内部数据的流向。

    在这里插入图片描述

    • 给已经细化的系统勾画出边界。

    在这里插入图片描述

    • 以划分系统的功能为划分方式再次划分边界。

    在这里插入图片描述


    数据字典:

    数据字典(Data Dictionary),顾名思义,起到了字典的作用,是结构化分析方法的一种重要工具,功能是对数据流图中的各个基本要素的具体内容所做的完整的定义和说明。

    • 举个栗子:

    在这里插入图片描述

    E-R图:

    基本元素:

    • 实体,实体又分为强实体与弱实体;强实体:一般所说的实体;弱实体是指一个实体对于另一个实体(强实体)具有很强的依赖关系,并且该实体主键的一部分或全部从其强实体中获得,则该实体成为弱实体。
    • 属性,即实体的属性
    • 联系,即实体与实体之间联系,可以为1:N,1:1,M:N

    举个栗子:

    在这里插入图片描述

    HIPO:

    HIPO(Hierachy plus input-Process-Output),由层次结构图和IPO图两部分组成的。

    • 层次结构图(H):描述软件的层次结构,矩形框表示一个模块,矩形框之间的直线表示模式之间调用关系。举个栗子:见图1
    • IPO图:H图中只说明了软件系统由诸多模块组成及其控制层次结构,并未说明模块间的信息传递及模块内部处理。因此,需要绘制具体的IPO图来表达模块间信息的传递。IPO的形式为:列出有关的输入数据,对输入数据进行处理,最终填写输出数据。举个栗子:
      在这里插入图片描述

    H图说明了软件系统由哪些模块组成及其层次结构,IPO图说明了模块间的信息传递及模块内部的处理。如果在结构化设计中,一个系统模块结构图很复杂,可采用层次图对其进行进一步的抽象,并且可以给结构图中的每一模块配以相应的IPO图进行描述。对于IPO图,软件开发人员可以利用它进行模块设计,编写、修改或维护程序,也可根据它评价总体设计,所以说IPO图是系统设计阶段的一种重要文档资料。

    程序流程图:

    程序流程图(Program flow chart),是用规定的元素描述程序运行的具体步骤,也就是逻辑思路。
    基本元素:

    • 开始/结束
      在这里插入图片描述

    • 流程
      在这里插入图片描述

    • 判定
      在这里插入图片描述

    • 数据
      在这里插入图片描述

    • 数据库
      在这里插入图片描述

    • 连接线
      在这里插入图片描述

    举个栗子:
    在这里插入图片描述

    总结

    需求分析中首先需要数据流图来展示数据流的走向以及数据最终存储地;再绘制数据字典,是数据流图中的数据源及数据存储的定义及解释,而数据字典只列出了定义,并未展示出它们之间的联系;绘制ER图来表示实体与实体间的联系;而在总体设计中,首先需要绘制HIPO图对整个系统有个宏观的掌控;再绘制程序流程图来表达各个模块的具体逻辑思路。

    展开全文
  • 什么是数据结构

    万次阅读 2007-03-19 10:30:00
    它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构...
  • 线结构光视觉传感器/线激光深度传感器标定工具

    万次阅读 热门讨论 2016-06-11 13:33:16
    续集:线结构光视觉传感器/线激光深度传感器标定工具(续) https://jah10527.github.io/articles/lineLaser.html 线结构光视觉系统有着结构简单、使用灵活、受周围光照环境影响小等一系列特点,在实际中得到...
  • Keras网络结构可视化工具

    千次阅读 2017-09-08 21:28:12
      记得把变量改到具体的安装目录,然后保存退出编辑器。接下来就简单验证一下安装,打开Windows命令行,输入python进入python交互环境,逐行运行如下代码: import pydot_ng pydot_ng.find_graphviz() ...
  • 前言 ...tree命令是cmd自带的功能,用于生成文件目录结构,请看下面例子,我这里使用的是cmder替代cmd 再看treer treer的具体安装和用法 1、安装treer //安装 npm install tree...
  • 用过Maven的人都知道,Maven项目的目录结构跟传统的DynamicWeb项目有些不同。当然我们按照Maven的规范建项目最好,但是当你恰好没有按照Maven的规范来,又恰好需要使用Maven来打包,那该怎么办呢?其实很简单,这些...
  • ML之FE:基于BigMartSales数据集利用Featuretools工具(1个dataframe表结构切为2个Entity表结构)实现自动特征工程之详细攻略 目录 基于BigMartSales数据集利用Featuretools工具(1个dataframe表结构切为2个Entity表...
  • 上周我们搭建了一套“Windows 10+YOLO v3+Deep_Sort多目标跟踪实验环境”,并做了一些简单的测试记录,具体内容请参考: https://blog.csdn.net/weixin_41943311/article/details/93747924 那么本周,我们需要详细...
  • 画linux内核文件系统结构图、内存分配以及学习数据结构树、图时,发现使用Graphviz非常的方便快捷。鉴于网上关于它的安装、使用不是特别具体,本博文将一步步告诉大家如何快速地使用Graphviz画相关的流程图、树形图...
  • 数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。 严格意义上讲,串存储结构也是一种线性存储结构,因为字符串中的字符之间也具有"一对一"的逻辑关系。只不过,...
  • 数据结构知识整理

    万次阅读 多人点赞 2018-07-30 18:50:47
    1.数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系和操作等的学科。 2.数据结构涵盖的内容: 3.基本概念和术语: 数据:对客观事物的符号表示,在计算机科学中是指所有能...
  • Java数据结构和算法(一)——开篇

    万次阅读 多人点赞 2014-09-15 07:03:40
    1)数据结构算法有什么用? 2)技术与通俗 3)驱动力学习 1)数据结构算法有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,...
  • 什么要学数据结构? 首先,因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它;其次,数据结构是计算机软考、计算机等级考试等相关考试的必...
  • 1.先名词解释吧:DAO = Data Access Object = 数据存取对象Service = 服务Controller = 控制器Util = 工具Model = 模型首先,一个代码是不是有完善的结构,和是不是有上面这些东西没有什么关系,只是通常来说,我们...
  • 什么要学习数据结构

    千次阅读 多人点赞 2016-10-10 15:17:21
    学习数据结构什么用?
  • android开发中Settings结构简单分析

    万次阅读 2016-08-03 20:25:53
    Settings界面结构简单分析Setting是android系统很重要的模块,这个模块并不是很复杂,这部分也一直在看,很多时候都是在看某个具体的选项,比如WLAN,蓝牙这样具体的源码,但是对于主界面的布局以及结构并不清楚。...
  • 数据结构

    千次阅读 多人点赞 2018-10-06 17:40:36
    数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或者多种特定关系的数据元素集合。通常情况下,精心选择的数据结构可以带来更高效的运行或者存储效率。数据结构往往同高效的检索算法...
  • 大型机学习之具体技术-大机系统结构概览

    千次阅读 热门讨论 2007-08-12 10:10:00
    的各个语句参数倒底代表什么意义,因为如果我不了解一下下面的资源管理概况,当我在建立一个数据集的时候,我就会为什么是 VOLUME ,它在磁盘中倒底大概是个什么结构,什么又是 UNIT ,什么是连续数据集与分区数据集...
  • 数据库 - 数据库系统结构

    千次阅读 2015-05-03 12:47:08
    数据库系统结构从数据库管理系统角度看,数据库系统通常采用三级模式结构,是数据库系统内部的系统结构 从数据库最终用户角度看(数据库系统外部的体系结构) ,数据库系统的结构分为: 单用户结构 分布式结构 ...
  • 数据库 - 概念结构设计

    万次阅读 2015-05-08 10:15:46
    概念结构设计什么是概念结构设计 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计 概念结构是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定 概念结构设计是...
  • (有需要了解Zephyr的可以查看我的另一篇博文:jira插件Zephyr的具体使用) 一、首先说一下SnapseRT应用场景:  1.可被业务人员用来记录和跟踪需求;  2.可被测试人员用来创建、组织、计划、执行测试用例...
  • 结构化数据分析技术是忽悠

    万次阅读 2018-04-11 20:26:44
    大数据概念兴起的同时也带热了非结构化...那为什么说非结构化数据分析技术是忽悠呢?不存在通用的非结构化数据计算技术非结构化数据五花八门,有声音图像、文本网页、办公文档、设备日志、….;每类数据的都有各自的...
  • 聊聊自学,让你事半功倍的学习网站和工具

    万次阅读 多人点赞 2021-04-12 23:00:26
    导师可以提供方向性的指导,但具体到写个代码,大概率并不擅长。 从迈入大学校园的那一刻起,自学就变得尤为重要。 兴趣是最好的老师,让我们拥有充足的自学动力。有一些人,从小就有目标,有兴趣爱好,自学能力就很...
  • 河流逻辑结构图生成方法

    千次阅读 2016-10-11 08:23:26
    河流逻辑结构图生成方法    某些时候为了显示河流之间的关系,需要生成河流的逻辑结构图。这种逻辑结构图有点像线网的逻辑结构,至需要显示基本的结构和连通关系,而不需要展示真实的空间地理位置。例如平常在...
  • 硬盘内部硬件结构和工作原理详解

    万次阅读 多人点赞 2018-05-07 09:19:26
    硬盘的外部物理结构 一般硬盘正面贴有产品标签,主要包括厂家信息和产品信息,如商标、型号、序列号、生产日期、容量、参数和主从设置方法等。这些信息是正确使用硬盘的基本依据,下面将逐步介绍它们的含义。 硬盘...
  • 结构化设计

    千次阅读 2018-06-19 15:12:28
    1、结构化设计是将结构化分析得到的数据流图映射成软件结构的一种设计方法 强调模块化、自顶向下逐步求精、信息隐蔽、高内聚低耦合等设计准则 2、结构化设计的内容 结构设计—概要设计 结构图(Structure Chart) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 602,469
精华内容 240,987
关键字:

具体的具是什么结构