你睁开惺忪的睡眼,一看手机,发现已经过了中午12点了,于是顺手点了一份中午的外卖。当你打开手机淘宝,发现自己昨晚坚持到双十一零点的战绩,满满的待发货与待收货的红点。其实你也没多想,翻了个身,刷起了抖音...漫游在这个便捷而又精彩纷呈的互联网世界。看起来微服务技术与我们的生活毫无相关,但是我们的生活又离不开微服务,我们随手的一个点击下单动作,在计算机世界中发生了什么样的变化?在瞬息之间,亿万次服务的调用又是如何自然而又精密地运行着,相互关联并且相互影响着。可以说我们的生活离不开这些微服务系统。接下来,让我们一起来了解与学习微服务技术,一起探索微服务技术的发展。
微服务的兴起其实是一个必然的过程,在这之前的 IT 系统大多是单体应用,简单来说,就是一个系统的所有子程序都是运行在同一台机器上面,那么系统的各个子程序之间影响与依赖关系也不会那么复杂。在业务发展初期,这样做的好处非常明显,利于开发、部署、问题诊断等等,但是坏处也有不少,比如任意一块逻辑的改动,都需要整个系统应用重新部署。技术的发展跟业务的发展诉求息息相关,随着互联网进入 2.0,各种门户网站、Web 应用涌现出来了,出现更多的交互以及渲染,用户的访问量也出现了巨大的增长,软件复杂度导致了维护成本的大幅上升。整体而言对技术的整体要求变高了,单体应用已经不能满足日益复杂的业务需求,也随着小型机成本的大幅下降,以及单节点的可靠性难以保证等因素的影响下,软件行业逐渐进入到了SOA跟微服务时代。
为什么微服务自提出之日到目前为止可以如此地被广泛应用,热度一直居高不下?微服务的理念其实就是把一件极其复杂的事情,拆分成一系列微小简单的服务来完成。就好比工厂制造手机,如果需要工人单独完成手机的制造,那就是不可能的事情,一方面效率不高,另一方面对工人的要求极高,不可能低成本找到符合条件的员工。但如果工厂把制作手机的流程进行拆分成一系列简单的步骤,以流水线的方式组织协同就可以实现低成本的方式量产手机。那么对比到微服务架构,就是将复杂的业务系统拆分成一系列简单的服务,且每个服务都是一个独立的应用且运行在各自的进程内,各个服务之间通过远程通信的方式交互。
手机生产流水线
非常自然的,微服务架构带来如下几点好处:
效率与成本:通过将一块庞大复杂的业务逻辑拆分成多个服务的方法,做到在达到同样业务诉求目标的情况下,应用被分解成多个可管理的服务,提供了模块化的解决方式。每个服务的通过服务契约定义好作用与边界,对于每个微服务的开发来说相比原先巨大的业务应用,单个独立服务的开发复杂度与维护成本大幅降低。因为各个服务之间通过远程通信方式交互,那么对于每个独立的服务而言,开发、部署都是相对独立,可以自由地选择喜好的语言进行开发,可以选择合适的方式进行部署,甚至可以给不同的服务选择更合适的硬件进行部署,对于开发、维护、硬件的成本优化都带来了非常大的好处。
稳定性:相比单体应用而言,一旦应用故障那么整个系统就直接宕机。为服务化之后,即使单个服务出现了问题,也不会直接影响整体的服务的可用性,结合合适的微服务治理能力以及弹性扩缩容能力,可以将影响面降低到最低,甚至可以做到故障自愈。
高可扩展性:微服务化之后,系统可以很好地面对横向、纵向方式扩展的需求。一方面我们可以“按需扩容”,大促来袭时,通过添加机器的方式实现系统的快速扩容,大促结束后释放机器,对系统资源进行充分地利用;另一方面,随着业务地增长,我们可以通过增加微服务的方式满足业务的快速发展的需求。
复杂的微服务链路
谈完好处,大家也会想到紧接着就是一句,但是微服务并不是银弹。随着微服务化的深入,本身的使命是让业务的迭代更加高效,但当我们的微服务数量逐步增多,链路越来越长,如果不进行进一步的治理,那么引发的效率问题可能会大于微服务架构本身带来的架构红利,为系统的开发与运维带来了新的挑战。
效率:随着系统微服务拆分进行,一次请求内部往往会涉及到多个微服务系统的调用。开发运维人员必须面对分布式系统带来的复杂度,服务间的依赖关系错综复杂,随着微服务数量的增加,问题的复杂程度指数上升,开发以及问题诊断的效率极速下降;
稳定性:由于微服务之间的依赖关系错综复杂,在大规模之下,再小的问题都会牵一发而动全身。面对海量的流量调用、不确定的用户行为、高速迭代的业务需求以及频繁地系统变更。微服务系统难免会出现预期外的异常行为,这种不一致的行为轻则造成系统用户的体验降低,重则导致不可恢复的系统异常。
微服务带来的新挑战无疑让人头痛,但也带来了新技术的发展契机,科技的发展总是这样循环往复,螺旋式上升,它们带来的新问题,也使得微服务治理技术在这些年兴起