Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

账号管控、配置管理、服务治理相关问题讨论 #22

Open
chpengzh opened this issue Jun 15, 2019 · 1 comment
Open

账号管控、配置管理、服务治理相关问题讨论 #22

chpengzh opened this issue Jun 15, 2019 · 1 comment
Labels
discussion plan to discuss

Comments

@chpengzh
Copy link
Member

chpengzh commented Jun 15, 2019

该issue是对功能实施的一个讨论贴...细节还待补充

一. 数据流模型

数据流图如下:

    1. 当应用进入readiness状态后,SDK会上报应用实例和服务相关的会话;
    1. SOFADashboard 读取zk的会话信息,以应用为维度对配置进行管理;
    1. SOFADashboard 调用 apollo-portal-server 接口,通过应用维度修改配置;
    1. apollo-meta-server 下发配置,RPCSDK 读取配置变更,执行上下线切换LB等操作指令;

image

二. 方案流程细节说明

该方案仅为草案,请各位进行讨论和补充

1. 关于应用实例上报和应用读取

方案图中以Zookeeper作为集群实例上报,目前该 Application SDK 项目地址sofa-dashboard-client.

假设存在应用实例 a(ip:10.1.1.1,rpc-port:9090, http-port:8080), 服务名A

如下为实例对应的会话节点, 其中/app/instance/A为永久节点, 其value值可以记录应用维度的一些配置:

/apps/instance/A/10.1.1.1:8080?startTime=<startTime>&lastRecover=<lastRecover>

2. 关于接入apollo(Important)

系统账号对接

通过接口直接对接apollo-portal,不关心apollo背后对接的用户体系实现.

由于 apollo 有一套良好的账号系统逻辑,支持通过LDAP或者自定义逻辑接入企业已有的账号系统,因此Dashboard这边只需要考虑对apollo的账号系统进行对接。关于apollo的账号系统拓展参考apollo认证逻辑

该对接功能包含如下几个不足之处:

  • apollo 用户账号系统中用户定义较为简单,如果后需要拓展账号相关功能(比如邮箱验证等需求),需要对apollo-portal进行二次开发

关于对 Portal Server 的调用

用户登录后,使用apollo操作过程过程可以参考使用文档,简要包含了如下几个过程:

  • 创建应用
  • 创建namespace(如果有必要)
  • 以app为维度或namespace为维度创建/修改一些下发配置

通过上报应用信息自动创建apollo应用定义

我们期望在SOFADashboard在管理的时候简化创建应用过程,使用上报的应用信息自动创建一个缺省应用。这样在用户行为上就只保留对namespace的操作和配置修改操作,增强易用性。

使用和 apollo-portal 接口直接对接方式而不是 OpenApi 对接

apollo除了前端调用的接口以外,还支持OpenApi的方式进行接入。

但是该方案有一定局限性:

首先,只有超级管理员能创建 OpenApi token; 事实上下发配置者几乎不是超级管理员,而是应用管理者;

其次 OpenApi 的局限性很强,比如不支持创建用户,不支持创建应用等功能;

最后,有的用户在自己的环境下已经有一套独立运行的 apollo 服务了,我们希望 Dashboard 的调用逻辑和 portal 保持一致,而不是魔改一些逻辑,这样即使使用了Dashboard也不会影响到apollo独立运行的状态.

因此综上所述,我们采用直接对接 portal 接口的方式对 apollo-portal进行调用

3. 关于服务管控维度

apollo 本质上是依靠多维度的方式去管理一个config,为了实现服务管控,需要在RPC SDK中针对下发配置进行监控并执行相关操作。

目前我想的方案是先支持应用维度的环境变量,形如:

@RestController
public class HelloController {

    @SofaReference(binding = @SofaReferenceBinding(bindingType = "bolt", lb="${hello.service.lb:roundRobin}"))
    private HelloService service;

    @GetMapping
    public String hello(@RequestParam("name") String name) {
        return service.sayHello(name);
    }

}

使用环境变量注入的方式和apollo用户使用习惯一致,也较容易实现。

后期的方案,则可以脱离环境变量,直接在Dashboard界面上通过服务维度进行操作;

@glmapper
Copy link
Collaborator

补充:

  • 基于应用维度->基于应用维度、基于IP维度、基于配置项维度
  • SOFADashboard 用户模块权限简化分为 admin/user
  • 需要支持简单的注册登录(针对于使用方无自有账户体系)
  • 配置管理部分需提供可考虑对 spring cloud config 的支持,在接口层面提供良好的扩展性,如对接自有的配置管理中心

其他

  • SOFADashboard 在管理的时候简化创建应用过程-> 无需创建应用,SOFADashboard 本身具有应用管控部分,可以直接关联到应用、ip等维度。
  • 目前应用实例(IP维度)注册到 ZK 并写入的数据模型(供参考):
    • IP
    • 端口
    • 健康检查状态
    • 启动时间
    • 应用名

@glmapper glmapper changed the title 对接Apollo系统进行账号管控与服务治理 账号管控、配置管理、服务治理相关问题讨论 Jun 15, 2019
@glmapper glmapper added the discussion plan to discuss label Jun 15, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
discussion plan to discuss
Projects
None yet
Development

No branches or pull requests

2 participants