CoSky

基于 Redis 的服务治理平台
授权协议 Apache-2.0
开发语言 Kotlin Java TypeScript Lua
所属分类 数据库相关、 数据库管理工具
软件类型 开源软件
地区 国产
投 递 者 南门嘉
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

CoSky 高性能、低成本微服务治理平台(服务注册/发现 & 配置中心)

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

服务注册与发现

CoSky-Discovery

配置中心

CoSky-Configuration

CoSky-Mirror (实时同步服务实例变更状态)

CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台。

CoSky-Mirror

CoSky-Mirror-Unified

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

方式一:下载可执行文件

下载 rest-api-server

解压 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

http://localhost:8080/dashboard

dashboard-dashboard

服务依赖拓扑

dashboard-topology

基于角色的访问控制(RBAC)

  • cosky: 保留用户名,超级用户,拥有最高权限。应用首次启动时会初始化超级用户(cosky)的密码,并打印在控制台。忘记密码也不用担心,可以通过配置 enforce-init-super-user: trueCoSky 会帮助你重新初始化密码并打印在控制台。
---------------- ****** CoSky -  init super user:[cosky] password:[6TrmOux4Oj] ****** ----------------
  • admin: 保留角色,超级管理员角色,拥有所有权限,一个用户可以绑定多个角色,一个角色可以绑定多个资源操作权限。
  • 权限控制粒度为命名空间,读写操作

角色权限

dashboard-role

添加角色

dashboard-role-add

用户管理

dashboard-user

添加用户

dashboard-user-add

审计日志

dashboard-audit-log

命名空间管理

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}
    • 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

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
# 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
 相关资料
  • SOFADashboard 服务治理主要是对 SOFARpc 的服务进行管理。 目前已经支持基于 ZK 和 SofaRegistry 两个注册中心。 功能展示 1、基于服务维度 服务列表 服务提供者详情: 2、基于应用维度 应用列表 应用服务详情

  • 服务治理配置 黑白名单 "Server": { "Name": "sample", "Ip": "192.168.3.11", "Port": "5003", "Security": { "Whitelist": "*", //白名单 格式:ip1|ap2|1p3,默认 * "BlackList": "" //黑名单 格式:ip1|ap2|1p3,默认 "" } } 负载

  • 本文向大家介绍Dubbo的服务治理?相关面试题,主要包含被问及Dubbo的服务治理?时的应答技巧和注意事项,需要的朋友参考一下   过多的服务URL配置困难 负载均衡分配节点压力过大的情况下也需要部署集群 服务依赖混乱,启动顺序不清晰 过多服务导致性能指标分析难度较大,需要监控    

  • 服务治理 服务治理主要作用是改变运行时服务的行为和选址逻辑,达到限流,权重配置等目的,主要有以下几个功能: 应用级别的服务治理 在Dubbo2.6及更早版本中,所有的服务治理规则都只针对服务粒度,如果要把某条规则作用到应用粒度上,需要为应用下的所有服务配合相同的规则,变更,删除的时候也需要对应的操作,这样的操作很不友好,因此Dubbo2.7版本中增加了应用粒度的服务治理操作,对于条件路由(包括黑白

  • 本章介绍 Kubernetes 服务治理,包括容器应用管理、Service Mesh 以及 Operator 等。 目前最常用的是手动管理 Manifests,比如 kubernetes github 代码库就提供了很多的 manifest 示例 https://github.com/kubernetes/kubernetes/tree/master/examples https://github

  • Kompose是一个将docker-compose配置转换成Kubernetes manifests的工具,官方网站为http://kompose.io/。 Kompose安装 # Linux $ curl -L https://github.com/kubernetes-incubator/kompose/releases/download/v0.5.0/kompose-linux-amd64

  • Operator是CoreOS推出的旨在简化复杂有状态应用管理的框架,它是一个感知应用状态的控制器,通过扩展Kubernetes API来自动创建、管理和配置应用实例。 Operator原理 Operator基于Third Party Resources扩展了新的应用资源,并通过控制器来保证应用处于预期状态。比如etcd operator通过下面的三个步骤模拟了管理etcd集群的行为: 通过Kub

  • Draft是微软Deis团队开源(见https://github.com/azure/draft)的容器应用开发辅助工具,它可以帮助开发人员简化容器应用程序的开发流程。 Draft主要由三个命令组成 draft init:初始化docker registry账号,并在Kubernetes集群中部署draftd(负责镜像构建、将镜像推送到docker registry以及部署应用等) draft c