CoSky基于 Redis 的服務(wù)治理平臺
CoSky 高性能、低成本微服務(wù)治理平臺(服務(wù)注冊/發(fā)現(xiàn) & 配置中心)
CoSky 是一個輕量級、低成本的服務(wù)注冊、服務(wù)發(fā)現(xiàn)、 配置服務(wù) SDK,通過使用現(xiàn)有基礎(chǔ)設(shè)施中的 Redis (相信你已經(jīng)部署了Redis),不用給運維部署帶來額外的成本與負擔(dān)。 借助于 Redis 的高性能, CoSky 提供了超高TPS&QPS (10W+/s JMH 基準測試)。CoSky 結(jié)合本地進程緩存策略 + Redis PubSub,實現(xiàn)實時進程緩存刷新,兼具無與倫比的QPS性能 (7000W+/s JMH 基準測試)、進程緩存與 Redis 的實時一致性。
服務(wù)注冊與發(fā)現(xiàn)
配置中心
CoSky-Mirror (實時同步服務(wù)實例變更狀態(tài))
CoSky-Mirror 就像一個鏡子放在 Nacos、CoSky 中間,構(gòu)建一個統(tǒng)一的服務(wù)發(fā)現(xiàn)平臺。
Examples
Service Consumer --RPC--> Service Provider Examples
安裝
Gradle
Kotlin DSL
val coskyVersion = "1.2.10"; implementation("me.ahoo.cosky:spring-cloud-starter-cosky-config:${coskyVersion}") implementation("me.ahoo.cosky:spring-cloud-starter-cosky-discovery:${coskyVersion}") implementation("org.springframework.cloud:spring-cloud-starter-loadbalancer:3.0.3")
Maven
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>demo</artifactId> <properties> <cosky.version>1.2.10</cosky.version> </properties> <dependencies> <dependency> <groupId>me.ahoo.cosky</groupId> <artifactId>spring-cloud-starter-cosky-config</artifactId> <version>${cosky.version}</version> </dependency> <dependency> <groupId>me.ahoo.cosky</groupId> <artifactId>spring-cloud-starter-cosky-discovery</artifactId> <version>${cosky.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>3.0.3</version> </dependency> </dependencies> </project>
bootstrap.yaml (Spring-Cloud-Config)
spring: application: name: ${service.name:cosky-rest-api} cloud: cosky: namespace: ${cosky.namespace:cosky-{system}} config: config-id: ${spring.application.name}.yaml redis: mode: ${cosky.redis.mode:standalone} url: ${cosky.redis.uri:redis://localhost:6379} logging: file: name: logs/${spring.application.name}.log
REST-API Server (Optional)
安裝 REST-API Server
方式一:下載可執(zhí)行文件
解壓 cosky-rest-api-1.2.10.tar
cd cosky-rest-api-1.2.10 # 工作目錄: cosky-rest-api-1.2.10 bin/cosky-rest-api --server.port=8080 --cosky.redis.uri=redis://localhost:6379
方式二:在 Docker 中運行
docker pull ahoowang/cosky-rest-api:1.2.10 docker run --name cosky-rest-api -d -p 8080:8080 --link redis -e COSKY_REDIS_URI=redis://redis:6379 ahoowang/cosky-rest-api:1.2.10
方式三:在 Kubernetes 中運行
apiVersion: apps/v1 kind: Deployment metadata: name: cosky-rest-api labels: app: cosky-rest-api spec: replicas: 1 selector: matchLabels: app: cosky-rest-api template: metadata: labels: app: cosky-rest-api spec: containers: - env: - name: COSKY_REDIS_MODE value: standalone - name: COSKY_REDIS_URI value: redis://redis-uri:6379 image: ahoowang/cosky-rest-api:1.2.10 name: cosky-rest-api ports: - containerPort: 8080 protocol: TCP resources: limits: cpu: "1" memory: 1280Mi requests: cpu: 250m memory: 1024Mi volumeMounts: - mountPath: /etc/localtime name: volume-localtime volumes: - hostPath: path: /etc/localtime type: "" name: volume-localtime --- apiVersion: v1 kind: Service metadata: name: cosky-rest-api labels: app: cosky-rest-api spec: selector: app: cosky-rest-api ports: - name: rest port: 80 protocol: TCP targetPort: 8080
Dashboard
服務(wù)依賴拓撲
基于角色的訪問控制(RBAC)
- cosky: 保留用戶名,超級用戶,擁有最高權(quán)限。應(yīng)用首次啟動時會初始化超級用戶(cosky)的密碼,并打印在控制臺。忘記密碼也不用擔(dān)心,可以通過配置
enforce-init-super-user: true,CoSky 會幫助你重新初始化密碼并打印在控制臺。
---------------- ****** CoSky - init super user:[cosky] password:[6TrmOux4Oj] ****** ----------------
- admin: 保留角色,超級管理員角色,擁有所有權(quán)限,一個用戶可以綁定多個角色,一個角色可以綁定多個資源操作權(quán)限。
- 權(quán)限控制粒度為命名空間,讀寫操作
角色權(quán)限
添加角色
用戶管理
添加用戶
審計日志
命名空間管理
配置管理
編輯配置
回滾配置
從 Nacos 導(dǎo)入配置
服務(wù)管理
編輯服務(wù)實例信息
REST-API
Namespace
- /v1/namespaces
- GET
- /v1/namespaces/{namespace}
- PUT
- GET
- /v1/namespaces/current
- GET
- /v1/namespaces/current/{namespace}
- PUT
Config
- /v1/namespaces/{namespace}/configs
- GET
- /v1/namespaces/{namespace}/configs/{configId}
- GET
- PUT
- DELETE
- /v1/namespaces/{namespace}/configs/{configId}/versions
- GET
- /v1/namespaces/{namespace}/configs/{configId}/versions/{version}
- GET
- /v1/namespaces/{namespace}/configs/{configId}/to/{targetVersion}
- PUT
Service
- /v1/namespaces/{namespace}/services/
- GET
- /v1/namespaces/{namespace}/services/{serviceId}/instances
- GET
- PUT
- /v1/namespaces/{namespace}/services/{serviceId}/instances/{instanceId}
- DELETE
- /v1/namespaces/{namespace}/services/{serviceId}/instances/{instanceId}/metadata
- PUT
- /v1/namespaces/{namespace}/services/{serviceId}/lb
- GET
JMH-Benchmark
- 基準測試運行環(huán)境:筆記本開發(fā)機 ( MacBook Pro (M1) )
- 所有基準測試都在開發(fā)筆記本上執(zhí)行。
- Redis 部署環(huán)境也在該筆記本開發(fā)機上。
ConfigService
gradle cosky-config:jmh # or java -jar cosky-config/build/libs/cosky-config-1.2.10-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1
Benchmark Mode Cnt Score Error Units ConsistencyRedisConfigServiceBenchmark.getConfig thrpt 256733987.827 ops/s RedisConfigServiceBenchmark.getConfig thrpt 241787.679 ops/s RedisConfigServiceBenchmark.setConfig thrpt 140461.112 ops/s
ServiceDiscovery
gradle cosky-discovery:jmh # or java -jar cosky-discovery/build/libs/cosky-discovery-1.2.10-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1
Benchmark Mode Cnt Score Error Units ConsistencyRedisServiceDiscoveryBenchmark.getInstances thrpt 76621729.048 ops/s ConsistencyRedisServiceDiscoveryBenchmark.getServices thrpt 455760632.346 ops/s RedisServiceDiscoveryBenchmark.getInstances thrpt 226909.985 ops/s RedisServiceDiscoveryBenchmark.getServices thrpt 304979.150 ops/s RedisServiceRegistryBenchmark.deregister thrpt 255305.648 ops/s RedisServiceRegistryBenchmark.register thrpt 110664.160 ops/s RedisServiceRegistryBenchmark.renew thrpt 210960.325 ops/s
評論
圖片
表情
