【微服务】:微服务最佳实践

6f6273fabc966073696b27962010f559.jpeg

关键需求

  • 最大限度地提高团队的自主性:创建一个团队可以完成更多工作而不必与其他团队协调的环境。

  • 优化开发速度:硬件便宜,人不是。使团队能够轻松快捷地构建强大的服务。

  • 关注自动化:人们犯错误。更多的系统操作也意味着更多的事情可能出错。自动化一切。

  • 在不影响一致性的情况下提供灵活性:让团队能够自由地为自己的服务做正确的事情,但是有一套标准化的构建模块可以长期保持健康。

  • 为弹性而构建:由于多种原因,系统可能会失败。分布式系统引入了一整套新的故障场景。确保采取措施尽量减少影响。

  • 简化的维护:而不是一个代码库,你会有很多。有准则和工具来确保一致性。

挑战:一次切换系统

  • 从一个单一的体系结构切换到一个微服务体系结构是不是你可以一次完成的。如果你有一个单一的服务器,那么你可能会在其周围紧紧地建立一个存储库,部署任务,监视和其他许多事情。改变这一切并不容易。

  • 如果一个公司从来没有使用微服务的经验,那么即使是一个绿地项目也会比他们想象的更难。

  • 保留单片服务器,但是任何新的服务都是作为一个微服务来开发的,所以最终的东西都是从原来的服务器中流出来的,直到最终成为我们最老,最大的微服务。

挑战:拆分系统

  • 自项目开始以来,如果将组件和服务粘合在一起,将其隔离起来可能相当具有挑战性。

  • 您需要定义各个部分之间的交互和流程。如果你没有很好的定义,你的系统会产生更多的问题。

  • 没有模式; 将系统划分为微服务有许多不同的规则,但是没有人会告诉你如何在应用程序中使用它。没有两个相同的微服务。

  • 将整体系统分解成微服务的唯一方法是首先检查整体系统,以查看它最“伤害”的位置。系统的这些部分应该被取出并转换成微服务。

  • 如果你没有适当的监控,你将不会看到你的系统是如何工作的。监视所有部分是如何工作的,以及他们在做什么。如果您监控您的系统,您可以轻松检测并解决问题。

  • 渐进地,逐渐式是模块分离单片系统的最好方法。如果你想一次做所有事情,你一定会失败的。

挑战:组织认同

  • 获得组织认同可能是最难的部分。

  • 这不是一个技术决定。您需要清楚说明微服务架构的好处,以说服您的公司重新分配资源。在这样的变革被组织接受之前,这是一个漫长而乏味的过程,组织规模越大,决策的时间就越长。

  • 说服你的组织改用微服务的最佳方式是将系统中的一个非关键部分转换为微服务。通过这种方式,您可以使用真正的,可用的微服务来展示其优势。

挑战:团队

  • 团队本身面临着最大的挑战,因为它需要不同的思考。

  • 开发人员必须花更多的时间来了解什么是端到端场景。他们需要熟悉这些技术,可能需要转换思维方式,这需要时间。

  • 对于在一个可以进行端到端测试的世界中工作的人来说,这是不舒服的,现在你突然把它分解成小块。这更多的是文化上的变化。

  • 从非常小的东西开始,在那里你可以真正受益,并选择一些不是你的应用程序的关键部分。获得一个小团队,并将应用程序的这一部分转换为微服务。证明它实际上是更好的,并逐步向组织扩展。

  • 避免将整个系统一次切换到微服务。

Best Practices:平台:

  • 您的平台是一套与支持工具相结合的标准

  • 微服务架构转换复杂性。而不是一个复杂的系统,你有一堆简单的服务与复杂的交互。我们的目标是保持复杂性可控。

Best Practices:服务要点

  • 独立开发和部署服务

  • 服务应该有他们自己的私人数据

  • 保持服务小到足以保持专注和足够大以增加价值

  • 将数据存储在数据库中,而不是短暂的服务实例

  • 最终的一致性是你的朋友

  • 尽可能将工作卸载到异步工作人员

  • 保持在一个共同的地方完成所有服务的帮助文档

  • 分配负载平衡器的工作

  • 网络边界上的聚合服务可以转化为外部世界

  • 分层安全,不要编写自己的加密代码!

Best Practices:服务交互

  • 通过HTTP传输数据,使用JSON或protobuf的进行序列化

  • 对于HTTP服务,500系列错误或超时意味着服务不健康

  • API应该简单而有效

  • 服务发现机制使服务很容易找到对方

  • 倾向于集权协调员的分散交互

  • 版本所有的API,在相同的服务实例中共存多个版本

  • 在服务超载之前,使用资源限制来快速失败

  • 连接池可以减少突发请求高峰对下游影响

  • Timouts最大限度地减少下游延误和失败的影响

  • 容忍不相关的下游API更改

  • 断路器在艰难时期给下游服务中断

  • 关联ID可帮助您跟踪跨服务日志的请求

  • 确保你能保证最终的一致性

  • 对所有API调用进行身份验证可以更清楚地了解使用模式

  • 使用随机重试间隔自动重试失败的请求

  • 只能通过暴露和记录的API与服务进行交谈

  • 经济力量鼓励有效使用可用资源

  • 客户端库可以处理所有的基础知识,因此您可以专注于重要的事情

Best Practices:开发

  • 为所有服务使用通用的源代码管理平台

  • 要么模仿开发或使用孤立的云开发环境

  • 推动工作代码经常主线

  • Release更少,Release更快

  • 警告:共享库很难更新

  • 您的服务模板应该覆盖基本原理

  • 简单的服务也很容易替换

Best Practices:部署

  • 使用系统映像作为部署包

  • 有办法自动将任何版本的任何服务部署到任何环境

  • 功能标志将代码部署与功能部署分开

  • 配置应该在部署包之外进行管理

Best Practices:运维

  • 在一个地方管理所有日志

  • 为所有服务使用通用监控平台

  • 无状态服务很容易自动扩展

  • 无法在您的平台上运行的相关服务也需要自动化

Best Practices:人

  • 服务团队开发,部署和运营自己的服务

  • 团队在日常运营中应该是自主的

本文 :https://architect.pub/microservices-best-practices
讨论:知识星球【首席架构师圈】或者加微信小号【ca_cto】或者加QQ群【792862318】
公众号
 
【jiagoushipro】
【架构师酒馆】
精彩图文详解架构方法论,架构实践,技术原理,技术趋势。
我们在等你,赶快扫描关注吧。
微信小号
 
【ca_cea】
50000人社区,讨论:企业架构,云计算,大数据,数据科学,物联网,人工智能,安全,全栈开发,DevOps,数字化.
 

视频号【架构师酒馆】
1分钟快速了解架构相关的基本概念,模型,方法,经验。
每天1分钟,架构心中熟。

知识星球【首席架构师圈】向大咖提问,近距离接触,或者获得私密资料分享。 

7ef461823391fc4e728159970bb67654.jpeg

喜马拉雅【超级架构师】路上或者车上了解最新黑科技资讯,架构心得。【智能时刻,架构君和你聊黑科技】
微博【架构师酒馆】智能时刻
哔哩哔哩【架构师酒馆】

抖音【cea_cio】架构师酒馆

快手【cea_cio_cto】架构师酒馆

小红书【cea_csa_cto】架构师酒馆 

网站CIO(首席信息官)https://cio.ceo
网站CIO,CTO和CDOhttps://cioctocdo.com
网站架构师实战分享https://architect.pub   
网站程序员云开发分享https://pgmr.cloud
官网行天智能科技咨询公司https://xingtian.ai
网站开发者闲谈https://blog.developer.chat
网站首席隐私官内参https://cpo.work
网站首席安全官内参https://cso.pub    
网站CIO内参https://cio.cool
网站CDO内参https://cdo.fyi
网站CXO内参https://cxo.pub
网站首席架构师社区https://jiagoushi.pro

谢谢大家关注,转发,点赞和点在看。

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

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

相关文章

v-show用法

v-show是Vue.js中的一个指令&#xff0c;用于控制元素的显示和隐藏。v-show指令根据表达式的值来决定元素是否显示&#xff0c;当表达式的值为true时&#xff0c;元素将显示&#xff1b;当表达式的值为false时&#xff0c;元素将隐藏。 v-show的用法如下&#xff1a; <div…

蓝牙物联网室内定位系统解决方案

目前国内外室内定位技术较多&#xff0c;常见的有无线局域网(Wireless Fidelity,WiFi)、射频识别(Radio FrequencyIdentification,RFID)、蓝牙低功耗(Bletooth Low EnergyBLE)、超宽带(Ultra Wide BandUWB)技术等。近几年智能设备的迅速发展和蓝牙设备的生产制造成本越来越低&a…

信号与线性系统翻转课堂笔记8——周期信号的频谱

信号与线性系统翻转课堂笔记8——周期性信号的频谱 The Flipped Classroom8 of Signals and Linear Systems 对应教材&#xff1a;《信号与线性系统分析&#xff08;第五版&#xff09;》高等教育出版社&#xff0c;吴大正著 一、要点 &#xff08;1&#xff0c;重点&#…

云卷云舒:云原生业务应用成熟度模型

笔者最近学习了信通院发布的《云原生应用成熟度的评估模型》&#xff0c;做如下解读&#xff1a; 一、概述 云原生业务应用成熟度模型从企业业务应用基础设施域、应用研发域以及服务治理域等三个能力域二十个过程域综合评估企业业务应用在弹性、高可用、自愈性、可观测性以及…

OpenCV利用HSV颜色区间分离不同物体

需求 当前有个需求是从一个场景中将三个不同的颜色的二维码分离出来&#xff0c;如下图所示。 这里有两个思路可以使用 思路一是通过深度学习的方式&#xff0c;训练一个能够识别旋转边界框的模型&#xff0c;但是需要大量的数据进行模型训练&#xff0c;此处缺少训练数据&a…

CentOs 安装MySQL

1、拉取安装包 wget --no-check-certificate dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 成功拉取 2、安装 yum install mysql-community-release-el6-5.noarch.rpm 过程中可能需要你同意一些东西&#xff0c;y 即可 然后稍微检查一下 yum repolist enabled…

基于 OpenCV 的车辆变道检测,计算机视觉+图像处理技术

本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道&#xff01;大家一定听说过使用 OpenCV 的 haar 级联文件可以检测到面部、眼睛等&#xff0c;但是如果目标是汽车&#xff0c;公共汽车呢&#xff1f; 01. 数据集 …

前端工程注入版本号

文章目录 一、前言二、webpack三、vite四、最后 一、前言 容器化时代&#xff0c;当页面出现问题时&#xff0c;如果你的新版本有可能已经修复了&#xff0c;那样你再排查它就没有意义了。为什么不一定是最新版本呢&#xff1f;一是可能是缓存作祟&#xff0c;二是可能运维成员…

<JavaEE> 基于 TCP 的 Socket 通信模型

目录 一、认识相关API 1&#xff09;ServerSocket 2&#xff09;Socket 二、TCP字节流套接字通信模型概述 三、回显客户端-服务器 1&#xff09;服务器代码 2&#xff09;客户端代码 一、认识相关API 1&#xff09;ServerSocket ServerSocket 常用构造方法ServerSocke…

互联网+建筑工地源码,基于微服务+Java+Spring Cloud +Vue+UniApp开发

一、智慧工地概念 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;然后以物联网、移动互联网技术为基础&#xff0c;充分应用BIM、大数据、人工智能、移动通讯、云计算、物联网等信息技术&#xff0c;通过人机交互、感知、决策、执行和…

使用Python自己写了一个Renpy 汉化插件

之前看了很多教程都是Renpy怎么解包、怎么创建翻译文件&#xff0c;对翻译过程没有过多讲解&#xff0c;就根据翻译文件写了一个小程序&#xff0c;如果需要的可以自行下载使用。 使用方法&#xff1a; 1.按照正常unrpa的解包方式renpy进行解包&#xff1b; 2.使用renpy-sdk…

React 的 Suspense 和 ErrorBoundary 这关系也能有?

Suspense 组件想必大家都用过&#xff0c;一般是和 React.lazy 结合用&#xff0c;用来加载一些异步组件。 比如这样一个组件&#xff1a; // src/Aaa.jsx export default function Aaa() {return <div>aaa</div> }就可以在另一个组件里用 lazy Suspense 异步加…

C++之数据类型转换(全)

截止C20标准模板库同时提供了高级数值转换函数和低级数值转换函数&#xff0c;下面就仔细讲解一下这些数值转换函数的用法 一、数值转换 1、高级数值转换函数 std 名称空间包含很多辅助函数&#xff0c;以便完成数值和字符串之间的转换&#xff0c;它们定义在<string>中…

测试开发体系介绍——测试体系介绍-L3

目录&#xff1a; 测试框架体系TDDDDTBDDATDD介绍 测试框架是什么&#xff1f;测试框架的价值&#xff1a;测试框架的收益&#xff1a;常见测试框架类型&#xff1a;TDDBDDBehaviorDrivenDevelopmentATDDAcceptanceTestDrivenDevelopmentMBTModelBasedTestingDDTDataDrivenTes…

案例147:基于微信小程序的酒店管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Golang 泛型实现原理

文章目录 1.有 interface{} 为什么还要有泛型&#xff1f;2.泛型实现原理2.1 类型参数泛型函数泛型数据结构 2.2 类型约束2.3 编译时生成虚拟方法表单态化 Go 的实现 3.小结参考wenxian 泛型&#xff08;Generics&#xff09;是 Go 语言在较早版本缺失的一个特性&#xff0c;直…

MFC 视图窗口

目录 视图窗口概述 视图窗口的使用 视图窗口创建流程 命令消息 WM_COMMAND 处理顺序 对象关系 视图窗口概述 作用&#xff1a;提供了一个用于显示数据的窗口 关于视图窗口 视图类是用来展示用户&#xff0c;文档类是用来存储和管理数据视图窗口是覆盖掉框架窗口的客户区…

vue的插槽解析

插槽 好处&#xff1a;组件的内容结构可定制 用slot插槽进行占位 语法: 子组件中通过slot进行占位 理解&#xff1a;父组件&#xff0c;在子组件标签嵌套的内容就会被渲染到slot地方 一、默认插槽 //子组件 <slot>slot插槽</slot> //方法一<slot name"…

qt,滚动条,放大缩小拖动图片

头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QLabel> #include <QWheelEvent> #include <QMouseEvent> #include <QtDebug>#include <math.h> #include <QPainter> #include <QTimer>…

详解Vue3中的插槽(slot)

本文主要介绍Vue3中的插槽&#xff08;slot&#xff09;。 目录 一、在普通写法中使用插槽&#xff08;slot&#xff09;作用域插槽默认插槽 二、在setup写法中使用插槽&#xff1a;注意事项 在Vue3中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于在父组件中向子组件…