免费建设展示网站,做网站在哪接单,拍婚纱照,自己做网站花钱吗目录 回顾架构分类单体架构分布式架构微服务架构什么是微服务优点缺点微服务的架构特征#xff1a;微服务架构面临的挑战技术挑战微服架构的设计原则微服务概念提供者(Provider)消费者(Consumer)RPC和Restful集群分布式 总结 服务拆分和远程调用服务拆分原则服务拆分示例 思考… 目录 回顾架构分类单体架构分布式架构微服务架构什么是微服务优点缺点微服务的架构特征微服务架构面临的挑战技术挑战微服架构的设计原则微服务概念提供者(Provider)消费者(Consumer)RPC和Restful集群分布式 总结 服务拆分和远程调用服务拆分原则服务拆分示例 思考主流的微服务框架Spring Cloud Netflix概述Netflix OSSNetflix OSS毕马威颠覆性公司和商业模式报告Netflix是什么与Spring Cloud有什么关系Netflix OSS的开源组件Eureka服务注册和发现Zuul网关Ribbon即负载均衡Feign服务客户端Hystrix监控和断路器Turbine监控聚合 Spring CloudSpring Cloud简介Spring Cloud特征版本版本依赖关系 Spring Cloud 规范下的实现本教程中选用的组件 回顾
架构分类 单体架构 单体架构将业务的所有功能集中在一个项目中开发打成一个包部署。 优点 架构简单部署成本低 缺点 耦合度高维护困难、升级困难
分布式架构 分布式架构根据业务功能对系统做拆分每个业务功能模块作为独立项目开发称为一个服务。 优点 降低服务耦合有利于服务升级和拓展 缺点 服务调用关系错综复杂 分布式架构虽然降低了服务耦合但是服务拆分时也有很多问题需要思考 服务拆分的粒度如何界定服务之间如何调用服务的调用关系如何管理
人们需要制定一套行之有效的标准来约束分布式架构。
微服务架构 什么是微服务
微服务的概念源于2014年3月Martin Fowler马丁·福勒所写的一篇文章https://martinfowler.com/microservices。微服务架构风格是一种将一个单体应用程序开发为一组小型服务的方法每个服务运行在自己的进程中服务间通信采用轻量级通信机制(通常是基于HTTP协议的RESTful API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理服务可用不同的语言开发使用不同的数据存储技术。
优点
逻辑清晰项目复杂度降低通过对共享业务更加细粒度的拆分一个服务只需要关注一个特定的业务领域并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低开发、维护会更加简单技术选型更加灵活每个微服务都有不同的团队来维护所以可以结合业务特性自由选择技术栈可扩展性更强可以根据每个微服务的性能要求和业务特点对服务进行灵活扩展独立部署单个微服务的代码量比较小使得发布更加高效容错性如果某一个服务发生故障可以通过重试、降级等机制实现容错
缺点
性能降低微服务的间通过REST、RPC等形式进行交互通信的延时会受到较大的影响提升了运维的难度版本发布、问题排查、配置管理、监控)数据一致性的问题;
微服务的架构特征
单一职责微服务拆分粒度更小每一个服务都对应唯一的业务能力做到单一职责自治团队独立、技术独立、数据独立独立部署和交付面向服务服务提供统一标准的接口与语言和技术无关隔离性强服务调用做好隔离、容错、降级避免出现级联问题
微服务的上述特性其实是在给分布式架构制定一个标准进一步降低服务之间的耦合度提供服务的独立性和灵活性。做到高内聚低耦合。
因此可以认为微服务是一种经过良好架构设计的分布式架构方案 。
微服务架构面临的挑战
微服务粒度大小难以划分需要设计人员对业务有很好的掌握分布式复杂性主要体现在分布式事务、网络延迟、系统容错等问题解决难度较大微服务之间通信成本较高对微服务之间网络稳定性、通信速度要求较高由于微服务数量较大运维人员运维、部署有较大的挑战
技术挑战
微服务架构的主要目的是实现业务服务的解耦对服务进行治理服务的注册与发现、服务与服务之间的调用、熔断限流、负载均衡、链路追踪、分布式配置中心、服务路由等
微服架构的设计原则 微服务概念
提供者(Provider)
提供接口供其他项目调用的项目
消费者(Consumer)
调用提供者接口的项目
RPC和Restful
RPC:RPC远程过程调用Remote Procedure Call的缩写形式主要是基于TCP/IP协议的。Restful:Restful是一种网络应用程序的设计风格和开发方式基于HTTP协议可以使用XML格式定义或JSON格式定义。
集群
集群就是单机的多实例在多个服务器上部署多个服务每个服务就是一个节点部署N个节点处理业务的能力就提升 N倍大约这些节点的集合就叫做集群。
分布式
分布式结构就是将一个完整的系统按照业务功能拆分成一个个独立的子系统在分布式结构中每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中它们之间通过RPC或Restful方式通信。
总结
单体架构简单方便高度耦合扩展性差适合小型项目。例如学生管理系统分布式架构松耦合扩展性好但架构复杂难度大。适合大型互联网项目例如京东、淘宝微服务一种良好的分布式架构方案 优点拆分粒度更小、服务更独立、耦合度更低缺点架构非常复杂运维、监控、部署难度提高 SpringCloud是微服务架构的一站式解决方案集成了各种优秀微服务功能组件
服务拆分和远程调用
何分布式架构都离不开服务的拆分微服务也是一样。
服务拆分原则
不同微服务不要重复开发相同业务微服务数据独立不要访问其它微服务的数据库微服务可以将自己的业务暴露为接口供其它微服务调用
服务拆分示例
cloud-demo父工程管理依赖
order-service订单微服务负责订单相关业务user-service用户微服务负责用户相关业务
说明
订单微服务和用户微服务都必须有各自的数据库相互独立订单服务和用户服务都对外暴露Restful的接口订单服务如果需要查询用户信息只能调用用户服务的Restful接口不能查询用户数据库
思考
方案该怎么落地选用什么样的技术栈全球的互联网公司都在积极尝试自己的微服务落地方案。 其中在Java领域最引人注目的就是SpringCloud提供的方案了。
主流的微服务框架
框架名称说明MotanMotan(茅台)是新浪微博开源的RPC框架官网:github.com/weibocom/motanJSF JSF京服是京东的微服务组件。MSEC毫秒服务引擎MSEC, Mass Service Engine in Cluster是腾讯的一个开源框架适用于在廉价机器组成的集群上开发和运营分布式后台服务。该项目集RPC、名字发现服务、负载均衡、业务监控、灰度发布、容量管理、日志管理、key-value存储于一体目的是提高开发与运营的效率和质量。Dubbo阿里巴巴开源的RPC框架后来加入Apache孵化器并成功毕业。新的名字为Apache Dubbo。DubboX当当网基于Dubbo开源的PRC框架后来并入Apache Dubbo。Netflix OSSNetflix OSS是由Netflix公司开发的一套代码框架用于解决分布式系统的问题如服务注册与发现、负载均衡、熔断降级、限流、网关等。Spring CloudSpring Cloud是基于Spring Boot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。Spring Cloud NetflixSpring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。由Netflix开发后来又并入Spring Cloud大家庭它主要提供的模块包括服务发现、断路器和监控、智能路由、客户端负载均衡等。Spring Cloud AlibabaSpring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案是阿里巴巴开源中间件与 Spring Cloud 体系的融合。Spring Cloud Alibaba 正式入驻Spring Cloud 官方孵化器并顺利毕业。Spring Cloud 生态下中微服务整理Spring Cloud并没有重复制造轮子它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。主流的微服务治理方案Spring Cloud Netflix和Spring Cloud Alibaba
Spring Cloud Netflix概述 Spring Cloud Netflix诞生的三个原因 Spring家族中的大部分项目都是客户端项目缺少服务端项目和分布式项目的经验Netflix开源其分布式领域的中间件叫做Netflix OSSDubbo的出现让Spring母公司(Privotal)感受到了威胁它需要保持或增值自身价值。 Spring母公司缺少分布式项目的经验而Netflix OSS的开源组件正好涉及分布式领域的核心功能双方一拍即合合作诞生的Spring Cloud Netflix项目用于为快速构建分布式系统提供统一的开发模式。 Spring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud规范下的集成。其中Netflix OSS是由Netflix公司开发的一套开源框架和组件库。
Netflix OSS
Netflix OSS
Netflix OSSNetflix Open Source Software即Netflix开源软件。Netflix由于做视频的原因访问量非常的大从而促使其技术快速的发展在背后支撑着也正是如此Netflix开始把整体的系统往微服务上迁移。Netflix毫无保留的把一整套微服务架构核心技术栈开源了出来叫做Netflix OSS依靠开源社区的力量不断的壮大。
毕马威颠覆性公司和商业模式报告
报告显示Amazon、Apple、Alibaba、Airbnb、Netflix、Google、DJI、Microsoft、Facebook、Baidu、Tencent等公司是最具颠覆性的公司其中Netflix和阿里巴巴分别为第3位和第5位他们都是对Spring Cloud做出巨大贡献的公司
Netflix是什么与Spring Cloud有什么关系
首先Netflix是一家做视频的网站可以这么说该网站上的美剧应该是最火的Netflix由于做视频的原因访问量非常的大从而促使其技术快速的发展在背后支撑着也正是如此Netflix开始把整体的系统往微服务上迁移。Netflix的微服务做的不是最早的但是确是最大规模的在生产级别微服务的尝试。也正是这种大规模的生产级别尝试在服务器运维上依托AWS云。当然AWS云同样受益于Netflix的大规模业务不断的壮大。[(AWS)Amazon Web Services(亚马逊网络服务)]Netflix的微服务大规模的应用在技术上毫无保留的把一整套微服务架构核心技术栈开源了出来叫做Netflix OSS也正是如此在技术上依靠开源社区的力量不断的壮大。Spring Cloud是构建微服务的核心而Spring Cloud是基于Spring Boot来开发的Pivotal在Netflix开源的一整套核心技术产品线的同时做了一系列的封装就变成了Spring Cloud虽然Spring Cloud到现在为止不只有Netflix提供的方案可以集成还有很多方案但Netflix是最成熟的。
Netflix OSS的开源组件
Eureka服务注册和发现
它提供了一个服务注册中心、服务发现的客户端还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
Zuul网关
所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求
Ribbon即负载均衡
Zuul网关将一个请求发送给某一个服务的应用的时候如果一个服务启动了多个实例就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
Feign服务客户端
服务之间如果需要相互访问可以使用RestTemplate也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
Hystrix监控和断路器
我们只需要在服务接口上添加Hystrix标签就可以实现对这个接口的监控和断路器功能。Hystrix Dashboard监控面板他提供了一个界面可以监控各个服务上的服务调用所消耗的时间等。
Turbine监控聚合
使用Hystrix监控我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。
Spring Cloud
Spring Cloud简介
Spring Cloud是基于Spring Boot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务注册与发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是跟Spring Boot框架一起使用的话会让你非常方便开发微服务架构的服务。官网https://spring.io/projects/spring-cloud/
Spring Cloud特征
分布式/版本化配置服务注册和发现路由服务与服务之间的请求调用负载均衡断路器全局锁领导选举和集群状态分布式消息传递
版本
名称描述SNAPSHOT代表快照也就是未完成的意思GA代表稳定版RELEASE发行版没有太多问题SR正式发布版PREM1、M2里程碑版,主要是修复了一些BUG的版本一个GA后通常有多个里程碑版BUILD-XXX开发版开发团队内部使用不是很稳定
本教程使用版本Spring Cloud Hoxton.SR12
版本依赖关系
Spring Cloud所有的子项目都依赖Spring Boot框架所以Spring Boot框架的版本号和Spring Cloud的版本号之间也存在依赖及兼容的关系如下图所示
Spring Cloud 规范下的实现
在Spring Cloud这个规范下有很多实现比如Spring-Cloud-Bus、Spring-Cloud-Gateway、Spring-Cloud-Netflix等等。在这些实现中绝大部分组件都使用“别人已经造好的轮子”然后基于Spring Cloud规范进行整合使用者只需要使用非常简单的配置即可完成微服务架构下复杂的需求。这也是Spring 团队最厉害的地方他们很少重复造轮子最早的Spring 框架它只提供了IOC和AOP两个核心功能对于ORM、MVC等其他功能Spring都提供了非常好的兼容性比如Hibernate、MyBatis、Spring MVC、Strus2。只有在别人提供的东西不够好的情况下Spring团队才会考虑自己研发。比如Strus2经常有安全漏洞所以Spring团队自己研发了Spring MVC框架。再比如Spring-Cloud-Netflix中的Zuul网关因为性能及版本迭代较慢所以Spring团队孵化了一个Spring Cloud Gateway来取代Zuul。Spring团队一直在不断地为开发者解决一些技术复杂度高的问题使开发者能够更高效地专注于业务开发的工作。从Spring到Spring Boot,再到Spring Cloud,都是如此。
本教程中选用的组件
体系组件名称作用定位Eureka注册中心提供服务注册与发现服务Open Feign请求客户端简化微服务之间请求调用Hystrix容错处理Ribbon为微服务提供负载均衡Gateway网关提供服务转发与校验服务Config分布式配置提供统一配置服务Sleuth服务追踪提供微服链路追踪服务