课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单分析了关于云原生应用开发能够给企业发展带来的一些变化,而今天我们就要来学习一下,云原生程序架构的具体设计原则以及推广方法都有哪些。
设计为松散耦合的微服务
微服务是一种将单个应用程序开发为一套小型服务的方法,每个小型服务都在自己的进程中运行,并使用 HTTP 等轻量级协议进行通信。这些服务围绕业务功能构建,可通过全自动部署机制独立部署。
使用佳语言和框架开发
云原生应用程序的每个服务都是使用适合该功能的语言和框架开发的。云原生应用程序是多语言的。服务使用各种语言、运行时和框架。例如,开发人员可以使用 Node.js 开发基于 WebSocket 的实时流服务,同时选择 Python 来构建机器学习基础服务,并选择 spring-boot 来暴露 REST API。开发微服务的佳方式是为特定工作选择佳语言和框架。
以互动和协作为中心的 API
云原生服务使用轻量级 API,这些 API 基于表述性状态转移(REST)等协议来公开其功能。内部服务使用 Thrift、Protobuff、GRPC 等二进制协议相互通信,以获得更好的性能。
无状态且可大规模扩展
云原生应用程序将其状态存储在数据库或其他外部实体中,因此实例可以弹性伸缩。任一实例都可以处理请求。它们与底层基础架构无关,后者允许应用程序以高度分布的方式运行,并且仍然保持其状态,而与底层基础架构的弹性机制无关。从可伸缩性的角度来看,架构就像向集群添加商品服务器节点一样简单,能够扩展应用程序。
弹性作为架构核心
根据墨菲定律 - “凡是可能出错的事就一定会出错”。当我们将其应用于软件系统时,在分布式系统中,故障会发生。硬件可能会失败。网络可能会出现瞬态故障。甚至整个服务或地区可能会出现中断,但即使是这样也必须进行规划。弹性(resiliency)是指系统从故障中恢复并继续运行的能力。它不是避免故障,而是以避免停机和数据丢失的方式响应故障。弹性的目标是在发生故障后将应用程序恢复到完全正常运行的状态。弹性提供以下内容:
高可用性 - 应用程序在健康状态下继续运行的能力,无需大量停机
灾难恢复 - 应用程序从罕见但重大事件中恢复的能力:非瞬态、大规模故障,例如影响整个区域的服务中断
使应用程序具有弹性的主要方法之一是通过冗余。HA 和 DR 使用多节点集群、多区域部署、数据复制、无单点故障、持续监控等实现。
以下是实现弹性的一些策略:
重试瞬态故障 - 瞬时故障可能是由于网络连接暂时丢失、数据库连接中断或服务繁忙时超时造成的。通常只需简单重试请求即可解决瞬时故障;
跨实例的负载平衡 - 在任何地方实施集群。无状态应用程序应该能够通过向集群添加更多节点来扩展;
优雅降级 - 如果服务失败且没有故障转移路径,应用程序可以优雅降级,同时仍然提供可接受的用户体验;
限流高并发租户 / 用户 - 有时少数用户会产生过多的负载。这可能会对其他用户产生影响,从而降低应用程序的整体可用性;
使用断路器 - 断路器模式可以防止应用程序反复尝试可能发生故障的操作。断路器封装对服务的调用并跟踪近的故障数。如果故障数超过阈值,则断路器开始返回错误代码而不调用服务
采用补偿事务。补偿事务是指撤销另一个已完成事务的影响的事务。在分布式系统中,实现强大的事务一致性可能非常困难。补偿事务是一种通过使用一系列较小的单个事务来实现一致性的方法,这些事务可以在每个步骤中撤消。
测试弹性:通常弹性测试不能像测试应用程序功能一样(通过运行单元测试、集成测试等)。相反,你必须在间歇发生故障的情况下测试端到端工作负载的执行情况。例如:通过崩溃进程注入失败、过期证书、使相关服务不可用等。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!