apollo知识点有哪些

发布时间:2021-11-16 11:20:17 作者:iii
来源:亿速云 阅读:134

本篇内容介绍了“apollo知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一、总结:

1.管理:应用管理、命名空间管理、部门管理、用户管理、角色管理、权限管理、审计管理

2.数据结构:应用、元素item、元素变更记录、元素发布记录、元素灰度规则(临时命名空间)

1.使用:配置服务器地址、配置本地缓存地址,配置环境evn、配置集群、配置appid

2.使用配置方法:java环境、系统管理、配置文件、-D参数

二、应用三板斧

(一)配置中心部署

1.将两个数据库脚本导入到mysql数据库

2.修改configService、adminService、portal项目中的数据库连接和远程服务调用地址配置

3.启动configService、adminService、portal三个项目

(二)程序应用实例

1.pom文件

<dependency>
        	<groupId>com.ctrip.framework.apollo</groupId>
        	<artifactId>apollo-client</artifactId>
        	<version>1.4.0</version>
    	</dependency>
   		<dependency>
		  <groupId>com.ctrip.framework.apollo</groupId>
		  <artifactId>apollo-core</artifactId>
		  <version>1.4.0</version>
		</dependency>

2.app.properties(resources/META-INF目录下)

# test
app.id=umember
env=DEV
apollo.meta=http://localhost:8080

3.测试代码

package com.unilife.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigChangeListener;
import com.ctrip.framework.apollo.ConfigService;
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.google.common.base.Charsets;

public class TestApollo {
	
	
	public static void  main(String[] args) throws Exception{
		 Config appConfig=ConfigService.getAppConfig();
		try {
			
			String k1=appConfig.getProperty("jdbc.type", null); // k1 = v11
			String k2=appConfig.getProperty("k2", null); // k2 = v21
			System.out.println(k1);
			System.out.println(k2);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		appConfig.addChangeListener(new ConfigChangeListener() {
		  public void onChange(ConfigChangeEvent changeEvent) {
		    //do something
			  System.out.println("Changes for namespace :"+ changeEvent.getNamespace());
		        for (String key : changeEvent.changedKeys()) {
		          ConfigChange change = changeEvent.getChange(key);
		          System.out.println("Change - key: "+change.getPropertyName()+", oldValue: "+change.getOldValue()+", newValue: "+change.getNewValue()+", changeType: "+change.getChangeType());
		        }
		  }
		});
		
		while (true) {
		      System.out.print("> ");
		      String input = new BufferedReader(new InputStreamReader(System.in, Charsets.UTF_8)).readLine();
		      if (input == null || input.length() == 0) {
		        continue;
		      }
		      input = input.trim();
		      if (input.equalsIgnoreCase("quit")) {
		        System.exit(0);
		      }
		      String temp=appConfig.getProperty(input,null);
		      System.out.println(temp);
		    }
		  }
}

三、理论(转)
1、SpringCloudConfig和Apollo的对比
2、apollo的介绍
3、apollo架构设计原理
4、客户端通过apollo拉取配置的原理
1、SpringCloudConfig和Apollo的对比

apollo知识点有哪些

如上图对比

    SpringCloudConfig优势是对SpringBoot原生支持,且是SpringCloud组件。缺点是无界面管理,且需要git,SpringCloudBus、Mq支持其动态更新。
    Apollo优势是技术栈单一,仅需要Mysql就可以支持动态更新配置,便于维护。缺点是不是SpringCloud体系,虽然开源,版本更新也活跃,但是对SpringCloud的支持没有SpringCloudConfig的好。

2、apollo的介绍

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:

    application (应用)
    environment (环境)
    cluster (集群)
    namespace (命名空间)
    同时,Apollo基于开源模式开发,开源地址

3、apollo架构设计原理

apollo知识点有哪些
上图简要描述了Apollo的总体设计,我们可以从下往上看:

    Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
    Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
    Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
    Client通过域名访问Meta Server获取ConfigService服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在
    Client侧会做load balance、错误重试
    Portal通过域名访问Meta Server获取AdminService服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在
    Portal侧会做load balance、错误重试
    为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中

4、客户端通过apollo拉取配置的原理

apollo知识点有哪些
上图简要描述了Apollo客户端的实现原理:

    客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
    客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。
        这是一个fallback机制,为了防止推送机制失效导致配置不更新
        客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified
        定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。
    客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
    客户端会把从服务端获取到的配置在本地文件系统缓存一份
    在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置
    应用程序从Apollo客户端获取最新的配置、订阅配置更新通知

配置更新推送实现

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

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

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

“apollo知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. Spring Boot 整合 apollo
  2. apollo 使用备忘录

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

apollo

上一篇:如何理解Oracle和MySQL中短小精悍的SQL

下一篇:Docker如何安装使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》