共计 1831 个字符,预计需要花费 5 分钟才能阅读完成。
什么是微服务架构?微服务 (MicroServices) 架构是当前互联网业界的一个技术热点,业内各公司也都纷纷开展微服务化体系建设。微服务架构的本质,是用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。该架构强调的一些准则:单一职责、协议轻量、进程隔离、数据分离、独立部署、按需伸缩。什么是 Kubernetes?Kubernetes 是 Google 开源的容器集群管理系统,其提供应用部署、维护、扩展机制等功能,利用 Kubernetes 能方便地管理跨机器运行容器化的应用,其主要功能:1) 自动化容器的部署和复制,随时扩展或收缩容器规模。2) 以集群的方式运行、管理跨机器的容器。3) 将容器组织成组,并且提供容器间的负载均衡。4) 解决 Docker 跨机器容器之间的通讯问题。5) Kubernetes 的自我修复机制使得容器集群保持健康状态。微服务架构(MSA)跟 SOA 架构有何不同?微服务架构是伴随敏捷迭代开发而兴起的,更加强调快速敏捷部署和伸缩,适用于功能拆分比较细的场景,粒度也更小、更独立。协议上基于更加轻量化的 REST API,供内部各子系统及微服务之间调用。适合业务相对独立、简单的互联网场景。强调服务的独立部署和易伸缩能力。下图是详细的对比:怎么理解服务注册和服务发现?微服务架构下,有大量的微服务需要处理。由于微服务的快速和敏捷研发,他们的位置可能会动态变化。因此在运行时需要能够发现服务所在的位置,服务发现可以解决这个问题。服务注册:注册中心有微服务的实例和位置信息,微服务在启动时向注册中心注册自己的信息,关闭时注销。其它使用者能够通过注册中心找到可用的微服务和相关信息。服务发现:为了能找到可用的服务和他们的位置信息,需要服务发现机制。有两种发现机制,客户端发现和服务端发现。WEB 应用中,比较常用的是服务端发现的方式:客户端 /API 网关把请求发送到已知位置信息的组件(比如负载均衡器)。组件去访问注册中心,找到微服务的路径信息,并跳转到相应的微服务。云运维平台如何基于 Kubernetes 实施微服务?基于平台的微服务部署变得不同于传统模式:能够独立于其他微服务发布或者取消发布;微服务可以水平扩展(某一个服务比其他的请求量大);能够实现快速的构建和发布;各微服务之间的功能不相互影响。使用基于 Kubernetes 的方式部署微服务,用户需要的只是定义服务的状态,而不是部署过程。先来看一下 Kubenetes 整体框架,如下图所示:主要包括 kubecfg、Master API Server、Kubelet、Minion 以及 Proxy。Master 定义了 Kubernetes 集群 Master/API Server 的主要声明,包括 Pod Registry、Controller Registry、Service Registry、Endpoint Registry、Minion Registry、Binding Registry、REST Storage 以及 Client, 是 client(Kubecfg)调用 Kubernetes API,管理 Kubernetes 主要构件 Pods、Services、Minions、容器的入口。Minion 负责跟踪 Kubernetes 集群中有多少台主机。Pod 负责跟踪集群中有多少 Pod 在运行,及跟 Minion 的映射关系。下面我们一起看下,基于 Kubernetes 是如何进行服务注册发现的,其详细的架构如下图所示:Kubelet 是 Kubernetes 集群中每个 Minion 和 Master API Server 的连接点,Kubelet 运行在每个 Minion 上,是 Master API Server 和 Minion 之间的桥梁,接收 Master API Server 分配给它的 commands 和 work,与持久性键值存储 etcd、file、server 和 http 进行交互,读取配置信息。Kubelet 的主要工作是管理 Pod 和容器的生命周期,其包括 Docker Client、Root Directory、Pod Workers、Etcd Client、Cadvisor Client 以及 Health Checker 组件。部署完毕后的 Kubernetes 集群,其各组件和微服务架构所提出的一些准则的对应关系,如下图所示:应用以 Docker 容器的形态,通过 Namespace 隔离的运行在定义好的 Pod 当中,各微服务之间的调用变得如此简单,再也不用为微服务的实施和治理烦恼了。