代码编织梦想

微服务项目架构解读

① 什么是微服务?

微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。

微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件,那么它就是一个有上下文边界的服务,这个定义来自DDD领域驱动设计

它的主要特点是组件化、松耦合、自治、去中心化,体现在以下几个方面:

  • 一组小的服务

    服务粒度要小,而每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。

  • 独立部署运行和扩展

    每个服务能够独立被部署并运行在一个进程内。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和应对变化成为可能。

  • 独立开发和演化

    技术选型灵活,不受遗留系统技术约束。合适的业务问题选择合适的技术可以独立演化。服务与服务之间采取与语言无关的API进行集成。相对单体架构,微服务架构是更面向业务创新的一种架构模式。

  • 独立团队和自治

    团队对服务的整个生命周期负责,工作在独立的上下文中,自己决策自己治理,而不需要统一的指挥中心。团队和团队之间通过松散的社区部落进行衔接。

我们可以看到整个微服务的思想就如我们现在面对信息爆炸、知识爆炸是一样的:通过解耦我们所做的事情,分而治之以减少不必要的损耗,使得整个复杂的系统和组织能够快速的应对变化。

② 微服务的优点
  • 每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求。

  • 微服务能够被小团队单独开发,这个小团队是2到5人的开发人员组成。

  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。

  • 微服务能使用不同的语言开发。

  • 微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, bamboo 。

  • 一个团队的新成员能够更快投入生产。

  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。

  • 微服务允许你利用融合最新技术。

  • 微服务只是业务逻辑的代码,不会和HTML,CSS 或其他界面组件混合。

  • 微服务能够即时被要求扩展。

  • 微服务能部署中低端配置的服务器上。

  • 易于和第三方集成。

  • 每个微服务都有自己的存储能力,可以有自己的数据库。也可以有统一数据库

k8s集群架构解读

① 什么是kubernetes

Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。Kubernetes优势:

  • 容器编排

  • 轻量级

  • 开源

  • 弹性伸缩

  • 负载均衡   

② Kubernetes架构和组件

 主从分布式架构,Master/Node

  • 服务分组,小集群,多集群

  • 服务分组,大集群,单集群

Kubernetes Master / Node : 如果大家对诸如hadoop这样的分布式集群有所了解,就会发现k8s的设计理念和其他分布式架构的非常类似的:Master节点负责接收用户的指令、分配任务以及记录各个node的情况;而node节点负责接收Master的指令,启动相应的Pod(k8s的最小执行单元,是一个Container的集合)

安装k8s时会指定Master和Node节点,部署好之后,我们通过k8s的api与Master节点进行交互。Master节点收到了我们的指令(比如新启动一个Pod),会调度Node节点去完成它们。当然,其中底层的调度策略、具体的实现细节对于我们使用者来说都是隐蔽的,不需要我们去了解。

master工作流程图

Kubecfg将特定的请求,比如创建Pod,发送给Kubernetes Client。

Kubernetes Client将请求发送给API server。

API Server根据请求的类型,比如创建Pod时storage类型是pods,然后依此选择何种REST Storage API对请求作出处理。

REST Storage API对的请求作相应的处理。

将处理的结果存入高可用键值存储系统Etcd中。

在API Server响应Kubecfg的请求后,Scheduler会根据Kubernetes Client获取集群中运行Pod及Minion/Node信息。

依据从Kubernetes Client获取的信息,Scheduler将未分发的Pod分发到可用的Minion/Node节点上。

Kubernetes Node运行节点,运行管理业务容器,包含如下组件:

1.Kubelet负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。

2.Kubernetes Proxy负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。

3.DockerNode上需要运行容器服务。

Kubelet[节点上的Pod管家]

负责Node节点上pod的创建、修改、监控、删除等全生命周期的管理 定时上报本Node的状态信息给API Server。

kubelet是Master API Server和Minion/Node之间的桥梁,接收Master API Server分配给它的commands和work,通过kube-apiserver间接与Etcd集群交互,读取配置信息。

具体的工作如下:

  1. 设置容器的环境变量、给容器绑定Volume、给容器绑定Port、根据指定的Pod运行一个单一容器、给指定的Pod创建network 容器。

  2. 同步Pod的状态、同步Pod的状态、从cAdvisor获取container info、 pod info、 root info、 machine info。

  3. 在容器中运行命令、杀死容器、删除Pod的所有容器。

③ k8s常用命令

创建资源:

kubectl create -f yaml文件

查看资源:

 
  1. kubectl get <resource_type>

  2. # 比如获取K8s集群下pod的信息

  3. kubectl get pod

  4. # 更加详细的信息

  5. kubectl get pod -o wide

  6. #获取pod更详尽的状态信息

  7. kubectl describe pod pod名称

  8. #查看所有的nodes

  9. kubectl get nodes

  10. #查看所有的namespace

  11. kubectl get pod --all-namespaces

替换资源:

kubectl replace -f yaml文件

删除资源:

kubectl replace -f yaml文件

查看日志:

 
  1. kubectl logs pod名称

  2. #如果想动态查看日志加-f

 

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/okcross0/article/details/142594168

微服务架构系列一:关键技术与原理研究_腾讯技术工程的博客-爱代码爱编程

导语:人不为己,天诛地灭这个成语中的“为”念作wéi,阳平二声,是“修养,修为”的意思。成语的意思是:如果人不修身,那么就会为天地所不容。本意并不是经常被很多人曲解的人如果不为自己着想,那么就会为天地所不容。以此为引,本文本着Stay Hungry, Stay Foolish的精神,利用闲暇时间,抛开平时工作中的常用组

交叉编译docker_全网最系统、最清晰!深入微服务架构——Docker和K8s详解-爱代码爱编程

写在前边 Docker是个伟大的项目,它彻底释放了虚拟化的威力,让应用的分发、部署和管理都变得前所未有的高效和轻松! 如果你正在为以下问题困扰,就可以考虑使用Docker来对整个工程进行重构。 资源利用率问题 不同业务场景对资源的需求是不-样的,有CPU密集型、内存密集型、网络密集型,这就可能导致资源利用率不合理的问题。在大多数的企业中,我们

k8s架构与微服务-爱代码爱编程

概述: Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等功能,提高了大规模容器集群管理的便捷性。 Kubernetes集群包含所有节点

架构师图谱·微服务&消息队列篇_java烟雨的博客-爱代码爱编程

1. 概述 “架构师图谱”是一个很宏大的命题,特别是优秀的架构师自身也是“由点到面再到图”,一点点成长积累起来,尝试写这系列文章的目的更多的是结合自身的一些经验和理解,来解读工程师和架构师所应具备的技能模型,这里会更偏向于后端技能,依赖于开源技术、云原生或者其他第三方服务。重点介绍一些技术栈、设计理念和适应场景,这些可以作为我们选型时的依据。所谓“架构即

微服务应用视角解读如何选择k8s的弹性策略-爱代码爱编程

前言 微服务架构的出现,拆分了庞大的单体应用,让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时,往往需要对一些应用组件进行扩容。K8S在应用层面提供了HPA,围绕HPA开源社区延伸出了KEDA这样的弹性组件,为微服务应用以业务指标执行弹性策略提供了实现的可能性。但HPA正常工作的一个大前提是需要保证集群资源充足,为此用户必须提前对集群扩容或

k8s--services(微服务)-爱代码爱编程

文章目录 前言一、k8s网络通信二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式(1)nodeport(2)load

k8s微服务架构_k8s 微服务架构 书-爱代码爱编程

1.关于Kubernetes 1.1 Kubernetes简介 Kubernetes(简称K8S)是一个开源的,用于管理云平台中多个主机上的容器化的应用,提供了应用部署、规划、更新、维护的一种机制。他的一个核心特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kuberne

微服务和k8s-爱代码爱编程

微服务和Kubernetes(通常简称为K8s)都是现代软件开发和部署中常用的概念和工具。它们有着各自独特的特点和作用: 1. **微服务**:    - **定义**:微服务是一种架构设计风格,将应用程序拆分为一组小型、独立的服务单元,每个服务单元都运行在自己的进程中,并通过轻量级通信机制(如HTTP API)相互通信。    - **特点**:每个微