原则|我对云原生软件架构的观察与思考
文章插图
本系列文章:
前言
在《解读云原生基础设施》一文中,我们谈到了云原生计算包含三个维度的内容:云原生基础设施,软件架构和交付与运维体系,本文将聚焦于软件架构层面。
“Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. ”- 维基百科
个人理解,软件架构主要目标是解决下列挑战:
云原生应用架构的目标是构建松耦合、具备弹性、韧性的分布式应用软件架构,可以更好地应对业务需求的变化和发展,保障系统稳定性,本文将分享一下在这个领域的观察和思考。
缘起 - 12 要素应用
2012 年,Heroku 创始人 Adam Wiggins 发布十二要素应用宣言。它为构建一个优雅的互联网应用,定义了需要遵循的一些基本原则和方法论,也广泛影响了众多的微服务应用架构。十二要素重点关注:应用程序的健康成长,开发者之间的有效的协作,以及避免软件架构腐化的影响。其内容在今天也值得每个同学认真体会。
12 要素应用为我们提供了很好的架构指导,帮助我们:
松耦合架构设计
微服务的核心理念是,系统中的各个服务可被独立开发、独立部署,独立升级,各个服务之间是松耦合的。云原生应用架构理念是进一步强调架构的松耦合,降低服务之间相互依赖的程度。
1. API 优先的应用架构设计
在面向对象的软件架构中,最重要的是定义对象以及对象的接口契约。SOLID 原则是最被人广为熟知的设计原则:
将以上五个原则的英文首字母拼在一起就是 SOLID 原则,这也是帮助我们构建高内聚,低耦合、具备柔性的应用架构。在分布式微服务应用架构中,API 优先是契约优先(Contract First)的自然拓展。
API 应该是被优先设计的:我们知道用户需求是复杂多变的,比如从桌面到移动端,应用的展现方式和操作流程都有可能不同;然而业务逻辑的概念模型和服务交互是相对稳定的。相对而言,API 的接口是更加稳定的,而具体的实现是可以迭代实现和持续变化的。定义良好的 API 可以更好保障应用系统的质量。
API 应该是声明式,可描述/自描述的:通过规范化的描述,API 易于沟通、易于理解、易于验证,简化开发协同。支持服务的消费者和提供者并行开发,加速开发周期。支持不同的技术栈的实现,比如对于同一个 API 接口,其服务实现采用 Java 。前端应用可以使用 JavaScript ,而服务器端应用可以使用 Golang 进行服务调用等等。这样可以让开发组织可以根据自己的技能栈和系统要求灵活选择合适的技术。
API 应该具备 SLA:API 作为服务间的集成界面,与系统的稳定性息息相关。SLA 应该作为 API 设计的一部分,而不是部署后再考虑。在分布式系统中,稳定性风险无处不在,通过 API 优先的设计模式,我们对独立的服务进行稳定性架构设计、容量规划;我们还可以对独立的 API 进行故障注入、稳定性演练,来消除系统性的稳定性风险。
在 API 领域,最重要的趋势是标准化技术的崛起。gRPC 是 Google 开源的的高性能、通用的、平台无关的 RPC 框架。它采用分层设计,其数据交换格式基于 Protobuf (Protocol Buffers) 协议开发,具备优秀的序列化/反序列化效率,也支持众多开发语言。在传输层协议, gRPC 选择了 HTTP/2,相较于 HTTP/1.1,其传输效率有了很大提升。此外 HTTP/2 作为一个成熟的开放标准,具备丰富的安全、流控等能力,同时拥有良好的互操作性。gRPC 不仅可以用于 Server 端服务调用,也可以支持浏览器、移动 App 和 IoT 设备与后端服务的交互。gRPC 在功能上已经具备完整的 RPC 能力,也提供了扩展机制来支持新的功能。
在 Cloud Native 的潮流下,跨平台、跨厂商、跨环境的系统间互操作性的需求必然会催生基于开放标准的 RPC 技术,而 gRPC 顺应了历史趋势,得到了越来越广泛地应用。在微服务领域, Dubbo 3.0 宣布了对 gRPC 协议的支持,未来我们也会看到更多的微服务架构基于 gRPC 协议开发,并提供良好的多语言支持。此外,在数据服务领域,gPRC 也成为一个优秀的选择,大家可以参考 Alluxio 的文章。
此外在 API 领域 Swagger (OpenAPI 规范),GraphQL 都是大家值得关注的开放标准。大家根据自己的业务诉求灵活选用,本文不再赘述。
2. Event Driven Architecture 的崛起
谈事件驱动架构 (EDA - Event Driven Architecture),我们首先来解释一下什么是事件。事件是指对已经发生的事情、状态变化等的记录。它们是不可变的(无法更改或删除),并且按其创建顺序排序。相关各方可以通过订阅已发布的事件来获取有关这些状态变化的通知,然后使用所选择的业务逻辑根据这些信息采取操作。
- 浙江省|浙江的五大富豪,四位做过中国首富,仅马云的阿里就1年纳税366亿
- iOS|恒创科技:Linux日本云服务器安全设置的基本步骤
- m1|亚马逊 AWS 云服务添加苹果 M1 Mac mini 实例
- 腾讯音乐|市值超410亿港元,网易云音乐到底值不值?
- 马云|看看马云的儿子马元坤,再看看女儿马雪,网友:基因太强大了!
- 腾讯云|白银市政府与腾讯云达成战略合作
- 卡尔蔡司镜头|vivoX60Pro评测:蔡司+二代微云台,好看的照片信手拈来!
- 字节旗下火山引擎发布全系云产品,计划3年服务10万用户|最前线 | 字节
- 马云|媒体采访马云:如此富有为何从不“花天酒地”?马云回答引人深思
- 分布式|四川农信携手阿里云打造分布式核心系统