服务中心 ServiceComb | 青训营笔记

84 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 6 天

服务中心

在云原生架构下,微服务需要具备极强的动态性及可扩展性,而服务注册与发现机制正是微服务可扩展性的基础。在微服务体系中,服务注册中心是微服务的核心模块,它是微服务架构中对服务的位置信息、心跳信息、元数据信息进行管理的重要基础设施。服务注册中心通过中心化、动态化的方式管理众多微服务实例。

在云原生范式的微服务架构中,服务的地址信息、服务的描述信息、服务的健康状态、服务的心跳信息、服务的版本、服务的元数据都是服务注册中心关心的初始数据。所以越来越多的基于“私有”协议的服务注册中心涌现出来。

ServiceComb

Apache ServiceComb 服务中心是一个基于 Restful 的服务注册中心,提供微服务发现和微服务管理。它基于开放 API 格式,提供服务发现、容错、动态路由、通知订阅和可扩展性等功能。它具有高性能的缓存设计和对微服务及其实例的单独实体管理。它为指标和跟踪提供开箱即用的支持。它有一个门户网站来管理微服务。

ServiceCenter 是一个服务注册中心。和其他服务注册中心一样,它的主要作用是解决服务注册和发现的问题,也就是动态路由的问题。同时为了更好的解决跨团队协作问题,增加了对契约(基于OpenAPI规范)服务的支持。如果配合合约工具(Toolkit)或Java微服务开发包(Java Chassis)使用,通信接口将变得透明,让用户专注于业务开发。

使用

我们可以通过 CloudWeGo 开源框架的中间件对其进行使用。

Server

import (
    // ...
    "github.com/cloudwego/kitex/pkg/rpcinfo"
    "github.com/cloudwego/kitex/server"
    "github.com/kitex-contrib/registry-servicecomb/registry"
)

// ...

func main() {
    r, err := registry.NewDefaultSCRegistry()
    if err != nil {
        panic(err)
    }
    svr := hello.NewServer(
        new(HelloImpl),
        server.WithRegistry(r),
        server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "Hello"}),
        server.WithServiceAddr(&net.TCPAddr{IP: net.IPv4(127, 0, 0, 1), Port: 8080}),
    )
    if err := svr.Run(); err != nil {
        log.Println("server stopped with error:", err)
    } else {
        log.Println("server stopped")
    }
    // ...
}

Client

import (
    // ...
    "github.com/cloudwego/kitex/client"
    "github.com/kitex-contrib/registry-servicecomb/resolver"
)

func main() {
    r, err := resolver.NewDefaultSCResolver()
    if err != nil {
        panic(err)
    }
    newClient := hello.MustNewClient("Hello", client.WithResolver(r))
    // ...
}

参考

www.163.com/dy/article/…

service-center.readthedocs.io/en/latest/i…

github.com/kitex-contr…