这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

接入方式

介绍如何使用北极星数据面组件快速接入并使用北极星的功能

1 - 使用 SDK

功能简介

北极星网格提供多语言 SDK 作为高性能接入方式:

以插件化和配置化的方式实现服务发现和治理功能:

  • 被调方功能:服务注册、上报心跳、限流
  • 主调方功能:服务发现、动态路由、负载均衡、熔断降级
  • 观测性功能:服务调用、熔断降级和限流的监控统计

接口说明

被调方功能接口

Register

功能:注册服务实例
描述:将实例注册到某个服务下,实例信息包含地址和元数据

Deregister

功能:反注册服务实例
描述:将某个服务下的实例反注册
Heartbeat

功能:上报心跳
描述:如果在注册服务实例时,开启服务端健康检查功能,需要定期上报心跳到服务端,不然服务实例状态异常
GetLimitQuota

功能:获取请求处理配额
描述:如果使用限流功能,在每次处理请求之前,获取请求处理配额。若有配额,则处理请求,否则拒绝处理请求

主调方功能接口

GetAllInstances

功能:获取全部实例
描述:获取注册到某个服务下的全部实例,包含健康、异常和隔离的实例。本接口只使用服务发现功能模块
GetOneInstance

功能:获取一个可用实例
描述:在每次服务调用之前,获取一个可用实例。本接口使用服务发现、动态路由、负载均衡和熔断降级功能模块
备注:几个功能模块采用插件化设计,默认插件配置适用于基本场景,可以根据业务场景调整插件配置

UpdateServiceCallResult

功能:上报服务调用结果
描述:在每次服务调用之后,上报本次服务调用的结果。服务调用结果用于熔断降级和监控统计

接口使用说明

服务被调方

// 在应用启动阶段,注册服务实例
Register(namespace, service, instance)

// 如果使用服务端健康检查功能,在应用运行阶段,需要定期上报心跳到服务端
{
    Heartbeat(namespace, service, instance)
}

// 如果使用限流功能,在每次处理请求之前,获取请求处理配额
{
    if( GetLimitQuota(limiter) ) {
        Handle(request)
    } else {
        Refuse(request)
    }
}

// 在应用停止阶段,反注册服务实例
Deregister(namespace, service, instance)

服务主调方

// 发起一次服务调用
{
    // 获取本次服务调用的实例
    instance = GetOneInstance(namespace, service)

    // 发起服务调用
    response = ServiceCall(instance.address, request)

    // 上报本次服务调用的结果
    UpdateServiceCallResult(instance.id, response.code, response.delay)
}

快速入门示例

各语言 SDK 的快速入门示例:

Java语言

Go语言

C++语言

PHP语言

2 - 使用开发框架

功能简介

北极星 SDK 可以被集成到开发框架内部,如果用户使用开发框架,不需要显式地引入北极星 SDK,只需要依赖北极星相关的框架插件即可接入北极星。

当前支持以下框架的扩展接入:

开发框架如何集成北极星

北极星会基于服务框架原生的扩展接口之上,封装北极星的多语言SDK,接入北极星服务端实现服务发现、服务治理、配置管理等能力。

下图是SpringCloud框架集成的示意图,北极星只对原生的SpringCloud接口进行扩展,业务逻辑不感知这部分扩展,只需要通过修改POM引入相关的扩展依赖即可。

<dependencies>
  <!-- 示例:引入spring-cloud-starter-tencent-polaris-discovery插件,即可接入北极星服务注册发现功能-->
  <dependency>
     <groupId>com.tencent.cloud</groupId>
     <artifactId>spring-cloud-starter-tencent-polaris-discovery</artifactId>
  </dependency>
</dependencies>

3 - 使用 Java Agent

功能简介

对于Java应用,北极星 SDK 可以被通过字节码注入的方式,集成到开发框架内部,如果用户使用开发框架,不需要显式地引入北极星 SDK,只需要在启动时,通过-javaagent的指令加载使用JavaAgent,即可无缝接入北极星。

当前支持以下框架的JavaAgent扩展:

JavaAgent如何集成北极星

北极星会通过字节码注入的方式,将北极星的SDK,作为插件注入到服务框架原生的扩展接口之上,从而接入北极星服务端实现服务发现、服务治理、配置管理等能力。

用户无需修改POM,只需要在启动Java程序时,加入javaagent的JVM启动参数就可以。

java -javaagent:polaris-java-agent-bootstrap-${version}.jar -jar xxx.jar

4 - 使用 K8s 和网格代理

介绍北极星如何实现 K8s 服务注册和网格代理接入,以及它们的应用场景。

随着容器化的普及,越来越多用户使用 K8s 部署应用,北极星支持 K8s 服务注册和健康检查。另外,Linkerd 和 Istio 等服务网格通过流量劫持的方式实现大部分服务治理功能,北极星也支持这种接入方式。

K8s服务同步

架构原理

北极星提供polaris-controller,基于kubernetes的controller机制,监听service&pod事件,将K8s Namespace, Service以及Endpoint,实时同步成北极星对应的命名空间、服务、服务实例列表。

用户无需依赖任何SDK及框架,即可实现基于POD的服务实例注册、反注册和健康检查。

应用场景

北极星是一个计算与存储分离的系统,具备极强的可扩展性,一个北极星集群可以支持多个k8s集群同时接入。接入到同一个北极星的集群的多个k8s集群中的应用,可以共享同一份服务数据,实现集群间的无感知调用。

网格代理

架构原理

北极星支持Proxy网格模式,envoy数据面可以直接接入北极星控制面实现服务发现和治理。北极星支持自动注入envoy代理,用户程序无需做任何改动,即可实现自动往POD中注入envoy。

应用场景

北极星提供了多种框架的适配插件,可以支持当下比较流行的proxyless网格模式的接入。SpringCloud、Dubbo的应用可以零改造接入服务网格,共享统一的服务治理模型,与使用Envoy代理的应用无缝互通。