2-11 开始进行应用拆分和解耦”的学习中的困惑
来源:2-11 开始进行应用拆分和解耦-

慕斯卡3278568
2023-02-06
老师,您好,我在“2-11 开始进行应用拆分和解耦”的学习中,发现架构图中“应用A”和“应用B”都不会直接操作数据库,而是通过“配置中心”与“分布式服务器”通信,由“分布式服务器”操作数据库。请问为什么“应用A”和“应用B”不直接操作数据库了?以及“配置中心”所承担的责任是什么?期待您的回复,谢谢
1回答
-
同学你好:
分布式配置中心
什么事配置中心
分布式配置中心很简单:其实就是把一些配置的信息分离于自身的系统,而这些信息又能被应用实时获取得到。
我们可以把常变动的配置信息存放在分布式配置中心上,比如:请求的ip地址、限流值、系统的配置值、各种业务开关等等。
为什么要引入配置中心
我们先来看看在没有「配置中心」的传统项目中,我们是怎么处理各类配置参数问题的:
一般是静态化配置。大多数在项目中单独写一个配置文件,例如 "config.conf",然后将各类 参数配置、应用配置、环境配置、安全配置、业务配置 都写到这个文件里。当项目代码逻辑中需要使用配置的时候,就从这个配置文件中读取。这种做法虽然简单,但如果参数需要修改,就非常的不灵活,甚至需要重启运行中的项目才能生效。相信大多数开发同学都深有体会。
配置文件无法区分环境。由于配置文件是放在项目中的,但是我们项目可能会有多个环境,例如:测试环境、预发布环境、生产环境。每一个环境所使用的配置参数理论上都是不同的,所以我们在配置文件中根据不同环境配置不同的参数,这些都是手动维护,在项目发布的时候,极其容易因开发人员的失误导致出错。
配置文件过于分散。如果一个项目中存在多个逻辑模块独立部署,每个模块所使用的配置内容又不相同,传统的做法是会在每一个模块中都放一个配置文件,甚至不同模块的配置文件格式还不一样。那么长期的结果就是配置文件过于分散混乱,难以管理。
配置修改无法追溯。因为采用的静态配置文件方式,所以当配置进行修改之后,不容易形成记录,更无法追溯是谁修改的、修改时间是什么、修改前是什么内容。既然无法追溯,那么当配置出错时,更没办法回滚配置了。
上面只是拿配置文件的形式来举例,有的项目会采用数据库配置,虽然灵活一点,但是依旧不能完全解决上述问题。既然传统的项目配置有这么多弊端,那我们看看「配置中心」的方案是如何解决这些痛点的:
「配置中心」的思路就是把项目中各种配置、各种参数、各种开关,全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。当各个服务需要获取配置的时候,就来「配置中心」的接口拉取。当「配置中心」中的各种参数有更新的时候,也能通知到各个服务实时的过来同步最新的信息,使之动态更新。
那么,按照上述思路,我们理想中的「配置中心」应该具备如下特点:
配置集中管理、统一标准
配置与应用分离
实时更新
高可用
结合图进行理解,有一个概念同学需要先理清楚就是,红色的三个部分,地位是一样的,都是微服务,他们都与配置中心有通讯行为,就是获取配置。只不过为了画图上美观,A 应用和 B 应用没有把内部的本地缓存模块和统一数据访问模块绘制出来,实际上如果 A 和 B 应用需要读取数据库,和分布式服务器地位上是一样的,也是会有一道数据流的线,但是我们在这个图更多想体现,A 与 B 应用使用消息队列进行通讯的另一个场景,所以与数据库交互的过程就省略了。并不是通过配置中心->分布式服务器-》数据库这种链路
如果实际发生数据库读写,交互如下:
122023-02-11
相似问题