基于微服务的应用架构,java微服务架构有哪些
基于微服务的应用架构,java微服务架构有哪些详细介绍
本文目录一览: 微服务架构:基于微服务和Docker容器技术的PaaS云平台架构设计
基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发业务代码并提交到平台代码库,做一些必要的配置,系统会自动构建、部署,实现应用的敏捷开发、快速迭代。在系统架构上,PaaS云平台主要分为微服务架构、Docker容器技术、DveOps三部分,这篇文章重点介绍微服务架构的实施。
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
实施微服务需要投入大量的技术力量来开发基础设施,这对很多公司来说显然是不现实的,别担心,业界已经有非常优秀的开源框架供我们参考使用。目前业界比较成熟的微服务框架有Netflix、Spring Cloud和阿里的Dubbo等。Spring Cloud是基于Spring Boot的一整套实现微服务的框架,它提供了开发微服务所需的组件,跟Spring Boot一起使用的话开发微服务架构的云服务会变的很方便。Spring Cloud包含很多子框架,其中Spring Cloud Netflix是其中的一套框架,在我们的微服务架构设计中,就使用了很多Spring Cloud Netflix框架的组件。Spring Cloud Netflix项目的时间还不长,相关的文档资料很少,博主当时研究这套框架啃了很多英文文档,简直痛苦不堪。对于刚开始接触这套框架的同学,要搭建一套微服务应用架构,可能会不知道如何下手,接下来介绍我们的微服务架构搭建过程以及 需要那些 框架或组件来支持微服务架构。
为了直接明了的展示微服务架构的组成及原理,画了一张系统架构图,如下:
从上图可以看出,微服务访问大致路径为:外部请求 → 负载均衡 → 服务网关(GateWay)→ 微服务 → 数据服务/消息服务。服务网关和微服务都会用到服务注册和发现来调用依赖的其他服务,各服务集群都能通过配置中心服务来获得配置信息。
服务网关(GateWay)
网关是外界系统(如:客户端浏览器、移动设备等)和企业内部系统之间的一道门,所有的客户端请求通过网关访问后台服务。为了应对高并发访问,服务网关以集群形式部署,这就意味着需要做负载均衡,我们采用了亚马逊EC2作为虚拟云服务器,采用ELB(Elastic Load Balancing)做负载均衡。EC2具有自动配置容量功能,当用户流量达到尖峰,EC2可以自动增加更多的容量以维持虚拟主机的性能。ELB弹性负载均衡,在多个实例间自动分配应用的传入流量。为了保证安全性,客户端请求需要使用https加密保护,这就需要我们进行SSL卸载,使用Nginx对加密请求进行卸载处理。外部请求经过ELB负载均衡后路由到GateWay集群中的某个GateWay服务,由GateWay服务转发到微服务。服务网关作为内部系统的边界,它有以下基本能力:
1、动态路由:动态的将请求路由到所需要的后端服务集群。虽然内部是复杂的分布式微服务网状结构,但是外部系统从网关看就像是一个整体服务,网关屏蔽了后端服务的复杂性。
2、限流和容错:为每种类型的请求分配容量,当请求数量超过阀值时抛掉外部请求,限制流量,保护后台服务不被大流量冲垮;党内部服务出现故障时直接在边界创建一些响应,集中做容错处理,而不是将请求转发到内部集群,保证用户良好的体验。
3、身份认证和安全性控制:对每个外部请求进行用户认证,拒绝没有通过认证的请求,还能通过访问模式分析,实现反爬虫功能。
4、监控:网关可以收集有意义的数据和统计,为后台服务优化提供数据支持。
5、访问日志:网关可以收集访问日志信息,比如访问的是哪个服务?处理过程(出现什么异常)和结果?花费多少时间?通过分析日志内容,对后台系统做进一步优化。
我们采用Spring Cloud Netflix框架的开源组件Zuul来实现网关服务。Zuul使用一系列不同类型的过滤器(Filter),通过重写过滤器,使我们能够灵活的实现网关(GateWay)的各种功能。
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
服务注册与发现
由于微服务架构是由一系列职责单一的细粒度服务构成的网状结构,服务之间通过轻量机制进行通信,这就引入了服务注册与发现的问题,服务的提供方要注册报告服务地址,服务调用放要能发现目标服务。我们的微服务架构中使用了Eureka组件来实现服务的注册与发现。所有的微服务(通过配置Eureka服务信息)到Eureka服务器中进行注册,并定时发送心跳进行 健康 检查,Eureka默认配置是30秒发送一次心跳,表明服务仍然处于存活状态,发送心跳的时间间隔可以通过Eureka的配置参数自行配置,Eureka服务器在接收到服务实例的最后一次心跳后,需要等待90秒(默认配置90秒,可以通过配置参数进行修改)后,才认定服务已经死亡(即连续3次没有接收到心跳),在Eureka自我保护模式关闭的情况下会清除该服务的注册信息。所谓的自我保护模式是指,出现网络分区、Eureka在短时间内丢失过多的服务时,会进入自我保护模式,即一个服务长时间没有发送心跳,Eureka也不会将其删除。自我保护模式默认为开启,可以通过配置参数将其设置为关闭状态。
Eureka服务以集群的方式部署(在博主的另一篇文章中详细介绍了Eureka集群的部署方式),集群内的所有Eureka节点会定时自动同步微服务的注册信息,这样就能保证所有的Eureka服务注册信息保持一致。那么在Eureka集群里,Eureka节点是如何发现其他节点的呢?我们通过DNS服务器来建立所有Eureka节点的关联,在部署Eureka集群之外还需要搭建DNS服务器。
当网关服务转发外部请求或者是后台微服务之间相互调用时,会去Eureka服务器上查找目标服务的注册信息,发现目标服务并进行调用,这样就形成了服务注册与发现的整个流程。Eureka的配置参数数量很多,多达上百个,博主会在另外的文章里详细说明。
微服务部署
微服务是一系列职责单一、细粒度的服务,是将我们的业务进行拆分为独立的服务单元,伸缩性好,耦合度低,不同的微服务可以用不同的语言开发,每一个服务处理的单一的业务。微服务可以划分为前端服务(也叫边缘服务)和后端服务(也叫中间服务),前端服务是对后端服务做必要的聚合和剪裁后暴露给外部不同的设备(PC、Phone等),所有的服务启动时都会到Eureka服务器进行注册,服务之间会有错综复杂的依赖关系。当网关服务转发外部请求调用前端服务时,通过查询服务注册表就可以发现目标服务进行调用,前端服务调用后端服务时也是同样的道理,一次请求可能涉及到多个服务之间的相互调用。由于每个微服务都是以集群的形式部署,服务之间相互调用的时候需要做负载均衡,因此每个服务中都有一个LB组件用来实现负载均衡。
微服务以镜像的形式,运行在Docker容器中。Docker容器技术让我们的服务部署变得简单、高效。传统的部署方式,需要在每台服务器上安装运行环境,如果我们的服务器数量庞大,在每台服务器上安装运行环境将是一项无比繁重的工作,一旦运行环境发生改变,就不得不重新安装,这简直是灾难性的。而使用Docker容器技术,我们只需要将所需的基础镜像(jdk等)和微服务生成一个新的镜像,将这个最终的镜像部署在Docker容器中运行,这种方式简单、高效,能够快速部署服务。每个Docker容器中可以运行多个微服务,Docker容器以集群的方式部署,使用Docker Swarm对这些容器进行管理。我们创建一个镜像仓库用来存放所有的基础镜像以及生成的最终交付镜像,在镜像仓库中对所有镜像进行管理。
服务容错
微服务之间存在错综复杂的依赖关系,一次请求可能会依赖多个后端服务,在实际生产中这些服务可能会产生故障或者延迟,在一个高流量的系统中,一旦某个服务产生延迟,可能会在短时间内耗尽系统资源,将整个系统拖垮,因此一个服务如果不能对其故障进行隔离和容错,这本身就是灾难性的。我们的微服务架构中使用了Hystrix组件来进行容错处理。Hystrix是Netflix的一款开源组件,它通过熔断模式、隔离模式、回退(fallback)和限流等机制对服务进行弹性容错保护,保证系统的稳定性。
1、熔断模式:熔断模式原理类似于电路熔断器,当电路发生短路时,熔断器熔断,保护电路避免遭受灾难性损失。当服务异常或者大量延时,满足熔断条件时服务调用方会主动启动熔断,执行fallback逻辑直接返回,不会继续调用服务进一步拖垮系统。熔断器默认配置服务调用错误率阀值为50%,超过阀值将自动启动熔断模式。服务隔离一段时间以后,熔断器会进入半熔断状态,即允许少量请求进行尝试,如果仍然调用失败,则回到熔断状态,如果调用成功,则关闭熔断模式。
2、隔离模式:Hystrix默认采用线程隔离,不同的服务使用不同的线程池,彼此之间不受影响,当一个服务出现故障耗尽它的线程池资源,其他的服务正常运行不受影响,达到隔离的效果。例如我们通过andThreadPoolKey配置某个服务使用命名为TestThreadPool的线程池,实现与其他命名的线程池隔离。
3、回退(fallback):fallback机制其实是一种服务故障时的容错方式,原理类似Java中的异常处理。只需要继承HystixCommand并重写getFallBack()方法,在此方法中编写处理逻辑,比如可以直接抛异常(快速失败),可以返回空值或缺省值,也可以返回备份数据等。当服务调用出现异常时,会转向执行getFallBack()。有以下几种情况会触发fallback:
1)程序抛出非HystrixBadRequestExcepption异常,当抛出HystrixBadRequestExcepption异常时,调用程序可以捕获异常,没有触发fallback,当抛出其他异常时,会触发fallback;
2)程序运行超时;
3)熔断启动;
4)线程池已满。
4、限流: 限流是指对服务的并发访问量进行限制,设置单位时间内的并发数,超出限制的请求拒绝并fallback,防止后台服务被冲垮。
Hystix使用命令模式HystrixCommand包装依赖调用逻辑,这样相关的调用就自动处于Hystrix的弹性容错保护之下。调用程序需要继承HystrixCommand并将调用逻辑写在run()中,使用execute()(同步阻塞)或queue()(异步非阻塞)来触发执行run()。
动态配置中心
微服务有很多依赖配置,某些配置参数在服务运行期间可能还要动态修改,比如:根据访问流量动态调整熔断阀值。传统的实现信息配置的方法,比如放在xml、yml等配置文件中,和应用一起打包,每次修改都要重新提交代码、打包构建、生成新的镜像、重新启动服务,效率太低,这样显然是不合理的,因此我们需要搭建一个动态配置中心服务支持微服务动态配置。我们使用Spring Cloud的configserver服务帮我们实现动态配置中心的搭建。我们开发的微服务代码都存放在git服务器私有仓库里面,所有需要动态配置的配置文件存放在git服务器下的configserver(配置中心,也是一个微服务)服务中,部署到Docker容器中的微服务从git服务器动态读取配置文件的信息。当本地git仓库修改代码后push到git服务器仓库,git服务端hooks(post-receive,在服务端完成代码更新后会自动调用)自动检测是否有配置文件更新,如果有,git服务端通过消息队列给配置中心(configserver,一个部署在容器中的微服务)发消息,通知配置中心刷新对应的配置文件。这样微服务就能获取到最新的配置文件信息,实现动态配置。
以上这些框架或组件是支撑实施微服务架构的核心,在实际生产中,我们还会用到很多其他的组件,比如日志服务组件、消息服务组件等等,根据业务需要自行选择使用。在我们的微服务架构实施案例中,参考使用了很多Spring Cloud Netflix框架的开源组件,主要包括Zuul(服务网关)、Eureka(服务注册与发现)、Hystrix(服务容错)、Ribbon(客户端负载均衡)等。这些优秀的开源组件,为我们实施微服务架构提供了捷径。
如果想学习Java工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。
微服务架构是什么
微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有 Spring cloud、Dubbo 等。
微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通常在其而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。
六种常见的微服务架构模式:
1、聚合器微服务设计模式
聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。
2、代理微服务设计模式
这是聚合模式的一个变种,在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。
3、链式微服务设计模式
这种模式在接收到请求后会产生一个经过合并的响应,在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。
4、分支微服务设计模式
这种模式是聚合器模式的扩展,允许同时调用两个微服务链。
5、数据共享微服务设计模式
自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(monolithic application)”时,SQL数据库反规范化可能会导致数据重复和不一致。因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,在这种情况下,部分微服务可能会共享缓存和数据库存储。不过,这只有在两个服务之间存在强耦合关系时才可以。对于基于微服务的新建应用程序而言,这是一种反模式。
6、异步消息传递微服务设计模式
虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应。
微服务架构是什么?
微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有 Spring cloud、Dubbo 等。
微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通常在其而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。
六种常见的微服务架构模式:
1、聚合器微服务设计模式
聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。
2、代理微服务设计模式
这是聚合模式的一个变种,在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。
3、链式微服务设计模式
这种模式在接收到请求后会产生一个经过合并的响应,在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。
4、分支微服务设计模式
这种模式是聚合器模式的扩展,允许同时调用两个微服务链。
5、数据共享微服务设计模式
自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(monolithic application)”时,SQL数据库反规范化可能会导致数据重复和不一致。因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,在这种情况下,部分微服务可能会共享缓存和数据库存储。不过,这只有在两个服务之间存在强耦合关系时才可以。对于基于微服务的新建应用程序而言,这是一种反模式。
6、异步消息传递微服务设计模式
虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应。
微服务架构概述微服务架构风格是一类将单一应用程序作为由众多小型服务构成之套件加以开发的方式,其中各项服务都拥有自己的进程并利用轻量化机制(通常为HTTP源API)实现通信。这些服务围绕业务功能建立而成,且凭借自动化部署机制实现独立部署。
微服务的特点应用程序逻辑分为明确定义的职责范围的粒度组件,这些组件相互协调提供解决方案
每一个组件都有一个小的职责领域,可以完全部署,也就是说一个服务可以跨越多个应用程序复用(独立部署和维护)
服务之间通信基于一些基本的原则,比如服务采用http+json这样的轻量级通信协议,在不同服务之间进行数据交换。这样不同服务可以使用不同的技术栈,互不影响(采用轻量级的通信协议作为通信原则、松耦合)
拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理。(服务可治理,可管控)
微服务结构的通用性通过服务实现应用的组件化(按功能拆分、可独立部署和维护)
围绕业务能力组织服务,根据业务不同的需求进行不同组件的使用
所做产品非项目化,对于平台具有一定的通用性
微服务的缺点运营成本的增加,整体应用可能只需部署至一小片应用服务区集群,而微服务架构可能变成需要构建/测试/部署/运行数十个独立的服务,并可能需要支持多种语言和环境。这导致一个整体式系统如果由20个微服务组成,可能需要40~60个进程。
开发人员需要熟知运维与投产环境,开发人员也需要掌握必要的数据存储技术如NoSQL,具有较强DevOps技能的人员比较稀缺,会带来招聘人才方面的挑战。
把系统分为多个协作组件后会产生新的接口,这意味着简单的交叉变化可能需要改变许多组件,并需协调一起发布。在实际环境中,一个新品发布可能被迫同时发布大量服务,由于集成点的大量增加,微服务架构会有更高的发布风险。
“同步耦合引入到系统中”,有时需要向不同服务添加一些代码,这就会导致代码重复。
作为一种分布式系统,微服务引入了复杂性和其他若干问题,例如网络延迟、容错性、消息序列化、不可靠的网络、异步机制、版本化、差异化的工作负载等,开发人员需要考虑以上的分布式系统问题。
在动态环境下服务间的交互会产生非常微妙的行为,难以可视化及全面测试。经典微服务往往不太重视测试,更多的是通过监控发现生产环境的异常,进而快速回滚或采取其他必要的行动。但对于特别在意风险规避监管或投产环境错误会产生显著影响的场景下需要特别注意。
微服务架构设计过程中需要注意的点服务划分过细,服务间关系复杂
服务数量太多,团队效率急剧下降
调用链太长,性能下降
调用链太长,问题定位困难
没有自动化支撑,无法快速交付(自动化测试、自动化部署、自动化监控等)
没有服务治理,微服务数量多了后管理混乱(服务路由、服务故障隔离、服务注册与发现等等)
服务之间的配置依赖关系
微服务的拆分服务粒度的划分是伴随着架构演进进行的,需要考虑当前的人力、物力等来有效的统筹,在项目的初期可以把服务的粒度设计大一点,随着项目的不断壮大,团队的规模不断变大,可以对现有的粗粒度服务进行有效的拆分,逐步的向细粒度服务发展。
基于业务逻辑进行拆分“职责范围”的理解差异很大,因此根据业务拆分需要权衡当前项目组的情况。
基于可扩展拆分“日志服务”和“升级服务”放在同一个子系统中;不稳定的服务粒度可以细一些,但也不要太细,始终记住要控制服务的总数量。这样拆分主要是为了提升项目快速迭代的效率,避免在开发的时候,不小心影响了已有的成熟功能导致线上问题。
基于可靠性拆分将系统中的业务模块按照优先级排序,将可靠性要求高的核心服务和可靠性要求低的非核心服务拆分开来,然后重点保证核心服务的高可用。这样拆分带来下面几个好处:(避免非核心服务故障影响核心服务、核心服务高可用方案可以更简单、能够降低高可用成本)
基于性能拆分基于性能拆分和基于可靠性拆分类似,将性能要求高或者性能压力大的模块拆分出来,避免性能压力大的服务影响其他服务。常见的拆分方式和具体的性能瓶颈有关,可以拆分 Web 服务、数据库、缓存等。
使用SpringBoot和SpringCloud构建微服务在基于java的应用程序构建中,spring已经成为事实上的标准开发框架,spring框架迷人的地方就是能够与时俱进的进行自我改造。随着发展,spring团队不仅开发出了单体应用程序模型,还转向了高度分布式的模型,使服务能够轻松的部署到云端,典型代表就是springboot和springcloud。
springboot是对spring框架理念的重新思考,虽然springboot包含了spring的核心特性,但是它剥离了spring中的许多企业特性,而是提供一个基于java的、面向REST的微服务框架,只是需要简单的注解,java开发者就能快速构建一个可打包和部署的REST微服务。
springcloud框架使实施和部署微服务到私有云或者公有云变得更加简单,springcloud在一个公共框架之下封装了许多流行的云管理微服务框架,并且让这些技术的使用和部署像为代码添加注解一样简单。
微服务架构是一项在云中部署应用和服务的新技术。
大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。
微服务架构相关介绍:
微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。
在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。
微服务不需要像普通服务那样成为一种独立的功能或者独立的资源。定义中称,微服务是需要与业务能力相匹配,这种说法完全正确。不幸的是,仍然意味着,如果能力模型粒度的设计是错误的,那么,我们就必须付出很多代价。
如果你阅读了Fowler的整篇文章,你会发现,其中的指导建议是非常实用的。在决定将所有组件组合到一起时,开发人员需要非常确信这些组件都会有所改变,并且规模也会发生变化。服务粒度越粗,就越难以符合规定原则。
服务粒度越细,就越能够灵活地降低变化和负载所带来的影响。然而,利弊之间的权衡过程是非常复杂的,我们要在配置和资金模型的基础上考虑到基础设施的成本问题。
微服务架构图
项目微服务架构图
微服务架构根据目前产品存在的问题,针对快速开发、海量用户、大量数据、低延迟等互联网应用的实际需要,通过对业务架构、系统架构、基础架构、技术架构进行设计,彻底解决系统解耦、性能低下等问题,而且支持云计算部署,可以满足高并发、高可用、高稳定。微服务并没有一个官方的定义,可以理解为一种架构风格 。
大数据管理数据处理过程图
大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察力。大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。随着业务的增长,大量和流程、规则相关的非结构化数据也爆发式增长。大数据处理,大...
产品开发流程图
产品开发流程(Product Development Process)产品开发流程是指企业用于想像、设计和商业化一种产品的步骤或活动的序列。产品开发流程涉及的人员从产品经理到设计师、前端、后端等等一系列人员,这篇文章主要关于产品开发的完整流程,希望对各个工作岗位上的人有借鉴意义。很多产品经理不...
阿里巴巴数据中台全景图
阿里是数据中台概念的首先提出者,其案例更具分析意义。从阿里巴巴数据中台全景图可以看出,阿里的数据中台包括了计算与存储平台、数据资产管理、智能数据研发、统一数据中心中间件(OneService)四大模块,最上层支撑着阿里数据、数据大屏、生意参谋等大数据应用。阿里数据中台架构。数据中台建设理论、方...
Web开发技术架构图
大型web系统架构动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册。1、学习Web开发原理,包括MVC/MTV等Web框架; 2、学习Django Web框架,从技术原理到项目实践; 3、学习Djan...
互联网工作原理拓扑图
互联网工作原理拓扑图模板,计算机网络是由很多台计算机组成的, 要实现网络之间传输数据, 必须要做两件事, 数据传输目的地址和保证数据迅速可靠传输的措施。计算机网络是由许多计算机组成的,要实现网络的计算机之间传输数据,必须要作两件事,数据传输目的地址和保证数据迅速可靠传输的措施。拓扑图用于计算机...
管理业务流程图
业务管理是网路管理中比较重要的部分,涉及的面也比较广泛。在这一管理层,大多数的管理信息直接在GSM系统的各网路单元与GSM网路管理设施之间交换。这些管理信息还包括由AuC管理的安全性数据,由HLR管理的客户数据,由MSC管理的费率和计费数据等。业务管理(Business Management)...
电商知识图谱
知识图谱(Knowledge Graph/Vault,以下简称KG)本质上是语义网络,是一种基于图的数据结构,由节点(Point)和边(Edge)组成。电商就是电子商务的简称,在互联网上销售产品而进行的商业活动,是把现实生活中的商业活动,搬到虚拟的世界当中电商这一特殊领域的知识图谱构建过程中,...
?
树状网络拓扑图
树型拓扑(tree topology):一种类似于总线拓扑的局域网拓扑。树型网络可以包含分支,每个分支又可包含多个结点。树状拓扑结构是一种分级结构。在树状结构的网络中,任意两个节点之间不产生回路,每条通路都支持双向传输、这种结构的特点是扩充方便、灵活,成本低,易推广,适合于分主次或分等级的层级...
云平台整体架构图
云计算的体系结构由5部分组成,分别为应用层,平台层,资源层,用户访问层和管理层,云计算的本质是通过网络提供服务,所以其体系结构以服务为核心。公认的云架构是划分为基础设施层、平台层和软件服务层三个层次的,对应名称为IaaS,PaaS和SaaS。
微服务入门|微服务架构怎么设计
将一个单体应用拆分成一组微小的服务组件,每个微小的服务组件运行在自己的进程上,组件之间通过如RESTful API这样的轻量级机制进行交互,这些服务以业务能力为核心,用自动化部署机制独立部署,另外,这些服务可以用不同的语言进行研发,用不同技术来存储数据 。
通过以上的定义描述,我们可以基本确定给出微服务的节特征:
用微服务来进行实践到生产项目中,首先要考虑一些问题。比如下图的微服务业务架构:
在上图图表展示的架构图中,我们假设将业务商户服务A、订单服务B和产品服务C分别拆分为一个微服务应用,单独进行部署。此时,我们面临很多要可能出现的问题要解决,比如:
1、客户端如何访问这些服务?
2、每个服务之间如何进行通信?
3、多个微服务,应如何实现?
4、如果服务出现异常宕机,该如何解决?
以上这些都是问题,需要一个个解决。
在单体应用开发中,所有的服务都是本地的,前端UI界面,移动端APP程序可以直接访问后端服务器程序。
现在按功能拆分成独立的服务,跑在独立的进程中。如下图所示:
此时,后台有N个服务,前台就需要记住管理N个服务,一个服务 下线 、 更新 、 升级 ,前台和移动端APP就要重新部署或者重新发包,这明显不服务我们拆分的理念。尤其是对当下业务需求的飞速发展,业务的变更是非常频繁的。
除了访问管理出现困难以外,N个小服务的调用也是一个不小的网络开销。另外,一般微服务在系统内部,通常是无状态的,而我们的用户在进行业务操作时,往往是跨业务模块进行操作,且需要是有状态的,在此时的这个系统架构中,也无法解决这个问题。传统的用来解决用户登录信息和权限管理通常有一个统一的地方维护管理(OAuth),我们称之为授权管理。
基于以上列出的问题,我们采用一种叫做网关(英文为API Gateway)的技术方案来解决这些问题,网关的作用主要包括:
网关(API Gateway)可以有很多广义的实现办法,可以是一个软硬一体的盒子,也可以是一个简单的MVC框架,甚至是一个Node.js的服务端。他们最重要的作用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合,不过API Gateway也有可能成为 单点故障 点或者性能的瓶颈。
最终,添加了网关(API Gateway)的业务架构图变更为如下所示:
所有的微服务都是独立部署,运行在自己的进程容器中,所以微服务与微服务之间的通信就是IPC(Inter Process Communication),翻译为进程间通信。进程间通信的方案已经比较成熟了,现在最常见的有两大类: 同步调用、异步消息调用 。
同步调用
同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。同步调用的有两种实现方式:分别是 REST 和 RPC
基于REST和RPC的特点,我们通常采用的原则为: 向系统外部暴露采用REST,向系统内部暴露调用采用RPC方式。
异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方,同时能保证调用方的服务体验,继续干自己该干的活,不至于被后台性能拖慢。需要付出的代价是一致性的减弱,需要接受数据 最终一致性 ,所谓的最终一致性就是只可能不会立刻同步完成,会有延时,但是最终会完成数据同步;还有就是后台服务一般要实现 幂等性 ,因为消息发送由于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验)。最后就是必须引入一个独立的 Broker,作为中间代理池。
常见的异步消息调用的框架有:Kafaka、Notify、MessageQueue。
最终,大部分的服务间的调用架构实现如下所示:
在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。这就出现了新的问题:
这就是服务的发现、识别与管理问题。解决多服务之间的识别,发现的问题一般是通过注册的方式来进行。
具体来说:当服务上线时,服务提供者将自己的服务注册信息注册到某个专门的框架中,并通过心跳维持长链接,实时更新链接信息。服务调用者通过服务管理框架进行寻址,根据特定的算法,找到对应的服务,或者将服务的注册信息缓存到本地,这样提高性能。当服务下线时,服务管理框架会发送服务下线的通知给其他服务。
常见的服务管理框架有:Zookeeper等框架。
如上的问题解决方案有两种具体的实现,分别是: 基于客户端的服务注册与发现 、 基于服务端的服务注册与发现 。
优点是架构简单,扩展灵活,只对服务注册器依赖。缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持。
优点是所有服务对于前台调用方透明,一般小公司在云服务上部署的应用采用的比较多。
前面提到,单体应用开发中一个很大的风险是,把所有鸡蛋放在一个篮子里,一荣俱荣,一损俱损。而分布式最大的特性就是网络是不可靠的。通过微服务拆分能降低这个风险,不过如果没有特别的保障,结局肯定是噩梦。
因此,当我们的系统是由一系列的服务调用链组成的时候,我们必须确保任一环节出问题都不至于影响整体链路。相应的手段有很多,比如说:
什么是微服务架构?主流的微服务如何实现?
微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有 Spring cloud、Dubbo 等。
微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通常在其而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。
六种常见的微服务架构模式:
1、聚合器微服务设计模式
聚合器调用多个服务实现应用程序所需的功能。它可以是一个简单的Web页面,将检索到的数据进行处理展示。它也可以是一个更高层次的组合微服务,对检索到的数据增加业务逻辑后进一步发布成一个新的微服务,这符合DRY原则。另外,每个服务都有自己的缓存和数据库。如果聚合器是一个组合服务,那么它也有自己的缓存和数据库。聚合器可以沿X轴和Z轴独立扩展。
代理微服务设计模式
这是聚合模式的一个变种,在这种情况下,客户端并不聚合数据,但会根据业务需求的差别调用不同的微服务。代理可以仅仅委派请求,也可以进行数据转换工作。
3、链式微服务设计模式
这种模式在接收到请求后会产生一个经过合并的响应,在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。
4、分支微服务设计模式
这种模式是聚合器模式的扩展,允许同时调用两个微服务链。
5、数据共享微服务设计模式
自治是微服务的设计原则之一,就是说微服务是全栈式服务。但在重构现有的“单体应用(monolithic application)”时,SQL数据库反规范化可能会导致数据重复和不一致。因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式,在这种情况下,部分微服务可能会共享缓存和数据库存储。不过,这只有在两个服务之间存在强耦合关系时才可以。对于基于微服务的新建应用程序而言,这是一种反模式。
6、异步消息传递微服务设计模式
虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应。
谐云微服务治理平台,就是基于Istio的Mesh方案完全透明支持Dubbo和SpringCloud等平台框架,无侵入、无开发语言限制的完整服务治理,整理功能上覆盖微服务总览、注册中心、配置中心、API网关和ServiceMesh的同时,还从多维度立体覆盖了微服务的运维监控。并能从服务拆分方法、技术选型与问题解决等方面指导客户开发微服务应用。
简单地说,微服务架构就是以业务域或业务功能为边界,将一个大而全的应用拆分为可以独立开发,独立部署,独立测试,独立运行的一组小的应用,并且使用轻量级,通用的机制在这组应用间进行通信。
主流的微服务包括:
1、SpringCloud
Spring Cloud , 来自Spring,具有Spring 社区的强大支撑,还有Netflix强大的后盾与技术输出。Netflix作为一家成功实践微服务架构的互联网公司在几年前就把几乎整个微服务框架栈开源贡献给了社区,这些框架开源的整套服务架构套件是Spring Cloud的核心。
- Eureka:服务注册发现框架;
- Zuul:服务网关;
- Karyon:服务端框架;
- Ribbon:客户端框架;
- Hystrix:服务容错组件;
- Archaius:服务配置组件;
- Servo:Metrics组件;
- Blitz4j:日志组件;
2、Dubbo
Dobbo是一个分布式服务框架,是阿里开放的微服务化治理框架,致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分(官网)
- 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式;
- 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持;
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo 也是采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。当然也支持官方不推荐的 API 调用方式。
3、lstio
lstio 作为用于微服务聚合层管理的新锐项目,是Google、IBM、Lyft(海外共享出行公司、Uber劲敌),首个共同联合开源的项目,提供了统一的连接,安全,管理和监控微服务的方案。
目前首个测试版是针对Kubernetes环境的,社区宣称在未来几个月内会为虚拟机和Cloud Foundry 等其他环境增加支持。lstio将 流量管理添加到微服务中,并为增值功能(如安全性、监控、路由、连接管理和策略)创造了基础。
- HTTP、gRPC 和 TCP 网络流量自动负载均衡;
- 提供了丰富的路由规则,实现细颗粒度的网络流量行为控制;
- 流量加密、服务件认证,以及强身份声明;
- 全范围(Fleet-wide)的策略执行;
- 深度遥测和报告。
如何理解微服务架构
一个“微服务”是在一个语境下、一个背景下才有意义的词,尝试独立去定义或解释它是说不清楚的。
微服务架构是一种架构风格(或叫架构模式)、以及一组成功架构实践的总称。有时也代表一种架构思想。 微服务架构就是:以一组“按领域功能解耦的、彼此之间以轻量级通讯框架交互的、可独立开发/测试/发布/部署/升级和替换的、较小粒度的组件”的方式构建应用的架构模式!
1、 按领域功能边界解耦
2、 轻量级通信框架
3、 独立性、自治
4、 小粒度
5、 基础设施自动化,部署一个应用/单元,和部署100个应用/单元,没有显著差别(部署时间、人力等) 《一组成功实践》
6、 面向失败的设计
7、 持续演进
六种常用的微服务架构设计模式(建议收藏)
简单地说,API主导的连接方法可以被看作是API设计的一种分层方法(至少在本文中是这样)。其中,系统API公开系统的资产数据信息;中间的是流程API,与系统API一起进行编排和组合;顶端的体验API公开来自后端数据源的数据,提供最终用户体验。这种API分层方法与细粒度SOA模式很好地结合在一起,通常,这两者要么可以共存,要么细粒度SOA模式演化成基于细粒度SOA的分层API模式。
API主导的连接方法为细粒度SOA模式提供了一些层次结构,这些层次结构允许对API或微服务进行一致的管理和治理。然而,基于细粒度SOA的分层API模式也存在一些与细粒度SOA 模式类似的深层问题(这很直观):
在细粒度SOA模式执行单个API调用的地方,基于细粒度SOA的分层API模式现在必须通过层执行多个调用。从“网络跳数”的角度来看,这种模式可能是低效的。但是,基于细粒度SOA的分层API模式中,层次结构的存在并不强制跨越网络来调用每个API。直接的跨层调用,而不是通过网络调用是完全有效的;分层的目的是为了增加灵活性,同时以一种很好地分离关注点的方式构建体系架构。
在细粒度SOA模式管理大量服务的地方,使用分层API将会管理来自多个层次的大量细粒度服务。您的管理工具可能不再像以前那样有效,因为它们可能无法可视化复杂的微服务视图。
最终应用程序的数据存储一致性在分层API模式下实际上得到了改善,因为访问数据的服务都是有组织,且集中地查询或修改应用程序的状态。(例如:系统API)
实际上,对于大多数企业来说,基于细粒度SOA的分层API模式是一个很好的模式,但是,就像细粒度SOA模式一样,在实践过程中会出现困难。然而,这种困难通常在大范围使用时才会显现出来。因此,只有在预期或正在经历大规模的使用时,我们才应该准备其他的模式。
问题:
没有一定层次结构的微服务架构是很难进行合理解释的,因为没有明显的方法来对每个微服务的用途进行分类和可视化。
解决方案:
通过创建按用途分组的分层API(系统层、流程及领域模型层,以及体验层),您可以更容易地管理微服务架构的复杂性。
应用:
将微服务架构分为多个层。通常情况下,可以使用标准化,并具有类似用途的一组微服务以类似的方式工作,从而进一步使微服务架构的复杂性合理化。
影响:
1.通过标准化和进一步分解微服务架构,可以提高快速变更的能力。
2.由于更专门化的层次结构,进程间服务调用的数量可能增加。
3.需要对服务监控和可视化工具进行检查,以确定它们是否能够正确地与分层架构一起工作。
目标:
1.快速的敏捷变更。
2.可伸缩性:理论上通过基于细粒度SOA的分层API模式可以提高可伸缩性,但实际上,除非有支持自动化的基础设施,否则可伸缩性往往会降低。
主要特点:
1.为了实现快速变更,可能存在低效的IPC(Inter-Process Communication,进程间通信)。
2.数据一致性和状态管理能力较差,但允许高度重用。重用本身会抵消变更的速度。
3.由于与现存模式的相似性,已有的问题往往同样会出现。
4.基于细粒度SOA的分层API模式在小范围内使用效果很好,在大规模情况下会出现困难。
5.由于采用了结构化的体系架构方法,所以具有很高的内聚性。
6.重点放在服务颗粒度要细,但通常没有考虑其能力。
7.基于细粒度SOA的分层API模式以集成为导向,每个微服务依赖于外部系统。这将会降低变更的速度。
基于细粒度SOA的分层API模式如何与SOA或API等现有系统共存?
基于细粒度SOA的分层API模式往往是与现有IT资产共存的最佳方式。由于分层减少了每个微服务的范围,并约束了其用途,因此该模式能够在不明显降低变更速度的情况下,最好地连接和利用现有IT系统。然而,通过细粒度和分层的设计来协调变更可能是一个挑战。您可能需要使用一定的技术手段来管理所有不同微服务之间的契约,或者使用完全自动化的测试技术来确保变更不会造成破坏。
微服务架构有哪些框架
什么是微服务微服务并没有一个官方的定义,可以理解为一种架构风格,将一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。以往的应用程序开发中,应用程序都是单体型,在开发和部署上比较方便,但是随着业务的不断增加,开发迭代和性能瓶颈等问题都会增加开发难度。微服务正是为解决这一设计问题而应运而生,微服务在将复杂系统切分为数十乃至上百个小服务的同时,这些小服务带来了语言和框架选择上的灵活性,缩短应用开发上线时间,可根据不同的工作负载和资源要求对服务进行独立缩扩容等优势。微服务框架的技术点微服务被拆分为多个微服务进程后,进程内的方法调用变成了进程间的远程调用,这种变化会带来分布式系统的一系列问题,比如:服务的注册与发现身份验证与授权服务的伸缩控制反向代理与负载均衡路由控制流量切换日志管理性能度量、监控与调优分布式跟踪过载保护服务降级服务部署与版本升级策略支持错误处理从上述微服务存在的技术点可以得到微服务基础架构的如下关键点:
微服务技术框架的介绍微服务框架可以分为侵入式和非侵入式两种,什么是侵入式和非侵入式呢?可以以微服务框架SpringCloud来进行说明,在微服务框架中使用ErukaServer作为服务注册中心,在微服务单元上配置使用EurekaClient向注册中心进行注册,这样就会带来一个问题,在旧代码或者非JAVA代码(比如Python)中使用SpringCloud微服务框架,这样就需要对旧代码及非JAVA代码进行微服务化的改造。SpringCloud是侵入式的微服务框架,侵入式微服务架构还存在Dubbo框架。什么是非侵入式的微服务框架呢,还是以微服务框架中微服务的注册来进行说明,比如将服务注册和服务调用从现有服务中抽离出来,形成一个服务代理。该服务代理也叫做Sidecar,负责找到目的服务并负责通讯的可靠性和安全等问题。当服务大量部署时,随着服务部署的Sidecar代理之间的链接形成了一个如下图所示的网格,该网格成为微服务的通讯基础设施层,承载微服务之间的所有流量,被称为ServiceMesh(服务网格)。非侵入式的微服务框架的比较有代表性的方案有Istio和Conduit。下面对这几种方案进行一个简单初步的介绍。SpringCloudSpringCloud作为一个微服务的开发框架,包括了很多的组件,其中包括SpringCloudNetflix(Eureka、Hystrix、Zuul、Archaius)、SpringCloudConfig、SpringCloudBus、SpringCloudCluster、SpringCloudConsul、SpringCloudSecurity、SpringCloudSleuth、SpringCloudDataFlow、SpringCloudStream、SpringCloudTask、SpringCloudZookeeper、SpringCloudConnectors、SpringCloudStarters、SpringCloudCLI等。另外SpringBoot为SpringCloud提供一个简化基于Spring的开发环境,可以适应SpringBoot快速开发单个微服务。DubboDubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。其核心部分包含:远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。SpringCloudVSDubbo一个关于SpringCloud和Dubbo很有意思的比喻,使用Dubbo构建的微服务架构就像组装电脑,各个环节的可选自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,但是如果是一个高手,这一切都不存在问题。SpringCloud就像品牌机,在SpringSource的整合下,做了大量兼容性的测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外配件时,需要对配件足够的了解。
java微服务架构有哪些
1. Spring Boot是什么,解决哪些问题 1) Spring Boot使编码变简单 2) Spring Boot使配置变简单 3) Spring Boot使部署变简单 4) Spring Boot使监控变简单 5) Spring Boot的不足 2. Spring Boot在平台中的定位,相关技术如何融合 1) SpringBoot与...
String boot 微型架构首选面xml配置一路使用默认的话你只需要写核心逻辑,导出jar包就可以直接放在服务器上用
微服务有助于开发人员用更低的成本和更少的错误来开发程序。
常用的微服务框架:
1、Spring Boot
Spring Boot是Spring的一个特定版本,它通过对配置细节的处理,使微服务构建更加简便。创建Spring Boot旨在自启动任何类型的Spring项目,而不仅仅是微服务。应用程序完成后,Spring Boot将在Web服务器中混合,并输出一个JAR文件,JVM除外。你可以将其视为原始Docker容器,这也是许多负责构建微服务的开发者都非常喜欢Spring Boot的原因。
2、Dropwizard
Dropwizard框架为开发者提供了一个非常简单的模型,里面包含了许多重要的模块,你可以根据需求添加一些业务逻辑,或者配置其他内容,最后你会发现JAR文件非常小,并且能够快速启动。
Dropwizard最大的限制可能是缺乏依赖注入。如果你希望使用依赖项注入来保持代码的整洁和松散耦合,则需要自己添加库,这点和Spring不同,但是现在Dropwizard也支持大多数功能,包括日志记录、健康检查和提供弹性代码。
3、Cricket
是一个用于快速API开发框架。Cricket很小,尽管它包括许多额外的功能,如键值数据存储,以避免连接数据库和调度程序来控制后台重复处理。没有添加复杂性或其他依赖项,因此很容易将代码添加到Cricket并启动独立的微服务。
4、Jersey
开发web服务的标准方法之一是RESTful web服务的Java API(又名JAX-RS),这是Jersey框架中实现的通用规范。这种方法主要依赖于使用注释来指定路径映射和返回细节。从参数解析到JSON打包的所有其他内容都由Jersey处理。
Jersey的主要优点是它实现了JAX-RS标准,这个特性非常受欢迎,一些开发人员习惯将Jersey与Spring Boot结合在一起使用。
5、Play
体验JVM跨语言能力的最佳方式之一是使用Play框架,这是可以与Java或任何其他JVM语言兼容的。它的基础非常现代,具有异步、无状态的模型,不会让试图跟踪用户及其会话数据的线程使服务器过载。还有许多额外的特性可以用来充实网站,比如OpenID、验证和文件上传支持。Play代码库已经发展了十多年,因此你还会发现类似于对XML的支持的这种古老的功能。play既成熟又轻盈,这种组合还是比较有特色的。
当然,常用的Java微服务框架还有Swagger、Helidon、WildFly Thorntail等,在此就不多赘述了。
希望能帮到你,望采纳!!!