简介:从本质上来讲,微服务是一种架构风格,将一个大型的系统拆分为多个拥有独立生命周期的应用,应用之间采用轻量级的通信机制进行通信。这些应用都是围绕具体业务进行构建,可以独立部署、独立迭代,也可能根据业务负载独立的水平扩展。
前言
在大型分布式IT架构领域,微服务是一项必不可少的技术。从本质上来讲,微服务是一种架构风格,将一个大型的系统拆分为多个拥有独立生命周期的应用,应用之间采用轻量级的通信机制进行通信。这些应用都是围绕具体业务进行构建,可以独立部署、独立迭代,也可能根据业务负载独立的水平扩展。微服务思想以及相关的技术为IT架构的发展带来了一系列深刻的变革:
1、 易于开发和维护:一个应用只会关注一组特定的业务功能,通过服务拆分,能减少应用之间的耦合度,让开发和维护更加简单。
2、 技术栈不受限制:在微服务架构中,可以结合项目业务及团队的特点,合理的选择技术栈。
3、 加快系统演进速度:每一个应用都可以独立的进行版本更新,通过灰度发布等技术手段能确保发布过程中整个系统稳定运行。
4、 突破性能瓶颈:每个应用都能独立的水平伸缩,使系统性能可以根据计算资源的增加而得到线性的扩展。
微服务的挑战
世上没有免费的午餐,微服务技术让IT系统变得更敏捷、更健壮、更高性能的同时,也带来了架构复杂度的提升。对于开发者而言,要想更好的驾驭微服务架构,需要解决持续集成、服务发现、应用通信、配置管理、流量防护等一系列难题。幸运的是,针对这些普遍存在的难题,业界涌现了一系列优秀的开源技术组件和工具,让开发者可以更轻松的构建微服务应用。像Spring Cloud和Dubbo这样的技术框架,经过多年的发展,已经演化为微服务领域的通用标准,极大地降低了微服务的门槛,但这些技术框架依然没有办法解决其中两个最大的挑战,这两个挑战成为摆在开发者面前的两座大山。
挑战一
亟需完善的生命周期管理与服务治理方案:在一个频繁迭代的系统中,每个应用会经常性面临新版本发布需求,需要对应用的上线、下线、更新、回滚等流程进行集中性的管理,并配合精细粒度的灰度发布手段,减少版本迭代对业务造成的影响。
在一个简单的微服务架构中,如果某应用处于整个链路的入口位置,它的前端一般会挂上负载均衡组件(上图中的应用A),以承接来自于最终用户的业务请求。这类应用在进行生命周期管理的时候,复杂度会更高,为了确保应用在新版本发布过程中的平衡稳定,会经过如下的步骤:
在这个流程中,还没有涉及到对于流量精细粒度控制的高级灰度方案,但已经足够体现出其复杂性和操作难度了。如果仅仅依赖于简单的发布脚本进行管理,不但效率很低,还很容易导致顾此失彼,对系统稳定性造成巨大的风险。
挑战二
亟需完善的水平扩容与缩容方案:当某一个应用的性能出现瓶颈,需要通过增加实例数量来进行性能提升的时候,就需要引入新的计算资源。新的计算资源从何而来呢?
对于线下IDC而言,计算资源是需要预先规划的,扩容并不是一件简单的事情,可能会因为各种条件的制约而导致扩容无法实现。当然这种困扰在云计算时代不复存在了,为一个应用扩充计算资源是信手拈来的事情,但光有计算资源是不够的,还得在上面部署应用,并将应用容纳到微服务体系中。
根据这个流程,如果需要扩容一个应用实例,保守估计也需要20分钟以上,其中购买、系统初始化、应用部署都需要占用大量的时间。假设系统流量突增,需要在2分钟之内紧急扩容,这个方案就无用武之地了。
一剂良药:容器化技术
为了解决这两个难题,开发者们尝试了各种各样的方案,新的理念以及技术框架在过去的这五年层出不穷。在一轮轮的优胜劣汰下,以Docker为代表的容器技术,在Kubernetes生态的支撑下,在业界成为了主流,是构建云原生(Cloud Native)应用的必备要素。容器化相关技术能够更大程序的挖掘

微服务架构通过拆分大型系统,实现独立部署和扩展,但带来了复杂性和运维挑战。Serverless技术,尤其是应用层Serverless,如阿里云SAE,解决了生命周期管理和弹性扩展的问题,降低了资源成本。SAE提供应用级别的自动化管理,兼容SpringCloud等微服务框架,支持多语言应用,并具备弹性扩展能力,通过资源实际使用量计费,有效提升资源利用率,适用于开发测试环境的快速启停,降低整体成本。
最低0.47元/天 解锁文章
4028

被折叠的 条评论
为什么被折叠?



