【程序源代码】Springcloud开发最佳实践
喜欢就点击上面蓝色字,更多精彩!
导读 | 精选
关键字:微服务 springcloud开发 最佳实践
01
—
在介绍springcloud之前,先整体认识一下,什么是微服务?
一、系统演进的历程
系统演进的历程主要分为四个部分,MVC架构》RPC构架》SOA架构》微服务架构,大家可以在网上查一下前三种构架,这里咱们只是重点介绍微服务,此处省略简单介绍一下,如下是传统应用架构的主要结构图:
二、微服务与传统巨石应用的区分是什么?
传统巨石应用(monolith)
web应用程序发展的早期,大部分web工程是将所有的功能模块(service side)打包到一起并放在一个web容器中运行,很多企业的Java应用程序打包为war包部署到容器运行。其他语言(Ruby,Python或者C++)写的程序也有类似的问题。这种将所有功能都部署在一个web容器中运行的系统就叫做巨石型应用。那传统应用水平扩展后有什么效果呢,如下是传统应用架构水平扩展的主要结构图:
传统巨石应用(monolith)好处与不足之处
好处:单个应用设计编程、容易测试、因为是单体程序可直接打成一个完整的包,部署web容器中,即可运行。
不足之处:单体应用随着业务和功能不不断增加,代码量会增多,代码量增多后维护不容易,同时如果部署的话部署打包时间会增长,最麻烦的是如果业务功能有变更,修改代码成本会增大,同时单体应用对资源有一定的要求。
微服务的动机,就是为了解决单体应用的不足,从而把单体应用拆分成多个微服务的情况下产生的。
三、微服务的定义
微服务的概念源于2014年3月Martin Fowler所写的文章。
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建。
如下是微服务架构的主要结构图:
微服务架构的优点与缺点
优点
小且专注于做好一件事情,每个服务内聚并且小。
独立部署,可以根据自己的需要部署到合适的硬件服务器上;
轻量级的通信机制;
松耦合,程序员可对单个服务进行开发、维护,同时每个服务可以采用不同语言开发;
缺点
依赖服务接口变更导致,服务接口管理麻烦,接口变更跟踪难度增大,依赖服务调试难度增大。
部分模块重复构建,安全认证,配置日志方面问题。
分布式带来的问题,事务问题,依赖服务间不稳定,需要引入异步模式。
运维复杂度加大,部署数量倍增,监控进程倍增,故障定位难,问题追溯难。
02
—
Springboot框架。
了解springcloud前先简单了解一下springboot框架。
springboot是由 Pivotal团队提供的新框架,它设计目的是用来简化新spring应用的初始搭建以及开发过程。它的核心思想就是约定大于配置,它使用了特定的方式来进行配置,简化开发人员的工作。其实:springboot并不是什么新框架,它其实整合了众多框架,像maven整合了很多jar一样,方便开发人员初始化工程和开发过程。
什么是springcloud?
springcloud在springboot的基础上提供了一系列针对分布式场景的基础设施。SpringCloud是一系列框架的有序集合,它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,它包含了服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等内容,它用 SpringBoot的开发风格做到一键启动和部署。Spring其实并没有重复制造轮子,它主要就是将各家开发的比较成熟服务框架组合起来,通过SpringBoot风格进行再封装、屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。大家可以理解springcloud是个类似“全家桶”套餐,大家想吃鸡腿吃鸡腿,想吃汉堡吃汉堡。
如下是springcloud组件架构图:
结合这张图介绍一下springcloud主要应用过程:
所有请求(来自移动端、客户端等)统一通过 网关服务(Zuul proxy)来访问内部服务。
网关接收到请求后,从注册中心(Eureka)获取可用微服务。
其中 Ribbon 主要用于均衡负载作用,它可以判断并分发具体的请求到后端的具体应用服务实例,起到分发压力的作用。
微服务(services)之间通过 Feign 进行通信处理业务,保持服务一致性。
Hystrix 负责处理服务超时熔断。
Turbine 监控服务间的调用和熔断相关指标。
从上面这张图主要可以看出springcloud 主要包含如下几下核心功能:
分布式/版本化配置。
服务注册和发现( Netflix Eureka)。
路由
服务和服务之间的调用。
负载均衡。
断路器 (Hystrix)
分布式消息传递 (bus)。
下面简单说一下这些核心功能以及都有具体是做什么用的:
Netflix Eureka:Eureka负责服务的注册于发现,如果学习过Zookeeper的话,就可以很好的理解,Eureka的角色和 Zookeeper的角色差不多,都是服务的注册和发现,构成Eureka体系的包括:服务注册中心、服务提供者、服务消费者。
Netflix Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。比如突然某个服务出现了故障,当请求多时,就会发生严重的阻塞影响整体服务的响应。Hystrix会发现某个不在状态不稳定服务,让其它服务调过来响应。
Netflix Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。可以实现动态获取配置,原理是每隔60s(默认,可配置)从配置源读取一次内容,这样修改了配置文件后不需要重启服务就可以使修改后的内容生效,前提使用archaius的API来读取。
Spring Cloud Config:俗称的配置中心,配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。方便以后统一管理、升级装备。
Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
Spring Cloud for Cloud Foundry:Cloud Foundry是VMware推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
Spring Cloud Cluster:Spring Cloud Cluster将取代Spring Integration。提供在分布式系统中的集群所需要的基础功能支持,如:选举、集群的状态一致性、全局锁、tokens等常见状态模式的抽象和实现。如果把不同的帮派组织成统一的整体,Spring Cloud Cluster已经帮你提供了很多方便组织成统一的工具。
Spring Cloud Consul:Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源. Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对.Spring Cloud Consul 封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
Springcloud还包含其它组件,咱们这里重点不再介绍.大家可以上网查一下