微服务架构 订阅
微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说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

     

     

     

     


    展开全文
  • 包含轻量级微服务架构(上/下),微服务:从设计到部署,微服务架构与实践四本。
  • 1.微服务架构是什么? 答:微服务架构(Microservice Architecture)是一种架构概念。通过将功能分解到各个离散的服务中心以实现对庞大复杂服务的解耦。 2. 微服务的特殊性? 答 : 原子服务,服务够小,而且尽...

    1.微服务架构是什么?

    答:微服务架构(Microservice Architecture)是一种架构概念。通过将功能分解到各个离散的服务中心以实现对庞大复杂服务的解耦。

     

    2. 微服务的特殊性?

    答 : 原子服务,服务够小,而且尽可能的合理分拆。

            高密度部署,节点多,自动化部署。

            敏捷交付,开发周期短,快速开发,快速上线。

            微自治,服务自管理。

    3. 什么时候需要?

    答:随着开发的进行,系统项目代码变得越来越多,运维部署变得越来越麻烦。小版本交付,一般是维护自己公司的产品,不适合做为乙方的开发。项目有高性能和高可靠的要求。

     

    4. 核心要素?

    答:微服务必须要有 服务的注册和发现,服务调用安全。负载均衡。

    5. 微服务的实现技术:主要有 Dubbo 和 SpringCloud ,Duboo不如 SpringCloud 全面。

    6. Hystrix 熔断机制,有服务降级的机制。如果某个service 堵塞了,线程不会一直堵塞,会返回一个处理结果。此时可以防止占用资源,通过线程池的机制实现资源隔离。熔断机制,可以通过设置参数在服务经常不可达的情况下,不再请求资源。

    假如 设置参数 50%,当请求某个service,不可达/请求树 = 50%的情况下,下一次的访问将不再发送请求,而且直接返回失败结果。等熔断恢复之后,再重新开始测试请求,等测试请求稳定之后,service开始正常运行。

     

    Q: 服务之间的调用,如果保证安全性?

    A:微服务部署在内网中。

    Q:内网 直接发送 HTTP 请求,就可以请求到某个service,是不是不安全的?

    A: 可以通过Docker 或者 IP白名单来限制访问。

    思考: 微服务需要搭建其来,而且 云服务器越来越流行,我认为微服务不能是部署在 内网的服务,而服务之间的安全保证是要依靠 API gateway 或者 Docker 或者 其他方式 来保证的。

     

     

    微服务的 Docker 部署结构是什么样子的?

     

    扩展学习:

    SOA、docker、DevOps、灰度测试、一致性事务、熔断、自恢复、蓝绿部署、  蓝云、安恒、银弹。

     

     

     

     

    展开全文
  • 微服务架构理解及微服务架构局限性  虽然微服务是降低整体结构的最佳方式。然而,它有其自身的一些缺点。但在得出任何结论之前,让我们来看看其中的一些。 1.开发环境超载  随着应用程序及其...
  • 在之前咱们有介绍过,使用微服务架构有很多好处,并且在各个方面都有其独特的优势,但是,每一件事情都不是绝对的,使用微服务架构同时也充满着挑战。因此,我们必须在开始进行微服务架构设计时,进行全盘考虑,权衡...

空空如也

1 2 3 4 5 ... 20
收藏数 46,689
精华内容 18,675
关键字:

微服务架构