---
title: 云原生与能力让渡
date: '2019-05-09 19:01:52'
draft: false
summary: 所谓云原生，真正要回答的还是哪些能力值得抽象并托管给平台，哪些能力必须留在应用内部。
slug: cloud-native-means-delegating-more-to-the-platform
syndication:
- platform: Weibo
  url: https://weibo.com/1648815335/4370113492662203
tags:
- cloud-native
- kubernetes
- akka
topics:
- programming
type: post
---

仔细读了下 @邓草原 那天转的 Akka 十周年杂志，其中有篇 Akka 和 Kubernetes 结合实现云原生应用的文章很不错。

曾经给云原生应用下过一个定义：

让渡一部分功能给云，以实现弹性，高可用，故障恢复，降低研发运维成本的应用。

但到底哪些功能可以抽象，标准化，然后托管给平台？Kubernetes 主要实现了运维和资源的标准化，ServiceMesh 在网络层切了一个面，抽走了一部分，但离完全解决弹性（包括 elastic 和 resilient）问题还有距离。

就拿流量控制和自动伸缩来说，平台如何知道应用抗不住了，需要扩容了呢？现在主要是运维监控层面的一些粗指标，还要依赖运维经验。

如果应用的流量能像水一样，有一种  back-pressure 机制，就好办了。水管某个地方突然堵了，压力会向后传导，入口处流入的就慢了。但软件系统中如何模拟这种 back-pressure 机制呢？用什么指标呢？最好的还是消息，消息的堆积可以明确给一个量化指标。

所以这个问题的解决不仅依赖平台，还要依赖应用的架构方式的改变，应用最好是一种消息驱动的响应式（Reactive）系统。而 Akka 和 Kubernetes 的结合则提供了一种可能的方案。

<!-- WEIBO_MEDIA_START -->
## 原微博中的媒体

![](./weibo-4370113492662203-1.jpg)

![](./weibo-4370113492662203-2.jpg)
<!-- WEIBO_MEDIA_END -->
