zoukankan      html  css  js  c++  java
  • 技术问答集录(六)(K8S、Docker、Service Mesh)

    K8S、Docker、Service Mesh怎么理解,解决什么问题?

    Docker

    属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。把自己的应用放入容器,容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

    Docker解决了环境依赖问题, 更轻量的虚拟化,节省了虚拟机的性能损耗。

    Docker的本质

    ·         Docker首先是一种契约,是串联了整个应用生命周期的契约,核心价值是加快软件交付的效率,提高生产力。

    ·         Docker与虚拟机的定位是本质不一样的,Docker并不是一项虚拟机技术(这其实是容器技术与虚拟机技术的区别)。它不会模拟一台机器的硬件。Docker定位于应用侧,是对应用(包括其配置,环境依赖)的封装——通过标准化的dockerfile规范,而虚拟机定位于OS层,偏重于资源管理。

    ·         Docker也可以与Chef,Jenkins做深度整合。

    ·         Docker的Hub是其应用程序的管理中心,最能够体现其应用侧的特性,每个镜像都可以命名,tag,唯一ID。

    Kubernetes

    (k8s)是一款开源的优秀的容器编排调度系统,其本身也是一款分布式应用程序。

    第一个是“容器的编排调度”,从原来的AIO的应用变成容器化应用微服务化应用,带来的好处就是服务解耦,可以快速扩展服务,带来的不好就是用户管理成本增加,kuebrnetes很好地解决了这个问题,帮助我们实现了应用层面的管理抽象,根据不同业务应用,使用不同的部署类型。

    第二个是kubernetes的一致性能力,保障API的一致性 

    系统部署Docker化后,自然需要一个平台级工具管理这些Docker容器集群。系统规模化后,如何管理这些成百上千上万的Docker资源,还要做到高效进行CI/CD,甚至还要支持一些技术性功能,比如灰度部署方案、流量平滑迁移、监控Docker健康度。Kubernetes 本身设计时高度抽象了一些共有元素,比如控制器、网络、真实部署的应用等,所以Docker成为主流趋势并成为标准后,带动了Kubernetes 的流行,基于Kubernetes来编排Docker容器和管理资源,在Kubernetes之上搭建一套自己的PasS

    Service Mesh

    微服务分层架构 ,解决服务调度,ks8解决资源调度 。

    企业搭建微服务后,成百上千,不断增长的服务规模,以及微服务本身的技术性管理,如负载均衡、限流、路由等要求,每个微服务都需要依赖一些组建客户端来实现这些重复性的建设。怎样才能让所有团队使用/维护/升级库版本?公司有上百个服务,要修改所有应用都使用上面的库吗?Service Mesh把一些技术性的诉求抽象为代理,在网络层作为一个独立的控制面,控制流量的出站和入站,通过规则来达到负载均衡、限流、路由的效果,把这些基础功能从业务应用中独立出来,统一实现和管理,升级部署替换都很方便。

    Service Mesh 是一个基础设施层,用于处理微服务中,服务与服务之间通信的一种技术。

    在 Service Mesh 的实践方案中,它是由一系列轻量级的网络代理组成的,并且这些网络代理会与咱们的应用部署在一起,特别适用于云原生应用复杂的服务拓扑中实现可靠的请求传递​,因为 Service Mesh 可以做到应用无感知。有了 Service Mesh 之后,在微服务中,服务与服务之间的通信就是靠这些网络代理模块来保障。 

    解决什么问题:

    可以实现微服务体系高效部署和运维,解决微服务架构中服务间可靠调用、服务治理等问题。

    在传统微服务架构中,随着业务越来越大,拆分的服务实例也越来越多,那么各个服务之间的依赖就变成了非常复杂的网络拓扑结构,在如此复杂的分布式部署结构下,咱们微服务中服务依赖调用和数据传输所面临的问题也成倍增加,极大的提高了服务治理的难度。

    同时,由于容器化技术的成熟和规模化,微服务都会采用容器化,并朝着云原生应用的方向发展。而传统的微服务架构中,虽然也有服务治理的组件,但是这些组件大多需要在应用代码里进行集成,这是不符合云原生应用的思想的。因此,大家急需一个标准化,能高效部署和运维的微服务体系方案,Service Mesh 就应运而生了,其设计的目的就是用来解决微服务架构中服务间可靠调用、服务治理等问题。

    而Service Mesh正是有下列特点来解决痛点:

    • 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;
    • 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可;
    • 对应用透明,Service Mesh组件可以单独升级;

    解决了什么问题?

    1.     Docker是一个开源的容器引擎,K8S是docker集群的管理工具,Service Mesh服务网格是一种微服务架构,将底层那些难以控制的网络通讯统一管理,可基于Docker和K8S实现。

    2.     这些技术使用边车模式,有效的分离了系统控制和业务逻辑,可以将所有的服务进行统一管理,让开发人员更专注于业务开发,显著的提升开发效率。将流量控制、服务注册、服务发现、服务限流、服务熔断等提取成一个标准化的 Sidecar ,通过 Sidecar 代理来与其他系统进行交互,这样可以大大简化业务开发和运维。

    3.     Service Mesh 有如下几个特点:

    a)       应用程序间通讯的中间层

    b)      轻量级网络代理

    c)       应用程序无感知

    d)      解耦应用程序的重试/超时、监控、追踪和服务发现

    Service Mesh 将底层那些难以控制的网络通讯统一管理,诸如:流量管控,丢包重试,访问控制等。而上层的应用层协议只需关心业务逻辑即可。Service Mesh 是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。

    1、Docker解决了运行环境和配置问题,方便发布,也就方便做持续集成。

    一个程序要跑起来,需要以下几部分:代码 + 运行环境 + 配置 + 依赖的服务。Docker image中包含了程序需要的所有的运行时依赖,将整个运行时环境打包放到image中,迁移发布更加方便。

    2、更轻量的虚拟化,节省了虚拟机的性能损耗。

    虚拟机的出现,带来了很多便利,它实现了资源隔离,不同资源之间不会相互影响,但同时也带来了一些不便之处,比如创建速度慢,迁移起来麻烦(因为中间加了一层guest os),并且有性能损耗,一个高配的机器也就创建十几个虚拟机,太浪费资源。

    相比虚拟机的重量级虚拟化方案,Docker利用Linux内核级的一些隔离方案等成熟的技术,让虚拟化变得轻量级,其可以瞬间完成创建一个container,达到秒级!cpu指令集不再被翻译执行,性能损耗也非常少。

  • 相关阅读:
    SqlServer实现Oracle的wm_concat()函数功能
    WebApi异常过滤器
    C#DataTable转List<Models>
    C#访问Oracle或SqlServer数据库遍历添加参数
    C#+.netFrameWork4.5.2+WebAPI+Jquery+Ajax跨域请求问题
    VS2015+Windows服务简易教程+文件夹监听
    C# rpt 批量打印写法
    C#model序列化xml
    oracle em无法连接数据库实例
    childNodes与children
  • 原文地址:https://www.cnblogs.com/fanBlog/p/13618909.html
Copyright © 2011-2022 走看看