原创文章,转载请标注。https:https://www.cnblogs.com/boycelee/p/17967590

一、什么是配置中心?

配置中心是集中管理和动态更新应用配置信息的服务,服务能够在不停机的情况下新增或修改配置信息,具有以下关键特点:

(1)集中管理。配置中心集中存储服务所需要的各类配置信息;

(2)动态变更。应用服务不需要重启就可以从配置中心动态获取到最新数据;

(3)通知机制。当服务配置发生变化时,配置中心可以提供通知机制,通知应用程序关心的配置发生变化。

能够提高系统的可维护性、灵活性和实时性。

二、传统配置有什么问题?

传统配置会使用本地静态文件作为存储介质。就存在这几个问题:

(1)动态修改。本地静态文件修改时必须重启应用,无法做到动态修改;

(2)统一管理。存储格式、存储地点都杂乱无章,无法对配置进行统一规范和约束;

(3)即时生效。配置完成后,需要多机器部署完成,修改配置才能够生效。无法做到及时通知、及时生效。

三、配置中心的场景

大体场景有如下这几种:

(1)系统相关。如线程池配置信息、缓存大小、连接池大小、熔断/限流阈值等;

(2)业务相关。如活动文案、推广活动、积分规则、价格策略等;

(3)开关相关。A/B Test、特性开关、推送开关等;

(4)安全相关。数据库连接信息、加密秘钥、账号密码等。

四、架构设计

(1)基础模型

(2)详细架构

架构图分为三层,分别是客户端层、网络层以及服务层。其中客户端层包括client模块、portal模块,网络层包括Load Balancer(Nginx)和Mata Server以及Eureka,服务层包括Config Service模块和Admin Service模块。

六、模块介绍

客户端层

Client

  • 客户端负责从Config Service获取应用的配置信息;
  • 监听配置变化。当配置发生更新时,Config Service会通知Client,并出发其进行配置刷新;
  • 通过ip + port的方式远程调用Config Service,以获取配置数据。

Portal

  • 管理平台,提供配置中心的管理功能,包括应用创建、查看、修改、发布以及回滚等功能

网络层

NginxLB

  • Client、Portal通过域名的方式访问MetaServer,Nginx作为负载均衡器;
  • Nginx将请求分发到每个Meta Server服务实例,结合Eureka可以动态地获取到注册中心注册的服务实例(Config Service、Admin Service)列表。

Meta Server

  • Meta Server封装Eureka Client,通过Eureka Client获取Config Service和Admin Service的服务信息,Client与Portal不需要关心注册中心的服务发现问题;
  • Client和Portal通过ip+port的方式访问Client Service 与 Admin Service
  • Meta Server是逻辑概念与Config Service模块一起部署在同一实例中;
  • Meta Service还提供其他注册中心的封装类,其中包括Consul、Nacos、Kubernetes等;

Eureka

  • Eureka是用于服务注册与服务发现的注册中心,Config Sevice与Admin Service会定期向注册中心上报心跳;
  • Eureka与Config Service部署在一起,简化部署和管理。
  • 相对于Zookeeper其部署方式更便捷。

服务端层

Config Service

  • 服务于Client模块;
  • 提供获取配置的接口;
  • 基于长轮询,提供配置更新接口;

Admin Service

  • 服务于Admin模块;
  • 提供配置管理接口;
  • 提供修改、发布配置等接口。

七、思考

1、为什么NginxLB与Eureka一起使用?不使用Eureka是否可行?

(1)负载均衡(Nginx LB)。具有高可用和容错的特性,当Apollo配置中心节点出现故障时,负载均衡器可以将流量重新路由到其他可用的节点上,从而实现系统的稳定性。

(2)服务注册与发现(Eureka)。Eureka可以帮助配置中心实现动态的服务注册和发现。Config Service动态注册到Eureka中,而Client通过Eureka获取可用节点列表。从而实现动态获取配置中心节点变化。

(3)综合使用Nginx负载均衡和Eureka注册中心,可以提高配置中心的可用性和容错性。这种架构允许系统在动态环境中灵活地处理配置中心(Config Service)节点的变化,并且确保客户端(Client)始终能够访问到可用的的配置中心(Config Service)节点。

(4)不使用Eureka,只使用Nginx负载均衡是可行的。这种情况下配置中心节点(Config Service)由Nginx进行负载均衡和请求分发,不需要Eureka进行服务注册与服务发现。优点是架构简单,缺点是Nginx虽然可以感知到节点不可用,但其并不具备动态节点管理的能力,当新的节点加入时,Eureka能够及时发现且自动地处理,而Nginx则需要人工干预。

2、Confg Service 、Admin Service以及Portal为什么作为独立应用单独部署?

(1)Confg Service和Admin Service独立部署,是从功能解耦上考虑,Confg Service服务于Client端负责处理配置相关逻辑,而Admin Service服务于Portal管理平台,提供接口给Portal进行使用。从产品迭代角度来分析Admin Service因为服务于Protal管理平台其迭代频率会高于Confg Service,分开独立部署能够提升开发灵活性以及降低发布风险

(2)Admin Service和Portal独立部署,是为了环境隔离时,Protal能够调用不同Service提供的API接口,进行不同环境配置的统一管理

最后

懂得不多,做得太少。欢迎批评、指正。

Apollo系列之架构设计(一)的更多相关文章

  1. ENode框架Conference案例分析系列之 - 架构设计

    Conference架构概述 先贴一下Conference案例的在线地址,UI因为完全拿了微软的实现,所以都是英文的,以后我有空再改为中文的. Conference后台会议管理:http://www. ...

  2. 【Apollo】(2)--- Apollo架构设计

    Apollo架构设计 上一篇博客有讲到:[Apollo](1)--- Apollo入门介绍篇 这篇来写Apollo的核心架构设计 一.整体架构 Apollo整体架构图,已由作者宋顺已经给出: 这幅图所 ...

  3. 架构设计 | 基于Seata中间件,微服务模式下事务管理

    源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...

  4. MyBatis架构设计及源代码分析系列(一):MyBatis架构

    如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处. 一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBa ...

  5. Junit4 架构设计系列(2): Runner.run()与Statement

    Overall 系列入口: Junit4 架构设计系列(1): Request,ClassRequest 和 RunnerBuilder 前文中,我们基本理清了Junit4执行Case大体上的Flow ...

  6. Junit4 架构设计系列(1): Request,ClassRequest 和 RunnerBuilder

    Overall Junit的成功已不言而喻,其广泛应用于单元测试,测试驱动开发领域.大量的工具,IDE都集成了JUnit,著名的有Maven,Ant,Eclipse,甚至像Google SDK提供的A ...

  7. .net core实践系列之短信服务-架构设计

    前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...

  8. Netty 源码分析系列(二)Netty 架构设计

    前言 上一篇文章,我们对 Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用. Netty 源码分析系列(一)Netty 概述 本篇文章我们就来说说Netty的架构设计,解密高 ...

  9. .NET架构设计、框架设计系列文章总结

    从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以 ...

  10. Nginx技术研究系列7-Azure环境中Nginx高可用性和部署架构设计

    前几篇文章介绍了Nginx的应用.动态路由.配置.在实际生产环境部署时,我们需要同时考虑Nginx的高可用性和部署架构. Nginx自身不支持集群以保证自身的高可用性,商业版本的Nginx+推荐: T ...

随机推荐

  1. RTMP协议学习——从握手到播放

    从客户端发起播放请求,到rtrmp视频流开始播放,大致经过了握手->建立连接->创建流->播放这几步比较重要的步骤.下面我将结合wireshark的抓包,对其中的每个流程进行分析和学 ...

  2. answer_to_everything

    题解,第一次遇到这种题目纪念一下 攻防世界逆向入门题之answer_to_everything_沐一 · 林的博客-CSDN博客

  3. windows 下终止nginx 进程 重新启动nginx

    进入cmd 输入一下命令 删除nginx所有进程 taskkill /f /t /im nginx.exe

  4. MySQL IFNULL函数

    MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数. 两个参数可以是文 ...

  5. Windows 使用 keytool 导入证书到 jdk 密钥库

    确定 java 安装路径, 一般情况下存在于 C:\Program Files\Java\jdk_xxx,根据自身电脑安装情况而定. 管理员权限打开终端 cmd ,进入C:\Program Files ...

  6. Unity学习笔记--数据持久化之PlayerPrefs的使用

    数据持久化 PlayerPrefs相关 PlayerPrefs是Unity游戏引擎中的一个类,用于在游戏中存储和访问玩家的偏好设置和数据.它可以用来保存玩家的游戏进度.设置选项.最高分数等信息.Pla ...

  7. hive报错Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask[已解决]

    我的报错信息 Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask 解决1(可行):不走ya ...

  8. Nginx根据Origin配置禁止跨域访问策略

    产品需要通过某所的安全测评扫描,其中提出一个关于跨域策略配置不当的问题,如下: 这个需要根据客户端传递的请求头中的Origin值,进行安全的跨站策略配置,目的是对非法的origin直接返回403错误页 ...

  9. 【WCH以太网接口系列芯片】基于CH395的组播请求(IGMP)

    在上一篇文章中,我们通过直连电脑测试了CH395在组播环境中进行数据的收发,但在实际的使用场景中更多的是将CH395接入局域网环境中.因此,我们需要使用到一个协议--IGMP(Internet Gro ...

  10. freeswitch如何解决sip信令的NAT问题

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. 公网环境复杂多变,客户环境更是各种稀奇古怪的问题. fs在针对sip信令的NAT问题有针对性的参数设置. 本文讨论的范围限于fs的公 ...