微服务领域已经从框架的选用上升到平台化治理,云原生下的微服务已经成为大势所趋。本系列文章将对阿里云下的云原生服务做一些系统性的梳理。本章是系列文章第一篇,主要对阿里云云原生服务做一个概览性介绍。
一、微服务建设
1.1 微服务基础概念
单体:一个拥有所有服务功能的单一项目架构
微服务:一组专注、内聚、独立、有自己数据域的服务架构
走向微服务的原因:
- 水平扩展
- 高可用性
- 数据压力
- 系统升级
- 团队协作
1.1.1 微服务核心要点
API Getway:API 网关,是服务调用的起点,它通常提供API鉴权、路由、过滤等功能,不同客户端可以通过网关调用我们的核心服务。
注册中心:提供服务注册与发现的功能,微服务实例会将自己的元信息(比如ip、端口、实例名等)上报记录到注册中心,调用段在请求时根据读取注册中心的数据来访问微服务实例。
服务间通信: 微服务间通信最常见的方式是以http为基础的Rest API,或者是各框架自己开发的RPC协议。
负载均衡:微服务通常以多实例集群的形式存在,在调用某微服务时,需要根据某种规则进行“分散式”调用,即负载均衡。负载均衡的策略一般有:轮询、随机、一致性Hash、基于资源的分配负载等。
容错与重试:大规模微服务集群出错的几率较高,比如网络抖动、资源故障等,此时需要考虑容错能力,一把微服务框架都会提供容错策略,有时候为了保证数据最终一致性,也会考虑一些重试机制的运用。
数据分布: 在微服务架构阶段,通常是以垂直业务做拆分,所以通常来说数据库至少是垂直分库,即每个微服务集群管辖自己所属的数据库。
1.1.2 微服务技术架构图
围绕着微服务,在不同场景下有不同的技术选型和核心考量点。比如API层,需要考虑路由、鉴权、限流等;Web服务层,考虑负载、扩展、高可用等;在数据层,考虑事务/一致性、高可用、高性能、扩展性等。要保障微服务的高质量建设,离不开平台化、体系化的基础设施保障。
1.2 云原生基础概念
很多人会问:什么是云原生?不同的平台都有自己的相关定义。
Pivotal(就是发布了SpringBoot/SpringCloud的巨牛公司)于 2015 年提出了“Cloud Native”的概念:云原生是一种可以充分利用云计算优势的构建和运行应用的方式。云原生技术栈应该包含:微服务、容器、DevOps、持续交付。
CNCF(云原生计算基金会)关于云原生技术栈的描述,包含:微服务、容器、服务网格、不可变基础设施和声明式API。
这个问题没有标准答案,大家其实都有相似的定义和技术栈的描述,最终还是看各家的落地实现,能否达成云原生的价值。
1.2.1 发展历程
任何技术的发展都不是一蹴而就的。在早期,我们从硬件机器到虚拟化主机,然后商业级IaaS、PaaS开始崭露头角,逐步带动了开源IaaS、PaaS的快速发展。互联网的高速发展,催生了单体式走向服务化的架构体系,为了解决微服务的高扩展性、高可用性、交付一致性,以Docker/K8s为代表的容器化技术开始走入技术决策层的视野。接着,大规模微服务的持续集成与交付、动态资源伸缩、运维治理等,造就了基于云原生的微服务架构体系及相关技术栈的实现。
1.2.2 基础范畴
云原生并非指某一个特定的技术,它是一系列技术概念的统称。从阿里云官方来看,云原生相关的服务支持包括:
同样要指出的是,在实践过程中,我们只需要按需选择部分技术即可,比如说你可以自己搭建CI/CD工作流,然后使用阿里云的容器服务,或者使用阿里云云效来实现CI/CD工作流,自己管理容器集群。这其实也是云原生资源解耦的应有之义。
1.2.3 技术架构
云原生基于云计算理念的深化,是面向云应用设计的一种新的架构设计理念,充分发挥云效能的最佳实践路径,帮助企业构建弹性可靠、松耦合、易管理可观测的应用系统,提升交付效率,降低运维复杂度。无论任何关于云原生的描述,都可以提炼出这样几个核心词汇:微服务、容器化、DevOps。
上图中的所有技术概念,都有对应的开源产品可供选择,但是对于中小企业来讲,从零打造完整的云原生平台,投入是非常大的。从最简单的角度来讲:云原生是依托云的,要实现云原生,前提是得有“一朵云”。依照笔者的经验,中小企业/团队要能快速的紧跟技术发展脉搏,享受到云原生的红利,建议优先考虑以阿里云为代表的云原生服务厂商,先享受下开箱即用的快感吧。