# 《高性能Polaris网关》总体架构-第01节:高性能Polaris网关总体方案目标与架构设计

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/m06Cx (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本节重点:梳理高性能Polaris网关的总体方案目标、技术选型与架构设计,从总体上理解高性能Polaris网关的方案目标、技术选型和架构设计,并从全局视角了解高性能Polaris网关的设计和架构思想,并能够将其灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/m06Cx (opens new window)

大家好,我是冰河~~

在前面的文章中,我们梳理了高性能Polaris网关的需求和业务流程,并且对高性能Polaris网关的技术流程进行了梳理和总结。所以,不管是从业务角度,还是从技术角度,我们都大致了解了高性能Polaris网关的执行流程。接下来,就可以对高性能Polaris网关制定方案目标和进行总体架构设计了。

# 一、前言

相信很多有一定工作经验的小伙伴都有这样的体会,接到新的任务后,如果不做全面的需求分析、系统分析和架构设计,一上来就开始干代码,十有八九会在开发中途发现自己写的代码功能不太符合实际需求,或者突然发现某个功能有更好的实现方式,只是自己一开始没完全搞懂需求,根本没想到会有更好的实现方式。

更多的时候,想将原有的代码推倒重来,按照更优的方案来完成相应的需求任务开发,但是,此时发现时间根本来不及了,只能在原有的代码上苦苦支撑。最终,原本设想的功能完善、支持高并发、高性能、高可用和高可扩展的代码,却变成了一坨坨“屎山”。

# 二、本节诉求

作为系统架构师和研发人员,在充分了解网关需求,业务流程和技术流程后,就需要为网关设定方案目标,对技术方案进行选型,对网关进行总体架构设计和分层架构设计。从全局视角充分理解高性能Polaris网关的方案目标、技术选型、总体架构设计,以指导后续高性能Polaris网关的具体实现。

# 三、方案目标

在进行技术选型与总体架构设计之前,需要明确一个事项,就是网关无论采用哪种方案,采用哪种架构设计都需要明确这种方案的业务目标、技术目标和架构目标,并在研发过程中不断评估网关的总体性能表现,发现系统瓶颈并不断进行优化。

总体上,我们自主设计和研发的高性能Polaris网关,需要满足如下方案目标。

  • 业务目标:满足需求设计篇章中的各类需求场景。
  • 技术目标:在8c16g,千兆带宽机器下,QPS达百万级别,引入网关后,QPS和TPS的总体损耗不得高于3%,
  • 架构目标:高并发、高性能、高可用、可监控、可预警、可伸缩。

# 四、技术选型

在技术选型上,网关的核心部分实现不会选择Spring、SpringBoot等框架,因为我们对网关的性能要求极高,引入这些框架会影响网关的性能。对于Polaris网关来说,具体的技术选型如下所示。

  • 高性能组件:Netty、Disruptor
  • 异步交互:asynchttpclient
  • 缓存:caffeine、guava
  • 序列化:protobuf、json
  • 注册中心:Etcd、Nacos、Zookeeper

可以看到,这次网关项目的技术选型非常简单。对网关的核心实现来说,我们会选择性能非常高的组件来实现。

# 五、总体架构设计

高性能Polaris网关的性能之所以很高,除了核心部分不会基于Spring、SpringBoot等框架实现外,另一个重要的原因就是高性能Polaris网关有着良好的架构设计,Polaris网关的整体架构设计如图1-1所示。


在高性能Polaris网关中,我们采用微内核、插件化的架构设计,每一部分都是以插件的形式提供服务,整个网关会内置核心插件,并提供标准的SPI机制,供使用方根据自己的实际需求,可自定义需要的其他插件。

# 六、网关内部执行流程

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码