{"id":13694768,"url":"https://github.com/GrailStack/Moss","last_synced_at":"2025-05-03T04:30:58.887Z","repository":{"id":34586800,"uuid":"180526285","full_name":"GrailStack/Moss","owner":"GrailStack","description":"Moss(莫斯)-Spring Cloud体系的服务治理平台，让Spring Cloud应用不再流浪！欢迎Star！","archived":false,"fork":false,"pushed_at":"2023-09-15T07:13:01.000Z","size":8145,"stargazers_count":1365,"open_issues_count":34,"forks_count":357,"subscribers_count":83,"default_branch":"master","last_synced_at":"2025-04-18T11:15:12.192Z","etag":null,"topics":["moss","spring","spring-boot-admin","spring-cloud","spring-cloud-admin"],"latest_commit_sha":null,"homepage":"https://xujin.org/projects/moss/overview/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GrailStack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-04-10T07:26:25.000Z","updated_at":"2025-04-11T18:24:40.000Z","dependencies_parsed_at":"2023-01-15T08:00:42.470Z","dependency_job_id":"53441ec5-e07c-4c83-81d6-efe3151cc865","html_url":"https://github.com/GrailStack/Moss","commit_stats":null,"previous_names":["grailstack/moss","springcloud/moss"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrailStack%2FMoss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrailStack%2FMoss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrailStack%2FMoss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GrailStack%2FMoss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GrailStack","download_url":"https://codeload.github.com/GrailStack/Moss/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251739654,"owners_count":21635892,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["moss","spring","spring-boot-admin","spring-cloud","spring-cloud-admin"],"created_at":"2024-08-02T17:01:41.409Z","updated_at":"2025-05-03T04:30:53.876Z","avatar_url":"https://github.com/GrailStack.png","language":"Java","readme":"\u003cp align=\"left\"\u003e\n  \u003ca href=\"#\"\u003e\n    \u003cimg\n      alt=\"moss\"\n      src=\"https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410204658.png\"\n      width=\"25%\"\n    /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\nMoss(莫斯),让Spring Cloud应用不再流浪！\n\n---\n\n## 1.什么是Moss\n\n### 1.1 什么是服务治理\n\n服务治理，我也称之为微服务治理，是指用来管理微服务的整个生命周期。包括应用的创建，服务名的规范，服务的上下线，服务的迁移，整个服务的生老病死等方方面面的治理。\n\n### 1.2 Moss概述\n\n Moss(`莫斯`)是`服务治理平台的代号`，取名灵感来自电影《流浪地球》中的莫斯(Moss),Moss是电影《流浪地球》中领航员号空间站的人工智能机器人-负责管理空间站所有事务以及流浪地球的计划，而Moss跟Boss一样，是所有微服务的老板，所有微服务的生命周期将归其统管。\n \n 为什么会`出现Moss`？因为基于Spring Cloud的微服务体系，`缺乏统一的可视化的纳管治理平台`。\n \n \u003eSpring Cloud中国社区从2017年11月份，开始规划Spring Cloud Admin的开发和设计，专注于研究这个领域。Moss将会选择一个合适的时机开源，需要更多了解的可以加我微信Software_King。\n \n **Moss-钉钉答疑群:\n \n \u003cimg\n      alt=\"moss\"\n      src=\"/doc/images/ddq.png\"\n      width=\"35%\" /\u003e\n       \n #### 1.2.1 竞品分析\n\n Moss的竞品分析对比如下表所示:\n\n| 对比选项 | Spring Boot Admin | Moss |\n| --- | --- | --- |\n| **服务画像** | ❌ | ✅|\n| **服务实例画像** | ☑️ | ✅|\n| **支持单Eureka集群**|  ☑️ | ✅|\n| **支持单Consul集群**|  ☑️ | ✅|\n| **支持单Nacos集群**|  ☑️ | ✅|\n| **支持多Eureka集群，在线动态增加，删除,切换**|  ❌️ | ✅|\n|  前端技术| Vue | Ant Design Pro|\n|  **支持Spring Boot 1.5.X和Spring Boot 2.0.X**| ☑️ | ✅|\n|  **服务调用拓扑**| ❌ | ✅|\n|  **在线查看Jar依赖**| ❌ | ✅|\n|  **服务归属(项目，Owner)**| ❌ | ✅|\n|  **服务和实例支持模糊查询**| ❌ | ✅|\n|  服务闪烁告警| ❌ | ✅|\n|  服务评分打星| ❌ | ✅|\n|  服务列表画像| ❌ | ✅|\n|  服务实例列表画像| ❌ | ✅|\n|  服务实例内部组件列表，使用哪些Spring Cloud组件| ❌ | ✅|\n\n\u003e 其中☑️表示功能相对较弱 ✅表示功能完整强大 ❌表示功能缺失\n\n#### 1.2.1 Moss RoadMap\n\nRoadmap 时间点：\n\n✅表示当前稳定可用版本\n\n| 版本 | Milestone | 主要特性 |\n| -------- | -------- | -------- |\n| ✅1.0.0.RELEASE     | **2019.4.21** | 稳定可用版本|\n\n#### 1.2.2 Moss开发团队\n\n| 姓名 | 角色 | github地址|\n| -------- | -------- | -------- |\n|    SoftwareKing  | Owner | https://github.com/SoftwareKing|\n|   iShawnWang  | 前端开发 | https://github.com/iShawnWang |\n| homeant | 前后台开发 | https://github.com/homeant |\n| VancySavoki | 后端开发 | https://github.com/VancySavoki |\n\n### 1.3 Moss的功能\n\n* Moss的功能包括服务画像，服务实例画像，服务上下线事件记录，服务上下线websocket消息通知，针对生产应用可配置多种服务上线通知工具，支持多种注册中心，比如Eureka，Consul，Nacos.支持动态连接注册中心进去切换进行服务治理操作。\n\n\n#### 1.3.1 服务画像\n\n* 服务画像: \n  - 服务概要信息-`包括服务实例数，UP数，DOWN数，OffLine数，服务归属的项目，归属的Owner等`。\n  - 服务健康指标-展示服务的健康信息\n  - 服务请求映射-展示出服务对外提供的`所有REST接口`\n  - 服务调用链-展示服务的依赖调用拓扑\n  - 服务API监控-通过http trace和全链路监控对API进行监控\n  - 服务内部组件状态-内部组件的依赖，使用版本状态\n  - 服务性能指标-`对服务进行QPS，性能指标收集打分`\n  - 服务评级-自动根据评级规则对服务进行跑批评分打星。\n  \n  ---\n  \n![Spring Boot Admin的服务列表](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410201034.png)\n \n\u003ePS: Spring Boot Admin服务墙，如上图所示，看完之后谁能告诉我，它的服务画像能画出什么来。 Moss的服务画像列表如下所示，对比显而易见！\n  \n![服务列表](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410195035.png)\n  \n  \n#### 1.3.2 服务实例画像  \n\n![服务实例](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410195238.png)\n\n* 服务实例画像\n - 实例调用拓扑-对接Skywalking，PinPoint等获取实例调用拓扑\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202413.png)\n - 实例Build信息-实例构建信息\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202413.png)\n - 实例Git提交信息-最后一次提交人的Git详细信息\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202413.png)\n - Spring Cloud使用功能列表\n - 实例的健康信息\n - 实例的上下线Event信息\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410203321.png)\n - 服务日志级别-查看应用的日志级别,根据需要调整日志级别打印对应日志级别的信息\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410201656.png)\n - 环境配置-查看当前应用的环境配置信息\n - 实例JMX信息-分类展示实例的JMX信息\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410201741.png)\n - 查看JVM-实时展示应用实例的内存使用情况，GC次数，以及CPU和内存使用率\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410201825.png)\n - 查看日志-增量实时获取应用的info日志或Error日志\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410201949.png)\n - 查看线程-查看当前实例的线程情况\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202115.png)\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202209.png)\n - 查看实例内部依赖-查看实例的内部Jar依赖情况，统计分析展示依赖拓扑等\n ![Jar依赖分析](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410201418.png)\n\n - HttpTrace-按时间展示http请求的轨迹信息，包括请求的路径，Response的状态，调用耗时等\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202540.png)\n \n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410202613.png)\n \n - 支持GC Log日志查看\n ![](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410203209.png)\n\n#### 1.3.3 服务纳管\n\n   项目对应多个应用，每个应用由多个实例组成提供具体的服务，服务的生命周期管理需要可控，可追溯，可监控，可规范。\n   由Spring Cloud体系构建的微服务体系，应用名即服务名。服务纳管分为历史应用纳管和新应用纳管。\n   \n   \n * 新应用纳管: 新应用使用Moss-Client，启动时连接Moss对应用名进行统一拦截check，从而规范应用名。\n * 旧应用纳管: 旧应用引入对应的版本的Moss-Client，在Moss平台对其手动接入管理，录入应用名。\n\n#### 1.3.4 多注册中心支持\n\nMoss通过注册中心接管Spring Cloud体系的微服务。支持动态连接注册中心，填注册中心的URL即可，快速接管服务。\n\n![多注册中心支持](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410195640.png)\n\n#### 1.3.5 服务报表数据\n\nMoss通过注册中心接管Spring Cloud体系的微服务。然后获取每个服务使用Spring Boot的版本和Spring Cloud的版本，Moss的接入率以报表数据展示。\n\n![DashBoard报表数据](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410195952.png)\n\n#### 1.3.6 事件日志\n\n![事件日志](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410195322.png)\n\n\n#### 1.3.7 元数据管理\n\n![元数据管理](https://raw.githubusercontent.com/SoftwareKing/cdn/master/images/me20190410200459.png)\n\n\n#### 1.3.9 Spring Cloud组件使用情况\n\n\n## 2.Moss的架构设计\n\n### 2.1 Moss的架构设计\n\n  Moss基于Spring Boot Admin 2.1.3版中的spring-boot-admin-server模块二次开发，基于可扩展思想。前端采用Ant Design Pro，采用Spring Boot+shiro+JWT+LDAP实现整个权限认证管理。通过Moss-Cloud-Adapter模块支持多注册中心，应用启动对应用名进行check是否规范。\n  \n\u003e实现细节后续补充\n\n### 2.2 Moss的服务设计\n\nMoss服务端主要自动探测EndPoint，代理EndPoint，对接各种注册中心，提供可视化的管理。\n\n\n### 2.3 Moss的客户端设计\n\nmoss客户端主要用于内置预设自研端点和管理配置信息，使接入方无感知接入。\n\u003e实现细节后续补充\n\n#### 2.3.1 Moss-Client\n\nMoss客户端支持两种Spring Boot版本，分别是Spring Boot 1.5.X和Spring Boot 2.X，使用只需引入 moss-client 即可。示例2.x的客户端如下所示。\n\n1.引入 moss-client\n\n```xml\n\u003cdependency\u003e\n\t\u003cgroupId\u003eorg.xujin.moss\u003c/groupId\u003e\n\t\u003cartifactId\u003emoss-client-2.x\u003c/artifactId\u003e\n\t\u003cversion\u003e1.0.0.RELEASE\u003c/version\u003e\n\u003c/dependency\u003e\n```\n2.在application.yml中增加配置如下\n\n```yml\ninfo.groupId: @project.groupId@\ninfo.artifactId: @project.artifactId@\ninfo.version: @project.version@\n```\n\n3.在pom中增加maven插件\n\n```xml\n\u003cplugin\u003e\n\t\t\u003cgroupId\u003epl.project13.maven\u003c/groupId\u003e\n\t\t\u003cartifactId\u003egit-commit-id-plugin\u003c/artifactId\u003e\n\t\t\u003cversion\u003e2.1.15\u003c/version\u003e\n\t\t\t  \u003cexecutions\u003e\n\t\t\t\t\t\u003cexecution\u003e\n\t\t\t\t\t\t\u003cgoals\u003e\n\t\t\t\t\t\t\t\u003cgoal\u003erevision\u003c/goal\u003e\n\t\t\t\t\t\t\u003c/goals\u003e\n\t\t\t\t\t\u003c/execution\u003e\n\t\t\t\t\u003c/executions\u003e\n\t\t\u003cconfiguration\u003e\n\t\t\t  \u003cdotGitDirectory\u003e${project.basedir}/.git\u003c/dotGitDirectory\u003e\n\t\t\u003c/configuration\u003e\n\u003c/plugin\u003e\n```\n\n#### 2.3.2 导入IDE运行\n\n1. 为方便快速演示，默认内置了 h2 数据库。\n3. 导入 IDEA 运行主程序org.xujin.moss.MossApplication.java\n4. 启动之后访问 http://localhost:8086/\n* 用户名 -  xujin\n* 密码 - 123456\n5. 如需修改后端数据库，将 moss-web/src/main/resources/config/application.yml \n中 `spring.profiles.active` 的 h2 改为 mysql，并修改 application-mysql 中的连接地址、username/password。\n\n#### 2.3.3 docker镜像运行\n\n1.根目录安装各个依赖\n`mvn install -Dmaven.test.skip=true`\n\n2.根目录进入moss-web目录 docker镜像打包：\n`cd moss-web \u0026\u0026 mvn package \u0026\u0026 mvn docker:build`\n\n3.根目录进入docker-compose启动\n`cd docker-compose \u0026\u0026 docker-compose -f docker-compose.yml up`\n\n\n## 3.Moss的实现细节\n\n关于Moss的实现细节，后续文章进行揭秘！敬请期待。\n\n* Moss Client如何内置预设Spring Boot的Management信息\n* Moss client如何兼容Spring Boot 1.5.X和Spring Boot 2.x的Metrics信息\n* Moss client如何解决运维访问管理端口Health端点不需要前缀，而Moss治理需要带/actuator前缀\n* Moss服务端的选型设计和扩展\n* Moss的动态连接注册中心，支持多种注册中心的\n* @RestControllerEndpoint与@Endpoint端点写法引起的坑\n* 注册到Eureka上的应用名为大写，而注册到Nacos上的应用名为小写,Moss需要忽略大小写匹配\n* 等等~~~~~~~~~~~~~\n\n## 4 GC日志路径设置参考\n\n`-Xloggc:${YOUR_WORK_DIR}/logs/${APP_NAME}/gc.log -verbose.gc -XX:+PrintGCDateStamps`\n\n```yaml\nlogging:\n  registry:\n    files:\n    - name: gclog\n      path: logs/${spring.application.name}/gc.log\n```\n\n\n### 4.1 切换支持注册中心\n默认的注册注册中心是 eureka，如果希望切换到其他注册中心，如 ZooKeeper,\n可以通过激活 profile 切换注册中心。在以下 pom 中已预设两种注册中心，使用时自行切换即可。\n\n* moss-web/pom.xml\n* moss-service/pom.xml\n* moss-client/moss-sample-2.1.x\n* moss-client/moss-sample-1.5.x\n\n## 5.致谢\n\nMoss中的moss-adapter-cloud和moss-core模块部分代码参考了 [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin)，感谢 Codecentric 开源了该框架。\n\n## 6.Stargazers over time\n \n [![Stargazers over time](https://starchart.cc/SpringCloud/Moss.svg)](https://starchart.cc/SpringCloud/Moss)\n","funding_links":[],"categories":["Java","微服务治理"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGrailStack%2FMoss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGrailStack%2FMoss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGrailStack%2FMoss/lists"}