微服务架构

微服务架构概述

微服务架构是互联网时代的特点与需求、分布式架构与敏捷开发的流行、持续集成持续部署、容器技术的慢慢成熟等条件结合的产物,是互联网时代技术浪潮中的一朵小小的浪花,其核心仍然是康威定律中探讨的组织结构与其设计的系统结构之间的关系。微服务技术对于应用服务开发团队来说,与其说是一种技术,不如说是一种针对软件开发的指导思想和设计理念。微服务架构本身不是目的,也不是能够解决所有问题的灵药,更重要的还是开发团队结合自身实际需求与具体问题选择更合适的应用架构。

微服务架构概念

微服务架构是一种互联网应用服务的软件架构,主要应用于互联网应用服务的服务端软件开发。微服务架构由面向服务架构 SOA 发展而来,其核心理论基础来自于康威定律中关于组织结构与其设计的系统结构之间关系的描述,即任何组织设计的系统,其结构都是组织本身沟通结构的复制。

2014 年学者 Martin Fowler 正式提出微服务架构的概念:微服务架构以一套微小的服务的方式来开发和部署一个单独的应用,这些微小的服务根据业务功能来划分,通过自动化部署机制独立部署运行在自己的进程中,微服务之间使用轻量级通信机制来进行通信。

一个典型的微服务架构应该包括客户端、微服务网关、服务发现、微服务原子层、数据库、部署平台等模块,根据不同应用类型及服务规模,可以增加负载均衡、权限认证、服务熔断、日志监控等模块,来满足服务的非功能性需求。

微服务架构特点

Martin 尝试归纳和描述微服务架构风格所具有的共同特点,这些特点并不是所有微服务架构风格都要拥有的,也不是用来定义微服务架构本身的,而是微服务架构风格被希望要拥有的特点。也就是说,微服务架构风格不是微服务化的终点,而是微服务化的方向。

服务组件化

微服务中,服务可以被当作进程外组件,独立进行部署,服务之间利用网络服务请求或者远程过程调用来进行通信。一个好的微服务架构的目标是通过服务合同中的解耦服务边界和进化机制来帮助各个微服务独立部署运行。微服务架构的设计者希望对任何一个组件或者服务的改动和升级都只需要重新部署该服务而不需要重新部署整个应用程序,并且在升级过程中尽可能少地改变服务间通信的接口。

围绕业务功能组织服务

当把一个大的应用拆分成小的部分的时候,通常的方法都是根据技术层面分为UI 团队、服务端逻辑团队和数据库团队。但是这种拆分团队的方式会使得即使一个简单的变动都会导致整个团队需要耗费时间和预算来适应和协调。
微服务架构采用围绕业务功能来拆分应用和组织服务的方法。在微服务架构中,设计组织被分为小的开发团队,与之相对应的是,应用被拆分为小的服务,应用之间的沟通过程就是团队之间的沟通过程。为保证应用之间沟通过程清晰明确,团队之间需要划分清晰的服务边界。这样的划分方法也要求每个小团队本身提供开发过程中所需要的所有技能。

基础设施自动化

许多开发团队都是使用持续交付和持续集成技术来构建微服务架构的应用和系统的,这使得基础设施自动化技术得到了广泛的应用。而随着容器技术、云计算技术等技术在过去几年的快速发展,基础设施自动化技术取得了长足的进步,这也间接降低了微服务构建、部署、运行的复杂性。

微服务架构与单体式架构特点对比

单体式架构( 也叫整体式架构)

指应用被构建为一个整体的单元,对系统做出任何改动都需要重新构建、部署新版本的服务端应用。

单体式架构是一种很自然的应用构建方式,其优点有:比较适合小项目,开发过程简单,开发团队统一,集中式服务,没有分布式的管理问题。

缺点:单体式架构所有的代码都在一个项目里,开发团队沟通成本高,开发效率低,对于任何一个小的改动都需要重新构建和部署应用,同时单体式架构的容错性也较低,一个微小的错误也可能导致整个系统崩溃。

微服务架构

微服务架构:团队职责和业务边界更加明确。

自 2014 年微服务架构的概念被正式提出以来,微服务技术凭借其独立部署、可扩展性、快速迭代、容错性、易于开发等优点正在快速发展并逐渐成为业界最流行的软件架构。

优点:是整体的服务可以被切分得比较小,代码开发效率高; 每个微服务都可以独立开发,对开发团队的技术栈要求更低; 每个微服务独立 部 署,更有利于持续集成,可扩展性也更高; 每个微服
务可以独立更新,升级迭代更方便,容错性也更高。

缺点:比如数据一致性问题、性能监控问题、服务间通信机制问题等等,归结起来这些都是微服务架构的分布式系统带来的复杂性问题。

总体而言,单体式架构由于其集中式的特点,更适合服务功能单一、开发团队规模小的应用项目,在应用复杂程度较低的情况下,单体式架构使得应用的额外开销更小,整体性能更好。而相比单体式架构,微服务架构更加适合服务功能多样、开发团队规模庞大的应用项目,微服务架构的服务解耦合、独立部署、容错性高等特点可以使得在应用复杂程度较高的情况下,应用的性能损耗更小,以满足应用服务的非功能性需求。另外,由于微服务架构的可扩展性好的特点,微服务架构也比单体式架构更适合业务规模增长较快、服务内容变化较大的应用服务,这一点也与现今互联网服务行业的快速发展的特点更加契合。

你可能感兴趣的:(系统架构师,微服务,架构,java)