精华内容
下载资源
问答
  • SpringCloud微服务架构学习(二)常见微服务架构   1.Dubbo 阿里开源微服务框架 官网地址:http://dubbo.apache.org/en-us/ 简介: Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000...

    SpringCloud微服务架构学习(二)常见的微服务架构

     

    1.Dubbo 阿里开源微服务框架

    官网地址:http://dubbo.apache.org/en-us/
    简介:
    Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

    其核心部分包含:

    • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
    • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
    • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    Dubbo架构图(官方版本)
    在这里插入图片描述

    Dubbo架构图(亲民版)
    在这里插入图片描述

    Dubbo框架配套

    • 通信方式:rpc(长链接)
    • 注册中心:zookeper/redis
    • 配置中心:diamond

    2.SpringCloud 微服务框架

    官网地址:http://spring.io/projects/spring-cloud
    简介:
    SpringCloud是spring家族提供的全家桶,他是基于SpringBoot的微服务框架,里面的每个组件其实就是一个个SpringBoot应用,SpringCloud将他们很好的整合起来。

    SpringCloud架构图(官方版)
    在这里插入图片描述

    SpringCloud架构图(亲民版)
    在这里插入图片描述

    SpringCloud微服务框架配套

    • 通信方式:http restful
    • 注册中心:eruka/consul
    • 配置中心:config
    • 断路器:hystrix
    • 网关:zuul
    • 分布式追踪系统:sleuth+zipkin
    展开全文
  • ├─第一模块 :微服务安全架构与实践 │ 01.第一模块课程介绍.mp4 │ 02.微服务安全要解决什么问题.mp4 │ 03.白话 OAuth2.mp4 │ 04.OAuth2 的正式定义.mp4 │ 05.OAuth2 有哪些典型模式.mp4 │ 06.OAuth2 模式该...

    ├─第一模块 :微服务安全架构与实践
    │ 01.第一模块课程介绍.mp4
    │ 02.微服务安全要解决什么问题.mp4
    │ 03.白话 OAuth2.mp4
    │ 04.OAuth2 的正式定义.mp4
    │ 05.OAuth2 有哪些典型模式.mp4
    │ 06.OAuth2 模式该如何选型.mp4
    │ 07.Spring Security OAuth2 架构简介.mp4
    │ 08.【实验】授权码模式授权服务器.mp4
    │ 09.【实验】简化模式授权服务器.mp4
    │ 10.【实验】密码模式授权服务器.mp4
    │ 11.【实验】客户端模式授权服务器.mp4
    │ 12.实验一扩展环节.mp4
    │ 13.【实验】Web 应用接入授权服务器.mp4
    │ 14.实验二扩展环节.mp4
    │ 15.什么是 JWT 令牌.mp4
    │ 16.【实验】授权服务器支持 JWT 令牌.mp4
    │ 17.实验三扩展环节.mp4
    │ 18.【实验】Android 无线应用接入授权服务器.mp4
    │ 19.【实验】AngularJS 单页应用实验和课后扩展.mp4
    │ 20.【实验】GitHub社交登录实验和课后扩展.mp4
    │ 21.【实验】OAuth2安全风险CSRF实验.mp4
    │ 22.OpenId Connect简介.mp4
    │ 23.下一代微服务安全架构.mp4
    │ 24.参考资源和后续课程预览.mp4
    │ 
    ├─第二模块 :微服务配置中心Apollo架构和实践
    │ 25.Apollo作者的产品介绍.mp4
    │ 26.第二模块课程介绍.mp4
    │ 27.课程概述.mp4
    │ 28.业务需求.mp4
    │ 29.配置定义和场景.mp4
    │ 30.开关驱动开发原理.mp4
    │ 31.携程 Apollo 配置中心介绍.mp4
    │ 32.Apollo核心概念.mp4
    │ 33.Apollo快速起步(Lab01).mp4
    │ 34.Apollo快速起步扩展实验.mp4
    │ 35.Apollo架构设计之服务器端.mp4
    │ 36.Apollo架构设计之客户端.mp4
    │ 37.Apollo架构设计之高可用和监控.mp4
    │ 38.Apollo分布式部署指南.mp4
    │ 39.Apollo Java客户端和多语言接入.mp4
    │ 40.Apollo Client API实操(Lab02).mp4
    │ 41.Apollo Client和Spring集成~XML方式(Lab03).mp4
    │ 42.Apollo Client和Spring集成~代码方式(Lab04).mp4
    │ 43.Apollo Client和Spring Boot集成(Lab05).mp4
    │ 44.Apollo开放平台接入实操(Lab06).mp4
    │ 45.Spring Cloud Config简介.mp4
    │ 46.Apollo vs Spring Cloud Config.mp4
    │ 47.Apollo FAQ和开发常见问题.mp4
    │ 48.参考资源和后续课程预览.mp4
    │ 
    ├─第三模块 :微服务网关Zuul架构和实践
    │ 49.第三模块课程介绍.mp4
    │ 50.Zuul网关和基本应用场景.mp4
    │ 51.Zuul网关高级应用场景.mp4
    │ 52.Zuul网关架构剖析.mp4
    │ 53.Zuul网关代码剖析(Code Review).mp4
    │ 54.Zuul网关过滤器管理工具(Code Review).mp4
    │ 55.前置过滤器实验(Lab01).mp4
    │ 56.路由过滤器实验(Lab02).mp4
    │ 57.后置过滤器实验(Lab03).mp4
    │ 58.Zuul网关对接Apollo(Lab04).mp4
    │ 59.Zuul网关生产部署实践.mp4
    │ 60.Zuul网关路由管理实践.mp4
    │ 61.基于网关的两层路由体系.mp4
    │ 62.Spring Cloud Zuul(Lab05).mp4
    │ 63.Zuul2.0简介.mp4
    │ 64.Zuul网关生产最佳实践.mp4
    │ 65.参考资源和后续课程预览.mp4
    │ 
    ├─第四模块 :微服务调用链监控CAT架构和实践
    │ 66.第四模块课程介绍.mp4
    │ 67.调用链监控业务需求.mp4
    │ 68.调用链监控原理.mp4
    │ 69.调用链监控产品和比较.mp4
    │ 70.点评 CAT 背景介绍.mp4
    │ 71.CAT 典型报表.mp4
    │ 72.CAT 告警简介.mp4
    │ 73.CAT 架构设计.mp4
    │ 74.【实验】CAT 本地部署.mp4
    │ 75.CAT 埋点案例和代码剖析(Code Review).mp4
    │ 76.【实验】CAT 埋点案例.mp4
    │ 77.Zuul 网关集成 CAT 代码剖析(Code Review).mp4
    │ 78.【实验】Zuul 网关集成 CAT.mp4
    │ 79.CAT 生产埋点实践.mp4
    │ 80.CAT 生产部署实践.mp4
    │ 81.CAT 生产治理实践.mp4
    │ 82.Spring Cloud Sleuth 简介.mp4
    │ 83.【实验】Spring Cloud Sleuth.mp4
    │ 84.参考资源和后续课程预览.mp4

    │ 
    ├─第五模块 :微服务容错限流Hystrix架构和实践
    │ 100.Hystrix 生产最佳实践.mp4
    │ 101.参考资源和后续课程预览.mp4
    │ 85.第五模块课程介绍.mp4
    │ 86.容错限流需求.mp4
    │ 87.容错限流原理.mp4
    │ 88.Netflix Hystrix 背景介绍.mp4
    │ 89.Hystrix 设计原理.mp4
    │ 90.Hystrix 主要概念.mp4
    │ 91.信号量 vs 线程池隔离.mp4
    │ 92.Hystrix 主要配置项.mp4
    │ 93.【实验】Hystrix 基础实验.mp4
    │ 94.Hystrix 模拟案例分析 (Code Review).mp4
    │ 95.【实验】Hystrix + Dashboard 实验(上).mp4
    │ 96.【实验】Hystrix + Dashboard 实验(下).mp4
    │ 97.网关集成 Hystrix (Code Review).mp4
    │ 98.【实验】Spring Cloud Hystrix 实验.mp4
    │ 99.Netflix Turbine 简介.mp4
    │ 
    ├─第六模块 :微服务注册发现Eureka Ribbon架构和实践
    │ 104.服务发现需求和模式(下).mp4
    │ 105.Netflix Eureka 和 Ribbon 背景介绍.mp4
    │ 106.Eureka 和 Ribbon 架构设计原理.mp4
    │ 107.【实验】Spring Cloud Eureka 和 Ribbon 基础实战.mp4
    │ 108.【实验】Spring Cloud Eureka 和 Ribbon 高级实验.mp4
    │ 109.Spring Cloud Eureka 和 Ribbon 主要配置项.mp4
    │ 110.Eureka进阶:自保护模式.mp4
    │ 111.Eureka进阶:健康检查和蓝绿部署.mp4
    │ 112.【实验】Spring Cloud Zuul、Eureka 和 Ribbon 集成实验(上).mp4
    │ 113.【实验】Spring Cloud Zuul、Eureka 和 Ribbon 集成实验(下).mp4
    │ 114.常用服务发现组件比较.mp4
    │ 115.ServiceMesh 和 Istio 简介.mp4
    │ 116.基于 Eureka、Zuul 和容器云的持续交付架构.mp4
    │ 117.参考资源和后续课程预览.mp4

    ├─第七模块 :微服务监控告警Prometheus架构和实践
    │ 119.监控模式分类.mp4
    │ 120.BusDevOps 和测量驱动开发 MDD.mp4
    │ 121.Prometheus 简介.mp4
    │ 122.Prometheus 架构设计.mp4
    │ 123.Prometheus 基本概念.mp4
    │ 124.【实验】Prometheus 起步查询实验(上).mp4
    │ 125.【实验】Prometheus起步查询实验(中).mp4
    │ 126.【实验】Prometheus起步查询实验(下).mp4
    │ 127.【实验】Prometheus + Grafana 展示实验(上).mp4
    │ 128.【实验】Prometheus + Grafana 展示实验(下).mp4
    │ 129.【实验】Prometheus + Alertmanager 告警实验(上).mp4
    │ 130.【实验】Prometheus + Alertmanager 告警实验(下).mp4
    │ 131.【实验】Java 应用埋点和监控实验.mp4
    │ 132.【实验】NodeExporter 系统监控实验.mp4
    │ 133.【实验】Spring Boot Actuator 监控实验.mp4
    │ 134.Prometheus 监控最佳实践.mp4
    │ 135.主流开源时序数据库比较.mp4
    │ 136.开源分布式监控平台 ZMon 简介.mp4
    │ 137.微服务监控体系总结.mp4
    │ 138.参考资源和后续课程预览.mp4
    │ 
    ├─第八模块 : 构建OAuth2服务器 – Golang语言实现
    │ 139.课程概述和背景.mp4
    │ 140.架构和设计.mp4
    │ 141.开发环境搭建.mp4
    │ 142.基础代码(code review).mp4
    │ 143.数据访问模块(code review).mp4
    │ 144.OAuth2服务模块(code review).mp4
    │ 145.Web服务模块(code review).mp4
    │ 146.启动流程(code review).mp4
    │ 147.起步准备实验(lab02).mp4
    │ 148.OAuth2授权码模式实验(lab03).mp4
    │ 149.OAuth2简化模式实验(lab04).mp4
    │ 150.OAuth2用户名密码模式实验(lab05).mp4
    │ 151.OAuth2客户端模式实验(lab06).mp4
    │ 152.OAuth2令牌校验实验(lab07).mp4
    │ 153.OAuth2令牌刷新实验(lab08).mp4
    │ 154.项目复盘和扩展环节.mp4
    │ 155.参考资源和后续课程预览.mp4 
    │ 
    └──第九模块:微服务架构综合案例分析
    156.课程概述和背景.mp4
    157.需求和架构设计.mp4
    158.开发环境搭建(lab01)(上).mp4
    159.开发环境搭建(lab01)(下).mp4
    160.项目业务代码(Code Review).mp4
    161.Apollo配置中心集成(lab02).mp4
    162.Zuul-Eureka-Ribbon-Hystrix集成(Code Review).mp4
    163.Gravitee OAuth2集成(lab03).mp4
    164.Zuul网关集中令牌校验(Code Review).mp4
    165.CAT调用链集成(lab04)(上).mp4
    166.CAT调用链集成(lab04)(下).mp4
    167.Demo展示(lab05)(上).mp4
    168.Demo展示(lab05)(下).mp4
    169.Prometheus监控集成(Code Review).mp4
    170.生产扩展环节.mp4
    171.课程复盘总结.mp4

    资料分享Q 2844366079

    展开全文
  • 微服务架构微服务架构最强讲解,那叫一个通俗易懂! 目录如下: 一、微服务架构介绍 二、出现和发展 三、传统开发模式和微服务的区别 四、微服务的具体特征 五、SOA和微服务的区别 六、如何具体实践微服务 七、常见...

    微服务架构微服务架构最强讲解,那叫一个通俗易懂!

    目录如下:
    一、微服务架构介绍
    二、出现和发展
    三、传统开发模式和微服务的区别
    四、微服务的具体特征
    五、SOA和微服务的区别
    六、如何具体实践微服务
    七、常见的微服务设计模式和应用
    八、微服务的优点和缺点
    九、思考:意识的转变
    十、参考资料和推荐阅读

    一、微服务架构介绍
      微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的
    类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
    概念: 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
    定义: 围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
    本质: 用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。
    二、出现和发展
      微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说是微服务的元年;
    越来越多的论坛、社区、blog以及互联网行业巨头开始对微服务进行讨论、实践,可以说这样更近一步推动了微服务的发展和创新。而微服务的流行,Martin Fowler功不可没。
    这老头是个奇人,特别擅长抽象归纳和制造概念。特别是微服务这种新生的名词,都有一个特点:一解释就懂,一问就不知,一讨论就打架。

    Martin Fowler是国际著名的OO专家,敏捷开发方法的创始人之一,现为ThoughtWorks公司的首席科学家。在面向对象分析设计、UML、模式、软件开发方法学、XP、重构等方面,都是世界顶级的专家,现为Thought
    Works公司的首席科学家。Thought
    Works是一家从事企业应用开发和——集成的公司。早在20世纪80年代,Fowler就是使用对象技术构建多层企业应用的倡导者,他著有几本经典书籍:《企业应用架构模式》、《UML精粹》和《重构》等。
    ———— 百度百科

    三、传统开发模式和微服务的区别
      先来看看传统的web开发方式,通过对比比较容易理解什么是Microservice Architecture。和Microservice相对应的,这种方式一般被称为Monolithic(单体式开发)。
    所有的功能打包在一个 WAR包里,基本没有外部依赖(除了容器),部署在一个JEE容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI等所有逻辑。
    在这里插入图片描述

    优点:
    ①开发简单,集中式管理
    ②基本不会重复开发
    ③功能都在本地,没有分布式的管理和调用消耗
    缺点:
    1、效率低:开发都在同一个项目改代码,相互等待,冲突不断
    2、维护难:代码功功能耦合在一起,新人不知道何从下手
    3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时
    4、稳定性差:一个微小的问题,都可能导致整个应用挂掉
    5、扩展性不够:无法满足高并发下的业务需求

    常见的系统架构遵循的三个标准和业务驱动力:
      1、提高敏捷性:及时响应业务需求,促进企业发展
      2、提升用户体验:提升用户体验,减少用户流失
      3、降低成本:降低增加产品、客户或业务方案的成本
    基于微服务架构的设计:
    目的: 有效的拆分应用,实现敏捷开发和部署
    在这里插入图片描述

    关于微服务的一个形象表达:
    X轴: 运行多个负载均衡器之后的运行实例
    Y轴: 将应用进一步分解为微服务(分库)
    Z轴: 大数据量时,将服务分区(分表)
    四、微服务的具体特征
    官方的定义:
    1、一些列的独立的服务共同组成系统
    2、单独部署,跑在自己的进程中
    3、每个服务为独立的业务开发
    4、分布式管理
    5、非常强调隔离性
    大概的标准:
    1、分布式服务组成的系统
    2、按照业务,而不是技术来划分组织
    3、做有生命的产品而不是项目
    4、强服务个体和弱通信( Smart endpoints and dumb pipes )
    5、自动化运维( DevOps )
    6、高度容错性
    7、快速演化和迭代
    五、SOA和微服务的区别
    1、SOA喜欢重用,微服务喜欢重写
      SOA 的主要目的是为了企业各个系统更加容易地融合在一起。说到SOA不得不说ESB(EnterpriseService Bus)。ESB是什么? 可以把ESB想象成一个连接所有企业级服务的脚手架。通过service broker,它可以把不同数据格式或模型转成canonical格式,把XML的输入转成CSV传给legacy服务,把SOAP 1.1服务转成 SOAP 1.2等等。它还可以把一个服务路由到另一个服务上,也可以集中化管理业务逻辑,规则和验证等等。它还有一个重要功能是消息队列和事件驱动的消息传递,比如把JMS服务转化成SOAP协议。各服务间可能有复杂的依赖关系。
      微服务 通常由重写一个模块开始。要把整个巨石型的应用重写是有很大的风险的,也不一定必要。我们向微服务迁移的时候通常从耦合度最低的模块或对扩展性要求最高的模块开始,把它们一个一个剥离出来用敏捷地重写,可以尝试最新的技术和语言和框架,然 后单独布署。它通常不依赖其他服务。微服务中常用的API Gateway的模式主要目的也不是重用代码,而是减少客户端和服务间的往来。API gateway模式不等同与Facade模式,我们可以使用如future之类的调用,甚至返回不完整数据。
    2、SOA喜欢水平服务,微服务喜欢垂直服务
      SOA 设计喜欢给服务分层(如Service Layers模式)。我们常常见到一个Entity服务层的设计,美其名曰Data Access Layer。这种设计要求所有的服务都通过这个Entity服务层来获取数据。这种设计非常不灵活,比如每次数据层的改动都可能影响到所有业务层的服务。而每个微服务通常有它自己独立的data store。我们在拆分数据库时可以适当的做些去范式化(denormalization),让它不需要依赖其他服务的数据。
    微服务 通常是直接面对用户的,每个微服务通常直接为用户提供某个功能。类似的功能可能针对手机有一个服务,针对机顶盒是另外一个服务。在SOA设计模式中这种情况通常会用到Multi-ChannelEndpoint的模式返回一个大而全的结果兼顾到所有的客户端的需求。
    3、SOA喜欢自上而下,微服务喜欢自下而上
      SOA 架构在设计开始时会先定义好服务合同(service contract)。它喜欢集中管理所有的服务,包括集中管理业务逻辑,数据,流程,schema,等等。它使用Enterprise Inventory和Service Composition等方法来集中管理服务。SOA架构通常会预先把每个模块服务接口都定义好。模块系统间的通讯必须遵守这些接口,各服务是针对他们的调用者。
    SOA架构适用于TOGAF之类的架构方法论。
      微服务 则敏捷得多。只要用户用得到,就先把这个服务挖出来。然后针对性的,快速确认业务需求,快速开发迭代。
    六、怎么具体实践微服务
    要实际的应用微服务,需要解决一下四点问题:
    1、客户端如何访问这些服务
    2、每个服务之间如何通信
    3、如此多的服务,如何实现?
    4、服务挂了,如何解决?(备份方案,应急处理机制)
    (1)客户端如何访问这些服务
      原来的Monolithic方式开发,所有的服务都是本地的,UI可以直接调用,现在按功能拆分成独立的服务,跑在独立的一般都在独立的虚拟机上的 Java进程了。客户端UI如何访问他的?
      后台有N个服务,前台就需要记住管理N个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不服务我们 拆分的理念,特别当前台是移动应用的时候,通常业务变化的节奏更快。
      另外,N个小服务的调用也是一个不小的网络开销。还有一般微服务在系统内部,通常是无 状态的,用户登录信息和权限管理最好有一个统一的地方维护管理(OAuth)。
    所以,一般在后台N个服务和UI之间一般会一个代理或者叫API Gateway,他的作用包括:
    ① 提供统一服务入口,让微服务对前台透明
    ② 聚合后台的服务,节省流量,提升性能
    ③ 提供安全,过滤,流控等API管理功能
      其实这个API Gateway可以有很多广义的实现办法,可以是一个软硬一体的盒子,也可以是一个简单的MVC框架,甚至是一个Node.js的服务端。他们最重要的作 用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合,不过API Gateway也有可能成为单点故障点或者性能的瓶颈。
    用过Taobao Open Platform(淘宝开放平台)的就能很容易的体会,TAO就是这个API Gateway。
    在这里插入图片描述

    (2)每个服务之间如何通信
      所有的微服务都是独立的Java进程跑在独立的虚拟机上,所以服务间的通信就是IPC(inter process communication),已经有很多成熟的方案。现在基本最通用的有两种方式:
    同步调用:
    ①REST(JAX-RS,Spring Boot)
    ②RPC(Thrift, Dubbo)
    异步消息调用(Kafka, Notify, MetaQ)
    在这里插入图片描述

    同步和异步的区别:
      一般同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。RESTful和RPC的比较也是一个很有意 思的话题。
    一般REST基于HTTP,更容易实现,更容易被接受,服务端实现技术也更灵活些,各个语言都能支持,同时能跨客户端,对客户端没有特殊的要求,只要封装了HTTP的SDK就能调用,所以相对使用的广一些。RPC也有自己的优点,传输协议更高效,安全更可控,特别在一个公司内部,如果有统一个 的开发规范和统一的服务框架时,他的开发效率优势更明显些。就看各自的技术积累实际条件,自己的选择了。
      而异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方,同时能保证调用方的服务体验,继续干自己该干的活,不至于被后台性能拖慢。不过需要付出的代价是一致性的减弱,需要接受数据最终一致性;还有就是后台服务一般要 实现幂等性,因为消息发送出于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验);最后就是必须引入一个独立的broker,如果公司内部没有技术积累,对broker分布式管理也是一个很大的挑战。
    (3)如此多的服务,如何实现?
      在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。服务之间如何相互感知?服务如何管理?
      这就是服务发现的问题了。一般有两类做法,也各有优缺点。基本都是通过zookeeper等类似技术做服务注册信息的分布式管理。当服务上线时,服务提供者将自己的服务信息注册到ZK(或类似框架),并通过心跳维持长链接,实时更新链接信息。服务调用者通过ZK寻址,根据可定制算法, 找到一个服务,还可以将服务信息缓存在本地以提高性能。当服务下线时,ZK会发通知给服务客户端。
    客户端做: 优点是架构简单,扩展灵活,只对服务注册器依赖。缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持,比如Dubbo。
    服务端做: 优点是简单,所有服务对于前台调用方透明,一般在小公司在云服务上部署的应用采用的比较多。
    在这里插入图片描述

    (4)服务挂了,如何解决
      前面提到,Monolithic方式开发一个很大的风险是,把所有鸡蛋放在一个篮子里,一荣俱荣,一损俱损。而分布式最大的特性就是网络是不可靠的。通过微服务拆分能降低这个风险,不过如果没有特别的保障,结局肯定是噩梦。所以当我们的系统是由一系列的服务调用链组成的时候,我们必须确保任一环节出问题都不至于影响整体链路。相应的手段有很多:
    ①重试机制
    ②限流
    ③熔断机制
    ④负载均衡
    ⑤降级(本地缓存)
    这些方法基本都很明确通用,比如Netflix的Hystrix:https://github.com/Netflix/Hystrix
    在这里插入图片描述

    七、常见的设计模式和应用
    有一个图非常好的总结微服务架构需要考虑的问题,包括:
    1、API Gateway
    2、服务间调用
    3、服务发现
    4、服务容错
    5、服务部署
    6、数据调用
    在这里插入图片描述

    六种常见的微服务架构设计模式:
    1、聚合器微服务设计模式
    这是一种最常见也最简单的设计模式:
    在这里插入图片描述

      聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。
    2、代理微服务设计模式
    这是聚合模式的一个变种,如下图所示:
    在这里插入图片描述

      在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。
    3、链式微服务设计模式
    这种模式在接收到请求后会产生一个经过合并的响应,如下图所示:
    在这里插入图片描述

      在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。
    因此,服务调用链不宜过长,以免客户端长时间等待。
    4、分支微服务设计模式
    这种模式是聚合器模式的扩展,允许同时调用两个微服务链,如下图所示:
    在这里插入图片描述

    5、数据共享微服务设计模式
      自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(monolithic application)”时,SQL数据库反规范化可能会导致数据重复和不一致。
    因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,如下图所示:
    在这里插入图片描述

      在这种情况下,部分微服务可能会共享缓存和数据库存储。不过,这只有在两个服务之间存在强耦合关系时才可以。对于基于微服务的新建应用程序而言,这是一种反模式。
    6、异步消息传递微服务设计模式
      虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应,如下图所示:
    在这里插入图片描述

    八、优点和缺点
    1、微服务的优点:
    关键点: 复杂度可控,独立按需扩展,技术选型灵活,容错,可用性高
    ① 它解决了复杂性的问题。它会将一种怪异的整体应用程序分解成一组服务。虽然功能总量 不变,但应用程序已分解为可管理的块或服务。每个服务都以RPC或消息驱动的API的形式定义了一个明确的边界;Microservice架构模式实现了一个模块化水平。
    ② 这种架构使每个服务都能够由专注于该服务的团队独立开发。开发人员可以自由选择任何有用的技术,只要该服务符合API合同。当然,大多数组织都希望避免完全无政府状态并限制技术选择。然而,这种自由意味着开发人员不再有义务使用在新项目开始时存在的可能过时的技术。在编写新服务时,他们可以选择使用当前的技术。此外,由于服务相对较小,因此使用当前技术重写旧服务变得可行。
    ③ Microservice架构模式使每个微服务都能独立部署。开发人员不需要协调部署本地服务的变更。这些变化可以在测试后尽快部署。例如,UI团队可以执行A | B测试,并快速迭代UI更改。Microservice架构模式使连续部署成为可能。
    ④ Microservice架构模式使每个服务都可以独立调整。您可以仅部署满足其容量和可用性限制的每个服务的实例数。此外,您可以使用最符合服务资源要求的硬件。
    2、微服务的缺点
    关键点(挑战): ,系统部署依赖,服务间通信成本,数据一致性,系统集成测试,重复工作,性能监控等
    ① 一个缺点是名称本身。术语microservice过度强调服务规模。但重要的是要记住,这是一种手段,而不是主要目标。微服务的目标是充分分解应用程序,以便于敏捷应用程序开发和部署。
    ② 微服务器的另一个主要缺点是分布式系统而产生的复杂性。开发人员需要选择和实现基于消息传递或RPC的进程间通信机制。此外,他们还必须编写代码来处理部分故障,因为请求的目的地可能很慢或不可用。
    ③ 微服务器的另一个挑战是分区数据库架构。更新多个业务实体的业务交易是相当普遍的。但是,在基于微服务器的应用程序中,您需要更新不同服务所拥有的多个数据库。使用分布式事务通常不是一个选择,而不仅仅是因为CAP定理。许多今天高度可扩展的NoSQL数据库都不支持它们。你最终不得不使用最终的一致性方法,这对开发人员来说更具挑战性。
    ④ 测试微服务应用程序也更复杂。服务类似的测试类将需要启动该服务及其所依赖的任何服务(或至少为这些服务配置存根)。再次,重要的是不要低估这样做的复杂性。
    ⑤ Microservice架构模式的另一个主要挑战是实现跨越多个服务的更改。例如,我们假设您正在实施一个需要更改服务A,B和C的故事,其中A取决于B和B取决于C.在单片应用程序中,您可以简单地更改相应的模块,整合更改,并一次性部署。相比之下,在Microservice架构模式中,您需要仔细规划和协调对每个服务的更改。例如,您需要更新服务C,然后更新服务B,然后再维修A.幸运的是,大多数更改通常仅影响一个服务,而需要协调的多服务变更相对较少。
    ⑥ 部署基于微服务的应用程序也更复杂。单一应用程序简单地部署在传统负载平衡器后面的一组相同的服务器上。每个应用程序实例都配置有基础架构服务(如数据库和消息代理)的位置(主机和端口)。相比之下,微服务应用通常由大量服务组成。例如,每个服务将有多个运行时实例。更多的移动部件需要进行配置,部署,扩展和监控。此外,您还需要实现服务发现机制,使服务能够发现需要与之通信的任何其他服务的位置(主机和端口)。传统的基于故障单和手动操作的方法无法扩展到这种复杂程度。因此,成功部署微服务应用程序需要开发人员更好地控制部署方法,并实现高水平的自动化。
    九、思考:意识的转变
      微服务对我们的思考,更多的是思维上的转变。对于微服务架构:技术上不是问题,意识比工具重要。
    关于微服务的几点设计出发点:
    1、应用程序的核心是业务逻辑,按照业务或客户需求组织资源(这是最难的)
    2、做有生命的产品,而不是项目
    3、头狼战队,全栈化
    4、后台服务贯彻Single Responsibility Principle(单一职责原则)
    5、VM->Docker (to PE)
    6、DevOps (to PE)
      同时,对于开发同学,有这么多的中间件和强大的PE支持固然是好事,我们也需要深入去了解这些中间件背后的原理,知其然知其所以然,在有限的技术资源如何通过开源技术实施微服务?
    最后,一般提到微服务都离不开DevOps和Docker,理解 微服务架构是核心,devops和docker是工具,是手段。

    综上仅个人总结,如有错误,欢迎指正!!
    如想继续了解更多程序知识的小伙伴们,请加我们程序媛小姐姐VX【lezijie007】或【lezijie002】暗号:11(申请不备注暗号拒绝添加好友哦!)

    展开全文
  • 本文盘点了四种常用的微服务架构方案,分别是ZeroC IceGrid、Spring Cloud、基于消息队列与Docker Swarm。ZeroC IceGrid微服务架构ZeroC IceGrid作为一种微服务架构,它基于RPC框架发展而来,具有良好的性能与分布式...

    本文盘点了四种常用的微服务架构方案,分别是ZeroC IceGrid、Spring Cloud、基于消息队列与Docker Swarm。

    ZeroC IceGrid微服务架构

    ZeroC IceGrid作为一种微服务架构,它基于RPC框架发展而来,具有良好的性能与分布式能力,如下所示是它的整体示意图。

    IceGrid具备微服务架构的如下明显特征。

    首先,微服务架构需要一个集中的服务注册中心,以及某种服务发现机制。IceGrid服务注册采用XML文件来定义,其服务注册中心就是Ice Registry,这是一个独立的进程,并且提供了HA高可用机制;对应的服务发现机制就是命名查询服务,即LocatorService提供的API,可以根据服务名查询对应的服务实例可用地址。

    其次,微服务架构中的每个微服务通常会被部署为一个独立的进程,当无状态服务时,一般会由多个独立进程提供服务。对应在IceGrid里,一个IceBox就是一个单独的进程,当一个IceBox只封装一个Servant时,就是一个典型的微服务进程了。

    然后,微服务架构中通常都需要内嵌某种负载均衡机制。在 IceGrid 里是通过客户端API内嵌的负载均衡算法实现的,相对于采用中间件Proxy转发流量的方式,IceGrid的做法更加高效,但增加了平台开发的工作量与难度,因为采用各种语言的客户端都需要实现一遍负载均衡的算法逻辑。

    如果你也想在IT行业拿高薪,可以参加我们的训练营课程,选择最适合自己的课程学习,技术大牛亲授,7个月后,进入名企拿高薪。我们的课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,群号为:71859422

    注:加群要求

    1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。

    2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

    3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

    4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

    5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

    6.小号或者小白之类加群一律不给过,谢谢。

    目标已经有了,下面就看行动了!记住:学习永远是自己的事情,你不学时间也不会多,你学了有时候却能够使用自己学到的知识换得更多自由自在的美好时光!时间是生命的基本组成部分,也是万物存在的根本尺度,我们的时间在那里我们的生活就在那里!我们价值也将在那里提升或消弭!Java程序员,加油吧

    最后,一个好的微服务架构平台应该简化和方便应用部署。我们看到 IceGrid提供了grid.xml 来描述与定义一个基于微服务架构的Application,一个命令行工具一键部署这个Application,还提供了发布二进制程序的辅助工具——icepatch2。下图显示icepatch2的工作机制,icepatch2server类似于FTP Sever,用于存放要发布到每个Node上的二进制代码与配置文件,而位于每个Node上的icepatch2client则从icepatch2server上拉取文件,这个过程中采用了压缩传输及差量传输等高级特性,以减少不必要的文件传输过程。客观地评价,在Docker技术之前,icepatch2这套做法还是很先进与完备的,也大大减少了分布式集群下微服务系统的运维工作量。

    如果基于IceGrid开发系统,则通常有三种典型的技术方案,下图展示了这三种技术方案。

    其中方案一是比较符合传统 Java Web 项目的一种渐进改造方案,Spring Boot 里只有Controller组件而没有数据访问层与Service对象,这些Controller组件通过Ice RPC方式调用部署在IceGrid里的远程的Ice微服务,面向前端包装为REST服务。此方案的整体思路清晰,分工明确。Leader在开源项目中给出了这种方式的一个基本框架以供参考:https://github.com/MyCATApache/mycat-ice。

    方案二与方案三则比较适合前端JavaScript能力强的团队,比如很擅长Node.js的团队可以考虑方案二,即用JavaScript来替代Spring Boot实现REST服务。主要做互联网App的系统则可以考虑方案三,浏览器端的JavaScript以HTML5的WebSocket技术与Ice Glacier2直接通信,整体高效敏捷。

    IceGrid在3.6版本之后还增加了容器化的运行方式,即Ice Node与Ice Registry可以通过Docker容器的方式启动,这就简化了IceGrid在Linux上的部署。对于用Java编写的Ice微服务架构系统,我们还可以借助Java远程类加载机制,让每台Node自动从某个远程HTTP Server下载指定的Jar包并加载相关的Servant类,从而实现类似Docker Hub的机制。下图显示了前面提到mycat-ice开源项目时给出的具体实现方案。

    Spring Cloud微服务架构

    Spring Cloud是基于Spring Boot的一整套实现微服务的框架,因此它只能采用Java语言,这是它与其他几个微服务框架的最明显区别。Spring Cloud是一个包含了很多子项目的整体方案,其中由Netflix开发后来又并入Spring Cloud的Spring Cloud Netflix是Spring Cloud微服务架构的核心项目,即可以简单地认为Spring Cloud微服务架构就是Spring Cloud Netflix,后面我们用Spring Cloud时如果不特意声明,就是指Spring Cloud Netflix。

    首先,Spring Cloud中的服务注册中心是Eureka模块,它提供了一个服务注册中心、服务发现的客户端,还有一个简单的管理界面,所有服务使用Eureka的服务发现客户端来将自己注册到Eureka中,如下所示为相关示意图,你会发现它很像之前第4章中的某个图。

    那么Spring Cloud是如何解决服务的负载均衡问题的呢?由于Spring Cloud的微服务接口主要是基于REST协议实现的,因此它采用了传统的HTTP Proxy机制。如下图所示,Zuul类似一个Nginx的服务网关,所有客户端请求都通过这个网关来访问后台的服务。

    Zuul从Eureka那里获取服务信息,自动完成路由规则的映射,无须手工配置,比如上图中的URL路径/customer/*就被映射到Customer这个微服务上。当Zuul转发请求到某个指定的微服务上时,会采用类似ZeroC IceGrid的客户端负载均衡机制,被称为Ribbon组件,下图给出了Zuul与Eureka的关系及实现服务负载均衡的示意图。

    如下所示是Spring Cloud微服务架构平台的全景图。我们看到它很明显地继承了Spring Framework一贯的思路——集大成!

    从图中来看,Spring Cloud 微服务架构平台集成了以下一些实际项目开发中常用的技术与功能模块。

    基于Spring Security的OAuth模块,解决服务安全问题。

    提供组合服务(Composite Services)的能力。

    电路断路器 Hystrix,实现对某些关键服务接口的熔断保护功能,如果一个服务没有响应(如超时或者网络连接故障),则Hystrix可以在服务消费方中重定向请求到回退方法(fallback method)。如果服务重复失败,则Hystrix会快速失败(例如直接调用内部的回退方法,不再尝试调用服务),直到服务重新恢复正常。

    监控用的Dashboard,可以简化运维相关的开发工作量。

    总体来说,Spring Cloud是替代Dubbo的一种好方案,虽然Spring Cloud是基于REST通信接口的微服务架构,而Dubbo以RPC通信为基础。对于性能要求不是很高的Java互联网业务平台,采用Spring Cloud是一个门槛相对较低的解决方案。

    基于消息队列的微服务架构

    除了标准的基于RPC通信(以及类RPC的通信如Http Rest、SOAP等)的微服务架构,还有基于消息队列通信的微服务架构,这种架构下的微服务采用发送消息(Publish Message)与监听消息(Subscribe Message)的方式来实现彼此之间的交互。下图是这种微服务架构下各个组件之间的交互示意图,我们看到消息中间件是关键,它负责连通各个微服务与UI组件,担任了整个系统互联互通的重任。

    基于消息队列的微服务架构是全异步通信模式的一种设计,各个组件之间没有直接的耦合关系,也不存在服务接口与服务调用的说法,服务之间通过消息来实现彼此的通信与业务流程的驱动,从这点来看,基于消息队列的微服务架构非常接近Actor模型。实际上,分布式的Actor模型也可以算作一种微服务架构,并且在微服务概念产生之前就已经存在很久了。下面是一个购物网站的微服务设计示意图,我们看到它采用了基于消息队列的微服务架构。

    网易的蜂巢平台就采用了基于消息队列的微服务架构设计思路,如下图所示,微服务之间通过RabbitMQ传递消息,实现通信。

    与上面几种微服务架构相比,基于消息队列的微服务架构并不多,案例也相对较少,更多地体现为一种与业务相关的设计经验,各家有各家的实现方式,缺乏公认的设计思路与参考架构,也没有形成一个知名的开源平台。因此,如果需要实施这种微服务架构,则基本上需要项目组自己从零开始去设计实现一个微服务架构基础平台,其代价是成本高、风险大,因此决策之前需要架构师“接地气”地进行全盘思考与客观评价。

    Docker Swarm微服务架构

    Docker Swarm其实是Docker公司“高仿”Google开源的Kubernetes微服务架构平台的一个产品,但一直无法跟上对手的脚步,在业界始终缺乏影响力。2016年发布Docker 1.12时,Docker Swarm就被强行集成到了Docker Engine中而不再作为单独的工具发布了,这类似当年微软推广IE浏览器的做法。不过即使这样,也难以掩盖Docker Swarm还没成名就已经陨落的事实。

    Docker Swarm的最初目标是将一些独立的Docker主机变成一个集群,如下图所示,我们通过简单的Docker命令行工具就能创建一个Swarm集群。

    后来随着Kubernetes微服务架构平台越来越火,Docker 公司开始努力让Swarm向着Kubernetes的方向靠拢,即变成一个基于容器技术的微服务平台。下面给出了Swarm集群的结构图。

    从图中我们看到一个Swarm集群中有两种角色的节点。

    Swarm Manager:负责集群的管理、集群状态的维持及调度任务(Task)到工作节点(Swarm Node)上等。

    Swarm Node:承载运行在Swarm集群中的容器实例,每个Node主动汇报其上运行的任务(Task)并维持同步状态。

    上图中的Docker Compose是官方编排(Orchestration)项目,它提供了一个YAML格式的文件,用于描述一个容器化的分布式应用,并且提供了相应的工具来实现一键部署的功能。下图给出了两节点的Couchbase集群对应的YAML文件定义,此Couchbase集群随后被部署到了Swarm集群中的两个Node节点上。

    注意上图左边YAML文件中的Services定义,Swarm manager节点给每个Service分配唯一的DNS名字,因此可以通过最古老又简单的DNS轮询机制来实现服务的发现与负载均衡,这明显借鉴了Kubernetes的做法。

    展开全文
  • 微服务架构

    2019-10-24 16:13:17
    今日总结了一下关于微服务架构的知识 目录如下 一、微服务架构介绍 二、出现和发展 三、传统开发模式和微服务的区别 四、微服务的具体特征 五、SOA和微服务的区别 六、如何具体实践微服务 七、常见的微服务设计模式...
  • SpringCloud微服务架构基础知识概述

    千人学习 2020-12-19 16:12:52
    微服务概述:从系统架构的演变,分布式核心知识,常见微服务架构; 2.SpringCloud微服务概述:微服务中的相关概念(服务注册 发现 负载均衡 熔断 链路追踪 api网关) 3.SpringCloud的框架中的核心组件介绍及Spring...
  • 微服务架构下的核心话题 (一):微服务架构下各类项目的顺势崛起 一、前言 毫无疑问,微服务架构的设计原则和核心话题是本文要讨论的重点,也是打算从零基础开始构建微服务架构需要事先考虑、规划的。一个好的产品...
  • 导语虽然已经红了很久,但是“微服务架构”正变得越来越重要,也将继续火下去。各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上来就是很有借鉴意义的干货...
  • 走进微服务架构--微服务架构概述

    千次阅读 2017-03-12 10:50:17
    微服务架构(MicroServices Architecture)是近几年来软件架构领域出现的高频词汇,它是基于传统的SOA架构演进而来的一种架构模。其提倡将传统的单体架构或分布式架构中的单体应用程序和服务划分成更小粒度的服务,...
  • 第一:Zero CIceGrid 微服务架构 Zero CIceGrid 也是一种微服务架构,好多人都清楚他的存在,它基于RPC框架发展而来,具体有良好的性能与分布式能力,如下图是它的整体示意图。 Icegrid具备微服务架构的如下明显...
  • 上次讲了微服务的前世今生(五):CAP 原则与 BASE 理论,这次我们再说微服务架构的前世今生(六):微服务架构带来的问题。 一、客户端如何访问服务? 传统的开发方式,所有的服务都是本地的,客户端可以直接调用,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,486
精华内容 17,394
关键字:

常见的微服务架构