CDN 边缘节点服务

传统边缘节点服务移植K8S问题
•首先是众多地域部署问题:通常,一个边缘集群会管理许多个边缘站点(每个边缘站点内有一个或多个计算资源),中心云场景往往是一些大地域的中心机房,边缘地域相对中心云场景地域更多,也许一个小城市就有一个边缘机房,地域数量可能会非常多;在原生k8s中,pod的创建很难指定,除非使用节点亲和性针对每个地域进行部署,但是如果地域数量有十几个甚至几十个,以需要每个地域部署多个服务的deployment为例,需要各个deployment的名称和selector各不相同,几十个地域,意味着需要上百个对应的不同name,selector,pod labels以及亲和性的部署yaml,单单是编写这些yaml工作量就非常巨大;
•services服务需要与地域关联,比如音视频服务中的转码和合成服务,要在所属地域内完成接入的音视频服务,用户希望服务之间的相互调用能限制在本地域内,而不是跨地域访问。这同样需要用户同样准备上百个不同selector和name的本地域deployment专属的service的部署yaml;
•一个更复杂的问题是,如果用户程序中服务之间的相互访问使用了service名,那么当前环境下,由于service的名称各个地域都不相同,对于用户而言,原来的应用甚至都无法工作,需要针对每个地域单独适配,复杂度太高。

ServiceGroup
![3%WF$M~HJIFIT$GLL@)J9V.png
https://www.kubernetes.org.cn/7881.html

主要的软件架构模式

1.微内核模式(Microkernel Pattern)

微内核架构模式也称为插件模式。这种模式允许你将其他应用程序功能作为插件添加到核心应用程序,从而提供可扩展性以及功能分离。
微内核架构模式由两种类型的架构组件组成:核心系统和插件模块。

  • 插件模块,提供应用程序功能和自定义处理逻辑的可扩展性,灵活性和隔离性。
  • 传统上,微内核架构模式的核心系统仅包含使系统运行所需的最小功能。

微内核架构模式的最佳示例是Eclipse IDE。下载基本的Eclipse产品为你提供的只是一个编辑器功能。但是,一旦开始添加插件,它就会成为高度可定制和有用的产品。

优点:

  • 极大的灵活性和可扩展性
  • 一些插件允许在应用程序运行时添加
  • 良好的便携性
  • 易于部署
  • 能够快速响应不断变化的环境
  • 插件模块可以单独进行测试。
  • 高性能,因为你可以自定义和简化应用程序以仅包括所需的那些功能。

    应用场景

  1. 从不同来源获取数据,转换数据并将其输出到不同地方的应用程序
  2. 工作流应用程序
  3. 任务类应用程序

    2.微服务模式 (Microservices Pattern )

    当你将应用程序作为一组微服务编写时,实际上就是在编写可以协同工作的多个应用程序。其中每个微服务都有自己的职责,团队可以独立于其他微服务进行开发。这些微服务之间唯一的依赖就是通信。当微服务彼此通信时,你必须确保它们之间发送的消息能够向后兼容。

    优点:

  • 可以分别编写,维护和部署每个微服务
  • 易于扩展,因为你可以仅扩展需要扩展的微服务
  • 更新迭代应用程序的各个部分比较容易,因为它们较小,并且与其他部分的耦合较少
  • 团队成员能快速响应且富有成效
  • 高度可维护和可测试–微服务模式满足快速频繁的开发和部署
  • 可独立部署–无需与其他团队协调即可部署其服务

    应用场景:

  • 小型网站

  • 边界明确的企业数据中心
  • 快速发展的业务
  • 多部门协作的开发团队

    3.分层架构模式( Layered Architecture Pattern)

    最常见的架构模式是分层架构模式。分层体系架构模式是n层模式,其中软件系统组件根据职责被设计在不同的层中。
    这是大多数软件的传统设计方法,并且具有独立性。这意味着所有组件都是互连的,但彼此之间不依赖。分层体系架构模式的每一层在应用程序中都有特定的角色和职责。例如,显示层将负责处理用户界面交互逻辑,而业务层将负责执行与请求关联的特定业务规则。
    分层体系架构模式的强大功能之一是,组件之间职责分离。特定层中的组件仅处理与该层有关的逻辑。

    优点:

  • 高可测试性,每一层都可以单独测试。

  • 高度易于开发,因为这种模式众所周知,并且实现起来并不太复杂,而且大多数公司都通过逐层分离技能来开发应用程序,这种模式已经成为大多数业务应用程序开发的自然选择。
  • 可维护
  • 易于单独更新某一层

    应用场景:

  • 标准业务线应用程序,其功能不只是CRUD操作

  • 需要快速构建的新应用程序
  • 适用于经验不足的开发团队
  • 需要严格的可维护性和可测试性的应用