云原生时代技术底座的重要性

1,561 阅读7分钟

现如今,云原生时代已经到来,不论是大厂还是中厂所有与业务无关的能力都在向技术底座下沉,典型的如服务网格,去中心化的设计,将服务发现、流控、负载均衡等能力统统下沉到平台。通过容器化K8s、Docker等相关技术,使服务具有动态扩展、灵活部署等能力。

前言

本篇文章是我近一年来,对中大型企业架构的研究,其内容涵盖云计算、容器化、大数据、人工智能,微服务,服务网格等相关内容,其中可能会有很多理解上的偏差,或者比较理解的比较片面,欢迎大家批评指正。

云原生时代主流的技术架构

下面来看一下我对于云原生时代技术架构的理解,如下图所示

云原生基础架构设计.jpg

对于中大型公司,业务架构都在向小前台、大中台发展,将通用业务能力沉淀到中台,与此同时将与业务无关的能力向技术底座下沉。我认为技术底座是包含PaaS平台的能力,以及云计算的能力,云计算的能力包含私有云的搭建部署资源池化再分配;公有云的使用;以及私有云与公有云配合使用,形成混合云。

上述架构虽然有极大的优势,能够服务上千万的客户,但是其投入也是非常巨大的,当公司规模以及客户没有发展到一定规模时需要对架构做相应的调整,发展的脉络可以是:

单体--> 集群(负载均衡扩展单点) --> 分布式微服务(领域服务拆分) --> 容器云 (K8s、Docker、DevOps...)--> 抽取平台能力(中间件,基础服务研发,运维平台建设...)-->提炼核心业务能力形成业务中台--> 大数据存储计算(数仓、数据湖) --> 提炼数据中台 --> 提炼人工智能算法形成知识中台...

随着技术架构的不断发展,组织架构应该伴随技术架构共同演进。

为什么说技术底座重要

未来搞技术的与搞业务的一定是解耦的,开发人员的精力是有限的,有人热衷于专研底层技术,有人热衷于通过业务创造实际价值,分工明确,这样才更利于企业的发展。

为什么说技术底座非常重要呢?技术底座决定着我们的程序能够服务的用户规模,并且我们通过技术底座来保证应用的高性能、高并发、高可靠性。

云计算、微服务、运维平台是技术底座的核心组成部分,这些模块决定着我们整个架构的质量,决定着我们是否具备持续交付的能力,决定系统是否具备容灾能力,决定着我们企业是否能够用更少的成本,换取更高的收益。

下面我们分别对技术底座几大核心组成部分进行简单的介绍。

云计算

云计算是技术底座中最接近于硬件的一层,我们是否需要自建数据中心,是否需要对物理机、虚拟机进行虚拟化、是否采用公有云服务,我们应用的动态扩容,容灾能力其实都取决于云计算相关技术。

我们是否需要采用两地三中心或者三地五中心,来提高我们硬件的容灾能力以及数据的保护程度。

两地三中心:同城容灾中心,异地容灾中心,与主要的数据中心合称两地三中心。

两地三中心一种比较好的实现方式,就是借助网络运营商或者CDN分地区将不同地区的流量路由到不同地区的数据中心处理,数据中心之间两两互相同步。这样某个数据中心不可用,不会导致整体不可用。

image.png

某些业务场景,我们可以考虑边缘计算技术,边缘计算是将一些不重要的计算放在离用户更近的边缘侧进行处理,处理后将数据返回数据中心,这里我们只需要保证数据的最终一致性即可。边缘计算的另一大优势就是,充分利用各种终端的计算能力,降低数据中心的压力,尤其是万物互联时代,边缘计算一定会越来越火热。

边缘计算有点像八爪鱼,不只是大脑具备感知能力,每一条触手也具备一定感知能力。

image.png

微服务 & 服务网格

我认为更适应于云原生时代的微服务体系一定是新一代的服务网格体系。

image.png

传统微服务的服务发现,服务间的调用,负载均衡,熔断限流等都耦合在业务中,服务网格使其下沉到基础设施层

服务网格是专注于处理服务间通信的基础设施,它负责在现代云原生应用组成的复杂拓扑调用中实现可靠的传递请求。

通信模块的发展:内嵌在应用程序中、SDK、Sidecar(1个Pod中可以运行多个容器,负责网络的辅助容器)

Sidecar(网络服务代理)反向代理主容器,替服务接收请求,处理请求,为代理的服务提供熔断、限流、追踪、指标采集、服务发现等功能。

服务网格:由这些网络服务代理联合组成的服务通信网络就被称为服务网格

服务网格分为数据平面与控制平面。

数据平面: 涉及系统中每个数据包或请,负责服务发现、健康检查、路由、负载均衡、身份验证/授权、可观测性等。

控制平面: 为网格中所有正在运行的数据平面提供策略和配置,将所有数据平面联合构建成分布式系统,它不接触系统中的任何数据包或请求。控制平面负责确定调用方到被调用方的路由,被调用方的负载均衡策略、断路策略、流量转移机制等,并将决策下发给调用方与被调用方的Sidecar。

南北流量:服务外流量进入(API Gateway --> Sidecar) 东西流量:服务内流量(Sidecar)

服务网格的基本功能:

  • 控制服务间通信:熔断、重试、超时、故障注入、故障转移、负载均衡等;
  • 服务发现:通过专用的服务总线发现服务端点;
  • 可观测性:指标数据采集、监控、分布式日志记录和分布式链路追踪;
  • 安全性:TLS/SSL通信和密钥管理;
  • 身份日志和授权检查:身份认证,黑白名单,RBAC的访问控制
  • 部署:原生支持容器技术
  • 服务间通信协议:HTTP 1.1、HTTP 2.0 和 gRPC等
  • 健康状态检查:检测上服务的健康状态;
  • ...

服务网格的优势:

  • 降低业务逻辑与网络功能的耦合度;
  • 快捷、方便集成到现有业务环境之中;
  • 多语言多协议的支持;
  • 运维管理成本大大压缩,让开发人员专注于业务逻辑本身;
  • 服务间局部的通信故障可由Service Mesh自动处理;

服务网格的劣势:

  • 借助代理无法使服务之间直接通信,需要额外的开销;
  • Sidecar本身也会造成计算资源的耗费

运维平台

为什么运维平台也很重要呢?流水线自动构建发布,容器管理,资源监控,统一日志管理,线上服务告警,自动扩缩容,各种形式的程序发布(蓝绿发布、金丝雀发布、AB测试等)。

如下图中红框部分为DevOps的流程,研发人员提交代码到Git仓库,触发Jenkins自动构建发布,Jenkins通过Maven打包研发人员最新提交的代码,将其上传到镜像仓库,与此同时通过容器编排K8s,将最新镜像构建成容器,发布到对应的环境中。如图我们可以通过ELK做统一的日志管理,通过prometheus做服务的告警。

image.png