微服务架构 订阅
微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说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支撑微服务。
  • 说到微服务架构已经不是热词了,早就已经风靡于互联网 IT 圈了,作者本人也是长期基于微服务架构下进行应用架构设计、实施,本文只关注微服务架构优缺点,同时,说说那些才是真正的痛点,至于什么是微服务架构和...

    说到微服务架构已经不是热词了,早就已经风靡于互联网 IT 圈了,作者本人也是长期基于微服务架构下进行应用架构设计、实施,本文只关注微服务架构优缺点,同时,说说那些才是真正的痛点,至于什么是微服务架构和微服务架构由来不是本文讨论的重点。

    4fdfef1c15a6d703e681b1a40fe60bc7.png

    单体应用架构-结构图

    8f0369e4b86cfd2ed9d53d0207f4833e.png

    微服务架构-结构图

    微服务架构也不是拍脑袋一下想出来,说的好听的是演进,也是被逼出来的,准确的说是从传统的单体应用拆分而来的,先说说微服务的有哪些好处呢?

    微服务架构的优点

    1. 系统间相对独立:系统之间相对独立,各个子系统的发布或者故障异常,不会影响整个系统不可用。

    2. 业务的切分:降低了单个系统的复杂性,各个团队按业务进行划分,各自负责独立子系统(建议按领域模型进行划分)。

    3. 数据的独立:各自团队负责各自系统的数据,可做到核心业务数据与非核心隔离,不会因为个别系统数据丢失,而导致整体受损。

    4. 代码的独立:各自团队负责各自微服务的代码维护,互相不会影响。快速对于系统进行迭代演进、及时修复系统漏洞。

    5.针对性优化:每个系统专注自身业务,做更针对性的性能优化和服务扩容,如:电商系统用户查看商品 较多,实际下单相对较少。

    6. 学习成本低: 各自团队的开发人员 只需要专注自身业务领域,不用向之前了解整个系统,开发起来举步维艰,特别是新人需要投入很长时间进行业务学习和代码熟悉。

    对于微服务架构优点而言,很多同学都可以侃侃而谈,即使不懂的小白也认为微服务架构是高大上的,咔咔咔拆了一堆的微服务, 作为技术人员更应该关注的微服务架构缺点,特别是高级工程师和架构师的角色。接下来说说微服务架构给我们带来哪些问题:

    微服务架构的缺点

    1. 数据一致性问题:各个子系统一般采用RESTFul 或 RPC方式等交互,在网络分区情况下,可能存在部分系统不可用或请求超时,引发出分布式事务问题;

    2. 增加开发成本:每系统都需要1个或多个团队进行开发、测试、构建、版本发布、部署,对于公共事务都要重复经历很多遍,无形中也增加开发成本;

    3. 加大维护的难度:拆分后子系统之前交互比较复杂,一个用户请求涉及多个子系统,某个环节异常很难发现和定位,分析、关注上、下游系统整体链路,需要引入全局日志和链路跟踪方便定位问题;

    4. 物理资源开销大: 每个子系统都需要各自独享对应物理资源, ,如:Web容器、数据库、缓存和中间件,无疑给整个系统带来高额成本开销;

    5. 影响整体性能:单体应用架构都是本地内部调用,微服务的间通过REST、RPC等形式进行交互,其实,性能瓶颈往往大部分就是很多不合理的互相调用,还有相互调用频繁;

    说到此会很多同学问什么时候采用微服务架构,以及采用微服务架构带来以上问题 如何解决呢? 后续作者会针对以上问题进行逐个解答,并给出对应成熟的解决方案;

    展开全文
  • 关于微服务架构的定义众说纷纭,因此我摘取了几个描述的比较清晰的定义在这供参考。 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

    展开全文
  • 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

     

     

     

     


    展开全文
  • Spring Cloud 微服务总体架构图Spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,Spring cloud中各个组件在微服务架构中扮演的角色如图所示。spring-cloud-aws:用于简化整合 Amazon Web Service...

    Spring Cloud 微服务总体架构图

    Spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,Spring cloud中各个组件在微服务架构中扮演的角色如图所示。spring-cloud-aws:用于简化整合 Amazon Web Service 的组件spring-cloud-bus:事件、消息总线。

    模板来源:https://www.iodraw.com/template/spring-cloud

    984cafe5b5470b773f58bf1cacadbaa6.png

    项目微服务架构图

    微服务架构根据目前产品存在的问题,针对快速开发、海量用户、大量数据、低延迟等互联网应用的实际需要,通过对业务架构、系统架构、基础架构、技术架构进行设计,彻底解决系统解耦、性能低下等问题,而且支持云计算部署,可以满足高并发、高可用、高稳定。微服务并没有一个官方的定义,可以理解为一种架构风格。

    模板来源:https://www.iodraw.com/template/soa

    a7cd846f6b4890e2116b300152638c0f.png

    大数据管理数据处理过程图

    大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察力。大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。随着业务的增长,大量和流程、规则相关的非结构化数据也爆发式增长。

    模板来源:https://www.iodraw.com/template/big-data

    4ea347a9c4dbee01a3a166b07f1c9b4c.png

    产品开发流程图

    产品开发流程(Product Development Process)产品开发流程是指企业用于想像、设计和商业化一种产品的步骤或活动的序列。产品开发流程涉及的人员从产品经理到设计师、前端、后端等等一系列人员,这篇文章主要关于产品开发的完整流程,希望对各个工作岗位上的人有借鉴意义。

    模板来源:https://www.iodraw.com/template/product

    fcb063f79398e6013c62614bd7b1274e.png

    阿里巴巴数据中台全景图

    阿里是数据中台概念的首先提出者,其案例更具分析意义。从阿里巴巴数据中台全景图可以看出,阿里的数据中台包括了计算与存储平台、数据资产管理、智能数据研发、统一数据中心中间件(OneService)四大模块,最上层支撑着阿里数据、数据大屏、生意参谋等大数据应用。

    模板来源:https://www.iodraw.com/template/alibaba

    ee64857a5ad2c88680c8060c2bb8c214.png

    Web开发技术架构图

    大型web系统架构动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册。1、学习Web开发原理,包括MVC/MTV等Web框架; 2、学习Django Web框架,从技术原理到项目实践。

    模板来源:https://www.iodraw.com/template/web

    446d7220c19aea5c5db941b1b863311a.png

    互联网工作原理拓扑图

    互联网工作原理拓扑图模板,计算机网络是由很多台计算机组成的, 要实现网络之间传输数据, 必须要做两件事, 数据传输目的地址和保证数据迅速可靠传输的措施。计算机网络是由许多计算机组成的,要实现网络的计算机之间传输数据,必须要做两件事,数据传输目的地址和保证数据迅速可靠传输的措施。

    模板来源:https://www.iodraw.com/template/internet

    b2809f3a279ccc01cd0dab74f3a1c255.png

    平台数据架构流程图

    标准大数据平台架构,标准大数据平台架构,大数据平台架构,数据仓库,数据集市,大数据平台层级结构,数据挖掘,举报,包含该模板的分享。数据架构设计(数据架构组) 概述 总体描述 相对于业务架构和应用架构,数据架构在总体架构中处于基础和核心地位。首先应根据业务架构分析来定义数据架构,然后将数据架构结...

    模板来源:https://www.iodraw.com/template/data-architecture

    e2f878af12c3731cb86e7e777598595a.png

    树状网络拓扑图

    树型拓扑(tree topology):一种类似于总线拓扑的局域网拓扑。树型网络可以包含分支,每个分支又可包含多个结点。树状拓扑结构是一种分级结构。在树状结构的网络中,任意两个节点之间不产生回路,每条通路都支持双向传输、这种结构的特点是扩充方便、灵活,成本低,易推广,适合于分主次或分等级的层级...

    模板来源:https://www.iodraw.com/template/tree-topology

    9f9a9aef5b0bdda38e27fda411c18a91.png

    云平台整体架构图

    云计算的体系结构由5部分组成,分别为应用层,平台层,资源层,用户访问层和管理层,云计算的本质是通过网络提供服务,所以其体系结构以服务为核心。公认的云架构是划分为基础设施层、平台层和软件服务层三个层次的,对应名称为IaaS,PaaS和SaaS。

    模板来源:https://www.iodraw.com/template/cloud

    5196f0c2b537fa7055753eee48b8e827.png
    展开全文
  • 包含轻量级微服务架构(上/下),微服务:从设计到部署,微服务架构与实践四本。
  • 微服务架构理解及微服务架构局限性  虽然微服务是降低整体结构的最佳方式。然而,它有其自身的一些缺点。但在得出任何结论之前,让我们来看看其中的一些。 1.开发环境超载  随着应用程序及其...
  • 在之前咱们有介绍过,使用微服务架构有很多好处,并且在各个方面都有其独特的优势,但是,每一件事情都不是绝对的,使用微服务架构同时也充满着挑战。因此,我们必须在开始进行微服务架构设计时,进行全盘考虑,权衡...
  • https://www.cnblogs.com/fangfuhai/p/7065847.html 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计(微服务架构实施原理)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,335
精华内容 19,734
关键字:

微服务架构