TOC

云原生

摘自维基百科(en) Cloud native computing 词条:

Cloud native computing is an approach in software development that utilizes cloud computing to "build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds". Technologies such as containers, microservices, serverless functions and immutable infrastructure, deployed via declarative code are common elements of this architectural style.
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
Frequently, cloud-native applications are built as a set of microservices that run in Docker containers, and may be orchestrated in Kubernetes and managed and deployed using DevOps and Git CI workflows (although there is a large amount of competing open source that supports cloud-native development). The advantage of using Docker containers is the ability to package all software needed to execute into one executable package. The container runs in a virtualized environment, which isolates the contained application from its environment.

机翻一下:

云本地计算是软件开发中的一种方法,它利用云计算来“在公共、私有和混合云等现代动态环境中构建和运行可伸缩的应用程序”。通过声明性代码部署的容器、微服务、无服务器功能和不可变基础设施等技术是这种体系结构风格的常见元素。
这些技术使弹性、可管理和可观察的松散耦合系统成为可能。结合健壮的自动化,它们允许工程师以最少的工作量频繁地、可预测地进行高影响的更改。
通常,云本地应用程序是作为一组运行在 Docker 容器中的微服务构建的,并且可能在 Kubernetes 中进行编排,并使用 DevOps 和 Git CI 工作流来管理和部署(尽管有大量支持云本地开发的竞争性开源软件)。使用 Docker 容器的优点是能够将所有需要执行的软件打包到一个可执行包中。容器在虚拟化环境中运行,这将包含的应用程序与其环境隔离开来。

云原生到底是什么?

网络上各种定义,都说是引用自某个大公司或者知名组织,看得人眼花缭乱、云里雾里。

我还是坚持我一贯的态度,大部分名词都是不同利益团体炒作出来的营销概念,世界不会因这些概念而美好半分,我们应该透过现象看本质。

将一个复杂的单一系统按照功能特性合理拆分成多个独立的服务,他们再通过网络连接形成一个有机整体。这是一种分而治之的设计模式,甚至可以说这是人类解决问题的一种基本思想。

在软件开发领域,这种思想有很多名字,比如模块化、面向服务 SOA。

微服务

随着技术的发展,尤其是 DevOps 和容器化的发展,微服务和云原生的概念出来了。我基本上认为这两个概念是一个东西。

根据维基百科的资料,最早是 2014 年有人创造了 “微服务” 这个新词。我至今还没见过那个权威机构给出了一个准确的、大家都信服的定义。国内的各种文档中,要么是在阐述 SOA 的概念,要么就是后来云原生的那套组合拳。

云原生这个概念就比微服务实在得多,它有权威的机构 CNCF 给出明确的定义(大杂烩),然后又提供一套工具链。可以非常明确的是,云原生是一种软件开发方法论,是云计算和容器化时代的一种 SOA 服务构建的实践。

我看大部分资料都引用了 Pivotal 公司(云原生概念提出者)或者 CNCF 组织的定义。根据这些定义,云原生就是一些现有开发经验的组合,比如 CI/CD、DevOps 等,只有容器化(主要是容器编排)的玩法是个比较新的东西,这些研究比较有价值。再一个就是 CNCF 阵营的体量导致这套东西可以标准化,所以现在发展非常迅猛,我非常看好。

我对云原生的印象

  1. SOA: 合理拆分服务
  2. 服务运行在容器中
  3. K8S: 容器弹性编排
  4. 服务之间通过 RPC / HTTP 通信
  5. 组件
    1. 负载均衡
    2. API 网关
    3. 服务注册 & 服务发现
    4. 配置中心
    5. 认证中心
    6. 日志分析 ELKStack
    7. 服务监控
    8. 分布式事务
    9. 远程调用(HTTP/RPC)
  6. 自带服务管理策略与实践,比如:
    1. 监控
    2. 链路追踪
    3. 限流 & 熔断 & 降级

PS: CNCF 项目中可能除了 K8S 会比较常青,其他的项目都可能是会长江后浪推前浪。

就目前来看,我觉得云原生还有待观察,还是 Spring Cloud 为代表的分布式开发框架比较香。

主要是现在的云原生感觉远没有达到他们宣传的那么棒。

我想像中的云原生:

  1. 服务只需专注自己的业务逻辑,不用考虑服务器架构
    1. SpringCloud 这样的重量级框架(程序中掺杂太多业务无关代码)是没有未来的,但是,在可以预见的很长一段时间内,会继续存在下去
  2. 服务通过标准的方法来操作存储、数据库、缓存、消息队列
  3. 服务应该是面向接口的,根据注册的接口调用就行

Spring Cloud

SpringCloud-VS-K8S