基于Spring Boot和Spring Cloud实现微服务架构

时间:2019-07-22 来源: 星座
博e百娱乐网

[编者注]首先,最重要的是,当你想学习最新技术时,英语官方网站是最好的学习方式。由于互联网上传播的大部分信息都是从官方网站翻译过来的,因此许多描述也偏向于作者自己遇到的问题。这使您可以轻松理解和操纵偏差。一开始,我进入了这样一个误解。官方网站的技术指南真的非常详细。虽然我们很难读懂英语,但如果英语不是很差,请选择下沉和阅读,你一定会获得很多。

我的研究从Spring Boot开始,然后触及了微服务架构。当然,最大的灵感就是感谢我的一位老师。他指出了一条新路,让我大放光彩。再次感谢。

谈到微服务,作为当前主流的企业框架,Spring提供了一组相关的顶级项目,使开发人员能够快速实现自己的应用程序。今天,我们介绍Spring的顶级项目:

图像

Spring IO平台:对于系统部署,它是一个用于构建现代应用程序的集成平台。具体来说,当您使用maven介绍spring jar包时,它可以工作。

Spring Boot:旨在简化产品级Spring应用程序和服务的创建,简化配置文件,使用嵌入式Web服务器,并包含许多可与Spring Cloud一起部署的开箱即用的微服务。

Spring Framework:所谓的Spring框架是一个开源的Java/Java EE全功能堆栈应用程序框架。其他Spring项目如Spring Boot也依赖于这个框架。

Spring Cloud:微服务工具包为开发人员提供了分布式系统中的配置管理,服务发现,断路器,智能路由,微代理和控制总线的开发工具。

Spring XD:是一个运行时环境(服务器软件,非开发框架),它结合了Spring Batch,Spring Boot,Spring Data等Spring技术,并收集大数据并对其进行处理。

Spring Data:是一个数据访问和操作工具包,它封装了各种各样的数据和数据库访问相关技术,包括:JDBC,Redis,MongoDB,Neo4j等。

Spring Batch:批处理框架或批处理任务执行管理器,功能包括任务调度,日志记录/跟踪等。

Spring Security:是一个安全框架,为基于Spring的企业应用程序提供声明式安全访问控制解决方案。

Spring Integration:用于企业应用程序集成(EAI/ESB)的编程框架,支持HTTP,FTP,TCP/UDP,JMS,RabbitMQ,电子邮件等。

Spring Social:一套工具包,一套连接的社交服务API,如Twitter,Facebook,LinkedIn,GitHub等,有几十种。

Spring AMQP:消息队列操作的工具包,主要封装RabbitMQ的操作。

Spring HATEOAS:是一个开发库,用于支持实现超文本驱动程序的REST Web服务。

Spring Mobile:Spring MVC的扩展,用于简化手机上的Web应用程序开发。

Android for Spring:Spring框架的扩展。其主要目的是简化Android本机应用程序的开发,并提供RestTemplate来访问Rest服务。

Spring Web Flow:目标是成为管理Web应用程序页面进程,单独管理页面跳转进程和配置它们的最佳解决方案。

Spring LDAP:是一个基于Spring的JdbcTemplate模式操作LDAP的Java工具包,它简化了LDAP访问。

Spring Session:Session管理的开发工具包允许您将会话保存到Redis和其他集群管理会话。

Spring Web Services:是一个基于Spring的Web服务框架,提供SOAP服务开发,允许以各种方式创建Web服务。

Spring Shell:提供交互式shell允许您使用简单的基于Spring的编程模型开发命令,例如Spring Roo命令。

Spring Roo:是Spring开发的一种辅助工具,它使用命令行操作来生成与Rails非常相似的自动化项目。

Spring Scala:Scala编程的Spring框架的包装器(一种新的编程语言,Scala的Java平台于2003年末/2004年初发布)。

Spring BlazeDS集成:一个开发RIA工具包,集成了Adobe Flex,BlazeDS,Spring和Java技术来创建RIA。

Spring Loaded:用于实现Java程序和Web应用程序的热部署的开源工具。

Spring REST Shell:您可以调用Rest服务的命令行工具并点击命令行来操作Rest服务。

目前,Spring主要致力于Spring Boot(用于开发微服务)和Spring Cloud相关框架的开发。我们将从几个图表开始,然后具体介绍它们:

图像

图像

Spring Cloud子项目包括:

Spring Cloud Config:Configuration Management Development Kit允许您将配置放在远程服务器上,并且当前支持本地存储,Git和Subversion。

Spring Cloud Bus:一种事件,消息总线,用于传播集群中的状态更改(例如,配置更改事件),并可与Spring Cloud Config结合使用以进行热部署。

Spring Cloud Netflix:适用于各种Netflix组件的开发套件,包括Eureka,Hystrix,Zuul,Archaius等。

Netflix Eureka:云负载平衡,一种基于REST的服务,用于定位基于云的负载平衡和中间层服务器故障转移的服务。

Netflix Hystrix:一种容错管理工具,旨在通过控制服务和第三方库的节点,为延迟和故障提供更高的容错能力。

Netflix Zuul:Edge服务工具是一项边缘服务,可提供动态路由,监控,弹性,安全性等。

Netflix Archaius:一种配置管理API,包括一组配置管理API,提供动态类型属性,线程安全配置操作,轮询框架,回调机制等。

适用于Cloud Foundry的Spring Cloud:通过Oauth2协议将服务绑定到CloudFoundry,CloudFoundry是VMware的开源PaaS云平台。

Spring Cloud Sleuth:一个日志收集工具包,它封装了Dapper,Zipkin和HTrace操作。

Spring Cloud数据流:一种大型数据操作工具,用于处理来自命令行的数据流。

Spring Cloud Security:一种安全工具包,可为您的应用程序添加安全控制,主要是OAuth2。

Spring Cloud Consul:封装Consul操作,这是一种与Docker容器无缝集成的服务发现和配置工具。

Spring Cloud ZooKeeper:一个工具包,用于使用ZooKeeper方法操作ZooKeeper以进行服务注册和发现。

Spring Cloud Stream:数据流操作开发包,用Redis,Rabbit,Kafka等封装发送和接收消息。

Spring Cloud CLI:基于Spring Boot CLI,您可以从命令行快速构建云组件。

微服务简介:

图像

微服务的普及,马丁是不可或缺的,这个老头也是一个陌生的人,特别擅长抽象感应和制造概念,我觉得这是最强大的标记,我觉得这也是目前缺乏能力的中国人

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

我们来看看传统的Web开发方式。通过比较,更容易理解微服务架构是什么。对应于微服务,这种方法通常称为单片(更难以表达翻译)。所有函数都打包在一个WAR包中,基本上没有外部依赖(除了容器),部署在JEE容器(Tomcat,JBoss,WebLogic)中,包括DO/DAO,Service,UI和其他逻辑。

图像

Monolithic适用于小型项目,优点是:

简单直接的开发,集中管理

基本上不会重复

功能是本地的,没有分布式管理开销和呼叫开销

它的缺点也非常明显,特别是对于互联网公司(未逐一列出):

低开发效率:所有开发都改变了一个项目中的代码,提交代码以便彼此等待,并且代码冲突不断

代码维护很困难:代码函数耦合在一起,新手不知道从哪里开始

不灵活的部署:构建时间长,任何微小的修改都必须重建整个项目,这个过程通常很长

低稳定性:一个微不足道的小问题,可能导致整个应用程序挂起

可伸缩性不足:无法在高并发情况下满足业务需求

因此,目前的主流设计一般采用微服务架构,这是一种基于微服务的架构。简而言之,微服务的目的是有效地拆分应用程序并实现敏捷开发和部署。

图像

使用《The Art of Scalability》中提到的缩放立方体更容易理解如何分割。你看,我们称之为子库,其他人将它汇总成一个比例立方体。这是抽象的能力,用最简单的概念来解释和总结复杂的事物。 X轴表示在运行多个负载平衡器之后运行的实例,并且Y轴表示应用程序进一步分解为微服务(子库)。当数据量很大时,也可以使用Z轴通过数据对服务进行分区(子表)。

图像

让我们来看看最正式的定义:

微服务架构风格是一种将单个应用程序开发为一套小型服务的方法,每个小型服务都在自己的流程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务围绕业务功能构建,可通过全自动部署机制独立部署。这些服务至少集中管理,可以用不同的编程语言编写,并使用不同的数据存储技术。

- 詹姆斯刘易斯和马丁福勒

这个定义仍然过于抽象。如果是对的,那就是撤退。很明显,谁还在寻找他支付建议,这么贵。

一系列独立服务共同构成一个系统

单独部署并在您自己的流程中运行

每项服务都是为独立业务而开发的

分布式管理

马丁自己说每个人都可以对微服务有自己的理解,但仍然有一些标准。

由分布式服务组成的系统

按业务而非技术组织组织

做一个生活产品而不是一个项目

智能端点和哑管(我的理解是强大的服务人员和弱沟通)

自动化操作和维护(DevOps)

容错

快速进化

SOA与微服务

除了智能终端和哑管之外,它是否易于理解?我相信很多人都会问一个问题。这是因为SOA改变了出售狗肉的概念吗?有一种说法称微服务被称为Lightway SOA。还有许多传统的砖房跳出来说微服务就是SOA。事实上,Martin并没有否认SOA和微服务之间的关系。

我个人理解微服务是SOA的继承,但最重要的差异之一在于智能端点和哑管,或者真正分布式,分散式。智能端点和哑管的本质是去ESB,将所有“思考”逻辑包括路由,消息解析等内部服务(智能端点),删除大型统一ESB,以及哑管通信是优于SOA更完全分裂。

客户如何访问这些服务?

你如何在服务之间进行沟通?

如何找到这么多服务?

如果服务挂断怎么办?

客户如何访问这些服务?

最初的Monolithic开发方式,所有服务都是本地的,UI可以直接调用,现在按功能分成单独的服务,在一个单独的Java进程中运行,通常在一个单独的虚拟机上。客户端UI如何访问他?后台有N个服务,前台需要记住管理N个服务,一个服务离线/更新/升级,前台将被重新部署,这显然不符合我们的分离概念,特别是当当前站是一个移动应用。通常业务变化的步伐更快。此外,N小服务的呼叫也是一个小的网络开销。系统内部通常还有微服务,通常是无状态的,用户登录信息和权限管理最好具有统一的本地维护管理(OAuth)。

因此,通常在N服务和后台UI之间通常存在代理或API网关。他的职责包括:

提供统一的服务门户,使微服务对前台透明

聚合后端服务以节省流量并提高性能

提供API管理功能,如安全性,过滤和流量控制

据我所知,这个API网关可以有很多通用的实现方法。它可以是一个软硬盒子,一个简单的MVC框架,甚至是一个Node.js服务器。它们最重要的作用是为前端(通常是移动应用程序)提供后端服务聚合,提供统一的服务退出并在它们之间解耦,但API Gateway也可能成为单点故障或性能瓶颈。

很容易理解淘宝开放平台的使用。 TAO是这个API网关。

图像

你如何在服务之间进行沟通?

由于所有微服务都是在不同虚拟机上运行的独立Java进程,因此服务之间的流量是IPC(进程间通信),并且已经有许多成熟的解决方案。有两种基本方法可以获得最常见的方法。这些方法可以用扩展来编写,每个人都熟悉细节,所以我不会谈论它。

同步通话

REST(JAX-RS,Spring Boot)

RPC(Thrift,Dubbo)

异步消息调用(Kafka,Notify,MetaQ)

图像

通常,同步呼叫相对简单且一致,但是它们容易调用问题,并且性能体验会更差,尤其是在有许多呼叫级别时。 RESTful和RPC之间的比较也是一个非常有趣的话题。这里推荐一个java架构交换q裙子:790047143

通常,REST基于HTTP,它更容易实现,更容易接受,并且在服务器端实现技术中更灵活。它可以由各种语言支持。同时,它可以跨客户,对客户没有特殊要求。只要打包HTTP SDK即可。可以叫,所以它比较宽。 RPC也有自己的优势,传输协议更高效,更安全,更可控,特别是在公司内部,如果有统一的,选择属于自己的。

异步消息模式在分布式系统中具有广泛的应用。它可以减少调用服务之间的耦合,并成为调用之间的缓冲区,确保消息backlog不会急于被调用者,并且可以保证调用。党的服务体验继续做它应该做的事情,并且它不会因背景表现而减慢。

但是,需要支付的价格是一致性的削弱,需要接受数据的最终一致性。此外,后台服务通常需要是幂等的,因为出于性能原因通常会复制消息(保证收到消息并且只有一次接收到性能测试是一个很大的测试;最后一个是引入一个单独的代理,如果公司内部没有技术积累,对经纪人的分布式管理也是一个很大的挑战。

如何找到这么多服务?

在微服务架构中,每个服务通常有多个副本用于负载平衡。服务可以随时脱机,并且还可以向临时访问压力添加新服务节点。服务如何相互感知?如何管理服务?这是服务发现的问题。

通常有两种类型的实践,每种实践都有自己的优点和缺点。基本上,服务注册信息的分布式管理由类似技术(如ZooKeeper)执行。当服务上线时,服务提供商将自己的服务信息注册到ZooKeeper(或类似框架),并通过心跳维护长链接以实时更新链接信息。服务调用者由ZK寻址,基于可定制的算法查找服务,并且可以在本地缓存服务信息以提高性能。当服务脱机时,ZooKeeper将向服务客户端发送通知。

客户端做到了:优点是体系结构简单,扩展灵活,并且只依赖于服务注册器。缺点是客户端必须维护所有呼叫服务的地址,这在技术上是困难的。通常,大公司拥有成熟的内部框架支持,例如Dubbo。

服务器具有以下优势:优点是简单,所有服务对前端调用者都是透明的,并且通常由小公司在云服务上部署的应用程序使用得更多。

图像

有这么多服务,如果服务挂起,我该怎么办?

如前所述,开发Monolithic方式的巨大风险是将所有鸡蛋放在一个篮子里,它们都是值得的。分布式的最大特点是网络不可靠。通过微服务拆分可以降低这种风险,但如果没有特殊保护,结果肯定是一场噩梦。

我们刚刚遇到一个在线故障,这是一个非常不起眼的SQL计数功能。当访问量增加时,数据库负载很高,这会影响应用程序的性能,从而影响调用应用程序服务的所有前台应用程序。因此,当我们的系统包含一系列服务调用链时,我们必须确保任何问题都不会影响整个链接。有很多方法可以做到这一点:

重试机制

限流

融合机制

负载平衡

降级(本地缓存)

这些方法基本上是清楚和通用的,不再详细解释。

图像

这是一张非常好的图片,总结了微服务架构需要考虑的问题,包括:

API网关

在服务之间呼叫

服务发现

服务容错

服务部署

数据通话

图像

微服务的优点和缺点(或挑战)同样明显。

优点:

易于开发

灵活的技术堆栈

没有依赖性的服务独立性

独立扩展按需

高可用性

缺点(挑战):

多业务运营和维护难度

系统部署依赖性

服务间通信费用

数据一致性

系统集成测试

重复工作

绩效监测

没有最好,只有你。

图像

对于大型互联网公司来说,微服务架构是血,这是一种习惯,每家公司都有自己的例程和架构,细节不同,但核心概念是普遍的。

对于普通公司来说,实施微服务存在非常大的技术挑战,因此有很多IT供应商在这里考虑商机。微服务更适合未来具有一定扩展复杂度的应用程序,并且具有较大的用户增量期望。谈论人是一家新兴的互联网公司。在合资企业的早期阶段,不可能购买大量的机器或昂贵的机器,但有必要在成功后考虑大量的用户。微服务架构成为最佳选择。

图像

看到上面的图片,你不觉得特别熟悉吗?事实上,我们使用了N年前使用的滚动瓜。裤子被拖了。

线,原始图像点击此处查看)。

图像

因此,微服务会考虑我们。我想更多的是思考。对于微服务架构,它在技术上不是问题,而意识比工具更重要。

根据业务或客户需求组织资源(这是最难的)

是一个生活产品,而不是一个项目

头狼队,全筹码

后台服务实现单一责任原则

VM-> Docker(到PE)

DevOps(对PE)

同时,对于学生的发展来说,拥有这么多中间件和强大的PE支持是件好事。我们还需要深入了解这些中间件背后的原理,知道为什么他们知道为什么,如果我们是一家小公司CTO,离开阿里的大环境,如何通过开源技术在有限的技术资源中实施微服务?

最后,通常提到微服务与DevOps和Docker不可分割。了解微服务架构是核心,DevOps和Docker是工具和手段。下次,花点时间再学习一下。

这次我推荐一个免费的学习小组,它总结了Java架构/分布式/微服务/docker /高性能,高并发性和访谈资源。

对Java架构感兴趣的程序,欢迎加入Q群:790047143,无论您是刚刚进入该行还是欢迎,我们都会免费提供一套高效的学习路线和教程,每日更新视频资料。

最后,祝大家一切顺利。

频道热点
新闻排行
  1. 英国亨伯河口是气候变化的产物。这几万年前,这个位于英格兰东海岸的地方是一个浅谷。随后,冰河时代结束,

    英国亨伯河口是气候变化的产物。这几万年前,这个位于英格兰东海岸的地方是一个浅谷。随后,冰河时代结束,...

  2. 梦想与国家!LeeKumKee希望厨师向新中国成立70周年致敬三湘都市报5月16日“与国家的梦想”是坚持,信念和持

    梦想与国家!LeeKumKee希望厨师向新中国成立70周年致敬三湘都市报5月16日“与国家的梦想”是坚持,信念和持...

  3. Wildplay3天前我想分享JoelSartore是一位非常着名的摄影师。他的作品经常出现在《美国国家地理》杂志封面或

    Wildplay3天前我想分享JoelSartore是一位非常着名的摄影师。他的作品经常出现在《美国国家地理》杂志封面或...

  4. 6月中旬,李开复在一系列关于“创新经济资本”的微访谈中表示,移动互联网经济已经走到尽头,工业互联网经?

    6月中旬,李开复在一系列关于“创新经济资本”的微访谈中表示,移动互联网经济已经走到尽头,工业互联网经?...

  5. Wildplay3天前我想分享JoelSartore是一位非常着名的摄影师。他的作品经常出现在《美国国家地理》杂志封面或

    Wildplay3天前我想分享JoelSartore是一位非常着名的摄影师。他的作品经常出现在《美国国家地理》杂志封面或...

  6. 日前,作为广东省重点贫困工程,林芝华侨城南山国际汽车营正式落成并正式开通试运营。现场,深圳华侨城有限

    日前,作为广东省重点贫困工程,林芝华侨城南山国际汽车营正式落成并正式开通试运营。现场,深圳华侨城有限...

  7. 为什么仙人掌的叶子会变黄?这就是为什么你在家里养了仙人掌的原因。它的用途非常丰富。它对初学者和外国服

    为什么仙人掌的叶子会变黄?这就是为什么你在家里养了仙人掌的原因。它的用途非常丰富。它对初学者和外国服...

  8. 现在,网上购物已经成为我们购买东西的最便捷方式。每次打开快递箱,都会让人感到非常开心。与此同时,大多

    现在,网上购物已经成为我们购买东西的最便捷方式。每次打开快递箱,都会让人感到非常开心。与此同时,大多...

  9. 日前,作为广东省重点贫困工程,林芝华侨城南山国际汽车营正式落成并正式开通试运营。现场,深圳华侨城有限

    日前,作为广东省重点贫困工程,林芝华侨城南山国际汽车营正式落成并正式开通试运营。现场,深圳华侨城有限...

  10. 温家宝与青瓦台的特朗普结婚,金正淑戴着一只蝴蝶胸针。(新闻社)韩国反萨德抗议标志蓝蝴蝶海外网络7月1日

    温家宝与青瓦台的特朗普结婚,金正淑戴着一只蝴蝶胸针。(新闻社)韩国反萨德抗议标志蓝蝴蝶海外网络7月1日...

日期归档
友情链接