{"id":13537839,"url":"https://github.com/Ahoo-Wang/CoSky","last_synced_at":"2025-04-02T04:32:00.131Z","repository":{"id":38127754,"uuid":"360576464","full_name":"Ahoo-Wang/CoSky","owner":"Ahoo-Wang","description":"High-performance, low-cost microservice governance platform. Service Discovery and Configuration Service | 高性能、低成本微服务治理平台","archived":false,"fork":false,"pushed_at":"2024-06-23T02:57:58.000Z","size":9825,"stargazers_count":76,"open_issues_count":10,"forks_count":21,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-06-23T16:12:13.718Z","etag":null,"topics":["cloud","cloud-native","configuration","configuration-management","dashboard","eureka","kotlin","microservice","microservices","nacos","native","redis","service","service-discovery","service-registry","spring","spring-boot","spring-cloud","spring-cloud-config","spring-cloud-eureka"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/Ahoo-Wang.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-22T15:59:29.000Z","updated_at":"2024-07-04T09:08:33.911Z","dependencies_parsed_at":"2023-10-17T05:03:33.082Z","dependency_job_id":"493b52a7-bbd4-4a0c-a44b-192b1c7c91dc","html_url":"https://github.com/Ahoo-Wang/CoSky","commit_stats":{"total_commits":470,"total_committers":4,"mean_commits":117.5,"dds":0.4936170212765958,"last_synced_commit":"bf25c350ec5426ad2d2d57a266a02e8081e292ad"},"previous_names":["ahoo-wang/govern-service"],"tags_count":95,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahoo-Wang%2FCoSky","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahoo-Wang%2FCoSky/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahoo-Wang%2FCoSky/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ahoo-Wang%2FCoSky/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ahoo-Wang","download_url":"https://codeload.github.com/Ahoo-Wang/CoSky/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246757525,"owners_count":20828914,"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":["cloud","cloud-native","configuration","configuration-management","dashboard","eureka","kotlin","microservice","microservices","nacos","native","redis","service","service-discovery","service-registry","spring","spring-boot","spring-cloud","spring-cloud-config","spring-cloud-eureka"],"created_at":"2024-08-01T09:01:04.185Z","updated_at":"2025-04-02T04:31:55.120Z","avatar_url":"https://github.com/Ahoo-Wang.png","language":"Kotlin","funding_links":[],"categories":["Libraries","Kotlin"],"sub_categories":[],"readme":"# [CoSky](https://github.com/Ahoo-Wang/CoSky) High-performance, low-cost microservice governance platform (Service Discovery and Configuration Service)\n\n[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n[![GitHub release](https://img.shields.io/github/release/Ahoo-Wang/CoSky.svg)](https://github.com/Ahoo-Wang/CoSky/releases)\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/me.ahoo.cosky/cosky-core/badge.svg)](https://maven-badges.herokuapp.com/maven-central/me.ahoo.cosky/cosky-core)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/9e31358946b645abb283e83b10e85e2d)](https://www.codacy.com/gh/Ahoo-Wang/CoSky/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=Ahoo-Wang/CoSky\u0026amp;utm_campaign=Badge_Grade)\n[![codecov](https://codecov.io/gh/Ahoo-Wang/CoSky/branch/main/graph/badge.svg?token=N114DHHBUI)](https://codecov.io/gh/Ahoo-Wang/CoSky)\n![Integration Test Status](https://github.com/Ahoo-Wang/CoSky/actions/workflows/integration-test.yml/badge.svg)\n\n\u003e [中文文档](https://github.com/Ahoo-Wang/CoSky/blob/main/README.zh-CN.md)\n\n*[CoSky](https://github.com/Ahoo-Wang/CoSky)* is a lightweight, low-cost service registration, service discovery, and configuration service SDK. By using Redis in the existing infrastructure (I believe you have already deployed Redis), it doesn’t need to bring extra to the operation and maintenance deployment. Cost and burden. With the high performance of Redis, *CoSky* provides ultra-high TPS\u0026QPS (100,000+/s [JMH Benchmark](#jmh-benchmark)). *CoSky* combines the process cache strategy + *Redis PubSub* to achieve real-time process cache refresh, with unparalleled QPS performance (70,000,000+/s [JMH Benchmark](#jmh-benchmark)) and real-time consistency\nbetween process cache and Redis.\n\n## Service Discovery\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/CoSky-Discovery.png\" alt=\"CoSky-Discovery\"/\u003e\n\u003c/p\u003e\n\n## Configuration\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/CoSky-Configuration.png\" alt=\"CoSky-Configuration\"/\u003e\n\u003c/p\u003e\n\n## Examples\n\n[Service Consumer --RPC--\u003e Service Provider Examples](https://github.com/Ahoo-Wang/CoSky/tree/main/examples)\n\n## Installation\n\n### Gradle\n\n\u003e Kotlin DSL\n\n``` kotlin\n    val coskyVersion = \"lastVersion\";\n    implementation(\"me.ahoo.cosky:spring-cloud-starter-cosky-config:${coskyVersion}\")\n    implementation(\"me.ahoo.cosky:spring-cloud-starter-cosky-discovery:${coskyVersion}\")\n    implementation(\"org.springframework.cloud:spring-cloud-starter-loadbalancer:3.0.3\")\n```\n\n### Maven\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n\n    \u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n    \u003cartifactId\u003edemo\u003c/artifactId\u003e\n    \u003cproperties\u003e\n        \u003ccosky.version\u003elastVersion\u003c/cosky.version\u003e\n    \u003c/properties\u003e\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eme.ahoo.cosky\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-cosky-config\u003c/artifactId\u003e\n            \u003cversion\u003e${cosky.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eme.ahoo.cosky\u003c/groupId\u003e\n            \u003cartifactId\u003espring-cloud-starter-cosky-discovery\u003c/artifactId\u003e\n            \u003cversion\u003e${cosky.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n          \u003cgroupId\u003eorg.springframework.cloud\u003c/groupId\u003e\n          \u003cartifactId\u003espring-cloud-starter-loadbalancer\u003c/artifactId\u003e\n          \u003cversion\u003e3.0.3\u003c/version\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\n\u003c/project\u003e\n```\n\n### bootstrap.yaml (Spring-Cloud-Config)\n\n```yaml\nspring:\n  application:\n    name: ${service.name:cosky}\n  data:\n    redis:\n      url: redis://localhost:6379\n  cloud:\n    cosky:\n      namespace: ${cosky.namespace:cosky-{system}}\n      config:\n        config-id: ${spring.application.name}.yaml\n    service-registry:\n      auto-registration:\n        enabled: ${cosky.auto-registry:true}\nlogging:\n  file:\n    name: logs/${spring.application.name}.log\n```\n\n## REST-API Server (``Optional``)\n\n### Installation REST-API Server\n\n#### Option 1：Download the executable file\n\n\u003e Download [cosky-server](https://github.com/Ahoo-Wang/cosky/releases/download/v2.0.0/cosky-2.0.0.tar)\n\n\u003e tar *cosky-lastVersion.tar*\n\n```shell\ncd cosky-lastVersion\n# Working directory: cosky-lastVersion\nbin/cosky --server.port=8080 --spring.data.redis.uri=redis://localhost:6379\n```\n\n#### Option 2：Run On Docker\n\n```shell\ndocker pull ahoowang/cosky:lastVersion\ndocker run --name cosky -d -p 8080:8080 --link redis -e SPRING_DATA_REDIS_URL=redis://redis:6379  ahoowang/cosky:lastVersion\n```\n\n#### Option 3：Run On Kubernetes\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: cosky\n  labels:\n    app: cosky\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: cosky\n  template:\n    metadata:\n      labels:\n        app: cosky\n    spec:\n      containers:\n        - env:\n            - name: SPRING_DATA_REDIS_URL\n              value: redis://redis-uri:6379\n          image: ahoowang/cosky:lastVersion\n          name: cosky\n          ports:\n            - containerPort: 8080\n              protocol: TCP\n          resources:\n            limits:\n              cpu: \"1\"\n              memory: 1280Mi\n            requests:\n              cpu: 250m\n              memory: 1024Mi\n          volumeMounts:\n            - mountPath: /etc/localtime\n              name: volume-localtime\n      volumes:\n        - hostPath:\n            path: /etc/localtime\n            type: \"\"\n          name: volume-localtime\n\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: cosky\n  labels:\n    app: cosky\nspec:\n  selector:\n    app: cosky\n  ports:\n    - name: rest\n      port: 80\n      protocol: TCP\n      targetPort: 8080\n```\n\n### Dashboard\n\n\u003e [http://localhost:8080/dashboard](http://localhost:8080/dashboard)\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-dashboard.png\" alt=\"CoSky-Dashboard\"/\u003e\n\u003c/p\u003e\n\n### Service dependent topology\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-topology.png\" alt=\"CoSky-Dashboard-topology\"/\u003e\n\u003c/p\u003e\n\n### Role-based access control(RBAC)\n\n- cosky: Reserved username, super user, with the highest authority. When the application is launched for the first time, the super user (cosky) password will be initialized and printed on the console. Don't worry if you forget your password, you can configure `enforce-init-super-user: true`, *CoSky* will help you reinitialize the password and print it on the console.\n\n```log\n---------------- ****** CoSky -  init super user:[cosky] password:[6TrmOux4Oj] ****** ----------------\n```\n\n- admin: Reserved roles, super administrator roles, have all permissions, a user can be bound to multiple roles, and a role can be bound to multiple resource operation permissions.\n- Permission control granularity is namespace, read and write operations\n\n#### Role Permissions\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-role.png\" alt=\"CoSky-Dashboard-role\"/\u003e\n\u003c/p\u003e\n\n##### Add Role\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-role-add.png\" alt=\"CoSky-Dashboard-role-add\"/\u003e\n\u003c/p\u003e\n\n#### User Management\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-user.png\" alt=\"CoSky-Dashboard-user\"/\u003e\n\u003c/p\u003e\n\n##### Add User\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-user-add.png\" alt=\"CoSky-Dashboard-user-add\"/\u003e\n\u003c/p\u003e\n\n#### Audit Log\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-audit-log.png\" alt=\"CoSky-Dashboard-audit-log\"/\u003e\n\u003c/p\u003e\n\n#### Namespace\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-namespace.png\" alt=\"CoSky-Dashboard-namespace\"/\u003e\n\u003c/p\u003e\n\n#### Config\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-config.png\" alt=\"CoSky-Dashboard-config\"/\u003e\n\u003c/p\u003e\n\n##### Edit configuration\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-config-edit.png\" alt=\"CoSky-Dashboard-config-edit\"/\u003e\n\u003c/p\u003e\n\n##### Rollback configuration\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-config-rollback.png\" alt=\"CoSky-Dashboard-config-rollback\"/\u003e\n\u003c/p\u003e\n\n##### Import configuration from Nacos\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-config-import.gif\" alt=\"CoSky-Dashboard-config-import\"/\u003e\n\u003c/p\u003e\n\n#### Service\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-service.png\" alt=\"CoSky-Dashboard-service\"/\u003e\n\u003c/p\u003e\n\n##### Edit Service Instance\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/dashboard-service-edit.png\" alt=\"CoSky-Dashboard-service-edit\"/\u003e\n\u003c/p\u003e\n\n### REST-API\n\n\u003e https://ahoo-cosky.apifox.cn/\n\n## JMH-Benchmark\n\n- The development notebook : MacBook Pro (M1)\n- All benchmark tests are carried out on the development notebook.\n- Deploying Redis on the development notebook.\n\n### ConfigService\n\n``` shell\ngradle cosky-config:jmh\n# or\njava -jar cosky-config/build/libs/cosky-config-lastVersion-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1\n```\n\n```\nBenchmark                                          Mode  Cnt          Score   Error  Units\nConsistencyRedisConfigServiceBenchmark.getConfig  thrpt       256733987.827          ops/s\nRedisConfigServiceBenchmark.getConfig             thrpt          241787.679          ops/s\nRedisConfigServiceBenchmark.setConfig             thrpt          140461.112          ops/s\n```\n\n### ServiceDiscovery\n\n``` shell\ngradle cosky-discovery:jmh\n# or\njava -jar cosky-discovery/build/libs/cosky-discovery-lastVersion-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1\n```\n\n```\nBenchmark                                                Mode  Cnt          Score   Error  Units\nConsistencyRedisServiceDiscoveryBenchmark.getInstances  thrpt        76621729.048          ops/s\nConsistencyRedisServiceDiscoveryBenchmark.getServices   thrpt       455760632.346          ops/s\nRedisServiceDiscoveryBenchmark.getInstances             thrpt          226909.985          ops/s\nRedisServiceDiscoveryBenchmark.getServices              thrpt          304979.150          ops/s\nRedisServiceRegistryBenchmark.deregister                thrpt          255305.648          ops/s\nRedisServiceRegistryBenchmark.register                  thrpt          110664.160          ops/s\nRedisServiceRegistryBenchmark.renew                     thrpt          210960.325          ops/s\n```\n\n## CoSky-Mirror (Real-time synchronization of service instance change status)\n\n\u003e CoSky-Mirror is like a mirror placed between Nacos and CoSky to build a unified service discovery platform.\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/CoSky-Mirror.png\" alt=\"CoSky-Mirror\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n     \u003cimg src=\"./docs/CoSky-Mirror-Unified.png\" alt=\"CoSky-Mirror-Unified\"/\u003e\n\u003c/p\u003e\n\n## Comparison with others\n|                                | CoSky            | \tEureka       | \tConsul           | \tCoreDNS      | \tZookeeper    | \tNacos                       | \tApollo       |\n|--------------------------------|------------------|---------------|-------------------|---------------|---------------|------------------------------|---------------|\n| CAP                            | CP+AP            | \tAP           | \tCP               | \tCP           | \tCP           | \tCP+AP                       | \tCP+AP        |\n| Health Check                   | \tClient Beat     | \tClient Beat\t | TCP/HTTP/gRPC/Cmd | \tKeep Alive   | \tKeep Alive   | \tTCP/HTTP/Client Beat        | \tClient Beat  |\n| Load Balancing Strategy        | \tWeight/Selector | \tRibbon       | \tFabio\t           | \tRoundRobin\t  | \tRoundRobin\t  | \tWeight/metadata/RoundRobin\t | \tRoundRobin\t  |\n| Avalanche Protection           | \tN               | \tY            | \tN\t               | \tN\t           | \tN\t           | \tY\t                          | \tN\t           |\n| Auto Logoff Instance           | \tSupport         | \tSupport      | \tNot Support\t     | \tNot Support\t | \tSupport      | \tSupport                     | \tSupport\t     |\n| Access Protocol                | \tHTTP/Redis      | \tHTTP         | \tHTTP/DNS\t        | \tDNS\t         | \tTCP\t         | \tHTTP/DNS\t                   | \tHTTP\t        |\n| Listening Support              | \tSupport         | \tSupport      | \tSupport\t         | \tNot Support\t | \tSupport\t     | \tSupport\t                    | \tSupport\t     |\n| Multi-data Center              | \tSupport         | \tSupport      | \tSupport\t         | \tNot Support\t | \tNot Support\t | \tSupport\t                    | \tSupport\t     |\n| Cross Registry Synchronization | \tSupport         | \tNot Support  | \tSupport\t         | \tNot Support\t | \tNot Support\t | \tSupport\t                    | \tNot Support\t |\n| SpringCloud Integration        | \tSupport         | \tSupport      | \tSupport\t         | \tNot Support\t | \tNot Support\t | \tSupport                     | \tSupport\t     |\n| Dubbo Integration              | \tSupport         | \tNot Support  | \tNot Support\t     | \tNot Support\t | \tSupport\t     | \tSupport\t                    | \tSupport\t     |\n| K8S Integration                | \tSupport         | \tNot Support  | \tSupport\t         | \tSupport\t     | \tNot Support\t | \tSupport\t                    | \tNot Support\t |\n| Persistence                    | \tRedis           | \t\t            | \t\t                | \t\t            |               | \tMySql                       | \tMySql        |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAhoo-Wang%2FCoSky","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAhoo-Wang%2FCoSky","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAhoo-Wang%2FCoSky/lists"}