me.ahoo.govern:govern-dependencies

Govern Service On Redis


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
License
Apache-2.0

Documentation

CoSky High-performance, low-cost microservice governance platform (Service Discovery and Configuration Service)

License GitHub release Maven Central Codacy Badge codecov Integration Test Status

中文文档

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

CoSky-Discovery

Configuration

CoSky-Configuration

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

http://localhost:8080/dashboard

CoSky-Dashboard

Service dependent topology

CoSky-Dashboard-topology

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

CoSky-Dashboard-role

Add Role

CoSky-Dashboard-role-add

User Management

CoSky-Dashboard-user

Add User

CoSky-Dashboard-user-add

Audit Log

CoSky-Dashboard-audit-log

Namespace

CoSky-Dashboard-namespace

Config

CoSky-Dashboard-config

Edit configuration

CoSky-Dashboard-config-edit

Rollback configuration

CoSky-Dashboard-config-rollback

Import configuration from Nacos

CoSky-Dashboard-config-import

Service

CoSky-Dashboard-service

Edit Service Instance

CoSky-Dashboard-service-edit

REST-API

https://ahoo-cosky.apifox.cn/

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)

CoSky-Mirror is like a mirror placed between Nacos and CoSky to build a unified service discovery platform.

CoSky-Mirror

CoSky-Mirror-Unified

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