服务项目架构解读

什么是微服务

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

微服务也指一种种松耦合的、有一定的有界上下文面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件,那么它就是一个上下文边界的服务,这个定义来自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根据请求类型比如创建Podstorage类型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通过kubeapiserver间接与Etcd集群交互读取配置信息。

具体的工作如下

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

同步Pod的状态同步Pod的状态、从cAdvisor获取container infopod inforoot info、 machine info。

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

③ k8s常用命令

创建资源:

kubectl create -f yaml文件

查看资源:

kubectl get <resource_type&gt;
# 比如获取K8s集群下pod的信息
kubectl get pod
# 更加详细的信息
kubectl get pod -o wide
#获取pod更详尽的状态信息
kubectl describe pod pod名称
#查看所有的nodes
kubectl get nodes
#查看所有的namespace
kubectl get pod --all-namespaces

替换资源:

kubectreplace -f yaml文件

删除资源:

kubectl replace -f yaml文件

查看日志

kubectl logs pod名称
#如果想动态查看日志加-f

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

这些资料,对于【软件测试】的朋友来说应该最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

原文地址:https://blog.csdn.net/NHB456789/article/details/134784034

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_42234.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注