草庐IT

微服务基础(一)介绍及选择架构

冯继强fjq 2023-03-28 原文

1.微服务架构是什么?

由很多个微服务来组成,并且每个服务与服务有自己独立的数据库,服务与服务之间是通过轻量级的协议(比如:rpc,http等)来调用,每个服务是独立的,自治的能够独立的发布和部署。如下图:

本质上来讲,微服务只是一种架构风格。架构风格如何采取,那么就需要涉及到架构特征这个概念。而架构特征又称为非功能需求或者质量属性。一般对架构特征的分析是从弹性、演化性、模块化、可靠性、伸缩性、简单性、可测试性几个方面来分析架构特征的。如下:

伸缩性:原来有一台服务器只能处理十个,当你的访问并发一下子达到100个的时候,那么就需要从1台服务器扩展到10台服务器

演化性:结构是很灵活的,它可以在将来不断的调整。比如:在刚开始的时候是个单体,但是将来变成了微服务,在这个变化过程中,是如何将单体架构很低成本的,很顺利的演化到微服务架构。演化性也就是说:当前的架构具不具备扩充或者演化成另一种架构。

简单性:架构是不是足够简单,因为足够简单的话成本就会低。

模块化:能够更好的去复用等操作。

弹性;在某一基础设施或者某一个东西出错的情况下,是不是依然可以很好的工作运行。

 

通过从这几方面的分析,可以更好的去选择采用哪种架构来进行开发。

 

2.微服务的优势与劣势

(1)微服务的特点

1.很小,专注做好一件事情。比如在电商平台中,可以想象它有购物车模块,结算模块,登录模块,那么就可以将这几个模块分为几个微服务,只专注于做一件事情。

2.自治。独立部署升级,独立维护。

3.技术异构。技术异构是微服务的一个特点,微服务的隔离性比较强,可以很轻松的使用不同技术进行开发。在单体架构下,很难技术异构性,但并不是不能实现,比如说在winform程序下可以使用Python脚本实现一些算法,集成到一个系统里面去。

4.弹性。在某一基础设施或者某一个东西出错的情况下,是不是依然可以很好的工作运行

5.扩展性强。

6.可组合。

7.与组织结构相匹配。

(2)分布式系统

对于微服务,那么我们就需要重点关注分布式系统了。

分布式系统比如:金融交易系统,多人在线游戏,web搜索等。构建分布式系统的动力来源于对共享资源的期望:人多力量大。而单体架构所棉铃的挑战是资源能力的不足(存储空间、处理能力等)

单体架构和分布式系统的区别在于:单体架构所有的组件都是在一个进程中进行调用,而分布式系统的组件可以分布在不同的进程中,通过一些传输协议进行通信。如下:

 

而分布式系统的优点在于:1.可用性 2.扩展性

可用性:

可用性怎么来评估呢,那么就需要关注MTBF,MTTR。

MTBF是指平均故障间隔的意思,代表两次故障的间隔时间,也就是系统正常运转的平均时间,这个时间越长,系统稳定性越高。

MTTR表示故障的平均恢复时间,也可以理解为平均故障时间。这个值越小,故障对于用户的影响越小。

计算系统可用性的公式:Availability=MTBF/(MTBF+MTTR)

假设每1个月(30天)出现一次故障,那么MTBF=30,每次故障的恢复时间是半天时间,那么MTTR=0.5,通过公式可得出系统的可用性是0.9836。

系统的可用性值越大,可用性越好,一般来说,系统的可用性要达到0.99及以上,可以称为一个好的系统。

那么接下来就是要探索如何提升分布式系统的可用性

(3)提升分布式系统的可用性的方法

提升分布式系统可用性的处理方式:

a.故障转移

b.超时控制

c.降级

d.限流

提升系统的可用性的主要方法还是故障转移,超时控制、降级、限流主要是在在运维层面上来解决。

故障转移的概念就是备份。当一台服务器发生故障的时候,可以快速的将用户从一台服务器切换到另一台服务器上,通常这个操作是在数据库层面上,主数据库和从数据库快速的切换。如下图:

故障转移分为两种:一种是对称的。比如有两台数据库服务器,这两台服务器并不区分主和从数据库,两个都是主数据库,一台挂掉了,自动切换到另一个数据库上,当然前提是两台数据库都在进行数据存储的,那么它就会把坏掉的那一台数据库给去掉,用户就会走到好的那台数据库上。另一种是非对称的,在正常情况下,从数据库是不可用的,不接受用户请求,只有当主数据库坏掉,它才会走到那个从数据库上。所以说故障转移靠的是冗余。在冗余的情况下,数据库之间是有同步的,所以它是增加的处理节点作为一种备份冗余的一种方式更好的去处理这种故障,哪怕这个坏掉了,但是能数据库能很快地切换到那台好的数据库上,这种切换速度都是秒级别或者毫秒级别,用户几乎上无法感应到。

 

(4)分布式系统的可扩展性

扩展性主要在于增加硬件服务器的方式来提升扩展性

 

(5)微服务的劣势

1.网络是不可靠的。由于微服务之间是通过rpc,http等方式进行通信。可能存在A服务是健康的,但由于网络问题,B服务无法访问到A服务

2.网络延迟不是0。由于网络之间存在一定的延迟性,因此服务之间的访问会存在一定的延迟

3.带宽不是无限的。

4.网络不是安全的。

5.拓扑一直在改变。

6.网络管理员不止一个。

7.传输成本。

8.网络不是同构的。硬件供应商组网,并不是所有异构硬件供应商都能很好的工作

 

总体来说,微服务的缺点是大于优点的。微服务无非是在可用性和可扩展性体现出来的。如果想将项目采用微服务的形式的时候,我们就要考虑清楚了。

有关微服务基础(一)介绍及选择架构的更多相关文章

  1. ruby - Rails 3 的 RGB 颜色选择器 - 2

    状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  4. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  5. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  8. ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择 - 2

    我希望用户从一个模型的三个选项中选择一个。即我有一个模型视频,可以被评为正面/负面/未知目前我有三列bool值(pos/neg/unknown)。这是处理这种情况的最佳方式吗?为此,表单应该是什么样的?目前我有类似的东西但显然它允许多项选择,而我试图将它限制为只有一个..怎么办? 最佳答案 如果要使用字符串列,让我们说rating。然后在你的表单中:#...#...它只允许一个选择编辑完全相同但使用radio_button_tag: 关于ruby-on-rails-Rails单选按钮-模

  9. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  10. ruby-on-rails - ActiveAdmin 自定义选择过滤器下拉名称 - 2

    对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking

随机推荐