【SpringCloud】设计原则之 DevOps 与无状态服务

一、设计原则之 DevOps

DevOps 一词来自 Development 和 Operation 的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。它要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。这就要求应用充分内聚,也方便运维和管理。这个理念与微服务理念不谋而合。 

DevOps 的出现是为了填补开发端和运维端之间的信息鸿沟,改善团队之间的协作关系。不过需要澄清的一点是,从开发到运维,中间还有测试环节。DevOps 其实包含了三个部分:开发、测试和运维。  

换句话说,DevOps 希望做到的是软件产品交付过程中 IT 工具链的打通,使得各个团队减少时间损耗,更加高效地协同工作。 

那么如何来评估 DevOps 的能力呢?可以通过能力环来对环境进行整体评估。DevOps 能力环如图所示。 

无尽头的可能性:DevOps 涵盖了代码、部署目标的发布和反馈等环节,闭合成一个完整的 DevOps 能力闭环。 

良好的闭环可以大大增加整体的产出。 

执行 DevOps 的推荐工具如表所示。 

服务注册与发现部署监控

ZooKeeper

Doozer

etcd

SmartStack

Eureka

NSQ

Serf

Spotify

DNS

SkyDNS

Consul

Cloud Foundry

Gradle

Docker

Docker Hub

Docker Machine

Kitematic

Docker Compose

Docker Swarm

AWS

Jenkins

Continuum

Hudson

Artifactory

Terraform

Grunt

OpenShift

SonarCube

Logstash

New Relic

Graphite

Mesosphere / DCOS

Winston

Hystrix

 不同的团队,情况都不相同 —— 不同的技术栈,不同的公司文化,所以要选择适合自身团队的 DevOps 工具。

 

二、设计原则之无状态服务

对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个 “状态” 数据的服务被称为有状态服务,反之称为无状态服务。 

无状态服务原则并不是说在微服务架构中不允许存在状态,其表达的真实意思是要把有状态的业务服务变无状态的计算类服务,那么状态数据也就相应的迁移到对应的 “有状态数据服务” 中。 

场景说明:例如我们以前在本地内存中建立的数据缓存、Session 缓存,到现在的微服务架构中就应该把这些数据迁移到分布式缓存中存储,让业务服务变成一个无状态的计算节点。迁移后,就可以做到按需动态伸缩,微服务应用在运行时动态增删节点,就不再需要考虑缓存数据如何同步的问题。 

无状态服务(Stateless Service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如数据库),服务器本身不存储任何信息。Server 要设计为无状态的。 

对服务器来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而对于无状态请求,服务器端所能够处理的过程必须全部来自请求所携带的信息,以及其他服务器端自身所保存的,并且可以被所有请求所使用的公共信息。 

无状态的服务程序,最有名的就是 Web 服务器。每次 HTTP 请求和以前都没有关系,只是获取目标 URL。得到目标内容之后,这次连接就被 “杀死”,没有任何痕迹。在后来的发展进程中,逐渐在无状态化的过程中,加入状态化的信息,比如 Cookie。服务端在响应客户端的请求时,会向客户端推送一个 Cookie,这个 Cookie 记录服务端上面的一些信息。客户端在后续的请求中,可以携带这个 Cookie,服务端可以根据这个 Cookie 判断请求的上下文关系。Cookie 的存在,是无状态化向状态化的一个过渡手段,通过外部扩展手段,Cookie 来维护上下文关系。 

参考资料:《微服务架构实战》—— 张锋 

一  叶  知  秋,奥  妙  玄  心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/327429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关键词优化完整 “操作 “指南

关键词优化的定义 在内容中突出相关关键词的行为,有助于将谷歌流量引向您的网站。关键词优化要求内容创建者做到以下几点: 研究并发现最佳关键词找到自然的方式在内容中突出相关词语 看看,你已经创建了一些很棒的内容。你做了研究&#xf…

【每日一题】在链表中插入最大公约数

文章目录 Tag题目来源解题思路方法一:迭代 写在最后 Tag 【迭代】【辗转相除法】【链表】【2024-01-06】 题目来源 2807. 在链表中插入最大公约数 解题思路 方法一:迭代 思路 首先需要求两个数的最大公约数,使用辗转相除法。实现代码如下…

CentOS 7.6下的HTTP隧道代理配置详解

在CentOS 7.6操作系统中,配置HTTP隧道代理需要一定的技术知识和经验。下面我们将详细介绍如何配置HTTP隧道代理,以确保网络通信的安全性和稳定性。 首先,我们需要了解HTTP隧道代理的基本原理。HTTP隧道代理是一种通过HTTP协议传输其他协议数…

git常用命令及概念对比

查看日志 git config --list 查看git的配置 git status 查看暂存区和工作区的变化内容(查看工作区和暂存区有哪些修改) git log 查看当前分支的commit 记录 git log -p commitID详细查看commitID的具体内容 git log -L :funcName:fileName 查看file…

小游戏实战丨基于PyGame的贪吃蛇小游戏

文章目录 写在前面PyGame贪吃蛇注意事项系列文章写在后面 写在前面 本期内容:基于pygame的贪吃蛇小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700188 实验环境 python3.11及以上pycharmpygame 安装pygame的命令:…

Java集合框架面试

1.说说有哪些常见集合? 集合相关类和接口都在java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。 其中Collection是集合List、Set的父接口,它主要有两个子接口:…

Java并发集合详解

第1章:引言 大家好,我是小黑,在这篇博客中,咱们将一起深入探索Java中的并发集合。多线程编程是一个不可或缺的部分,它能让程序运行得更快,处理更多的任务。但同时,多线程也带来了一些挑战&…

python总结高阶-文件

文章目录 文件操作文本文件和二进制文件1 文本文件2 二进制文件 文件操作相关模块创建文件对象open()文本文件的写入基本的文件写入操作常用编码介绍write()/writelines()写入数据close()关闭文件流with语句(上下文管理器) 文本文件的读取read([size])readline()readlines() 二…

离线部署的MinIO

网络有不同的部分,例如 DMZ、公共、私有、堡垒等。这实际上取决于您的组织和网络要求。在部署应用程序时,任何应用程序,我们都需要考虑类型以及它是否需要位于网络的特定部分。 例如,如果要部署数据库,则不希望它位于…

企业出海数据合规:GDPR中的个人数据与非个人数据之区分

GDPR仅适用于个人数据,这意味着非个人数据不在其适用范围内。因此,个人数据的定义是一个至关重要的因素,因为它决定了处理数据的实体是否要遵守该法规对数据控制者规定的各种义务。尽管如此,什么是个人数据仍然是当前数据保护制度…

CMU15-445-Spring-2023-Project #1 - 前置知识(lec01-06)

Lecture #01_ Relational Model & Relational Algebra Databases 数据库是相互关联的数据的有组织集合,对现实世界的某些方面进行建模。区别于DBMS(MySQL、Oracle)。 Flat File Strawman 数据库以CSV文件的形式存储,并由D…

呕心沥血总结的Python自动化测试面试题

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢软件测试面试题分享: 1000道软件测试面试题及答案📢软件测试实战项目分享: 纯接口项目-完…