当前位置: 首页 > news >正文

视频点播网站开发教程漳州小程序开发

视频点播网站开发教程,漳州小程序开发,网站 制作软件,wordpress卡简介#xff1a; Pixiu 是基于 Dubbogo 的云原生、高性能、可扩展的微服务 API 网关。作为一款网关产品#xff0c;Pixiu 帮助用户轻松创建、发布、维护、监控和保护任意规模的 API #xff0c;接受和处理成千上万个并发 API 调用#xff0c;包括流量管理、 CORS 支持、授权…简介 Pixiu 是基于 Dubbogo 的云原生、高性能、可扩展的微服务 API 网关。作为一款网关产品Pixiu 帮助用户轻松创建、发布、维护、监控和保护任意规模的 API 接受和处理成千上万个并发 API 调用包括流量管理、 CORS 支持、授权和访问控制、限制、监控以及 API 版本管理。 Pixiu 是什么 ​在回答 Pixiu 是什么之前我们简单解释一下 Dubbo 是什么。Dubbo 是一个开源的高性能 RPC 框架有着丰富的服务治理能力以及优秀的扩展能力。Dubbo 更扩展出 Dubbo-go​为用户提供了 Golang 的 Dubbo 解决方案打通了两种语言之间的隔阂使 Dubbo 更加贴近云原生。  Dubbo-go 作为 Golang 服务实现与 Dubbo 服务之间的相互调用。然而在日常使用场景中用户往往有把 Dubbo 服务以 RESTful 风格向外暴露的需求同时也要兼顾内部 Dubbo 调用。为了解决这种场景作为 Dubbo API 网关的 Pixiu​ (中文: 貔貅 曾用名 dubbo-go-proxy) 便应运而生。之所以采用 Pixiu 这个名称是因为 Java 同类产品 Zuul 的意象是一个西方怪兽Pixiu 作为一个国产产品就用了我们中国的一个类似的神兽貔貅作为项目名称。也同时表达了 Dubbo 社区希望扩展出一整套云原生生态链的决心。 ​ 目前 Dubbo 多语言生态发展最好的自然是 Java其次是 Golang其他语言都差强人意。dubbo-go-pixiu 项目是一个基于 dubbo-go 发展起来的项目目前接口协议层支持的是七层的 HTTP 请求调用计划在未来的 0.5 版本中支持 gRPC 请求调用其另外一个使命是作为一种新的 dubbo 多语言解决方案。 ​ 为什么使用 Pixiu ​ Pixiu 是基于 Dubbogo 的云原生、高性能、可扩展的微服务 API 网关。作为一款网关产品Pixiu 帮助用户轻松创建、发布、维护、监控和保护任意规模的 API 接受和处理成千上万个并发 API 调用包括流量管理、 CORS 支持、授权和访问控制、限制、监控以及 API 版本管理。除此以外作为 Dubbo 的衍生产品Pixiu可以帮助 Dubbo 用户进行协议转换实现跨系统、跨协议的服务能力互通。 ​ Pixiu 的整体设计遵守以下原则 ​ High performance: 高吞吐量以及毫秒级的延时。可扩展: 通过 go-plugin用户可以根据自己的需求延展 Pixiu 的功能。简单可用: 用户通过少量配置即可上线。 ​ Pixiu 的特性及核心功能 ​ 为 RESTful API 和 Dubbo API 提供支持 ​ 非 RESTful 风格的 API 和 Dubbo 协议的服务往往需要修改才可以以 RESTful API 风格对外开放。Pixiu 提供协议转换功能通过 Pixiu开发者可以将自己的 HTTP API 或 Dubbo API 通过配置以 RESTful API 风格对外开放。v0.2.1 版本已支持基于泛化调用的 HTTP 至 Dubbo 的协议转换以及 HTTP 协议的转发。在后续的版本社区将会增加对 gRPC 和 http2 协议的支持。 ​ 面向用户的配置方式 ​ 一般的网关的配置往往繁琐且复杂。Pixiu目标作为一款易用的网关产品在设计上拥有三层配置层级Gateway 层全局配置 API resource 层配置以及 HTTP verbs 方法层配置。通过三个不同层级的配置既可以实现深度的定制亦支持统一的默认配置同时支持本地的配置文件亦可使用统一配置服务器。另外还提供控制台模块通过控制台模块支持配置的热更新。Pixiu 配套配套的控制台界面也在同步开发中。 ​ 通用功能的集成 重试、熔断、流量控制、访问控制等通用功能不再需要在每个后端服务上重复实现。使用 Pixiu通过配置 filter 开发者可以进行全局的控制亦可以根据 API 配置各自的规则。因此开发者可以专注于业务逻辑和服务而不是将时间用在维护基础设施上。 ​ 可扩展 ​ 不同的使用场景有着各自独特的需求。为满足不同用户的定制化需求Pixiu 使用了插件模式。开发者可以通过编写 go plugin将自身特有的业务逻辑以 filter 形式内嵌至 Pixiu 网关中实现诸如企业登录鉴权等功能。 图 1: Pixiu 核心功能列表 ​ Pixiu 的架构设计 图 2: Pixiu 架构 貔貅: 即 dubbo-go-pixiu由四个主要模块Listener、Router、Filters 和 Clients 组成 Dubbo Cluster: Dubbo 服务所在集群包含一个或多个 Dubbo Services Other Cluster: Dubbo 以外的服务所在集群现支持 HTTP 服务未来将拓展支持 gRPC 等其他服务 Registry Center: 注册中心维护每个业务服务的调用地址信息 Metadata Center: 元数据中心维护每个业务服务的配置信息以及存储 Pixiu 本身的配置信息。 作为 Dubbo 所衍生的 API 网关Pixiu 使用 Golang 搭建主要因为: 1. Golang 的 G-M-Pnet poller 等特性使 Golang 非常适合构建IO密集型应用2. 使用 Golang 可以直接引入 Dubbo-go 中的一些组建简化开发。 ​ 整个Pixiu大致可以拆分为四个主要模块Listener、Router、Filters 和 Client。 ​ 1、Listener ​ 在 Pixiu 中Listener 代表外部可以访问Pixiu的方式。通过配置指定协议类型地址端口等属性暴露 Gateway。现阶段暂支持 HTTP 协议未来将会加入 gRPC。 ​ listeners: - name: net/http address: socket_address: protocol_type: HTTP address: 0.0.0.0 port: 8888 config: idle_timeout: 5s read_timeout: 5s write_timeout: 5s ​ 2、Router ​ Router 是 Pixiu 的路由组件。根据配置文件Pixiu 将对外暴露的 URLs 以树的形势存储于内存中当请求到了 router 组件时即会根据 URL 及 HTTP 方法查找到对应的后端服务及其 API 配置并将信息封装于请求中为后续 filter及 client 的调用提供足够的内容。 ​ 现阶段Router 提供以下功能: 支持请求一对一转发路由配置或 wildcard 路由配置。支持 HTTP 请求的转发到后端 HTTP 服务。支持 HTTP 请求转化为 dubbo 泛化调用请求。 3、Filters ​ Filter 是 Pixiu 实现额外功能及其扩展性的主要组件。其实现类似于 Dubbo-go 中的 filter根据配置中 filter 的指定生成调用链从而在调用后端服务前将各 filter 中的逻辑运行一遍实现节流日志等功能。 ​ 用户如果需要客制化的 filter可通过编写 go-plugin 实现。在配置中可通过类似如下配置加载 .so文件并在 API config 中指定使用的 plugin groupplugin name 实现。 ​ pluginFilePath: pluginsGroup: - groupName: group1 plugins: - name: rate limit version: 0.0.1 priority: 1000 externalLookupName: ExternalPluginRateLimit - name: access version: 0.0.1 priority: 1000 externalLookupName: ExternalPluginAccess - groupName: group2 plugins: - name: blacklist version: 0.0.1 priority: 1000 externalLookupName: ExternalPluginBlackList ​ 4、Client Client 负责调用具体服务。现阶段Pixiu 支持 HTTP 与 Dubbo 的后端服务。社区将逐渐增加 gRPC 等其他 Client 以满足不同的协议。 ​ HTTP client 的实现相对简单根据 Router 中获取的后端服务信息通过 Golang 官方包 net/http 生成请求并调用。 ​ Dubbo client 的实现对比 HTTP client 会稍微复杂其基础为 Dubbo 服务的泛化调用。泛化调用技术是 Dubbo 提供的一个很基础的功能只需要知道调用的方法名、参数类型和返回值类型即可发起服务调用。客户端对服务端的泛化调用既可以通过注册中心发现服务也可以直连服务端实现对服务的动态调用。 如下面代码所示Pixiu 通过动态配置 referenceConfig然后通过 GetRPCService 生成 Dubbo 的 Generic Client泛化调用客户端进行下一步的调用。 ​ referenceConfig : dg.NewReferenceConfig(irequest.Interface, context.TODO())referenceConfig.InterfaceName irequest.InterfacereferenceConfig.Cluster constant.DEFAULT_CLUSTERvar registers []stringfor k : range dgCfg.Registries {registers append(registers, k)}referenceConfig.Registry strings.Join(registers, ,)if len(irequest.DubboBackendConfig.Protocol) 0 {referenceConfig.Protocol dubbo.DUBBO} else {referenceConfig.Protocol irequest.DubboBackendConfig.Protocol}referenceConfig.Version irequest.DubboBackendConfig.VersionreferenceConfig.Group irequest.GroupreferenceConfig.Generic trueif len(irequest.DubboBackendConfig.Retries) 0 {referenceConfig.Retries 3} else {referenceConfig.Retries irequest.DubboBackendConfig.Retries}dc.lock.Lock()defer dc.lock.Unlock()referenceConfig.GenericLoad(key)clientService : referenceConfig.GetRPCService().(*dg.GenericService) ​ 实际上在泛化调用的客户端中实际执行泛化调用的关键步骤是 Dubbo-go 中的 generic_filter (如下代码片段)。在调用 generic_filter 的 Invoke 时约定 invocation 参数列表第一个为方法名第二个为参数类型列表第三个为参数值列表。generic_filter 将用户请求的参数值列表转化为统一格式的 map代码中的 struct2MapAll 将类 golang 中为 struct 的正反序列化操作变成 map 的正反序列化操作。这使得无需 POJO 描述通过硬编码注入 hessain 库从而完成 Dubbo 服务的泛化调用。 ​ func (ef *GenericFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {if invocation.MethodName() constant.GENERIC len(invocation.Arguments()) 3 {oldArguments : invocation.Arguments()if oldParams, ok : oldArguments[2].([]interface{}); ok {newParams : make([]hessian.Object, 0, len(oldParams))for i : range oldParams {newParams append(newParams, hessian.Object(struct2MapAll(oldParams[i])))}newArguments : []interface{}{oldArguments[0],oldArguments[1],newParams,}newInvocation : invocation2.NewRPCInvocation(invocation.MethodName(), newArguments, invocation.Attachments())newInvocation.SetReply(invocation.Reply())return invoker.Invoke(ctx, newInvocation)}}return invoker.Invoke(ctx, invocation) } ​ 总结 ​ 通过上面的四个模块以及注册中心的简单介绍不难发现当请求通过 listener 被 Pixiu 接收后请求被传入 router 中。router 根据接口的配置从原请求中找到目标后端服务连同相关API配置下发到 filter 组件。filter 组件根据原请求、 API 配置等信息顺序执行最终请求到达 client 通过 client 调用后端服务。 ​ Pixiu的未来 图 3: Pixiu 迭代里程碑 ​ Pixiu 作为网关产品外其衍生项目也会在我们的未来计划中主要目的是提供更好的可用性。例如由于 Golang 语言缺乏原生的注解 因此 Dubbo-go 需要通过配置文件方式生成服务的元数据写入注册中心。开课啦教育公司相关同学写了一个扫描代码的工具 _https://github.com/jack15083/dubbo-go-proxy-tool_在每个 RPC 服务方法前加上对应的注释从而在服务启动前通过扫描注释生成元数据。Pixiu 也计划在未来的版本上通过提供 package允许服务通过注释借助 _https://github.com/MarcGrol/golangAnnotations _生成 API 配置并注册到 Pixiu 上。 Pixiu 目前的定位是一个七层协议网关其最初版本是被定义成一个 Dubbo 的服务网关。作为云时代的产品Pixiu 的发展方向必然是面向云原生的。现在的版本为0.2.1, 已经实现基本的 Dubbo/Http 服务代理和部分的网关通用功能。目前正在开发中的 0.4 及其后续版本支持 gRPC 和 Spring Cloud 服务调用 后续还将提供 MQ 服务支持。另外社区将继续优化配置方式降低用户的使用难度继续优化官方的 filter使 Pixiu 可以在官方层面实现更多的网关通用功能。 在未来的一年内社区计划支持 xDS API将 Pixiu 演化为 Dubbo mesh 的 sidecar。其最终目的就是在现有的 dubbo mesh 形态中演化出 Proxy Service Mesh 形态。基于这个形态Js、Python、PHP、Ruby 和 Perl 等脚本语言程序除了收获 dubbo mesh 原有的技术红利之外大概率还能收获性能上的提升。 ​ Pixiu 在 Dubbo Mesh 中的终极目的是把东西向和南北向数据面流量逐步统一 Pixiu 中的同时让它逐步具备 Application Runtime 的能力作为 Dubbo 多语言生态的关键解决方案。 ​ 冯振宇Apache Dubbo Committer目前负责管理香港一家消费品公司的IT部门整个团队。2020 年夏天 偶然看到了介绍 dubbogo 的文章后加入了 dubbogo 社区目前在主导 Pixiu 0.4.0 版本的开发。 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.huolong8.cn/news/223388/

相关文章:

  • 做电影网站需要那种服务器外包的工作值得做吗
  • .帮别人做网站在线支付网站制作
  • 东营高端网站建设网络营销pdf
  • 网站备案ip查询系统wordpress输出文章id
  • 做网站线稿软件有哪些安装wordpress主题放哪里
  • 网站建设项目建议书wordpress 免费电商主题
  • 阜阳建设网站公司net开发网页小程序
  • 基于html5的购物网站开发网络营销策划的主要特点
  • asp网站开发源码提高wordpress 权重
  • 长沙网站seo技术平台开发是做什么的
  • 关于网络的网站怎么做杭州建设局网站
  • 忻州网站建设微信公众号网站开发
  • 网站首页设计模板中国空间站实时位置
  • 网站建设维护预算dnsprefetch wordpress
  • 成功网站案例有哪些杨凌网站开发
  • 河北响应式网站建设质感企业网站导航用ps怎么做
  • 个人建站除了wordpress湘潭建设网站制作
  • 建网站的流程费用西安最新通告公告
  • 做任务挣钱的网站聚电话手表网站
  • 400电话西安网站制作 彩铃制作农业企业网站建设
  • 北京网站设计制作费用ppt模板怎么直接套用
  • 做图库网站需要多少钱鄂尔多斯北京网站建设
  • 兰州大学网页与网站设计初中做网站用什么软件
  • 驻马店市建设工程网站最近中国新闻热点大事件
  • 凡科建站网站怎样做软件下载永春网站建设
  • 外卖网站那家做的好处如何做自助网站
  • 如何取消网站备案号网站如何建设与安全
  • 网站ip需要备案招标网站开发
  • 做网站资料准备免费软件下载网
  • 公司网站平台给网站做插画分辨率