高可用设计模式-边车设计模式

边车设计模式

将应用程序的组件部署到单独的流程或容器中,以提供隔离和封装。这种模式还可以使应用程序由异构组件和技术组成。

这种模式被命名为Sidecar,因为它类似于附在摩托车上的Sidecar。在模式中,sidecar附加到父应用程序,并为应用程序提供支持特性。sidecar还与父应用程序共享相同的生命周期,与父应用程序一起创建和退出。sidecar模式有时称为sidekick模式,是一种分解模式。

背景和问题

应用程序和服务通常需要相关的功能,例如监视、日志记录、配置和网络服务。这些外围任务可以作为单独的组件或服务实现。

如果将它们紧密集成到应用程序中,它们可以与应用程序运行在相同的进程中,从而有效地使用共享资源。但是,这也意味着它们没有很好地隔离,这些组件中的一个中断可能会影响其他组件或整个应用程序。此外,它们通常需要使用与父应用程序相同的语言来实现。因此,组件和应用程序之间有着密切的相互依赖关系。

如果将应用程序分解为服务,则可以使用不同的语言和技术构建每个服务。虽然这提供了更多的灵活性,但这意味着每个组件都有自己的依赖关系,并且需要特定于语言的库来访问底层平台和与父应用程序共享的任何资源。此外,将这些功能部署为单独的服务可能会增加应用程序的延迟。管理这些特定于语言的接口的代码和依赖关系也会增加相当大的复杂性,特别是在托管、部署和管理方面。

解决方案

将一组内聚的任务与主应用程序放在一起,但是将它们放在它们自己的流程或容器中,为跨语言的平台服务提供一个同构接口。


Sidecar pattern.jpeg

sidecar服务不一定是应用程序的一部分,而是连接到应用程序的。它将指向父应用程序所在的位置。Sidecars支持与主应用程序一起部署的流程或服务。在摩托车上,车斗附在一辆摩托车上,每辆摩托车都可以有自己的车斗。同样,sidecar服务与其父应用程序的命运相同。对于应用程序的每个实例,都会部署一个sidecar实例并将其托管在其旁边。

使用边车模式的优点包括:

  • 在运行时环境和编程语言方面,sidecar独立于其主要应用程序,因此不需要为每种语言开发一个sidecar。
  • sidecar可以访问与主应用程序相同的资源。例如,sidecar可以监视sidecar和主应用程序使用的系统资源。
  • 由于它接近主应用程序,因此在它们之间通信时没有明显的延迟。
  • 即使对于不提供可扩展性机制的应用程序,也可以使用sidecar来扩展功能,方法是将其作为自己的进程附加到与主应用程序相同的主机或子容器中。

sidecar模式通常与容器一起使用,称为sidecar容器或sidekick容器。

问题和注意事项

  • 考虑将用于部署服务、流程或容器的部署和打包格式。容器特别适合于侧车模式。
  • 在设计sidecar服务时,要仔细考虑进程间通信机制。尝试使用与语言或框架无关的技术,除非性能要求使其不切实际。
  • 在将功能放入sidecar之前,请考虑作为单独的服务或更传统的守护进程,它是否会工作得更好。
  • 还要考虑是否可以将该功能实现为库或使用传统的扩展机制。特定于语言的库可能具有更深层次的集成和更少的网络开销。

何时使用此模式

如下情况使用边车设计模式:

  • 您的主要应用程序使用一组异构的语言和框架。位于sidecar服务中的组件可以由使用不同框架用不同语言编写的应用程序使用。
  • 组件由远程团队或其他组织拥有。
  • 组件或特性必须与应用程序位于同一主机上
  • 您需要一个服务,它共享主应用程序的整个生命周期,但是可以独立地更新。
  • 您需要对特定资源或组件的资源限制进行细粒度控制。例如,您可能希望限制特定组件使用的内存数量。您可以将组件部署为一个sidecar,并独立于主应用程序管理内存使用。

如下业务场景不适合边车设计模式:

  • 当进程间通信需要优化时。父应用程序和sidecar服务之间的通信包括一些开销,尤其是调用中的延迟。对于聊天接口来说,这可能不是一个可以接受的折衷。
  • 对于小型应用程序,为每个实例部署sidecar服务的资源成本不值得隔离。
  • 当服务需要以不同于或独立于主要应用程序的方式伸缩时。如果是这样,最好将该特性部署为单独的服务。

场景举例

  • 基础设施的API。基础设施开发团队创建与每个应用程序一起部署的服务,而不是访问基础设施的特定于语言的客户机库。该服务作为一个sidecar加载,并为基础设施服务提供一个公共层,包括日志记录、环境数据、配置存储、发现、健康检查和watchdog服务。sidecar还监视父应用程序的主机环境和进程(或容器),并将信息记录到集中的服务中。
  • HAProxy NGINX /管理。使用sidecar服务部署NGINX,该服务监视环境状态,然后更新NGINX配置文件,并在需要更改状态时回收流程。
  • 大使的双轮马车。部署大使服务作为侧车。应用程序通过大使调用,大使处理请求日志记录、路由、断路和其他与连接相关的特性。
  • 将代理。将NGINX代理放在node.js服务实例前面,处理服务的静态文件内容。

欢迎关注微信公众号-架构师玄学之路
作者:胡弦 架构师,高级技术专家

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容