美文网首页
#星光极客漫谈#浅谈企业应用级的微服务架构

#星光极客漫谈#浅谈企业应用级的微服务架构

作者: 智慧星光 | 来源:发表于2019-12-18 13:36 被阅读0次

    智慧星光是中国大数据50强企业,本系列文章提供内部攻城狮独家分享编程经验、工作思考、技术干货等优质内容,我们是领先的认知智能大数据运营商,也是前沿技术、经验的传播者。

    本期作者:智慧星光政务事业部  Java开发工程师 何旭帅

    一 什么是微服务

    微服务,顾名思义,微服务需要从两个方面去理解,什么是“微”,什么是“服务”。“微”狭义来讲是体积小,不占用太多资源,著名的"2 pizza团队"很好的诠释了这一概念:2 pizza团队最早是亚马逊CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来只需要2个披萨就够了。而“服务”,则需要区别于系统的概念,“服务”是一个或者是一组相对较小且功能独立的功能单元,是用户可以感知的最小功能集,也是构成“微服务”体系大厦的最小单元。

    微服务最早由Martin Flower和James Lewis于2014年共同提出的,微服务架构风格是一种使用一组小服务来开发单个应用,每个服务运行在自己的进程中,并使用轻量级通信机制进行各个服务之间的数据传输和消息传递,通常是HTTP API的通信方式,这些服务一般通过业务划分,单个服务功能清晰、结构明了,可以使用不同的编程语言实现,以及不同的数据存储技术,且能够通过自动化部署机制来独立部署,并保持最低限度的集中式管理,整个微服务架构就是若干个微服务组合而来,使用者无需关心各个微服务具体实现方式,只需关心单个微服务是否正常运转,以及微服务之间通信的正常与否。

    二 为什么企业要使用微服务

    在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高。企业在创业初期,规模小,业务相对不复杂,单体架构在规模比较小的情况下工作情况良好,足够支撑企业正常业务的运转,但随着系统规模的扩大,开发维护人员的更替,单体架构暴露出来的问题越来越多:

    01复杂性逐渐提高

    随着代码量的增加,各个模块之间区别比较模糊,逻辑比较混乱,模块之间的耦合度越来越高,替换方案的可选性降低,代码量越多复杂性越高,随之而来的是开发的效率变低,解决问题的难度提高,重构和运维的成本增加,进而影响开发周期和项目维护成本。

    02技术债务逐渐上升

    公司的人员流动是再正常不过的事情,有的员工在离职之前,疏于代码质量的自我管束,导致留下来很多“坑”,由于单体项目代码量庞大的惊人,代码在百万行的项目比比皆是,庞大的代码量,使得程序员在梳理业务关系、熟悉代码耗费的精力大大增加,修改维护代码的代价和风险也越来越高,修改一个 Bug 极可能带来各种隐含的缺陷,前同事留下的“坑”很难被发觉,这就给项目代码隐形的“地雷”,也就是所谓的技术债务越来越多。

    03部署的难度增加、速度变低

    单体应用每次功能或者缺陷的变更导致重新部署整个应用,这种部署方式影响大、风险高,决定了部署频率低,导致两次发布之间有大量的功能或者缺陷需要进行变更,出错概率增高。

    04阻碍技术革新

    团队对新技术的渴望是不言而喻的,团队士气会因为持续的关注在巨石应用的技术栈而降低;单体式架构下的组织通常来说技术选型非常单一,团队技术能力相对单薄,团队的吸引力一般。

    此外,单体应用作为一个强耦合的整体,无法根据业务功能伸缩,只能作为一个整体进行扩展。这造成资源浪费,同时无法针对不同业务模块的特性进行有针对性的伸缩,比如计算密集型服务、IO 密集型服务。除此之外,对于服务等级、安全要求、业务监管等多个维度均需要针对不同的服务实现不同的治理,企业从单体架构迁移到微服务架构成为必然。

    三 微服务的特点

    微服务架构的基本思想就是“围绕业务领域组件来创建应用,让应用可以独立的开发、管理和加速”。

    微服务其实不仅仅是微服务本身,而是系统要提供一套基础的架构,这种架构使得微服务可以独立的部署、运行、升级,不仅如此,这个系统架构还让微服务与微服务之间在结构上“松耦合”,而在功能上则表现为一个统一的整体。这种所谓的“统一的整体”表现出来的是统一风格的界面,统一的权限管理,统一的安全策略,统一的上线过程,统一的日志和审计方法,统一的调度方式,统一的访问入口等等。其中微服务的特点如下:

    01易于开发和维护

    可以由一个小团队负责更专注专业,相应的也就更高效可靠,并且代码量和逻辑复杂度都会降低,从而易于开发和维护。

    02部署方便、启动较快

    每个微服务组件都是简单灵活的,能够独立部署,单个业务修改,只需要改动相关的微服务即可。启动单个微服务相比于启动单体架构的整个项目,启动某个模块的服务速度明显要快的多。

    03技术栈不受限

    微服务架构与语言工具无关,自由选择合适的语言和工具,高效的完成业务目标即可。比如订单微服务和电影微服务原来都是用java写的,现在我们想把电影微服务改成nodeJs技术,这是完全可以的,开发成本大大降低。

    04按需伸缩

    微服务之间是松耦合的,微服务内部是高内聚的,每个微服务很容易按需扩展。

    四 企业迁移微服务如何落地

    目前在用的微服务开发框架,常用的有SpringCloud、阿里的Dubbo等,其中SpringCloud旨在简化创建产品级的Spring应用和服务,为开发者提供了开箱即用的功能,例如分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。

    企业在微服务迁移或者微服务构建过程中,应遵守微服务架构中的单一职责原则、服务自治原则、轻量级通信原则、接口明确原则。在迁移过程中应做到先分离数据库,后分离服务,对于无法修改的遗留系统,推荐采用绞杀者模式:在遗留系统外面增加新的功能做成微服务方式,而不是直接修改原有系统,逐步的实现对老系统替换。其次是规范整个系统而非微服务的日志体系,采用标准的日志格式非常便于后续的日志聚合检索,便于整体的视角分析、监控、查看系统。

    相关文章

      网友评论

          本文标题:#星光极客漫谈#浅谈企业应用级的微服务架构

          本文链接:https://www.haomeiwen.com/subject/vbfunctx.html