Awesome
CoSky High-performance, low-cost microservice governance platform (Service Discovery and Configuration Service)
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&QPS (100,000+/s 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) and real-time consistency between process cache and Redis.
Service Discovery
<p align="center"> <img src="./docs/CoSky-Discovery.png" alt="CoSky-Discovery"/> </p>Configuration
<p align="center"> <img src="./docs/CoSky-Configuration.png" alt="CoSky-Configuration"/> </p>Examples
Service Consumer --RPC--> Service Provider Examples
Installation
Gradle
Kotlin DSL
val coskyVersion = "lastVersion";
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>lastVersion</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}
data:
redis:
url: redis://localhost:6379
cloud:
cosky:
namespace: ${cosky.namespace:cosky-{system}}
config:
config-id: ${spring.application.name}.yaml
service-registry:
auto-registration:
enabled: ${cosky.auto-registry:true}
logging:
file:
name: logs/${spring.application.name}.log
REST-API Server (Optional
)
Installation REST-API Server
Option 1:Download the executable file
Download cosky-server
tar cosky-lastVersion.tar
cd cosky-lastVersion
# Working directory: cosky-lastVersion
bin/cosky --server.port=8080 --spring.data.redis.uri=redis://localhost:6379
Option 2:Run On Docker
docker pull ahoowang/cosky:lastVersion
docker run --name cosky -d -p 8080:8080 --link redis -e SPRING_DATA_REDIS_URL=redis://redis:6379 ahoowang/cosky:lastVersion
Option 3:Run On Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: cosky
labels:
app: cosky
spec:
replicas: 1
selector:
matchLabels:
app: cosky
template:
metadata:
labels:
app: cosky
spec:
containers:
- env:
- name: SPRING_DATA_REDIS_URL
value: redis://redis-uri:6379
image: ahoowang/cosky:lastVersion
name: cosky
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
labels:
app: cosky
spec:
selector:
app: cosky
ports:
- name: rest
port: 80
protocol: TCP
targetPort: 8080
Dashboard
<p align="center"> <img src="./docs/dashboard-dashboard.png" alt="CoSky-Dashboard"/> </p>
Service dependent topology
<p align="center"> <img src="./docs/dashboard-topology.png" alt="CoSky-Dashboard-topology"/> </p>Role-based access control(RBAC)
- 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.
---------------- ****** CoSky - init super user:[cosky] password:[6TrmOux4Oj] ****** ----------------
- 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.
- Permission control granularity is namespace, read and write operations
Role Permissions
<p align="center"> <img src="./docs/dashboard-role.png" alt="CoSky-Dashboard-role"/> </p>Add Role
<p align="center"> <img src="./docs/dashboard-role-add.png" alt="CoSky-Dashboard-role-add"/> </p>User Management
<p align="center"> <img src="./docs/dashboard-user.png" alt="CoSky-Dashboard-user"/> </p>Add User
<p align="center"> <img src="./docs/dashboard-user-add.png" alt="CoSky-Dashboard-user-add"/> </p>Audit Log
<p align="center"> <img src="./docs/dashboard-audit-log.png" alt="CoSky-Dashboard-audit-log"/> </p>Namespace
<p align="center"> <img src="./docs/dashboard-namespace.png" alt="CoSky-Dashboard-namespace"/> </p>Config
<p align="center"> <img src="./docs/dashboard-config.png" alt="CoSky-Dashboard-config"/> </p>Edit configuration
<p align="center"> <img src="./docs/dashboard-config-edit.png" alt="CoSky-Dashboard-config-edit"/> </p>Rollback configuration
<p align="center"> <img src="./docs/dashboard-config-rollback.png" alt="CoSky-Dashboard-config-rollback"/> </p>Import configuration from Nacos
<p align="center"> <img src="./docs/dashboard-config-import.gif" alt="CoSky-Dashboard-config-import"/> </p>Service
<p align="center"> <img src="./docs/dashboard-service.png" alt="CoSky-Dashboard-service"/> </p>Edit Service Instance
<p align="center"> <img src="./docs/dashboard-service-edit.png" alt="CoSky-Dashboard-service-edit"/> </p>REST-API
JMH-Benchmark
- The development notebook : MacBook Pro (M1)
- All benchmark tests are carried out on the development notebook.
- Deploying Redis on the development notebook.
ConfigService
gradle cosky-config:jmh
# or
java -jar cosky-config/build/libs/cosky-config-lastVersion-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-lastVersion-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
CoSky-Mirror (Real-time synchronization of service instance change status)
<p align="center"> <img src="./docs/CoSky-Mirror.png" alt="CoSky-Mirror"/> </p> <p align="center"> <img src="./docs/CoSky-Mirror-Unified.png" alt="CoSky-Mirror-Unified"/> </p>CoSky-Mirror is like a mirror placed between Nacos and CoSky to build a unified service discovery platform.
Comparison with others
CoSky | Eureka | Consul | CoreDNS | Zookeeper | Nacos | Apollo | |
---|---|---|---|---|---|---|---|
CAP | CP+AP | AP | CP | CP | CP | CP+AP | CP+AP |
Health Check | Client Beat | Client Beat | TCP/HTTP/gRPC/Cmd | Keep Alive | Keep Alive | TCP/HTTP/Client Beat | Client Beat |
Load Balancing Strategy | Weight/Selector | Ribbon | Fabio | RoundRobin | RoundRobin | Weight/metadata/RoundRobin | RoundRobin |
Avalanche Protection | N | Y | N | N | N | Y | N |
Auto Logoff Instance | Support | Support | Not Support | Not Support | Support | Support | Support |
Access Protocol | HTTP/Redis | HTTP | HTTP/DNS | DNS | TCP | HTTP/DNS | HTTP |
Listening Support | Support | Support | Support | Not Support | Support | Support | Support |
Multi-data Center | Support | Support | Support | Not Support | Not Support | Support | Support |
Cross Registry Synchronization | Support | Not Support | Support | Not Support | Not Support | Support | Not Support |
SpringCloud Integration | Support | Support | Support | Not Support | Not Support | Support | Support |
Dubbo Integration | Support | Not Support | Not Support | Not Support | Support | Support | Support |
K8S Integration | Support | Not Support | Support | Support | Not Support | Support | Not Support |
Persistence | Redis | MySql | MySql |