微服务架构
大型互联网系统架构必须支持高可用、高伸缩、高并发、安全性的特性。图3-43 所示为一种基于Spring Cloud的大型互联网微服务架构设计,对于每个服务节点的作用和使用场景可以总结为以下11项,作为通用的架构设计蓝本。
(1) 四层负载:使用CDN、硬负载、Nginx集群、网关集群组成四层负载架构,有效保证超高并发和海量请求可以进来。CDN保证静态资源的加载速度,同时不让过多的流量涌入占用大量带宽资源;硬负载将流量负载到Nginx集群;Nginx集群将请求继续负载分发给网关集群;网关集群将请求继续负载分发给上游服务。
(2) 限流降级:在系统承压巨大的情况下可以在Nginx和网关层进行服务限流和API降级、熔断,保证系统的可用性,避免出现雪崩现象。
(3) Nginx负载:可以在Nginx前面再部署LVS或HAProxy增加一层负载,进一步提升请求接入能力,也可以将Nginx替换为LVS或
HAProxy。
(4) 网关集群:网关可以使用Zuul或Spring Cloud Gateway搭建集群,Spring Cloud Gateway的性能更高,网关层可以通过Hystrix、
Sentinel做限流、熔断、服务降级。
(5) 注册中心:可以使用Nacos、Consul、Eureka、Zookeeper等软件搭建,保证高可用。
(6) 配置中心:可以使用Spring Cloud Config组件配合Git或SVN 搭建,也可以使用Nacos、Consul等软件搭建。
(7) 监控系统:可以使用Spring Boot Admin搭建监控服务,由于没有访问压力,因此也可以部署单节点。
(8) 链路分析、交易采样:可以使用SkyWalking、Zipkin、
Pinpoint等软件搭建。
(9)日志收集:可以使用Elastic Stack搭建,包含Filebeat、
Kafka、Logstash、Elasticsearch、Kibana等,可参见6.8节。
(10) 微服务节点:每个微服务都按照一定的领域进行拆分,每个微服务都对应自己独立的关系型数据库。
(11) 数据库:数据库要提前预估数据量,做好分库分表设计。以关系型数据库为主,以MongoDB、Redis、Elastic、HBase等数据库为辅。
图3-43 基于Spring Cloud的大型互联网微服务架构设计
也可以换个角度来理解一下微服务的分层架构,微服务架构从上到下可以分为客户层、负载层、网关层、业务层、中间件层。微服务分层架构如图3-44所示。
(1) 客户层:Web、iOS、安卓、小程序等各种客户端,以互联网方式访问微服务。
(2) 负载层:利用F5等硬负载设备,HAProxy、Nginx等软负载设备,DNS域名解析等对海量的互联网请求进行多级负载和静态资源缓存。
(3) 网关层:对客户端请求进行限流、降级、安全控制、日志记录、加解密、反向代理、交易路由、交易负载等一系列处理。
(4) 业务层:负责具体系统业务的处理、外联服务的接入,以及微服务的治理。
(5) 中间件层:提供数据库、消息队列、缓存、文件存储等一系列存储和消息服务。
(6) 服务治理区:如图3-44所示,服务治理区包含了微服务架构的重要支撑服务,如注册中心、配置中心、服务监控、链路追踪、日志收集等,网关层和业务层都要与服务治理区紧密连接。
(7) 外联服务区:如图3-44所示,外联服务区主要指系统所对接的支付宝、微信等第三方服务,与当前微服务系统存在相互的调用关系。
图3-44 微服务分层架构