微服务基础设施架构
全貌
优先级
微服务框架模式
核心
服务注册、服务发现、服务路由
模式1-嵌入SDK
优点
- 架构简单,天然支持高性能、高可用
- 维护简答,无需维护独立的Proxy节点
缺点
- 应用侵入,需要集成SDK,并联动升级
- 多语言重复开发SDK
模式2-反向代理式
优点
- 应用无侵入
- 天然支持多语言
缺点
- Service Proxy需要通过集群来做高性能、高可用
- 维护复杂,需要维护Service Proxy集群
模式3-网络代理式(Service Mesh)
优点
- 应用无侵入
- 天然支持多语言
- 天然支持架构高性能、高可用
缺点
- 维护复杂,需要维护每台服务器上的Service Proxy
- 单台服务器的Service Mesh是单点
- 全链路请求性能会下降
3种模式对比
嵌入SDK | 反向代理 | 网络代理 | |
---|---|---|---|
多语言 | 每个语言都需要开发SDK | 天然支持多语言 | 天然支持多语言 |
应用侵入 | 需要集成SDK | 无 | 无 |
可维护性 | 无需额外维护工作 | 维护Proxy服务器集群 | 维护每台机器上的Proxy节点,数量非常多 |
高性能 | 天然支持 | 需要通过Proxy集群来实现 | 整体架构是高性能的,但全链路请求性能会下降 |
高可用 | 天然支持 | 需要通过Proxy集群来实现 | 整体架构是高可用,单台服务器上的Proxy是单点 |
适应场景 | 团队技术栈统一为某个单语言 | 团队技术栈多语言,服务集群规模不大(1000服务器以内) | 团队技术栈多语言,服务集群规模超大(1000服务器以上) |
常见微服务框架选择
嵌入SDK
Dubbo
Apache Dubbo是一款高性能、轻量级的开源Java服务框架,提供了6大核心能力:
- 面向接口代理的高性能RPC调用
- 智能容错和负载均衡
- 服务自动注册和发现
- 高度可扩展能力
- 运行期流量调度
- 可视化的服务治理和运维
Spring Cloud
Spring Cloud provides tools for (Java) developers to quickly build some of the common patterns in distributed systems:
- Distributed/versioned configuration
- Service registration and discovery
- Routing
- Service-to-service calls
- Load balancing
- Circuit Breakers
- Global locks
- Leadership election and cluster state
- Distributed messaging
反向代理式
APISIX
Apache APISIX is a dynamic, real-time, high-performance API gateway. Based on the Nginx library and etcd
APISIX provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking,authentication, observability, and more
You can use Apache APISIX to handle traditional north-south traffic, as well as east-west traffic between services. It can also be used as a k8s ingress controller
网络代理式(Service Mesh)
Istio
Istio makes it easy to create a network of deployed services with load balancing, service-to-service authentication, monitoring, and more, with few or no code changes in service code
- Automatic load
- Fine-grained control of traffic behavior with rich routing rules,retries, failovers, and fault injection
- A pluggable policy layer and configuration API supporting access controls, rate limits and quotas
- Automatic metrics, logs, and traces for all traffic within a cluster,including cluster ingress and egress
- Secure service-to-service communication in a cluster with strong identity-based authentication and authorization