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

Websoft9 优化与升级 #513

Open
zhaojing1987 opened this issue Jul 15, 2024 · 3 comments
Open

Websoft9 优化与升级 #513

zhaojing1987 opened this issue Jul 15, 2024 · 3 comments

Comments

@zhaojing1987
Copy link
Contributor

Websoft9 系统当前问题和优化方案

当前问题

  • 服务配置:多组件之间相关配置的协调与同步问题

    • 涉及组件:
      • 三方服务:Gitea、Portainer、Nginx Proxy Manager
      • 核心服务:Apphub
      • 前端插件:AppStore、MyApps、Containers、Gateway、Git、Settings
      • Cockpit
    • 配置问题:
      • 目前配置统一在Apphub进行管理,并提供cli进行配置的读写;
      • systemd-websoft9服务负责将三方服务初始账号信息写入Apphub配置文件;
      • 前端插件通过cli从Apphub获取配置信息;
      • cockpit端口:systemd-websoft9服务负责协同apphub配置文件与cockpit配置文件的同步;
  • Apphub性能

    • cli性能问题
      • cli使用三方工具click开发,本身性能较差;
      • 各服务频繁调用Apphub的cli工具;
    • Python性能问题
      • Python是解释性语言,性能不高;
  • 三方服务初始化

    • 通过自定义镜像的方式(docker file),将三方服务的初始化脚本集成到镜像中;
    • Portainer:账号通过cli初始化,环境endpoint通过api初始化
    • Nginx Proxy Manager:当前初始化分为三步:
      • migration.sh脚本,初始化websoft9相关代理配置(initproxy.conf)
      • setuser.sh 脚本,通过api修改用户名和密码(调用了2次api)
      • setproxy.sh 脚本,为所有代理请求加入websockets支持
    • Gitea:通过s6使用cli初始化;
  • Cockpit

    • cockpit是一个基于web的服务器管理工具,提供了一些基本的系统管理功能;
    • 核心功能:
      • 系统监控:CPU、内存、磁盘、网络等;
      • 系统日志:系统日志、安全日志、应用日志等;
      • 系统服务:系统服务的启动、停止、重启等;
      • 系统用户:用户管理、用户组管理等;
      • 系统网络:网络配置、网络状态等;
      • 系统存储:磁盘管理、文件系统管理等;
    • 问题:
      • 非docker,有安装、升级、维护、配置等问题;

优化方案

  • 采用Consul实现服务发现、健康检查、配置管理,各服务通过api(cli)获取配置信息;
  • Apphub性能:取消cli,配置从Apphub转向第三方配置中心;
  • 三方服务初始化:
    • 优化Portainer初始化过程,通过通过api一次性完成账号和endpoint的初始化;
    • 优化Nginx Proxy Manager初始化过程,通过一个脚本一次性完成初始化,初始账号通过环境变量;
    • 优化Gitea初始化过程:取消S6,通过command执行初始化脚本;
  • Cockpit:
    • 去cockpit
    • 升级Apphub容器,将前端插件集成到Apphub容器中;
    • 增加 数据库 到Apphub容器中;
    • 自定义功能:终端 、文件管理器、日志查看器、监控等;
@zhaojing1987
Copy link
Contributor Author

Consul简介

Consul 是 HashiCorp 公司开发的一个分布式服务网络工具,主要用于服务发现、配置管理和服务网格。它旨在帮助组织管理复杂的微服务架构,并提供了一系列功能来简化服务之间的通信和协调。

服务发现(Service Discovery)

Consul 允许服务自动注册和发现其他服务。服务可以通过 HTTP 或 DNS 接口查询 Consul 来查找其他服务的地址和端口。

服务注册和发现的工作流程:

  • 注册服务:服务启动时,会将自己的信息(如名称、地址和端口)注册到 Consul
  • 服务发现:其他服务可以通过查询 Consul 来获取注册服务的地址和端口,从而进行通信

服务注册方式:

  • 通过HTTP API注册服务(动态配置):服务实例启动后,向Consul注册自身的信息
  • 通过配置文件注册服务(静态配置):通过配置文件定义服务的信息,Consul会自动注册服务

健康检查(Health Checks)

Consul 提供内置的健康检查功能,可以定期检查服务的健康状态。健康检查可以是简单的 HTTP 检查、TCP 检查或自定义脚本。

健康检查的类型:

  • HTTP 检查:通过发送 HTTP 请求并检查响应状态码。
  • TCP 检查:通过尝试建立 TCP 连接。
  • 脚本检查:运行自定义脚本并根据脚本的退出状态码判断健康状态。

分布式键值存储(KV Store)

Consul 提供一个简单的分布式键值存储,用于存储配置数据和其他共享信息。这个键值存储是强一致性的,可以用于存储服务配置、特性标志和其他需要共享的配置信息。开发者和运维人员可以通过 Consul 的 API 读写这些键值对,从而实现配置的集中管理和动态更新。

KV 存储的特点:

  • 强一致性:确保所有节点上的数据是一致的。
  • 事务支持:支持原子操作,可以确保多个键值操作的原子性。

一般的统一配置管理:

  • 应用配置:
    • 数据库连接信息:数据库的连接字符串、用户名和密码等
    • API 密钥和令牌:外部 API 的访问密钥和认证令牌
    • 第三方服务配置:第三方服务的 URL、认证信息等
    • 应用程序参数:如线程池大小、缓存配置、文件路径等
  • 环境配置
    • 环境变量:如开发、测试、生产环境的不同配置
    • 特性开关:用于控制新功能的开启和关闭
    • 区域和集群配置:不同地理区域或集群的特定配置
  • 安全配置
    • SSL/TLS 证书:存储和管理服务间通信所需的证书和密钥
    • 加密密钥:用于数据加密和解密的密钥
  • 网络配置
    • 负载均衡配置:负载均衡器的配置,如后端服务列表、健康检查配置等
    • 防火墙规则:网络访问控制规则
  • 配置模板
    • 模板文件:使用 Consul Template 动态生成配置文件,如 Nginx 配置、HAProxy 配置等
  • 其他配置
    • 日志配置:日志级别、日志路径等。
    • 监控配置:监控系统的配置,如 Prometheus 的抓取配置、Grafana 的仪表盘配置等。
    • 调度配置:任务调度系统的配置,如 Cron 表达式、任务优先级等。

服务网格 (Service Mesh)

Consul 提供了服务网格功能,通过代理(如 Envoy)来管理服务之间的通信。服务网格功能包括负载均衡、服务间的安全通信(例如,TLS 加密)和流量管理。

服务网格的功能:

  • 负载均衡:自动分配请求到多个服务实例。
  • 安全通信:使用 mTLS(相互 TLS)加密服务间的通信。
  • 流量管理:支持流量分割、熔断、重试等高级流量管理功能。

多数据中心支持

Consul 支持跨多个数据中心的部署,可以在不同的数据中心之间进行服务发现和配置管理。

ACL 和安全

Consul 提供了访问控制列表(ACL)系统,用于控制对 Consul 数据和 API 的访问。ACL 系统可以定义细粒度的权限,确保只有授权的用户和服务可以访问特定的数据和功能。

Consul UI 和 API

Consul 提供了一个用户友好的 Web UI 和丰富的 HTTP API,方便用户管理和监控服务。通过 Web UI,用户可以查看服务的健康状态、KV 存储的数据等。HTTP API 则允许用户通过编程方式与 Consul 交互。

使用场景

  • 微服务架构中的服务发现和健康检查
  • 动态配置管理和分布式锁
  • 服务网格中的流量管理和安全通信
  • 多数据中心环境中的服务协调和数据同步

@chendelin1982
Copy link
Contributor

chendelin1982 commented Jul 15, 2024

  • 替换cockpit 开发框架
  • runner or Job (替换portainer)

@chendelin1982
Copy link
Contributor

chendelin1982 commented Jul 15, 2024

For your references

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants