目录
什么是微服务?
强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭义的看,可以看作是IDEA中的一个个微服务工程,或者Moudel。IDEA 工具里面使用Maven开发的一个个独立的小Moudel,它具体是使用SpringBoot开发的一个小模块,专业的事情交给专业的模块来做,一个模块就做着一件事情。强调的是一个个的个体,每个个体完成一个具体的任务或者功能。
什么是微服务架构?
微服务架构是一种架构模式,或者说是一种架构风格,它体长将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻量级的通信机制(HTTP)互相沟通,每个服务都围绕着具体的业务进行构建,并且能被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应该根据业务上下文,选择合适的语言,工具(Maven)对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
从技术维度角度理解:
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己独立的数据库。
微服务优缺点
优点:
单一职责原则;
每个服务足够内聚,足够小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求;
开发简单,开发效率高,一个服务可能就是专一的只干一件事;
微服务能够被小团队单独开发,这个团队只需2-5个开发人员组成;
微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的;
微服务能使用不同的语言开发;
易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如jenkins,Hudson,bamboo;
微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值;
微服务允许利用和融合最新技术;
微服务只是业务逻辑的代码,不会和HTML,CSS,或其他的界面混合;
每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库;
缺点:
开发人员要处理分布式系统的复杂性;
多服务运维难度,随着服务的增加,运维压力增大;
系统部署依赖问题;
服务间通信成本问题;
数据一致性问题;
系统集成测试问题;
性能和监控问题;
微服务技术栈有那些?
Rest服务及条件
rest服务:是一种Web服务架构,其目标是为了创建具有良好扩展性的分布式系统。
rest应该具备以下条件:
使用客户/服务器模型(简称C/S结构,是一种网络架构,它把客户端 (Client) 与服务器(Server) 区分开来。 每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。)
例如前后端分离,页面和服务不在同一服务器上运行。
层次化的系统
例如一个父系统下有多个子模块,每个模块都是独立的服务。
无状态
服务端并不会保存有关客户的任何状态,也就是说要服务后端服务,就要带token过去。
可缓存
例如服务端通过token缓存已登录过的用户信息,客户端请求会带一个token过来,后台服务通过带过来的token在缓存中取出用户信息,提高效率。
统一的接口
例如,一个项目的所有模块都整合到一起,all-in-one,打成一个包,多个服务,整合到一个端口下。
Eureka原理及作用:
采用C-S的架构设计,含两个组件:Eureka Server 和 Eureka Client(服务消费者和服务提供者)EurekaServer作为服务注册功能的服务器,他是服务注册中心
Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
Eureka架构中的三个核心角色:
服务注册中心(Eureka Server):
Eureka的服务端应用,提供服务注册和发现功能。
Eureka Server 提供服务注册,各个节点启动后,回在EurekaServer中进行注册,这样Eureka Server中的服务注册表中将会储存所有课用服务节点的信息,服务节点的信息可以在界面中直观的看到.
服务提供者(Eureka Client):
提供服务的应用,可以是任意技术实现,只要对外提供的是Rest风格服务即可。
服务的提供者,会将自身注册到注册中心(Eureka Server),提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。
Renew: 服务续约
Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。
服务消费者(Eureka Client):
消费应用从注册中心获取服务列表,从而得知每个服务方的信息,知道去哪里调用服务方。实现服务远程调用。
总结:
Eureka实质上是一个注册服务中心,实现了服务的自动注册、发现、状态监控。
Eureka Server 提供服务注册:客户端的各个节点启动后,会在EurekaServer中进行注册,在Eureka Server中形成一个服务注册表来储存所有服务节点的信息(ip、端口、提供的服务等),服务节点的信息可以在界面中直观的看到。
另外Eureka Server服务端还可以对客户端进行状态监控:Eureka Client 每隔 30 秒发送一次心跳来续约,通过续约告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除。
Eureka服务端可以对服务消费者提供发现服务:服务端注册表中记录了各个客户端的服务节点等信息,服务服务消费者,在调用服务时无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会返回符合要求的服务的标识符。这样通过标识符就可以访问到服务,而不需要修改服务调用的配置文件了。
Gateway原理及作用
API
即封装好的的代码,提供给外部使用接口。使用者不需要知道其原理,同时保证了代码的安全性
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
网关(Gateway):
又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。
API 网关定义
API网关职能
最重要的几个概念:
Config配置中心(集中式动态的配置管理)
简介
springcloud config 项目是一个解决分布式系统的配置管理方案。它包含了 client 和 server 两个部分,server 端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client 端通过接口获取数据、并依据此数据初始化自己的应用
目前 springcloud config 的使用主要是通过 git/svn 方式做一个配置中心,然后每个服务从其中获取自身配置所需的参数
springcloud config 也支持本地参数配置的获取。如果使用本地存储的方式,在 application.properties 或 application.yml 文件添加 spring.profiles.active=native 配置即可,它会从项目的 resources 路径下读取配置文件。如果是读取指定的配置文件,那么可以使用 spring.cloud.config.server.native.searchLocations = file:D:/properties/ 来读取
架构
springcloud config 分为服务端和客户端,服务端负责将本地 git 或者 svn 中存储的配置文件发布成 REST 风格的接口,客户端可以从服务端 REST 接口获取配置。但客户端并不能主动感知到配置的变化,从而主动去获取新的配置,这需要每个客户端通过 POST 方法触发各自的 /refresh 接口
作用
简单一点的说就是:在分布式环境中,很多的集群部署的服务都需要相同的配置文件。 使用springcloud config 这个组件可以进行众多配置文件的统一管理。这使得我们在需要修改配置文件时只需要在远程的 gitHub 等工具上面修改即可,不用多次的在众多的配置文件中来回繁琐的修改
集中式管理配置文件
不同环境,不同配置,动态化的配置更新,分环境部署,比如 /dev /test /prod /beta /release
运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置
将配置信息以REST接口的形式暴露
POM文件
pom文件的作用:
Maven 是专门用于构建和管理Java相关项目的管理工具。
1.使用Maven管理的Java 项目都有着相同的项目结构
2.统一维护jar包
POM是项目对象模型(Project Object Model)的简称
该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
使用groupdId:artifactId:version的形式来唯一确定一个项目
POM之间的关系,继承、聚合与依赖
继承:子项目继承父项目的pom.xml,在子项目中定义父项目
依赖:一个dependency元素定义一个依赖关系
聚合:聚合和关联多个项目中相同的配置,在被聚合项目中定义其子模块
以使用${propertyName}的形式引用属性
<modelVersion>4.0.0</modelVersion> :指定了当前Maven模型的版本号,
对于Maven2和Maven3来说,它只能是4.0.0,pom必须遵守一个模型,
它总是设置为4.0.0在Maven 2和3,因为,目前,没有其他模型
pom.xml的坐标说明:
坐标的作用:
可以唯一标识项目的路径
坐标是将来项目打包的位置
jar包文件可以被其他项目依赖