searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Go-chassis的Restful浅析

2023-08-01 06:13:36
12
0

一、背景

Go-Chassis 是一个开源的微服务框架,用于构建分布式应用程序和云原生应用。它是由华为公司推出的,专为Go语言编写的微服务架构而设计。Go-Chassis 提供了一系列功能和组件,旨在简化微服务的开发、部署和管理,以及提高应用程序的性能和可靠性。

Go-Chassis 主要特点包括:

  1. 服务注册与发现:Go-Chassis 支持服务注册与发现,使微服务可以在不同的节点上自动注册和发现其他服务。
  2. 负载均衡:Go-Chassis 集成了负载均衡功能,可以根据不同的负载均衡策略自动分发请求到后端的服务实例。
  3. 服务治理:Go-Chassis 提供了服务治理功能,包括限流、熔断、降级等机制,以提高应用程序的可靠性和稳定性。
  4. 配置管理:Go-Chassis 允许动态配置微服务的行为和参数,支持热更新配置,从而无需重新部署应用程序。
  5. 跨平台支持:Go-Chassis 可以在不同的操作系统和云环境中运行,适用于各种场景。
  6. 服务监控:Go-Chassis 集成了监控和跟踪功能,可以帮助开发人员实时监测应用程序的性能指标和健康状态。

二、chassis框架

Go-chassis框架作为Go语言的微服务治理框架,具备的能力跟java的微服务框架一样都是通用的,只是采用的方式有可能不一样。

首先就是服务注册与发现功能,Go-chassis原生的是servicecomb的服务注册中心,java的有spring的eurka、阿里的nacos等,这一块可以根据公司实际基础架构做改造,这里我们改成了nacos的注册中心。

配置中心,Go-chassis提供了archaius的配置管理,支持本地和远程的配置来源,远程的配置支持apollo的配置中心,这里也改造成支持nacos的配置中心;

由框架本身带来的自运维功能,需要监控和日志追踪。监控指标支持Prometheus,日志追踪支持的是zipkin方式;

而在微服务框架本身中,需要对进入框架内部的请求流量做一定保护,转发,这就需要负载均衡、限流、熔断的一些功能,chassis都支持这些基础功能。

在网络这一块,基本的网络连接必定是采用IO多路复用来提高网络连接的响应性能,同时也要扩展支持多种协议,如Http和Grpc等,对请求流转换成内部的标准协议,为了支持更多业务自定义需要,责任链式的过滤器链也是必须的。

因此,chassis的微服务框架大致架构如上所述,chassis提供了开箱即用的restful、grpc的连接请求处理流程,开发者只需关注业务逻辑的处理功能,无需处理更多的基础框架功能。

三、Restful结构

RestFulServer的结构如上图所示,一共包括四个模块,server的配置项,httpServer连接服务、webService、Container。

这里根据业务需要做了优化,由于Container也是包含webService,因此,主要是分为三个模块。一个Http应用服务器首先要解决的问题是连接问题,因为这里只讨论Http的协议,所以只需要定义一个HttpServer,有了连接服务,那也需要对应的ip和端口的一些配置,所以还需要对应的配置项;请求连接进入服务后,就要面临着转发,因此需要一个Container做路由转发、过滤等处理。然而一个http连接可能会对应多个host站点,那必然还会再分离出一层webSerivce,这一层主要是处理某个具体Host站点的路由和业务逻辑处理,大致结构如此。

四、RestfulServer的处理流程

  1. RestfulServer的初始化:主要是根据配置的ip和端口,初始化HttpServer
  2. RestfulServer的启动:启动时,会开启一个协程,自旋方式不断监听端口事件,当有连接事件触发时,生成一个连接对象,当有请求进入时,开启新的协程,自旋方式处理请求,这里主要是IO多路复用的方式来处理连接请求
  3. 在进入到Container里面后,基于ServerMux配置的根路径和处理函数,根据最长路径匹配规则,选出请求处理方法
  4. 在进入到Handler处理方法后,根据路由匹配规则,从webService列表选中对应的webService和Route
  5. 然后执行一系列过滤器链,包括容器过滤器链、webService过滤器链和Route的过滤器链
  6. 如果过滤器链没有中断请求响应,则执行服务的handlerChain业务处理器链,最后执行业务逻辑操作

 

0条评论
0 / 1000