在java开发中最初是单机版的,也就是所有的业务模块全部都在一个项目中,但是随着业务的复杂度提高以及各种性能问题的产生,单机版的应用越来越难以维护,于是就提出了分布式的概念,就是将原来的一个巨大的工程拆分成多个小的项目,也就是微服务。有了分布式,就可以让专门的项目做专门的业务。
微服务是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程(注意,每个服务都有自己单独的进程)中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)(通信机制是springcloud与dubbo的本质区别,dubbo的通信机制是RPC远程过程调用协议)。每个服务围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
微服务架构的特点:系统高可用、系统高扩展性、快速迭代、持续交付。
整体设计:水平分层、垂直业务拆分。(如用户、商品、支付等)
通信协议:可以是RPC远程过程调用,也可以通过消息队列实现通信。
服务治理:监控:1.机器资源(CPU,磁盘,网络等)2.进程状态
实现微服务时,常用的是springcloud和dubbo。
dubbo是阿里巴巴开发的,后来停止维护了一段时间,之后被apache作为顶级项目进行维护,主要是服务治理方面做的比较好。dubbo是一款高性能、轻量级(轻量级要求与语言无关、与平台无关)的开源java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
springcloud作为spring的全家桶,延续了spring的风格,集成了很多方面的维护,对服务的管理提供了很多方便。在springcloud中使用eureka作为服务注册和服务发现中心,对服务提供者和服务消费者进行管理。使用Ribbon进行负载均衡以及Hystrix处理分布式系统的延迟和容错。