关于后端:Sidecar-模式的机制与应用

55次阅读

共计 1892 个字符,预计需要花费 5 分钟才能阅读完成。

什么是 Sidecar 模式

将应用程序的性能划分为独自的过程,即 Sidecar 模式。Sidecar 译为摩托车的边车,用到软件架构中,Sidecar 模式指在原来的业务逻辑上再新加一个形象层。

Sidecar 模式是一种更具动态性的办法,其作为一种模式并不是 Kubernetes 的正式约定。它将应用程序的性能划分为独自的过程,运行在同一个 pod 中,Sidecar 模式容许在应用程序旁边增加性能,而无需批改利用程序代码。

Sidecar 示意图

Sidecar 的劣势

Sidecar 部署形式中,每个利用的容器旁都会部署一个或者多个伴生容器,多个容器共享存储、网络等资源。具体劣势有:

  • 将不同的性能形象到不同的层来升高微服务的代码复杂性。
  • 每个 Sidecar 能够独立降级更新。
  • 拆散业务无关性能(例如:配置文件获取),晋升代码重用度。
  • 不再须要编写雷同的第三方组件配置文件和代码,可能升高代码反复度。

Sidecar 如何工作

本文应用 serivce mesh 做为示例。来自服务的所有传入和传出网络流量均通过 Sidecar 代理,实现服务之间的流量治理、限流、熔断等策略的执行。它将网络依赖形象成 Sidecar,而服务对于网络是无感知的,只晓得所附加的 Sidecar 代理。

Sidecar 如何注入

  • 手动注入,通过手工批改工作负载的形式,增加 Sidecar 的配置。
  kind: Deployment
  apiVersion: apps/v1
  metadata:
    name: keeper
  spec:
    template:
      spec:
        volumes:
          - name: config
            emptyDir: {}
        initContainers:
          - name: install
            image: 'dockerhub.qingcloud.com/lowcode/infantry:v20211228edfdfd'
            resources: {}
            volumeMounts:
              - name: config
                mountPath: /configs
        containers:
          - name: container
            image: 'dockerhub.qingcloud.com/lowcode/keeper:alpha'
            volumeMounts:
              - name: config
                readOnly: true
                mountPath: /configs
          - name: watchdog
            image: 'dockerhub.qingcloud.com/lowcode/infantry:v202202081416'
            command:
              - /root/infantry
            volumeMounts:
              - name: config
                mountPath: /configs
  • 基于 Kubernetes 的 渐变 webhook 入驻控制器mutating webhook addmission controller 的主动 Sidecar 注入。
  kind: Deployment
  apiVersion: apps/v1
  metadata:
    name: keeper
    namespace: lowcode
    annotations:
      servicemesh.kubesphere.io/enabled: 'true'
  spec:
    template:
      metadata:
        annotations:
          sidecar.istio.io/inject: 'true'
      spec:
        containers:
          - name: container
            image: 'dockerhub.qingcloud.com/lowcode/keeper:alpha'
        restartPolicy: Always

经典应用案例

  • istio:应用当先的服务网格简化可察看性、流量治理、安全性和策略。
  • dapr:用于构建可移植且牢靠的微服务的 API。

根本术语

容器(Container)

每个运行的容器都是可反复的,蕴含依赖环境在内的规范,意味着无论你在哪里运行它,都会失去雷同的行为。容器将应用程序从底层的主机设施中解耦,这使得更加容易在不同的云或 OS 环境中部署。

Pod

Pod 的共享上下文包含一组 Linux 名字空间、控制组(cgroup)等。在 Pod 的上下文中,每个独立的利用可能会进一步施行隔离。

工作负载(Workload)

工作负载是在 Kubernetes 上运行的应用程序。无论你的负载是繁多组件还是由多个一起工作的组件形成,在 Kubernetes 中你能够在一组 Pods 中运行它。在 Kubernetes 中,Pod 代表的是集群上处于运行状态的一组容器。

公众号 :全象云低代码
官网:https://www.quanxiang.dev/
GitHub:https://github.com/quanxiang-…

正文完
 0