微服务架构 订阅
微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。 展开全文
微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。
信息
外文名
microservice
现    状
当下最新的热门话题
服务平台
Imixs-Workflow
中文名
微服务架构
属    性
Seneca是构建微服务框架的工具
微服务架构概念
微服务不需要像普通服务那样成为一种独立的功能或者独立的资源。定义中称,微服务是需要与业务能力相匹配,这种说法完全正确。不幸的是,仍然意味着,如果能力模型粒度的设计是错误的,那么,我们就必须付出很多代价。如果你阅读了Fowler的整篇文章,你会发现,其中的指导建议是非常实用的。在决定将所有组件组合到一起时,开发人员需要非常确信这些组件都会有所改变,并且规模也会发生变化。服务粒度越粗,就越难以符合规定原则。服务粒度越细,就越能够灵活地降低变化和负载所带来的影响。然而,利弊之间的权衡过程是非常复杂的,我们要在配置和资金模型的基础上考虑到基础设施的成本问题。 [1] 
收起全文
精华内容
下载资源
问答
  • 微服务架构

    2018-06-21 18:38:28
    公司内部的微服务架构培训资料,分为5个部分:1. 重识微服务架构;2. 如何快速体验微服务架构;3. 微服务架构API的开发与治理;4. 微服务架构下的数据一致性;5. 如何用Docker支撑微服务。
  • 微服务 架构

    2018-02-14 16:06:52
    我们经过了大量的实践,借助了许多优秀的开源技术,搭建了一款“轻量级微服务架构”。实践证明,该架构不仅可以适应大中型公司的业务变化,还能满足中小型公司的快速增长
  • 微服务架构设计,软件快速发展的时代、软件规模化给团队带来的挑战,如何用微服务解决难题
  • 微服务架构设计 从分析单体服务利弊到微服务的演变。核心内容包括,服务的拆分重组,模块化,注册,分布式,配置,单点登录,通知消息,容器技术等。
  • Spring-Boot-微服务架构示例:Spring-Boot-微服务架构示例
  • 关于微服务架构的定义众说纷纭,因此我摘取了几个描述的比较清晰的定义在这供参考。 1.网飞(Netflix)架构师给出的定义,所谓微服务架构就是服务导向,松耦合有边界的元素构成的架构,松耦合指的是可以独立更新服务...

    关于微服务架构的定义众说纷纭,因此我摘取了几个描述的比较清晰的定义在这供参考。
    1.网飞(Netflix)架构师给出的定义,所谓微服务架构就是服务导向,松耦合有边界的元素构成的架构,松耦合指的是可以独立更新服务,不会对其他服务造成影响。同时,对于数据库需要适当的拆分,有可能会违反规范。
    Cockcroft defines a microservices architecture as a service‑oriented architecture composed of loosely coupled elements that have bounded contexts.
    Loosely coupled means that you can update the services independently; updating one service doesn’t require changing any other services. If you have a bunch of small, specialized services but still have to update them together, they’re not microservices because they’re not loosely coupled. One kind of coupling that people tend to overlook as they transition to a microservices architecture is database coupling, where all services talk to the same database and updating a service means changing the schema. You need to split the database up and denormalize it.

    2.Martin Fowler则认为微服务架构是一种开发一套小服务的方式(与SOA不同),服务间通过一些轻量级的方式通信,如HTTP(这也是为什么REST API近年来这么火)方式。这些围绕业务能力搭建的服务可以独立并且自动化的发布。因为微服务没有一个明确的核心,因此可以用不同的语言和存储技术来开发。
    In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

    Chris Richardson在他的书(design patterns)中给出了一个较为详细可操作性的关于微服务架构的阐述,通过三个象限的维度拓展应用,即多实例、路由和负载均衡、根据功能拆分,微服务的最小单元——服务,仅仅是一个功能的实现。微服务用大白话来说就是将原先的单体架构拆分成一个个小服务,粒度细化。
    说到微服务,就避不开网飞这家公司,网飞是较早实现微服务架构的公司并且开源了一套完整的组件供其他公司使用,有
    服务发现组件:eureka https://github.com/Netflix/eureka
    负载均衡组件:ribbon https://github.com/Netflix/ribbon
    限流熔断组件:Hystrix https://github.com/Netflix/Hystrix
    路由监控组件:zuul https://github.com/Netflix/zuul
    之后,Pivitol公司在这些组件上做了封装,也开发了一些其他组件组成了一套比较成熟完整的微服务生态
    https://github.com/spring-cloud

    目前市面上做微服务还比较流行的组件有
    Web Service客户端: Spring Cloud Feign https://github.com/spring-cloud/spring-cloud-openfeign
    API网关: Spring Cloud Gateway(目标是取代zuul)
    分布式配置中心: Spring Cloud Config
    阿里巴巴早先的微服务解决方案:Apache Dubbo(https://github.com/apache/dubbo)(该项目已通过Apache孵化,成为阿帕奇基金的顶级项目)
    阿里巴巴微服务一站式解决方案:Spring Cloud Alibaba(https://github.com/spring-cloud-incubator/spring-cloud-alibaba

    目前Spring Cloud技术栈的对比如下图,由于Netflex逐渐将组件的开发状态转为维护状态,Pivitol公司可能面临后继乏力的危险,而Spring Cloud Alibaba正在慢慢发力,有可能在未来取代Spring Cloud形成微服务闭环的技术栈。

    Spring Cloud技术栈对比

    那么微服务架构是什么样的呢?
    在Github上有个叫piggymetrics(https://github.com/sqshq/PiggyMetrics)的项目就很简单明了的展示了何为微服务架构,如下图,作者用Spring Boot, Spring Cloud和Docker等技术栈搭起来一个微服务的演示项目,服务与服务之间通过REST API通信,每个服务拥有独立的数据库

    PiggyMetrics微服务架构图

    下图更加详细的展示了微服务所用到的技术栈和各个微服务组件是如何在整个微服务架构中发挥作用的。

    微服务组件的应用

    ZUUL: API路由
    ELK STACK: 日志分析
    HYSTRIX 和 RIBBON:负载均衡和熔断限流
    EUREKA: 服务发现
    TURBINE: 监控大盘
    Spring Cloud Config: 分布式配置中心
    OAuth2: 服务鉴权授权

    微服务带来的好处很多,诸如
    使大型复杂应用可以持续性发布和部署(采用DevOps的方式开发,小团队,多次迭代,快速部署,单次部署风险小)
    服务“微”容易维护(代码量较少,容易理解,开发快)
    服务可以独立拓展(可根据应用的特性部署到不同的机器,例如可以将CPU密集型应用和内存密集型应用部署到不同机器,以充分发挥机器性能)
    服务可以单独部署(松耦合,与其他服务的联系不强,自主性强)
    新技术的采用更为方便(例如可以使用Golang写的OAuth2进行鉴权授权,不需要全部使用同一种语言)
    较强的容错性(Hystrix可以防止“雪崩”的产生,可以隔离故障,也可以根据条件进行服务降级, Ribbon实现软负载均衡,减轻单机压力)

    当然,凡是都有两面性,没有绝对的“银弹”,微服务架构也会带来一些缺点,如
    如何划分服务的边界,根据业务还是根据何种规约
    分布式系统带来的复杂性使得开发、测试和部署都增加难度
    如果发布的特性设计多个服务,需要谨慎和多个团队合作
    采用微服务的时机难以界定
    数据的一致性不好维护
    数据查询难,尤其是涉及到跨数据库

    对此,Chris Richardson也划分了多个架构模式来应对微服务架构所带来的种种问题,可以说好的架构是演化而来的,例如单体架构演化到微服务架构,可以通过应用设计模式、应用基础设施设计模式和基础设施设计模式多方面来解决微服务带来的问题。其他设计模式会在接下来的文章一一道来,我也会写一些相关的代码示例来更加形象展示微服务的实战,我的github地址:https://github.com/Guilai1990?tab=repositories

    参考资料:

    Martin Fowler个人网站 https://www.martinfowler.com/microservices/

    Adopting Microservices at Netflix: Lessons for Architectural Design

    PiggyMetrics的Github

    Chris Richardson —— Microservice Patterns

    Chris Richardson个人网站 https://microservices.io/patterns/microservices.html

    展开全文
  • 微服务架构整理-(一、微服务架构的发展)

    千次阅读 多人点赞 2021-01-02 19:40:13
    微服务架构的发展单体应用架构垂直应用架构分布式架构功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、...


    工作中常用到微服务架构,知识点零零散散,这里稍微整理一下。
    微服务架构的诞生是建立在各代程序员的努力之下,先后经历了单体应用架构、垂直应用架构以及分布式应用架构,并非一朝一夕。

    单体应用架构

    此架构是将所有的功能集成于一个服务中,即最终会打包成一个具体的应用,例如jar,war。每个项目包括每一层每一块里编写所有的代码。例如一个web工程里面包括了前端页面,web层代码,Service层代码,DAO层代码,把这些代码打包到一个项目当中,放到web容器中启动。如图所示:

    在这里插入图片描述

    优点

    开发简单,适用于小型应用

    缺点

    显然,这种架构易于开发、维护和部署。在用户量不多的情况下,该架构完全可以满足需求,但一旦用户量以及业务的复杂化,再加上代码的高度耦合,系统的维护和横向扩展异常困难。当用户量达到需要负载均衡来支持时,不得不使用多台服务器,但并不是应用中的每个功能模块都需要负载均衡,因此在扩展时必然会导致资源的浪费。例如:订单管理模块每秒访问1k次,用户管理每秒200次,这时扩展时连带用户管理一起扩展了,意义不大。总而言之,单体不易扩展与维护,代码的耦合度高。

    垂直应用架构

    由于单体应用架构的种种问题,先辈们开始考虑将各功能模块抽取成独立的子工程,每个子工程跑在一个容器中。例如:
    在这里插入图片描述

    如果用户中心访问较多,只需要针对用户中心进行扩展就可以了。

    优点

    解决了高并发问题
    可针对不同的模块进行优化
    方便水平扩展
    容错性高(其中一个系统出现了问题了,不影响其他系统,只需要针对出错的系统进行停机维护即可)

    缺点

    系统之间相互独立:需要为相互作用系统建立联系
    大量的重复工作

    分布式架构

    把一个垂直应用进行业务上的抽取,抽取成两部分内容。一个是基础服务,另一个是业务功能,通过业务功能去调用相应的基础服务就构成了分布式应用。这样就很好的解决了服务与服务之间的调用。例如:
    在这里插入图片描述

    优点

    解决了服务与服务之间调用的问题,即减少了服务与服务之间的耦合度

    缺点

    随着服务层体积的增大,应用越来越多,服务的评估,治理与统一治理越来越难

    面向服务的架构(SOA)

    针对分布式架构缺点,形成了SOA(Service-Oriented Architecture)概念,即面向服务的架构。它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进程中。
    站在功能的角度,把业务逻辑抽象成可利用、可组装的服务,通过服务的编排实现业务的快速再生,目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速利用。比较流行的SOA有ESB,DUBBO。
    在这里插入图片描述

    优点

    抽取公共的功能为服务,提高开发效率
    对不同的服务进行集群化部署解决系统压力
    基于ESB/DUBBO进一步减少了系统的耦合

    缺点

    抽取服务的粒度较大
    虽然基于ESB/DUBBO进一步减少了系统的耦合,但是耦合还是存在的,且不低

    微服务架构

    针对SOA的缺点,新的一种架构诞生了,即微服役架构。通过对服务尽可能的拆分,直到不能拆分为上并独立打包运行,服务调用层与服务提供方通过轻量级的http协议进行交互,达到完全解耦的效果,每次交互只需要一个简单的http请求即可,无需复杂的调用技术。每个服务遵循单一职责原则,通过http接口向外提供功能。
    在这里插入图片描述

    优点

    通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也奖大幅度下降
    微服务遵循单一职责原则,采用restful等轻量级协议传输

    缺点

    微服务过多,服务治理成本高,不利于系统维护
    分布式系统开发的技术成本高(容错、分布式事物等)

    SOA与微服务之间的关系

    SOA它是一种设计方法,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在于操作系统进程中。各个服务之间通过网络调用。
    微服务架构 和SOA类似,它是在SOA基础上的升华,强调的重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分成多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

    功能SOA微服务
    组件大小大块业务逻辑单独任务或小块业务逻辑
    耦合度通常松耦合总是松耦合
    公司架构任何类型小型、专注于功能交叉团队
    管理着重中央管理着重分散管理
    目标确保应用能够交互操作执行新功能、快速拓展开发团队
    调用方式RPC(较重)HTTP(较轻)

    总之,微服务的发展不是一朝一夕,也是经过多年的迭代,最终成为广受欢迎的架构。

    展开全文
  • 为什么我们使用微服务架构微服务架构的优势与不足 首先我们看看为什么要考虑使用微服务 开发单体式应用 假设你正准备开发一款与Uber和Hailo竞争的出租车调度软件经过初步会议和需求分析 你可能会手动或者使用基于...
  • 为什么我们使用微服务架构微服务架构的优势与不足 首先我们看看为什么要考虑使用微服务 开发单体式应用 假设你正准备开发一款与Uber和Hailo竞争的出租车调度软件经过初步会议和需求分析你可能会手动或者使用基于...
  • SOA架构和微服务架构的区别

    万次阅读 多人点赞 2018-06-19 10:25:47
    1.SOA架构和微服务架构的区别首先SOA和微服务架构一个层面的东西,而对于ESB和微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。 1.SOA(Service Oriented Architecture)“面向...

    1.SOA架构和微服务架构的区别

    首先SOA微服务架构一个层面的东西,而对于ESB微服务网关是一个层面的东西,一个谈到是架构风格和方法,一个谈的是实现工具或组件。

     1.SOA(Service Oriented Architecture)“面向服务的架构”:他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程中。各个服务之间 通过网络调用。

     2.微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

     微服务架构 = 80%的SOA服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想

    2.ESB和微服务API网关。

    1.ESB(企业服务总线),简单 来说 ESB 就是一根管道,用来连接各个服务节点。为了集 成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通;

    2.API网关:API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。

     

    3.SOA架构特点:

    系统集成:站在系统的角度,解决企业系统间的通信问 题,把原先散乱、无规划的系统间的网状结构,梳理成 规整、可治理的系统间星形结构,这一步往往需要引入 一些产品,比如 ESB、以及技术规范、服务管理规范; 这一步解决的核心问题是【有序】

    系统的服务化:站在功能的角度,把业务逻辑抽象成 可复用、可组装的服务,通过服务的编排实现业务的 快速再生,目的:把原先固有的业务功能转变为通用 的业务服务,实现业务逻辑的快速复用;这一步解决 的核心问题是【复用】

    业务的服务化:站在企业的角度,把企业职能抽象成 可复用、可组装的服务;把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;“前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。第三步,则是以业务驱动把一个业务单元封装成一项服务。这一步解决的核心问题是【高效】

    4.微服务架构特点:

    1.通过服务实现组件化

    • 开发者不再需要协调其它服务部署对本服务的影响。

    2.按业务能力来划分服务和开发团队

    • 开发者可以自由选择开发技术,提供 API 服务

    3.去中心化

    • 每个微服务有自己私有的数据库持久化业务数据
    • 每个微服务只能访问自己的数据库,而不能访问其它服务的数据库
    • 某些业务场景下,需要在一个事务中更新多个数据库。这种情况也不能直接访问其它微服务的数据库,而是通过对于微服务进行操作。
    • 数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。

    4.基础设施自动化(devops、自动化部署)

    • 的Java EE部署架构,通过展现层打包WARs,业务层划分到JARs最后部署为EAR一个大包,而微服务则打开了这个黑盒子,把应用拆分成为一个一个的单个服务,应用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中,通过轻量的通讯机制联系,经常是基于HTTP资源API,这些服务基于业务能力构建,能实现集中化管理(因为服务太多啦,不集中管理就无法DevOps啦)。

    5.主要区别:

    功能

    SOA

    微服务

    组件大小

    大块业务逻辑

    单独任务或小块业务逻辑

    耦合

    通常松耦合

    总是松耦合

    公司架构

    任何类型

    小型、专注于功能交叉团队

    管理

    着重中央管理

    着重分散管理

    目标

    确保应用能够交互操作

    执行新功能、快速拓展开发团队

     

    6.Dubbo服务的最佳实践

     分包

    • 服务接口、请求服务模型、异常信息都放在api里面,符合重用发布等价原则,共同重用原则
    • api里面放入spring 的引用配置。 也可以放在模块的包目录下。

    粒度

    • 尽可能把接口设置成粗粒度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。否则就会涉及到分布式事务
    • 服务接口建议以业务场景为单位划分。并对相近业务做抽象,防止接口暴增
    • 不建议使用过于抽象的通用接口  T T<泛型>,接口没有明确的语义,带来后期的维护

    版本

    • 每个接口都应该定义版本,为后续的兼容性提供前瞻性的考虑 version (maven -snapshot)
    • 建议使用两位版本号,因为第三位版本号表示的兼容性升级,只有不兼容时才需要变更服务版本
    • 当接口做到不兼容升级的时候,先升级一半或者一台提供者为新版本,再将消费全部升级新版本,然后再将剩下的一半提供者升级新版本

    预发布环境

    推荐用法

    • 在provider端尽可能配置consumer端的属性
    • 比如timeout、retires、线程池大小、LoadBalance

     配置管理员信息

    • application上面配置的owner 、 owner建议配置2个人以上。因为owner都能够在监控中心看到

    配置dubbo缓存文件

    • 注册中心的列表
    • 服务提供者列表


    参考文献: 

    http://www.uml.org.cn/zjjs/201708083.asp

    https://zhidao.baidu.com/question/1899225333752310100.html

    http://blog.sina.com.cn/s/blog_493a84550102wq50.html

     

     

     

     


    展开全文
  • 包含轻量级微服务架构(上/下),微服务:从设计到部署,微服务架构与实践四本。
  • 在之前咱们有介绍过,使用微服务架构有很多好处,并且在各个方面都有其独特的优势,但是,每一件事情都不是绝对的,使用微服务架构同时也充满着挑战。因此,我们必须在开始进行微服务架构设计时,进行全盘考虑,权衡...

    前言

    在之前咱们有介绍过,使用微服务架构有很多好处,并且在各个方面都有其独特的优势,但是,每一件事情都不是绝对的,使用微服务架构同时也充满着挑战。因此,我们必须在开始进行微服务架构设计时,进行全盘考虑,权衡利弊,才能做出合理的选择,取得最佳的设计效果。

    在微服务架构设计中,对复杂系统进行拆分之后,会不会产生一些新的问题呢?比如微服务之间的相互调用和通信会不会很复杂?由于每个微服务都有独立的数据库,那么分散的数据管理怎么保证数据的一致性?如果单个微服务的功能变更,会不会影响到多个微服务的正常运行?诚然,这些问题是确实存在的,总结起来包括如下几点:

    • 微服务的粗细粒度不好把握。
    • 分布式的微服务增加了服务之间相互调用及其通信的复杂性。
    • 分散的数据管理难以保证数据的一致性。
    • 由多个微服务组成的系统会增加集成测试的复杂性。
    • 单个服务的变更可能会影响到多个服务。
    • 部署的复杂性。

    那么应该如何做才能解决上面提到的问题,并且能充分发挥微服务架构的优势,以达到一种扬长避短的目的呢?

     

    合理划分微服务

    微服务架构设计的首要任务就是怎么合理地划分微服务,即怎么围绕业务功能来创建微服务。在进行微服务划分时,有关微服务粗细粒度的考虑,建议在平台创建的初始阶段,可以使用粗粒度的方法按业务功能进行划分。然后,随着业务的发展及其运营的情况,再依据发展规模考虑是否继续细分。下面将使用水平划分法和垂直划分法两种方法相结合的方式来创建微服务。

    一方面, 在水平方向上,按业务功能不同来划分微服务,并把这次划分所创建的微服务称为Rest API微服务。Rest API微服务负责业务功能的行为设计,主要完成数据管理方面的工作,并通过使用Rest协议对外提供接口服务。

    另一方面,在垂直方向上,再以Rest API微服务为基础实现前后端分离设计,创建Web UI微服务。Web UI微服务不直接访问数据,而只专注于人机交互界面的设计,它的数据存取将通过调用Rest API微服务来完成。

    这样,经过两次微服务划分,我们就可以创建出Rest API和Web UI两种类型的微服务,也就是说,我们只要使用两种类型的微服务,就可以构成一个复杂的业务系统。

    使用Rest API和Web UI微服务,再结合高性能和高并发的设计,并通过微服务的多副本发布,就可以构成一-个能适应任何规模访问的多维的稳定牢固的网格结构,并且这个网格结构还具有自由伸缩的特性,可以根据业务的发展规模进行缩编或者进行扩充,这样也就可以非常容易地搭建一个可持续扩 展的系统平台。

    微服务治理

    微服务架构的实施,将会产生出越来越多的微服务,而微服务的独立自主性及其设计的扁平化管理方法,都给每个微服务的开发、部署和更新提供了更大的灵活性,所以微服务的运行环境、服务间的相互调用将会变得越来越复杂。因此必须有一些组件和服务来对运行中的微服务进行有效治理,才能在一个庞大的分 布式环境中保证每个微服务的运行和服务间的调用处在一种有序而不杂乱、稳定而高效的状态之中。

    Spring Cloud工具套件使用了基于Netlix OSS的一-些基础组件来实现微服务治理,这些组件主要包括:

    注册管理服务组件Eureka,提供服务注册和发现的功能。负载均衡服务组件Ribbon,提供负载均衡调度管理的功能。边缘代理服务组件Zul,提供网关服务和动态路由的功能。断路器组件Hystrix,提供容错机制、服务降级、故障转移等功能。聚合服务事件流组件Turbine,可用来监控集群中服务的运行情况。日志收集组件Sleuth,可以通过日志收集提供对服务间调用进行跟踪管理的功能。配置管理服务组件Config,提供统- -的配置管理服务功能。通过Spring Cloud的工具组件进行微服务治理,微服务的运行就将处在一种有序可控的范围之中,微服务之间的相互调用和通信就会变得非常简单,并且快速而高效。

    Rest API微服务设计

     

    通过围绕业务功能使用水平划分方法划分出来的Rest API 微服务是一个独立的小应用,这种小应用具有独立的数据库,可以独立部署和独立运行。也就是说,每个Rest API微服务是完全独立自主的。

    Rest API微服务需要实现两方面的功能:一方面,对内实现数据管理的功能;另一方面,对外提供API调用。

    Rest API微服务的实现所体现出来的设计容易、开发简单、访问高效的特点,非常适合使用敏捷开发方法,也可以适应快速迭代和多副本发布的要求。

    在我们的微服务架构设计中,Rest API微服务就相当于数据库调用的一个中间件,它的调用性能将对整个系统的性能起到决定性的作用。所以,高性能的Rest API微服务设计,就是微服务架构最佳设计中的一个重点所在。

    Web UI微服务设计

    Web UI微服务是一个前端设计, 它也可以使用Node.js、Angularjis或Vuejis等前端设计工具来进行开发。这里推荐使用Spring- Boot-Web来开发Web UI 微服务,因为这样会更为简便和快速,并且与Spring Cloud工具也能够取得更多的默契和更多方面的搭配。

    Web UI微服务的设计,包含了两个方面的功能:一方面实现对Rest API微服务的调用;另一方面是用户界面设计。Web UI微服务将面对最终用户,所以它必须能够适应规模化的访问。

    微服务之间调用规则设计

     

    为了保证各个微服务的独立性,并减少通信的复杂性,提高微服务之间的调用效率,我们对微服务之间的调用,做出了如下几种约定。

    1.通过Web UI调用Rest API

    服务之间的调用,主要是指Web UI微服务对Rest API微服务的调用。一个Web UI在一次调用之中,可以同时调用多个Rest API,并且这种调用将通过高并发设计来实现,即多个调用将会由不同的线程所执行,所以即使是多个调用,也不会影响程序的执行效率。

    2. Rest API之间只能通过MQ进行互相通信

    为了保证Rest API的高性能特性,同时避免因为一个Rest API的功能变更对其他Rest API的影响,所以禁止在Rest API之间进行相互调用。Rest API之间如果需要进行通信,可以使用异步消息来实现,即通过消息总线实现异步通信。

    3. Web UI之间可使用与之对应的实例进行相互跳转

    Web UI之间不进行相互调用,但可以进行相互跳转,这种跳转不是直接使用地址栏的链接来进行的,而是通过注册实例实现跳转,当一个注册实例有多个副本时,将可进行负载均衡管理。

    数据最终一致性设计

    集中式的数据管理可以在一个事务中完成,所以能保证数据的高一致性。对于微服务的多服务架构,数据将由不同的微服务进行分散管理,所以要保证数据的一致性,必须有合理的设计。

    假如我们有商品和订单两个微服务,那么在订单服务中生成订单时,将需要在商品服务中进行库存减少的操作,而在订单服务中进行订单查询时,将有可能需要在商品服务中查询订单相关的商品信息,这就涉及不同微服务中数据一致性的问题。

    我们可以依据CAP原理的BASE理论来实现数据最终一致性设计。CAP ( Consistency, Availability, Partition tolerance)即一致性、可用性、分区容错性三者不可兼得。

    BASE ( Basically Available, Soft state, Eventually consistent)即基本可用、软状态、最终一致性。

    BASE 是对CAP中一致性和可用性进行权衡的结果。

    数据最终一致性设计具体的实现主要由两种类型的操作完成: 一种是通过调用各个Rest API实现实时同步操作;另一种是使用消息通道以事件响应的方式进行异步处理。

    比如在商品服务和订单服务的例子中,当用户下单时,即同时调用两个服务的RestAPI,一方面,通过订单服务的Rest API生成订单,另一方面通过商品服务的Rest API更新库存数量。而当订单状态修改时,即由订单服务的Rest API发布一个异步消息,商品服务的Rest API通过订阅消息来执行相应的更新操作。

    分布式集群架构设计

    通过微服务的治理环境,使用多副本发布的每个微服务,最终都将被自动纳入到微服务的负载均衡管理体系之中,这些微服务应用与我们搭建的数据库集群、分布式文件系统等集群一起构成一个分布式架构的集群体系

    微服务分布式集群体系结构

    这个集群体系将由很多不同的服务器所组成,这些服务器既可以分布在同一个局域网之中,也可以进行跨区域、跨机房分布,组成一个庞大的分布式体系结构。总之,使用分布式集群架构设计,可以搭建一个稳定可靠并可持续扩展的系统平台。

    微服务运行环境安全设计

    系统的安全设计包括防火墙设计、防攻击设计、访问控制设计、数据保密设计等各个方面的内容。而防火墙设计是系统安全的第一道屏障,我们将使用防火墙为微服务架构的服务器组建提供-一个安全可靠的分布式环境

    微服务运行环境安全设计网络拓扑结构

    使用防火墙,我们可以组建一个局域网环境,在这个局域网环境之中,各种服务器的组建将会更加容易,服务器的配置会更加简单,服务之间的通信也会更加方便和快速。

    使用防火墙,我们还可以将不同区域、不同地房的服务器通过VPN连接起来,提供一种更加安全的访问方式。

    后记

    本文介绍了怎么围绕业务功能来进行合理地划分微服务的方法,并在此基础上创建了两种类型的微服务,即专门用来存取数据的Rest API微服务和主要实现前端设计的Web UI微服务,使用这两种类型的微服务,通过微服务治理,并结合使用数据库集群设计、缓存设计、分布式文件系统设计、微服务的集群设计、安全的分布式环境设计等一系列分布式的架构设计,就可以构建成一个微服务架构的最佳设计,并在微服务架构本身所体现出来的优势和缺点之间进行权衡与调整,最终充分发挥微服务架构的绝对优势。

    予人玫瑰,手有余香。喜欢小编的整理的话,请多多点赞评论分享啊,关注小编,你们的支持就是小编最大的动力!!!

    展开全文
  • 微服务架构理解及微服务架构局限性  虽然微服务是降低整体结构的最佳方式。然而,它有其自身的一些缺点。但在得出任何结论之前,让我们来看看其中的一些。 1.开发环境超载  随着应用程序及其...
  • 微服务架构图得出如下结论: 传统的单体应用架构功能集中,代码和数据中心化,一个发布包部署后运行在同一个进程中的应用程序。 复杂性高:由于是单个归档文件,所以整个项目文件包含的模块非常多,导致模...
  • 非常好的文档介绍微服务和微服务架构基础知识
  • 重识微服务架构

    2021-02-25 12:53:39
    虽然已经红了很久,但是“微服务架构”正变得越来越重要,也将继续火下去。各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,422
精华内容 74,568
关键字:

微服务架构