1"use strict";(self.webpackChunklayotto_docusaurus=self.webpackChunklayotto_docusaurus||[]).push([[3997],{760:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>o,contentTitle:()=>l,default:()=>g,frontMatter:()=>s,metadata:()=>c,toc:()=>d});var r=n(4848),i=n(8453);const s={},l="MOSN gRPC \u6846\u67b6\u8bbe\u8ba1\u6587\u6863",c={id:"design/actuator/grpc-design-doc",title:"MOSN gRPC \u6846\u67b6\u8bbe\u8ba1\u6587\u6863",description:"\u80cc\u666f",source:"@site/docs/design/actuator/grpc-design-doc.md",sourceDirName:"design/actuator",slug:"/design/actuator/grpc-design-doc",permalink:"/layotto/docs/design/actuator/grpc-design-doc",draft:!1,unlisted:!1,editUrl:"https://github.com/mosn/layotto/edit/main/docs/docs/design/actuator/grpc-design-doc.md",tags:[],version:"current",frontMatter:{},sidebar:"mySidebar",previous:{title:"Actuator\u8bbe\u8ba1\u6587\u6863",permalink:"/layotto/docs/design/actuator/actuator-design-doc"},next:{title:"\u4f7f\u7528ctripcorp/apollo\u5b9e\u73b0Configuration API",permalink:"/layotto/docs/design/configuration/configuration-api-with-apollo"}},o={},d=[{value:"\u80cc\u666f",id:"\u80cc\u666f",level:2},{value:"\u8bbe\u8ba1\u601d\u8def",id:"\u8bbe\u8ba1\u601d\u8def",level:2},{value:"\u8be6\u7ec6\u8bbe\u8ba1",id:"\u8be6\u7ec6\u8bbe\u8ba1",level:2}];function a(t){const e={code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.R)(),...t.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(e.h1,{id:"mosn-grpc-\u6846\u67b6\u8bbe\u8ba1\u6587\u6863",children:"MOSN gRPC \u6846\u67b6\u8bbe\u8ba1\u6587\u6863"}),"\n",(0,r.jsx)(e.h2,{id:"\u80cc\u666f",children:"\u80cc\u666f"}),"\n",(0,r.jsx)(e.p,{children:"MOSN \u57fa\u4e8e go grpc server \u6846\u67b6\u63d0\u4f9b\u4e00\u4e2a GRPC Server \u7684\u80fd\u529b\uff0c\u76f8\u6bd4\u4e8e\u539f\u751f\u7684 go grpc server \u6846\u67b6\uff0c\u53ef\u4ee5\u83b7\u5f97\u5982\u4e0b\u80fd\u529b\uff1a"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"\u5b8c\u5168\u590d\u7528 MOSN Sidecar \u7684\u90e8\u7f72\u3001\u5347\u7ea7\u3001\u8fd0\u7ef4\u80fd\u529b"}),"\n",(0,r.jsx)(e.li,{children:"\u53ef\u590d\u7528 MOSN \u4e2d\u901a\u7528\u7684\u57fa\u7840\u80fd\u529b\uff1a\u70ed\u5347\u7ea7\u3001Listener Filter\u3001\u90e8\u5206 Network Filter \u7b49"}),"\n",(0,r.jsx)(e.li,{children:"\u53ef\u590d\u7528\u90e8\u5206 MOSN \u4e2d\u7684 StreamFilter \u6269\u5c55\u80fd\u529b"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"\u8bbe\u8ba1\u601d\u8def",children:"\u8bbe\u8ba1\u601d\u8def"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"MOSN \u7684 gRPC \u80fd\u529b\u4e3b\u8981\u8fd8\u662f\u57fa\u4e8e\u5b98\u65b9\u7684 gRPC \u5e93\u8fdb\u884c\u6838\u5fc3\u80fd\u529b\u7684\u5b9e\u73b0\uff0c\u5e76\u4e14\u5c3d\u91cf\u51cf\u5c11 gRPC Server \u5f00\u53d1\u8005\u611f\u53d7\u5230\u7684\u5dee\u5f02"}),"\n",(0,r.jsx)(e.li,{children:"\u57fa\u4e8e NetworkFilter \u673a\u5236\u8fdb\u884c\u5b9e\u73b0"}),"\n"]}),"\n",(0,r.jsx)(e.h2,{id:"\u8be6\u7ec6\u8bbe\u8ba1",children:"\u8be6\u7ec6\u8bbe\u8ba1"}),"\n",(0,r.jsx)(e.p,{children:"\u9996\u5148\u68b3\u7406\u4e00\u4e0b NetworkFilter \u673a\u5236\u4e0e\u5904\u7406\u6d41\u7a0b"}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"networkfilter.png",src:n(5631).A+"",width:"772",height:"752"})}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"\u5728\u914d\u7f6e\u89e3\u6790\u65f6\uff0c\u5b8c\u6210 gRPC Server \u7684\u542f\u52a8\uff0c\u968f\u7740 MOSN \u7684 Listener \u76d1\u542c\u5f00\u59cb\u63d0\u4f9b\u670d\u52a1"}),"\n",(0,r.jsxs)(e.li,{children:["\u4e00\u4e2a\u8fde\u63a5\u5bf9\u5e94\u4e00\u4e2a NetworkFilter \u5bf9\u8c61","\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"InitializeReadFilterCallbacks \u548c OnNewConnection \u4e5f\u662f\u5728\u8fde\u
163a5\u521b\u5efa\u65f6\u8c03\u7528\u7684\u63a5\u53e3\uff0c\u8d1f\u8d23\u8fdb\u884c\u8fde\u63a5\u521d\u59cb\u5316\u7684\u5de5\u4f5c"}),"\n",(0,r.jsx)(e.li,{children:"OnData \u662f\u5728\u6536\u5230\u6570\u636e\u4ee5\u540e\u8c03\u7528\u7684\u63a5\u53e3\uff0c\u8d1f\u8d23\u6570\u636e\u7684\u4f20\u9012"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["go gRPC Server \u5e93\uff0c\u4ece\u201c\u76d1\u542c\u201d\u7684 Listener \u4e2d Accept \u4e00\u4e2a\u8fde\u63a5\uff0c\u7136\u540e\u8fdb\u884c\u8bfb\u5199\uff0c\u800c\u5728 MOSN \u6846\u67b6\u4e2d\uff0cListener \u7684\u76d1\u542c\u548c\u8fde\u63a5\u6570\u636e\u7684\u8bfb\u5199\u90fd\u5904\u7406\u8fc7\u4e86\uff0c\u8fd9\u91cc\u9700\u8981\u8fdb\u884c\u4e00\u5c42\u5904\u7406","\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"Listener \u548c Conn \u90fd\u662f interface\uff0c\u53ef\u4ee5\u5728 MOSN \u7684 Filter \u4e2d\u8fdb\u884c\u5904\u7406\u4ee5\u540e\uff0c\u518d\u628a\u6570\u636e\u4f20\u7ed9 gRPC Server\uff0c\u505a\u5230 gRPC Server \u65e0\u611f\u77e5"}),"\n",(0,r.jsx)(e.li,{children:"\u5728\u914d\u7f6e\u89e3\u6790\u65f6\uff0c\u5b9e\u73b0 Listener \u7684\u5c01\u88c5"}),"\n",(0,r.jsx)(e.li,{children:"\u5728 InitializeReadFilterCallbacks \u4e2d\u5b9e\u73b0 Conn \u7684\u5c01\u88c5"}),"\n",(0,r.jsx)(e.li,{children:"\u5728 OnNewConnection \u4e2d\u5c06\u5c01\u88c5\u7684 Conn \u4f20\u9012\u7ed9\u5c01\u88c5\u7684 Listener\uff0c\u89e6\u53d1 Listener.Accept"}),"\n",(0,r.jsx)(e.li,{children:"\u5728 OnData \u4e2d\u5c06\u8bfb\u53d6\u5230\u7684\u6570\u636e\u4f20\u9012\u7ed9\u5c01\u88c5\u7684 Conn\uff0c\u89e6\u53d1 Conn.Read"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.p,{children:(0,r.jsx)(e.img,{alt:"networkfilter-grpc.png",src:n(6338).A+"",width:"839",height:"660"})}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsxs)(e.li,{children:["\n",(0,r.jsx)(e.p,{children:"gRPC Server \u7684\u5b9e\u73b0"}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"\u5728\u4f7f\u7528\u5b98\u65b9 gRPC \u6846\u67b6\u5b9e\u73b0 gRPC Server \u7684\u65f6\u5019\uff0c\u5f00\u53d1\u8005\u9700\u8981\u57fa\u4e8e proto \u6587\u4ef6\u751f\u6210\u4e00\u4e2a.pb.go \u6587\u4ef6\uff0c\u540c\u65f6\u9700\u8981\u5b9e\u73b0\u4e00\u7ec4\u63a5\u53e3\u6ee1\u8db3 proto \u4e2d\u5b9a\u4e49\u7684\u63a5\u53e3\u5b9e\u73b0\uff0c\u5c06\u5176\u6ce8\u518c\uff08Register\uff09\u5230 gRPC Server \u6846\u67b6\u4e2d"}),"\n",(0,r.jsx)(e.li,{children:"MOSN \u7684 gRPC NetworkFilter \u4e5f\u9700\u8981\u63d0\u4f9b\u7c7b\u4f3c\u7684\u6ce8\u518c\u80fd\u529b\uff0c\u8ba9\u5f00\u53d1\u8005\u53ea\u5173\u6ce8\u5bf9\u5e94 gRPC Server \u5b9e\u73b0\u903b\u8f91\uff0c\u7136\u540e\u6ce8\u518c\u5230 MOSN \u6846\u67b6\u4e2d\u5373\u53ef"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(e.li,{children:["\n",(0,r.jsx)(e.p,{children:"MOSN GRPC \u6846\u67b6\u8981\u6c42\u5f00\u53d1\u8005\u5b9e\u73b0\u4e00\u4e2a\u51fd\u6570\uff0c\u8be5\u51fd\u6570\u8fd4\u56de\u4e00\u4e2a\u672a\u8c03\u7528 Serve \u65b9\u6cd5\u7684 grpc server\u3002\u6846\u67b6\u4f1a\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684 Listener \u53bb\u8c03\u7528 Serve \u65b9\u6cd5\u5b9e\u73b0\u5bf9\u6570\u636e\u7684\u62e6\u622a\u5904\u7406"}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-Go",children:'func init() {\n mgrpc.RegisterServerHandler("mygrpc", MyFunc)\n}\nfunc MyFunc(_ json.RawMessage) *grpc.Server {\n s := grpc.NewServer()\n // pb \u662f.pb.go \u6240\u5728\u7684 package \u8def\u5f84\n // server \u662f\u5f00\u53d1\u8005\u5b9e\u73b0\u7684 api \u63a5\u53e3\n pb.RegisterGreeterServer(s, &server{})\n return s\n}\n'})}),"\n",(0,r.jsxs)(e.ul,{children:["\n",(0,r.jsx)(e.li,{children:"\u9884\u671f\u4f7f\u7528\u7684\u914d\u7f6e\u793a\u4f8b (layotto)"}),"\n"]}),"\n",(0,r.jsx)(e.pre,{children:(0,r.jsx)(e.code,{className:"language-json",children:'{\n\t"servers":[\n\t\t{\n\t\t\t"default_log_path":"stdout",\n\t\t\t"default_log_level": "INFO",\n\t\t\t"listeners":[\n\t\t\t\t{\n\t\t\t\t\t"name":"grpc",\n\t\t\t\t\t"address": "0.0.0.0:34904",\n\t\t\t\t\t"bind_port": true,\n\t\t\t\t\t"filter_chains": [{\n\t\t\t\t\t\t"filters": [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t"type": "grpc",\n\t\t\t\t\t\t\t\t"config": {\n\t\t\t\t\t\t\t\t\t"server_name":"runtime",\n\t\t\t\t\t\t\t\t\t"grpc_config": {\n\t\t\t\t\t\t\t\t\t\t"hellos": {\n\t\t\t\t\t\t\t\t\t\t\t"helloworld": {\n "type": "helloworld",\n\t\t\t\t\t\t\t\t\t\t\t\t"hello": "greeting"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t"config_store": {\n\t\t\t\t\t\t\t\t\t\t\t"config_store_demo": {\n "type": "etcd",\n\t\t\t\t\t\t\t\t\t\t\t\t"address": ["127.0.0.1:2379"],\n\t\t\t\t\t\t\t\t\t\t\t\t"timeout": "10"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t}],\n\t\t\t\t\t"stream_filters": [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t"type": "flowControlFilter",\n\t\t\t\t\t\t\t"config": {\n\t\t\t\t\t\t\t\t"global_switch": true,\n\t\t\t\t\t\t\t\t"limit_key_type": "PATH",\n\t\t\t\t\t\t\t\t"rules": [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t"resource": "/spec.proto.runtime.v1.Runtime/SayHello",\n\t\t\t\t\t\t\t\t\t\t"grade": 1,\n\t\t\t\t\t\t\t\t\t\t"threshold": 5\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n\n'})})]})}function g(t={}){const{wrapper:e}={...(0,i.R)(),...t.components};return e?(0,r.jsx)(e,{...t,children:(0,r.jsx)(a,{...t})}):a(t)}},6338:(t,e,n)=>{n.d(e,{A:()=>r});const r=n.p+"assets/images/networkfilter-grpc-234b7a58c6fe0d8ad57ffdee595e7703.jpg"},5631:(t,e,n)=>{n.d(e,{A:()=>r});const r=n.p+"assets/images/networkfilter-50f38bc5ba38a3c9482e785e6be059e9.jpg"},8453:(t,e,n)=>{n.d(e,{R:()=>l,x:()=>c});var r=n(6540);const i={},s=r.createContext(i);function l(t){const e=r.useContext(s);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:l(t.components),r.createElement(s.Provider,{value:e},t.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.