【云原生架构】库(Library ) vs 服务(Service ) vs Sidecar(边车)

简介: 【云原生架构】库(Library ) vs 服务(Service ) vs Sidecar(边车)

所有软件应用程序都由可重用的元素组成。这些可重用元素的目标和功能从基础设施级别到安全级别到业务能力各不相同。

本文的目的是比较用于构建和部署这些可重用元素的不同方法。

1. 库

这是重用代码的最广泛使用的方法。可重用代码作为库开发和发布。在这种方法中,客户端应用程序将库定义为直接依赖项,使用提供的 API 并将其代码与主应用程序逻辑一起发送。库和主应用程序逻辑的代码作为同一进程/容器的一部分执行。

优点

  • 延迟:库中的代码与主应用程序在同一进程中执行,因此没有网络延迟。
  • 可用性:整体可用性很高,因为没有网络分区(CAP 定理)。
  • 易于使用:使用非常简单。
  • 环境上下文:库可以访问环境上下文(内存、CPU 等),因为它们是同一容器的一部分。

缺点

  • 资源:内存、CPU 等资源与主应用程序共享。这意味着库的性能会对主应用程序产生副作用。
  • 技术:库中使用的库与主要应用程序的库相同,因此,如果组织有不同的应用程序集,则每种语言都需要多个实现。
  • 可维护性:库中的任何错误修复都需要对所有客户端应用程序进行代码更改和测试。

服务

下一个最广泛使用的模式是为可重用功能定义服务。在这种方法中,应用程序使用请求-响应机制进行网络调用以调用另一个服务。服务和主要应用程序逻辑的代码在不同的 Pod/服务器实例中执行。


优点

  • 资源:应用程序和服务分开部署,因此资源不共享。资源可以独立地针对应用程序和服务进行优化。
  • 可维护性:当涉及到错误修复时,服务可以独立发布。不需要版本升级。
  • 技术:可以使用适合其目的的任何技术选择来开发服务。

缺点

  • 易用性:与库相比,服务的易用性相对较低。
  • 延迟:由于应用程序和服务是分布式的,并且调用需要网络调用,因此延迟明显更高。
  • 环境上下文:服务无法访问主应用程序的环境上下文(内存、CPU 等),因为两者都在不同的实例中独立运行。
  • 可用性:由于网络分区,总体可用性将低于库。

边车

Sidecar 模式是由两个容器组成的单节点模式。side car 和主应用程序逻辑的代码作为不同进程/容器的一部分执行,但一起部署在同一个 pod/server 实例中。


优点缺点

  • 可维护性:当涉及到错误修复时,Sidecar 可以独立发布。
  • 技术:Sidecar 可以使用适合其目的的任何技术进行开发。
  • 延迟:与服务相比,延迟较低,但高于库。这种方法的反模式是使所有可重用的组件边车,因为这将导致显着的影响性能影响。
  • 资源:应用程序和 Sidecar 部署为集合,因此资源共享,但可以为 Sidecar 单独设置资源限制,以防止 Sidecar 过度使用。这种方法的反模式是让所有可重用的组件使用边车,因为它会导致资源配置管理的巨大开销。
  • 易用性:与库相比,Sidecar 的易用性相对较低,如果 CI/CD 管道支持开箱即用,则与服务相比使用起来更简单。
  • 环境上下文:sidecar 可以访问环境上下文(内存、CPU 等),因为它是同一个 pod/server 实例的一部分。这允许边车进行应用程序性能监控等。
  • 可用性:与服务相比,可用性会更高,因为没有真正的网络分区。一般来说,可用性主要取决于主应用程序和边车之间的通信协议。例如。如果协议被触发并忘记,那么边车中的失败不会对主应用程序产生级联副作用。

概括

上面提到的方法 — Library、Service 和 Sidecar 都可以一起用于应用程序以达到预期的结果。应用程序可以使用库进行数据库调用,使用边车进行分布式日志记录,以及提供身份验证功能的服务。开发团队需要权衡利弊,然后选择正确的解决方案。

相关文章
|
6天前
|
Kubernetes Cloud Native 持续交付
云原生技术浪潮下的微服务架构实践
在数字化转型的今天,云原生技术成为推动企业IT革新的关键力量。本文将通过浅显易懂的语言和实际案例,带领读者了解云原生的核心概念、微服务架构的设计原则以及如何在云平台上高效部署和管理微服务。我们将从基础概念出发,逐步深入到微服务的生命周期管理,探讨如何在云原生生态中实现快速迭代和持续交付。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的指导和思考。
|
1天前
|
消息中间件 Java API
解密微服务架构:如何在Java中实现高效的服务通信
微服务架构作为一种现代软件开发模式,通过将应用拆分成多个独立的服务,提升了系统的灵活性和扩展性。然而,实现微服务之间的高效通信仍然是许多开发者面临的挑战。本文将探讨在Java环境中实现微服务架构时,如何使用不同的通信机制来优化服务之间的交互,包括同步和异步通信的方法,以及相关的最佳实践。
|
1天前
|
Cloud Native API 云计算
云原生架构:企业数字化转型的催化剂
【8月更文挑战第18天】在数字化浪潮不断推进的今天,云原生技术已成为推动企业IT转型的核心力量。通过深入探讨云原生架构的基本原理、优势以及实施策略,本文旨在为企业提供一个清晰的云原生应用路线图,帮助它们在竞争激烈的市场环境中获得灵活性和创新能力。文章将详细阐述云原生如何助力企业实现资源的最优配置,加速产品上市时间,并提高系统的可维护性和扩展性。
|
2天前
|
运维 Cloud Native 云计算
探索云原生架构的未来趋势与挑战
【8月更文挑战第17天】随着云计算技术的不断发展和成熟,云原生架构已经成为现代软件开发的重要趋势。本文将深入探讨云原生架构的核心概念、优势以及面临的未来挑战和发展趋势,旨在为读者提供一个全面了解云原生架构的窗口,同时展望其对未来软件开发模式的影响。
|
5天前
|
Kubernetes 安全 Serverless
Kubernetes 的架构问题之Serverless Container中提供对外服务如何解决
Kubernetes 的架构问题之Serverless Container中提供对外服务如何解决
23 5
|
6天前
|
编解码 Linux 数据安全/隐私保护
Linux平台x86_64|aarch64架构如何实现轻量级RTSP服务
为满足在Linux平台(x86_64与aarch64架构)上实现轻量级RTSP服务的需求,我们开发了一套解决方案。该方案通过调用`start_rtsp_server()`函数启动RTSP服务,并设置端口号及认证信息。支持AAC音频和H.264视频编码,可推送纯音频、纯视频或音视频流。此外,还支持X11屏幕采集、部分V4L2摄像头采集、帧率/GOP/码率调整、摄像头设备选择与预览等功能。对于音频采集,支持alsa-lib和libpulse接口。整体设计旨在提供150-400ms的低延迟体验,适用于多种应用场景。
|
6天前
|
Cloud Native 持续交付 开发者
云原生之旅:从传统到现代的架构演化
本文将通过一次虚拟的旅行,带领读者穿越回过去,探索软件架构的发展脉络。我们将从单体应用开始,一路经过服务化拆分,最终抵达云原生的乐土。这不仅是一段技术演进的历史,也是对如何在不断变化的技术浪潮中保持初心与创新的启示录。
17 2
|
7天前
|
运维 Cloud Native 持续交付
云原生时代的微服务架构演进
【8月更文挑战第12天】在数字化转型的浪潮中,企业级应用正逐渐从传统的单体架构向微服务架构转变。本文将探讨微服务架构的概念、优势以及在云原生环境下的演进路径,同时分析微服务实施过程中面临的挑战和解决策略。通过深入讨论微服务与容器化技术的结合,文章旨在为读者提供一种现代化的应用开发和部署范式。
|
2天前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
3天前
|
Cloud Native 安全 云计算
云原生技术的未来:探索服务网格和无服务器架构
随着企业数字化转型的深入,云计算已成为推动业务创新的核心力量。本文将深入探讨云原生技术的最新发展趋势,重点分析服务网格和无服务器架构如何重塑云计算的未来。通过实际案例和技术解析,揭示这些前沿技术如何解决现代应用部署的复杂性,提高系统的可伸缩性和弹性。文章旨在为读者提供云原生领域的深度见解,并激发对云技术未来发展的思考。
9 0

热门文章

最新文章