阅读 176

CoSky 高性能 服务注册/发现 & 配置中心

CoSky 高性能 服务注册/发现 & 配置中心

CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心)

Consul + Sky = CoSky

CoSky 是一个轻量级、低成本的服务注册、服务发现、 配置服务 SDK,通过使用现有基础设施中的 Redis (相信你已经部署了Redis),不用给运维部署带来额外的成本与负担。
借助于 Redis 的高性能, CoSky 提供了超高TPS&QPS (10W+/s JMH 基准测试)。CoSky 结合本地进程缓存策略 + Redis PubSub
,实现实时进程缓存刷新,兼具无与伦比的QPS性能、进程缓存与 Redis 的实时一致性。

安装

Gradle

Kotlin DSL

    val coskyVersion = "1.0.0";
    implementation("me.ahoo.cosky:spring-cloud-starter-cosky-config:${coskyVersion}")
    implementation("me.ahoo.cosky:spring-cloud-starter-cosky-discovery:${coskyVersion}")

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.0.0</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>
  </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

方式一:下载可执行文件

下载 rest-api-server

解压 cosky-rest-api-1.0.0.tar

cd cosky-rest-api-1.0.0# 工作目录: cosky-rest-api-1.0.0bin/cosky-rest-api --server.port=8080 --cosky.redis.uri=redis://localhost:6379

方式二:在 Docker 中运行

docker pull ahoowang/cosky-rest-api:1.0.0
docker run --name cosky-rest-api -d -p 8080:8080 --link redis -e COSKY_REDIS_URI=redis://redis:6379  ahoowang/cosky-rest-api:1.0.0

MacBook Pro (M1)

请使用 ahoowang/cosky-rest-api:1.0.0-armv7

docker pull ahoowang/cosky-rest-api:1.0.0-armv7
docker run --name cosky-rest-api -d -p 8080:8080 --link redis -e COSKY_REDIS_URI=redis://redis:6379  ahoowang/cosky-rest-api:1.0.0-armv7

方式三:在 Kubernetes 中运行

apiVersion: apps/v1kind: Deploymentmetadata:
  name: cosky-rest-apispec:
  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.0.0
          name: cosky-rest-api
          resources:
            limits:
              cpu: "1"
              memory: 640Mi
            requests:
              cpu: 250m
              memory: 512Mi
          volumeMounts:
            - mountPath: /etc/localtime
              name: volume-localtime
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ""
          name: volume-localtime---apiVersion: v1kind: Servicemetadata:
  name: cosky-rest-api
  labels:
    app: cosky-rest-apispec:
  selector:
    app: cosky-rest-api
  ports:
    - name: rest
      port: 80
      protocol: TCP
      targetPort: 8080

Dashboard

http://localhost:8080/dashboard

dashboard-dashboard

命名空间管理

dashboard-namespace

配置管理

dashboard-config

编辑配置

dashboard-config-edit

回滚配置

dashboard-config-rollback

从Nacos导入配置

dashboard-config-import

服务管理

dashboard-service

编辑服务实例信息

dashboard-service-edit

REST-API

http://localhost:8080/swagger-ui/index.html#/

Namespace

rest-api-namespace

  • /v1/namespaces

    • GET

  • /v1/namespaces/{namespace}

    • PUT

    • GET

  • /v1/namespaces/current

    • GET

  • /v1/namespaces/current/{namespace}

    • PUT

Config

rest-api-config

  • /v1/namespaces/{namespace}/configs

    • GET

  • /v1/namespaces/{namespace}/configs/{configId}

    • DELETE

    • GET

    • PUT

  • /v1/namespaces/{namespace}/configs/{configId}/versions

    • GET

  • /v1/namespaces/{namespace}/configs/{configId}/versions/{version}

    • GET

  • /v1/namespaces/{namespace}/configs/{configId}/to/{targetVersion}

    • PUT

Service

rest-api-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

  • 基准测试运行环境:笔记本开发机 ( MacBook Pro (M1) )

  • 所有基准测试都在开发笔记本上执行。

  • Redis 部署环境也在该笔记本开发机上。

ConfigService

gradle cosky-config:jmh# orjava -jar cosky-config/build/libs/cosky-config-1.0.0-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1
# JMH version: 1.29# VM version: JDK 11.0.11, OpenJDK 64-Bit Server VM, 11.0.11+9-LTS# VM invoker: /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/bin/java# VM options: -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/Users/ahoo/cosky/config/build/tmp/jmh -Duser.country=CN -Duser.language=zh -Duser.variant# Blackhole mode: full + dont-inline hint# Warmup: 1 iterations, 10 s each# Measurement: 1 iterations, 10 s each# Timeout: 10 min per iteration# Threads: 50 threads, will synchronize iterations# Benchmark mode: Throughput, ops/timeBenchmark                                          Mode  Cnt          Score   Error  UnitsConsistencyRedisConfigServiceBenchmark.getConfig  thrpt       265321650.148          ops/sRedisConfigServiceBenchmark.getConfig             thrpt          106991.476          ops/sRedisConfigServiceBenchmark.setConfig             thrpt          103659.132          ops/s

ServiceDiscovery

gradle cosky-discovery:jmh# orjava -jar cosky-discovery/build/libs/cosky-discovery-1.0.0-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1
# JMH version: 1.29# VM version: JDK 11.0.11, OpenJDK 64-Bit Server VM, 11.0.11+9-LTS# VM invoker: /Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home/bin/java# VM options: -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/Users/ahoo/cosky/discovery/build/tmp/jmh -Duser.country=CN -Duser.language=zh -Duser.variant# Blackhole mode: full + dont-inline hint# Warmup: 1 iterations, 10 s each# Measurement: 1 iterations, 10 s each# Timeout: 10 min per iteration# Threads: 50 threads, will synchronize iterations# Benchmark mode: Throughput, ops/timeBenchmark                                                Mode  Cnt          Score   Error  UnitsConsistencyRedisServiceDiscoveryBenchmark.getInstances  thrpt        76894658.867          ops/sConsistencyRedisServiceDiscoveryBenchmark.getServices   thrpt       466036317.472          ops/sRedisServiceDiscoveryBenchmark.getInstances             thrpt          107778.244          ops/sRedisServiceDiscoveryBenchmark.getServices              thrpt          106920.412          ops/sRedisServiceRegistryBenchmark.deregister                thrpt          114094.513          ops/sRedisServiceRegistryBenchmark.register                  thrpt          109085.694          ops/sRedisServiceRegistryBenchmark.renew                     thrpt          127003.104          ops/s

作者:Ahoo Wang (阿虎)

Github: https://github.com/Ahoo-Wang/

SmartSql(高性能、高生产力,超轻量级的ORM!): https://github.com/dotnetcore/SmartSql

SmartCode(不只是代码生成器!): https://github.com/dotnetcore/SmartCode

CoSky 基于 Redis 的服务治理平台(服务注册/发现 & 配置中心): https://github.com/Ahoo-Wang/CoSky

Govern EventBus 历经多年生产环境验证的事件驱动架构框架: https://github.com/Ahoo-Wang/govern-eventbus


本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

来源https://www.cnblogs.com/Ahoo-Wang/p/cosky.html

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐