| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – 健康检查</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/</link><description>Recent content in 健康检查 on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><atom:link href="https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview: 基于Grpc的健康检查</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/triple-health-check/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/triple-health-check/</guid><description> |
| <h2 id="1-grpc健康检查">1. Grpc健康检查</h2> |
| <p>Grpc健康检查是通过一个普通的用户rpc调用进行实现,Grpc的健康检查定义了如下的protobuf,这样就能实现所有的Grpc协议健康检查的互通。</p> |
| <blockquote> |
| <p>Firstly, since it is a GRPC service itself, doing a health check is in the same format as a normal rpc. Secondly, it has rich semantics such as per-service health status. Thirdly, as a GRPC service, it is able reuse all the existing billing, quota infrastructure, etc, and thus the server has full control over the access of the health checking service.</p> |
| </blockquote> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-protobuf" data-lang="protobuf"><span style="display:flex;"><span>syntax <span style="color:#719e07">=</span> <span style="color:#2aa198">&#34;proto3&#34;</span>; |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">package</span> grpc<span style="color:#719e07">.</span>health.v1; |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">message</span> <span style="color:#268bd2">HealthCheckRequest</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#dc322f">string</span> <span style="color:#268bd2">service</span> <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">message</span> <span style="color:#268bd2">HealthCheckResponse</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">enum</span> ServingStatus { |
| </span></span><span style="display:flex;"><span> UNKNOWN <span style="color:#719e07">=</span> <span style="color:#2aa198">0</span>; |
| </span></span><span style="display:flex;"><span> SERVING <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span> NOT_SERVING <span style="color:#719e07">=</span> <span style="color:#2aa198">2</span>; |
| </span></span><span style="display:flex;"><span> SERVICE_UNKNOWN <span style="color:#719e07">=</span> <span style="color:#2aa198">3</span>; <span style="color:#586e75">// Used only by the Watch method. |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> } |
| </span></span><span style="display:flex;"><span> ServingStatus status <span style="color:#719e07">=</span> <span style="color:#2aa198">1</span>; |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">service</span> Health { |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">rpc</span> Check(HealthCheckRequest) <span style="color:#719e07">returns</span> (HealthCheckResponse); |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">rpc</span> Watch(HealthCheckRequest) <span style="color:#719e07">returns</span> (stream HealthCheckResponse); |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h2 id="2-triple健康检查服务">2 triple健康检查服务</h2> |
| <ul> |
| <li>Dubbo-go框架在启动后会自动向框架中注册健康检查服务,提供基于grpc health proto的健康检查服务,无需在配置文件中额外配置。</li> |
| <li>triple健康检查服务可以通过grpc-health-probe检查框架中服务的状态,也可以通过grpc调用该健康检查服务,但是不能通过triple客户端调用该健康检查服务(基于grpc的健康检查服务不通过注册中心注册),调用的服务名为“grpc.health.v1.Health”,接口为check。</li> |
| </ul> |
| <h3 id="21-通过gprc客户端调用健康检查服务">2.1 通过gprc客户端调用健康检查服务:</h3> |
| <ul> |
| <li>启动dubbo-go-samples中的<a href="https://github.com/apache/dubbo-go-samples/tree/master/rpc/triple/pb/dubbogo-grpc/go-server">triple服务</a>,通过下面的grpc客户端便可以查看&quot;org.apache.dubbogo.samples.api.Greeter&quot;的状态。triple健康检查服务与grpc互通,所以可以通过grpc客户端查看基于triple协议服务的健康状态。</li> |
| </ul> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-go" data-lang="go"><span style="display:flex;"><span><span style="color:#719e07">package</span> main |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> ( |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;context&#34;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;fmt&#34;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;log&#34;</span> |
| </span></span><span style="display:flex;"><span>) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#719e07">import</span> ( |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;google.golang.org/grpc&#34;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;google.golang.org/grpc/credentials/insecure&#34;</span> |
| </span></span><span style="display:flex;"><span> healthpb <span style="color:#2aa198">&#34;google.golang.org/grpc/health/grpc_health_v1&#34;</span> |
| </span></span><span style="display:flex;"><span>) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">const</span> ( |
| </span></span><span style="display:flex;"><span> address = <span style="color:#2aa198">&#34;localhost:20000&#34;</span> |
| </span></span><span style="display:flex;"><span>) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> <span style="color:#268bd2">main</span>() { |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">// Set up a connection to the server |
| </span></span></span><span style="display:flex;"><span><span style="color:#586e75"></span> conn, err <span style="color:#719e07">:=</span> grpc.<span style="color:#268bd2">Dial</span>(address, grpc.<span style="color:#268bd2">WithTransportCredentials</span>(insecure.<span style="color:#268bd2">NewCredentials</span>())) |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">if</span> err <span style="color:#719e07">!=</span> <span style="color:#cb4b16">nil</span> { |
| </span></span><span style="display:flex;"><span> log.<span style="color:#268bd2">Fatalf</span>(<span style="color:#2aa198">&#34;did not connect: %v&#34;</span>, err) |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">defer</span> <span style="color:#268bd2">func</span>() { |
| </span></span><span style="display:flex;"><span> _ = conn.<span style="color:#268bd2">Close</span>() |
| </span></span><span style="display:flex;"><span> }() |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">checkHealth</span>(<span style="color:#2aa198">&#34;org.apache.dubbogo.samples.api.Greeter&#34;</span>, conn) |
| </span></span><span style="display:flex;"><span>} |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">func</span> <span style="color:#268bd2">checkHealth</span>(service <span style="color:#dc322f">string</span>, conn <span style="color:#719e07">*</span>grpc.ClientConn) { |
| </span></span><span style="display:flex;"><span> fmt.<span style="color:#268bd2">Printf</span>(<span style="color:#2aa198">&#34;&gt;&gt;&gt;&gt;&gt; gRPC-go check %s status&#34;</span>, service) |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> req <span style="color:#719e07">:=</span> <span style="color:#719e07">&amp;</span>healthpb.HealthCheckRequest{ |
| </span></span><span style="display:flex;"><span> Service: service, |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> ctx <span style="color:#719e07">:=</span> context.<span style="color:#268bd2">Background</span>() |
| </span></span><span style="display:flex;"><span> rsp, err <span style="color:#719e07">:=</span> healthpb.<span style="color:#268bd2">NewHealthClient</span>(conn).<span style="color:#268bd2">Check</span>(ctx, req) |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">if</span> err <span style="color:#719e07">!=</span> <span style="color:#cb4b16">nil</span> { |
| </span></span><span style="display:flex;"><span> <span style="color:#b58900">panic</span>(err) |
| </span></span><span style="display:flex;"><span> } |
| </span></span><span style="display:flex;"><span> fmt.<span style="color:#268bd2">Printf</span>(<span style="color:#2aa198">&#34;get service status = %+v\n&#34;</span>, rsp) |
| </span></span><span style="display:flex;"><span>} |
| </span></span></code></pre></div><h3 id="22-grpc-health-probe调试健康检查服务">2.2 grpc-health-probe调试健康检查服务:</h3> |
| <ul> |
| <li>启动dubbo-go-samples中的<a href="https://github.com/apache/dubbo-go-samples/tree/master/rpc/triple/pb/dubbogo-grpc/go-server">triple服务</a>,提供<code>org.apache.dubbogo.samples.api.Greeter</code>服务。使用grpc-health-probe检查该服务的健康状态,<code>grpc-health-probe -addr=localhost:20000 -service &quot;org.apache.dubbogo.samples.api.Greeter&quot;</code></li> |
| </ul> |
| <p><img src="https://dubbo.apache.org/imgs/docs3-v2/golang-sdk/tasks/service_management/triple-health-check/health-check.png" alt="image-health-check"></p> |
| <h4 id="参考">参考:</h4> |
| <ul> |
| <li><a href="https://github.com/grpc/grpc/blob/master/doc/health-checking.md">https://github.com/grpc/grpc/blob/master/doc/health-checking.md</a></li> |
| <li><a href="https://github.com/grpc/grpc-go/tree/master/health">https://github.com/grpc/grpc-go/tree/master/health</a></li> |
| </ul></description></item><item><title>Overview: dubbogo 3.0 启动时检查</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/start-check/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/start-check/</guid><description> |
| <h1 id="启动时检查">启动时检查</h1> |
| <p>在启动时检查依赖的服务是否可用</p> |
| <p>Dubbo-go 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止应用初始化完成,以便上线时,能及早发现问题,默认 check=&ldquo;true&rdquo;,并等待3s。</p> |
| <p>可以通过 check=&ldquo;false&rdquo; 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。</p> |
| <p>关闭 check 后,请注意 provider数量比较多时, consumer 订阅 provider 生成服务字典可能会有一定延迟,如果 consumer 一启动就对外提供服务, |
| 可能会造成&quot;冷启动&quot;。所以在这个时候,请对服务进行预热。</p> |
| <p>示例:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yaml" data-lang="yaml"><span style="display:flex;"><span><span style="color:#268bd2">dubbo</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">consumer</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">check </span>: <span style="color:#cb4b16">false</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">reference</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">myserivce</span>: |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">check</span>: <span style="color:#cb4b16">true</span> |
| </span></span></code></pre></div></description></item><item><title>Overview: Kubernetes 探针</title><link>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/kubernetes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/zh-cn/overview/mannual/golang-sdk/tutorial/governance/health/kubernetes/</guid><description/></item></channel></rss> |