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

Consul + Sky = CoSky

CoSky 是一个轻量级、低成本的服务注册、服务发现、 配置服务 SDK,通过使用现有基础设施中的 Redis (相信你已经部署了Redis),不用给运维部署带来额外的成本与负担。

借助于 Redis 的高性能, CoSky 提供了超高TPS&QPS (10W+/s JMH 基准测试)。CoSky 结合本地进程缓存策略 + Redis PubSub

,实现实时进程缓存刷新,兼具无与伦比的QPS性能、进程缓存与 Redis 的实时一致性。

服务注册与发现

配置中心

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

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

安装

Gradle

Kotlin DSL

    val coskyVersion = "1.1.5";
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.1.5</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.1.5.tar

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

方式二:在 Docker 中运行

docker pull ahoowang/cosky-rest-api:1.1.5
docker run --name cosky-rest-api -d -p 8080:8080 --link redis -e COSKY_REDIS_URI=redis://redis:6379 ahoowang/cosky-rest-api:1.1.5
MacBook Pro (M1)

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

docker pull ahoowang/cosky-rest-api:1.1.5-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.1.5-armv7

方式三:在 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.1.5
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

命名空间管理

配置管理

编辑配置

回滚配置

从 Nacos 导入配置

服务管理

编辑服务实例信息

REST-API

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

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

  • 基准测试运行环境:笔记本开发机 ( MacBook Pro (M1) )
  • 所有基准测试都在开发笔记本上执行。
  • Redis 部署环境也在该笔记本开发机上。

ConfigService

gradle cosky-config:jmh
# or
java -jar cosky-config/build/libs/cosky-config-1.1.5-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1
# JMH version: 1.29
# VM version: JDK 11.1.51, OpenJDK 64-Bit Server VM, 11.1.51+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/time Benchmark Mode Cnt Score Error Units
ConsistencyRedisConfigServiceBenchmark.getConfig thrpt 265321650.148 ops/s
RedisConfigServiceBenchmark.getConfig thrpt 106991.476 ops/s
RedisConfigServiceBenchmark.setConfig thrpt 103659.132 ops/s

ServiceDiscovery

gradle cosky-discovery:jmh
# or
java -jar cosky-discovery/build/libs/cosky-discovery-1.1.5-jmh.jar -bm thrpt -t 25 -wi 1 -rf json -f 1
# JMH version: 1.29
# VM version: JDK 11.1.51, OpenJDK 64-Bit Server VM, 11.1.51+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/time Benchmark Mode Cnt Score Error Units
ConsistencyRedisServiceDiscoveryBenchmark.getInstances thrpt 76894658.867 ops/s
ConsistencyRedisServiceDiscoveryBenchmark.getServices thrpt 466036317.472 ops/s
RedisServiceDiscoveryBenchmark.getInstances thrpt 107778.244 ops/s
RedisServiceDiscoveryBenchmark.getServices thrpt 106920.412 ops/s
RedisServiceRegistryBenchmark.deregister thrpt 114094.513 ops/s
RedisServiceRegistryBenchmark.register thrpt 109085.694 ops/s
RedisServiceRegistryBenchmark.renew thrpt 127003.104 ops/s

CoSky-Mirror 就像一个镜子放在 Nacos、CoSky 中间,构建一个统一的服务发现平台的更多相关文章

  1. SpringCloud之Nacos服务发现(十七)

    一 Nacos简介 Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现.配置和管理. Nacos主要提供以下四大功能: 服务发现与服务健康检查 Nacos使服务更容易注册自己并 ...

  2. 阿里开源服务发现组件 Nacos快速入门

    最近几年随着云计算和微服务不断的发展,各大云厂商也都看好了微服务解决方案这个市场,纷纷推出了自己针对微服务上云架构的解决方案,并且诞生了云原生,Cloud Native的概念. 云原生是一种专门针对云 ...

  3. Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介

    用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...

  4. 配置中心Nacos(服务发现)

    服务演变之路 单体应用架构 在刚开始的时候,企业的用户量.数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码.编译.打包并且部署在⼀个Tomcat容器中的架构模式就是单体应用架构,这样的架构既 ...

  5. Eclipse的maven构建一个web项目,以构建SpringMVC项目为例

    http://www.cnblogs.com/javaTest/archive/2012/04/28/2589574.html springmvc demo实例教程源代码下载:http://zuida ...

  6. 用HTML5构建一个流程图绘制工具

    在我们的开发工程中经常会使用到各种图,所谓的图就是由节点和节点之间的连接所形成的系统,数学上专门有一个分支叫图论(Graph Theroy).利用图我们可以做很多工具,比如思维导图,流程图,状态机,组 ...

  7. Linux上构建一个RADIUS服务器详解

    作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息.但是网络设备通常只支持有限的用户管理功能.学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个 ...

  8. 【Android Developers Training】 3. 构建一个简单UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. jenkins构建一个maven项目[五]

    标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 构建一个maven项目,即为构建java项目.模拟实验之前先把实验代码推送到 ...

随机推荐

  1. .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程

    本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...

  2. 1.9.1- html5文档类型和字符集

    html5新标签与特性 文档类型设定 字符设定:

  3. yapi简介,安装及使用

    简介 ​ YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验, ...

  4. hdu3665 水最短路

    题意 :        从起点0开始,到达最近的那个是海边的城镇的距离.. 思路:       水的最短路,随你怎么写,dij,floyd,spfa..都行,只要你喜欢..我写的spfa好久不写了,复 ...

  5. POJ 3228 二分最大流

    题意:       给你N个位置,每个位置都有金矿数量和仓库数量,然后位置和位置之间的距离给了出来,最后问你吧所有的金矿都放到库里面走的路径 最长的最短 是多少? 思路:      比较简单的一个题, ...

  6. Linux配置yum源(本地源和网络源)

    目录 一:配置本地yum源 二:配置网络yum源 更新源可以获取最新的软件信息,以更新您的系统 Redhat7配置源 YUM(Yellow dog  Updater Modified): yum是Re ...

  7. 硬盘分区形式(MBR、GPT)、系统引导、文件系统、Inode和Block

    目录 MBR和GPT MBR的局限性 GPT的优势 主分区.扩展分区和逻辑分区 挂接卷 Legacy.UEFI引导和GRUB引导 文件系统(FAT16.32.NTFS和EXT2.3.4.Xfs.Tmp ...

  8. [CSP-J2019 江西] 道路拆除 题解

    发现大家都是将路径拆成三条链来做,这里提供一种暴力的乱搞方法. 思路 看到这一道题的第一想法就是跑最短路.可是仔细想想就发现,由于重合的路径只算一遍,所以导致两条最短路不一定是最优解. 接着,看到数据 ...

  9. 【转】浅谈自动特征构造工具Featuretools

    转自https://www.cnblogs.com/dogecheng/p/12659605.html 简介 特征工程在机器学习中具有重要意义,但是通过手动创造特征是一个缓慢且艰巨的过程.Python ...

  10. Java 在Word中添加数学公式(Latex/MathML)

    本文介绍通过Java程序在Word文档中添加数学公式的方法.添加时,可添加latex数学公式或者MathML数学公式.详细内容见下文. 1. 程序环境 Word测试文档:.docx 2013 Word ...