微服务开发框架

103 阅读5分钟

参考文档:

《八股文》微服务三十三问!mp.weixin.qq.com/s/K8O2TlVAQ…

Java Chassis3开发指南:servicecomb.apache.org/references/…

ServiceComb综述:cloud.tencent.com/developer/a…

目前业界主流的微服务框架:Dubbo、Spring Cloud Netflix、Spring Cloud Alibaba、ServiceComb。

image.png

特点DubboSpring Cloud NetflixSpring Cloud AlibabaServiceComb Java Chassis
开发语言JavaJavaJava可配置的编程模型,支持异构
服务治理提供完整的服务治理功能提供部分服务治理功能提供完整的服务治理功能
服务注册与发现ZooKeeper/NacosEureka/ConsulNacos自研ServiceCenter
负载均衡自带负载均衡策略RibbonRibbon\Dubbo负载均衡策略提供非常丰富的负载均衡策略,包括az亲和、根据实例属性进行路由转发、轮询、随机、顺序、基于响应时间的权值等
服务调用RPC方式RestTemplate/FeignFeign/RestTemplate/Dubbo可配置的通信模型,REST/HTTP/高性能的私有协议等
熔断器SentinelHystrixSentinel/Resilience4j默认使用Resilience4j,业务可使用其他治理框架
配置中心ApolloSpring Cloud ConfigNacos Config自研ServiceCenter
API网关Higress/APISIXZuul/GatewaySpring Cloud Gateway自定义EdgeService/zuul+springcloudgateway/confd+nginx
分布式事务Seata不支持分布式事务Seatasaga
限流和降级SentinelHystrixSentinel支持 Provider 限流和 Consumer 限流,算法:固定窗口/漏斗桶/令牌桶/自定义
分布式追踪和监控SkywalkingSpring Cloud Sleuth + ZipkinSkyWalking或Sentinel Dashboardzipkin。分布式调用链追踪系统,它能帮助用户收集时序数据用以定位微服务中的延迟问题,它同时管理追踪数据的收集 和查询
性能监控应用性能监控的指标包括 请求各个环节的时延、线程池使用情况、连接池使用情况、CPU和网络使用情况等。提供metrics-core应用性能监控,将监控结果写入日志文件;也支持对接Prometheus。
微服务网格Dubbo Mesh不支持微服务网格Service Mesh(Nacos+Dubbo Mesh)
社区活跃度相对较高目前较低相对较高
孵化和成熟度孵化较早,成熟度较高成熟度较高孵化较新,但迅速发展

ServiceComb

ServiceComb提供了Java Chassis和Go Chassis(是SDK),帮助开发者快速构建Java和Go语言的微服务。

image.png

注册中心ServiceCenter

ServiceCenter是一个具有微服务实例注册/发现能力的微服务组件,它提供一套标准的RESTful API对微服务元数据进行管理。ServiceComb的微服务注册及动态发现能力也是依赖其实现的。ServiceCenter基于Go语言实现,其后端存储使用了ETCD。为了方便使用,ServiceCenter还提供了Web界面,可视化的去管理和查询在注册中心上登记的微服务、接口信息。

微服务元数据包含哪些内容?除了微服务本身信息属于静态元数据外,ServiceCenter还扩展了微服务依赖关系、黑白名单、Tag标签和契约信息等元数据。

降级

降级策略是当服务请求异常时,微服务所采用的异常处理策略。

降级策略有三个相关的技术概念:“隔离”、“熔断”、“容错”:

  • “ 隔离”是一种异常检测机制,常用的检测方法是请求超时、流量过大等。一般的设置参数包括超时时间、同时并发请求个数等。

  • “熔断”是一种异常反应机制,“熔断”依赖于“隔离”。熔断通常基于错误率来实现。一般的设置参数包括统计请求的个数、错误率等。

  • “容错”是一种异常处理机制,“容错”依赖于“熔断”。熔断以后,会调用“容错”的方法。一般的设置参数包括调用容错方法的次数等。

把这些概念联系起来: 当“隔离”措施检测到N次请求中共有M次错误的时候,“熔断”不再发送后续请求,调用“容错”处理函数。

服务调用

Restful风格

RestTemplate是Spring提供的RESTful访问接口,ServiceComb提供该接口的实现类用于服务的调用。使用Restful风格开发消费者,需要关注Open API的Path、参数位置(Body、Header等)、参数类型以及响应类型,不用关注Provider的具体Ip。

RPC风格

RPC风格是一种语言有关的开发方法,更加贴近语言的使用习惯。访问服务提供者的服务,就像调用本地的API一样。

使用RPC风格,首先需要声明一个 interface 与提供者的服务对应。

interface HelloWorldService {
  String helloWorld(String name);
}

声明 interface 会使用到 Open API 的 operationId、 参数名称和参数类型、响应类型。 只需要保证方法名等于operationId, 参数名称等于Open API里面的参数名称(对于body,使用扩展属性x-name)。

通信模型

通信模型一般包括两个核心功能:对象如何编码,比如采用Json还是采用proto-buffer;通信协议采用什么,比如采用HTTP还是采用私有TCP协议。 对象编码方式和通信协议的组合,称为通信模型。 Java Chassis的通信模型可以分成两类:REST 和 Highway。

  • REST: 支持接口参数与HTTP Query、Path、Header、Body的映射关系。对象编码支持Json、proto-buffer、text等,通过Content-Type进行区分。通信协议采用HTTP协议族,比如HTTP、HTTPS、HTTP2(H2和H2C)。
  • Highway: 对象编码支持proto-buffer。通信协议采用Java Chassis自定义的私有TCP协议。

线程模型:

image.png

Http Filter

某些场景中,业务使用http而不是https,作为网络传输通道,此时为了防止被伪造或篡改请求,需要提供consumer、producer之间对http码流的签名功能。签名功能使用HttpClientFilter和HttpServerFilter接口来承载。

API网关

微服务能力需要通过网关开放给用户、其他外部系统访问。网关一方面扮演着汇集用户请求的作用,同时扮演认证、鉴权、流量 控制、防攻击的用途。由于网关是一个汇聚点,容易形成业务的瓶颈,通常还会采用多级网关,外层的网关提供主备以及简单 的请求转发功能,内层网关实现鉴权等功能,多实例部署。常见的可以用于外层网关的技术和服务包括 LVSDNS, Nginx 等,内层网关包括 spring cloud gatewayzuul 等。

ServiceComb 也提供了内层网关服务 Edge Service