张善友——从事.NET技术开发二十余年,认证 CKAD专家,曾在腾讯工作12年,2018年创立深圳友浩达科技,专注于云原生方面的解决方案咨询。目前在深圳市友浩达科技担任首席架构师,被评为微软最有价值专家MVP, 华为云MVP,腾讯云TVP 。
▼
— 1 —
应用现代化
什么是 "Modern Application"。其实现代化应用这个概念已经被越来越被广泛的认可了。不管是阿里云,华为云,腾讯云,微软,AWS 都在推广现代化应用的理念。
简单概述就是,现代化应用是现代技术、体系结构、软件交付实践和操作流程的组合,可以引导团队更快、更频繁、更一致、更安全地交付价值,像微服务、Serverless以及事件驱动的架构这些都属于现代化应用的范畴。
应用现代化是采用现有旧应用,对其平台基础架构、内部架构和功能进行现代化改造的过程。
应用现代化的收益通常可以概括为:提高新功能交付的速度;公开现有应用的功能,通过 API 供其他服务使用;将应用的平台从本地转变为云,以达到应用规模和性能以及长期数据中心和 IT 战略的目的。
应用现代化的挑战通常归结为成本和复杂性。如果将应用从本地迁移到云而不考虑 ROI,那么就变成了为了迁移而迁移。相反,其他应用可能从更换平台或架构重塑中获得有意义收益,但如果这些应用与现有系统和基础架构严重耦合,那么现代化带来的复杂性可能会抵消这些收益。
与大多数事物一样,应用现代化成功的关键归根结底在于战略和挑选应用现代化项目,确保云、速度、性能、规模、新功能开发等方面的收益可以使特定应用通过明确的途径改善客户体验和 ROI。
旧应用通常也是单体式应用。单体式应用具有两个特性,使用户迫切希望对其进行现代化改造:很难更新,也很难扩展,而且扩展成本不菲。
由于架构原因,单体式应用难以更新。由于应用的所有组件一起交付,因此鉴于复杂性和集成方面的挑战,这种应用添加功能非常困难,而且成本高昂。
由于类似的原因,扩展非常困难,而且成本不菲。即使应用的一个组件面临负载和性能挑战,也需要扩展整个应用,以满足要求最高的单一组件的需求。这种方法会带来严重的计算资源浪费。
通过对应用进行现代化改造,分解为更多的微服务架构,使组件变小,耦合变松散,并且可以相互独立地部署和扩展。在带来自己的一系列挑战的同时,这种方法也可以实现现代化的许多核心价值。
— 2 —
应用现代化的关键技术
可使用一系列广泛的技术组合,促进大多数组织的现代化进程。
私有、混合与多云
虽然公有云是任何现代化战略的关键组成部分,但出于安全性、延迟和架构等原因,私有、混合与多云战略也至关重要。
由于种种原因,组织可能无法从数据中心直接迁移到公有云,而其他云模型可帮助解决所有的架构和策略复杂性问题,确保特定工作负载根据其独特特征部署到相应的环境中。
容器和 Kubernetes
容器和 Kubernetes 不仅在云中以通用计算的形式成为虚拟机 的挑战者,而且是混合云和应用现代化战略的关键推动因素。
容器化使应用能够以一致的轻量级方式打包,从而使应用能够在桌面、云或本地环境中以一致方式运行。这类灵活性为正在规划上云之旅的组织带来切实的好处。
在 2018 年左右大家对云原生的定义更多的是在微服务、敏捷基础设施、Devops 三个部分,而今则变成容器化、云化、云原生化,本质上个人认为是解决问题思路的转变,通过以软件工程的思维解决当前问题,比如通过容器解决应用运行环境。
在今天谈论云原生大家也不再是只谈论容器调度编排,而更多的讨论是能力,即作为一个平台你到底提供什么样的能力?比如 service mesh 提供了微服务框架原本的能力,并且同语言解耦,dapr 提供了业务可以直接用分布式语义,作为一个基础服务平台能够提供一个什么样的能力让用户都不知道你才是真的,而不是画地为牢,只关注自己的一亩三分地。
— 3 —
Dapr(https://dapr.io/) 是一个开源解决方案,目前是云原生基金会CNCF 的孵化项目。它的设计原则是 Any language、Any framework、Anywhere。
Dapr 的主要设计目标是 可移植性,即在跨云跨平台的前提下实现无厂商绑定,采用的方式是在将分布式能力抽象为标准 API,并在各种开源项目和云平台上提供这套标准 API 的不同实现,从而达到在不同平台上运行的目标,这即 Dapr 愿景中的 “anywhere”。
Dapr 出于对可移植性目标的追求,需要为应用提供一个标准的分布式能力抽象层来屏蔽底层分布式能力的具体实现方式,应用需要基于这个抽象层进行开发,才能获得跨云跨平台无厂商绑定等可移植性方面的收益。因此,在 Dapr 落地过程中,新应用需要基于 Dapr API 全新开发,老应用则进行必要改造以对接 Dapr API。
Dapr 提供 “标准 API”、“语言 SDK” 和 “Runtime”,需要应用进行适配(这意味着老应用需要进行改造),改造完成后Dapr 就可以提供跨云跨平台的可移植性,这是 Dapr 的核心价值之一。
Runtime 是个抽象概念,一般指用来支持程序运行的实现
Runtime 是在程序之外,不由程序编写者提供
Runtime 的生命周期通常和程序生命周期关联
对内层微服务隐藏实现细节,只暴露网络协议和数据契约,将外围架构的各种分布式能力以 API 的方式暴露出来,而屏蔽提供这些能力的具体实现,我们称之为逻辑抽象。
在发送事件时,Dapr 完全屏蔽了底层消息机制的具体实现,通过客户端 SDK 为应用提供发送消息的高层抽象,在 Dapr Runtime 中对接底层 MQ 实现——完全解耦应用和 MQ,这个 Dapr Runtime 本质是中间代理。
END
随着云平台,容器和k8s环境的普及,整个软件行业正在兴起云原生的应用现代化浪潮。容器作为标准化企业级应用开发的核心技术,已经在很多企业的生产和测试环境普遍使用,但是如何从虚拟机环境向容器环境的架构上的平滑迁移面临重大挑战。