微服务基础(一)介绍及选择架构
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.网络不是同构的。硬件供应商组网,并不是所有异构硬件供应商都能很好的工作
总体来说,微服务的缺点是大于优点的。微服务无非是在可用性和可扩展性体现出来的。如果想将项目采用微服务的形式的时候,我们就要考虑清楚了。