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

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.rhkb.cn/news/223535.html

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

相关文章

QT编写应用的界面自适应分辨率的解决方案

博主在工作机上完成QT软件开发(控件大小与字体大小比例正常),部署到客户机后,发现控件大小与字体大小比例失调,具体表现为控件装不下字体,即字体显示不全,推测是软件不能自适应分辨率导致的。 文…

Hadoop入门学习笔记——六、连接到Hive

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 六、连接到Hive6.1. 使用Hive的Shell客户端6.2. 使用Beel…

Confluent 与阿里云将携手拓展亚太市场,提供消息流平台服务

10 月 31 日,杭州云栖大会上,阿里云云原生应用平台负责人丁宇宣布,Confluent 成为阿里云技术合作伙伴,合作全新升级,一起拓展和服务亚太市场。 本次合作伙伴签约,阿里云与消息流开创领导者 Confluent 将进一…

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

MATLAB - 四元数(quaternion)

系列文章目录 前言 一、简介 四元数是一种四元超复数&#xff0c;用于三维旋转和定向。 四元数的表示形式为 abicjdk&#xff0c;其中 a、b、c 和 d 为实数&#xff0c;i、j 和 k 为基元&#xff0c;满足等式&#xff1a;i2 j2 k2 ijk -1。 四元数集用 H 表示&#xff0c…

推荐给前端开发的 5 款 Chrome 扩展

工欲善其事&#xff0c;必先利其器。Chrome 可能是前端开发中使用最多的浏览器。在日常开发中&#xff0c;下列几款 Chrome 扩展也许能让你的开发工作事半功倍 &#x1f680; Vue.js devtools ⚙️ vue 官方专为 vue 应用开发的调试工具。 通过使用它&#xff0c;你可以快速查看…

redis 从0到1完整学习 (五):集合 IntSet 数据结构

文章目录 1. 引言2. redis 源码下载3. IntSet 数据结构4. 参考 1. 引言 前情提要&#xff1a; 《redis 从0到1完整学习 &#xff08;一&#xff09;&#xff1a;安装&初识 redis》 《redis 从0到1完整学习 &#xff08;二&#xff09;&#xff1a;redis 常用命令》 《redi…

智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MA…

微服务之配置中心与服务跟踪

zookeeper 配置中心 实现的架构图如下所示&#xff0c;采取数据加载到内存方式解决高效获取的问题&#xff0c;借助 zookeeper 的节点监听机制来实现实时感知。 配置中心数据分类 事件调度&#xff08;kafka&#xff09; 消息服务和事件的统一调度&#xff0c;常用用 kafka …

体验一下 CodeGPT 插件

体验一下 CodeGPT 插件 0. 背景1. CodeGPT 插件安装2. CodeGPT 插件基本配置3. (可选)CodeGPT 插件预制提示词原始配置(英文)4. CodeGPT 插件预制提示词配置(中文)5. 简单验证一下 0. 背景 看到B站Up主 “wwwzhouhui” 一个关于 CodeGPT 的视频&#xff0c;感觉挺有意思&#…

浅谈Guava Cache的参数使用

CacheLoader 用于数据加载方式比较固定且统一的场景&#xff0c;在缓存容器创建的时候就需要指定此具体的加载逻辑。通常开发中使用时我们需要继承CacheLoader类或写一个匿名实现类实现其load方法和reload方法 load方法 当执行get操作没有命中缓存或者判断缓存已经超出expir…

《xHCI 1.2》3体系结构概览

3.2 xHCI数据结构 3.2.1 Device Context Base Address Array 3.2.2 Device Context 3.2.3 Slot Context

PADS Layout安全间距检查报错

问题&#xff1a; 在Pads Layout完成layout后&#xff0c;进行工具-验证设计安全间距检查时&#xff0c;差分对BAK_FIXCLK_100M_P / BAK_FIXCLK_100M_N的安全间距检查报错&#xff0c;最小为3.94mil&#xff0c;但是应该大于等于5mil&#xff1b;如下两张图&#xff1a; 检查&…

WGCLOUD快速部署方案 - 批量给Linux安装agent

有时候我们的Linux服务器比较多&#xff0c;一个一个安装比较花费时间&#xff0c;还要WGCLOUD提供了一个辅助工具wgcloud-bach-agent&#xff0c;可以批量给Linux服务器上传agent安装包&#xff0c;并自动解压和启动agent&#xff0c;可以大大减少我们的部署工作和时间 下载和…

电子病历编辑器源码,提供电子病历在线制作、管理和使用的一体化电子病历解决方案

概述&#xff1a; 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&…

mysql 数据编译安装以及参数说明 安装包下载

目录 MySQL 官网地址官网下载源码包安装步骤修改密码 MySQL 官网地址 https://dev.mysql.com/doc/ 官网下载源码包 安装步骤 # 所需要的依赖及安装mysql的包" [rootmysql_source ~]# yum -y install ncurses ncurses-devel openssl-devel bison libgcrypt gcc gcc-c ma…

flutter开发实战-设置bottomNavigationBar中间按钮悬浮效果

flutter开发实战-设置bottomNavigationBar中间按钮悬浮的效果 在使用tabbar时候&#xff0c;可以使用bottomNavigationBar来设置中间凸起的按钮&#xff0c;如下 一、效果图 中间按钮凸起的效果图如下 二、实现代码 我们使用BottomAppBar 一个容器&#xff0c;通常与[Sscaf…

@z-utils组 重构和自动化实现

highlight: monokai theme: github 包简介 z-utils组 是一个可以在vue/react/pure js 中使用的工具包&#xff0c;它包含三个子类&#xff0c;分别为 z-utils/base, z-utils/react, z-utils/vue 三个分别在不同区域使用。 他是原 zzy-javascript-devtools 的重构版本&#xf…

仅操作一台设备,如何实现本地访问另一个相同网段的私网?

正文共&#xff1a;1034 字 8 图&#xff0c;预估阅读时间&#xff1a;4 分钟 书接上文&#xff08;地址重叠时&#xff0c;用户如何通过NAT访问对端IP网络&#xff1f;&#xff09;&#xff0c;我们已经通过两台设备的组合配置实现了通过IP地址进行访问。但一般场景中&#xf…

实习课知识整理4:点击某个商品如何跳转到并展示出商品详情页

项目情景&#xff1a;当我们点击某个商品时&#xff0c;我们需要查看商品的具体的信息并进行购买的操作 简单理解以下就是&#xff0c;当我们点击一个url链接时&#xff0c;该链接需要携带一个参数到后端&#xff0c;一般设为商品的Id&#xff0c;然后后端通过Id从数据库中查找…