微服务(不是一个框架 而是一种架构思想),是著名的 oo (面向对象, ObjectOriented )专家 Martin Fowler 提出来的,它是用来描述将软件应用程序设计为独立部署的服务的种特殊方式。最近两年,微服务在各大技术会议、文章、书籍上出现的频率已经让人意识到它对于软件领域所带来的影响力。微服务架构的系统是个分布式系统,按业务领域划分为独立的服务单元,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
简而言之,就是奖一个大的应用,拆分成多个小的模块,每个模块都有自己的功能,每个模块可以相互调用和交互,这就是微服务。
微服务架构的风格,就是将单一程序开发成一个微服务每个微服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP RESTFUL API 。这些服务围绕业务能力来划分构建的,并通过完全自动化部署机制来独立部署这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。
1.业务越来越复杂,单体应用的代码量越来越大,代码的可读性、可维护性和可扩展性下降新人接手代码所需的时间成倍增加,业务扩展带来的代价越来越大。
2.随着用户越来越多,程序承受的并发越来越高,单体应用的并发能力有限。
3.测试的难度越来越大,单体应用的业务都在同个程序中,随着业务的扩张、复杂度的增加单体应用修改业务或者增加业务或许会给其他业务带来定的影响,导致测试难度增加。
1.按业务(功能)划分为一个独立运行的程序,即服务单元
2.服务之间通过 HTTP 协议相互通信。 http 是一个万能的协议 (web 应用都支持的模式)
3.自动化部署。(CI/CD——持续集成,持续交付,目前用得最多的:Jenkins)
4.可以用不同的编程语言。
5.可以用不同的存储技术,通过http调用各个服务的接口。
6.服务集中化管理。
7.微服务是一个分布式系统。
凡是都具有双面性,微服务不例外,微服务相对单体项目,还是有很多优势的,当然它也有不足。
1.微服务比较单体,复杂度提升,学习成本较高
2.分布式事务问题
3.服务之间的划分(是按照功能划分还是按照组件划分呢)?分工问题
4.服务的部署复杂度提升。
总结三大难题:服务故障的传播性(熔断)、服务的划分、分布式事务
不过综合优缺点,微服务还是利大于弊的,中大型公司及新开发的项目使用微服务是大势所趋的。
Spring cloud 作为 Java 语言的微服务框架,它依赖于 Spring Boot,有快速开发、持续交付和容易部署等特点。 spring cloud 的组件非常多,涉及微服务的方方面面,井在开源社区 Spring和 Netflix、 pivotal 两大公司的推动下越来越完善,如今 alibaba 也加入到其中。
spring 官方 netflix alibaba Spring cloud 在开发部署上继承了 Spring Boot 的一些优点,提高其在开发和部署上的效率。 Spring cloud 的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。
spring cloud 是通过包装其他技术框架来实现的,例如包装开源的 Netflix oss 组件,实现了一套通过基于注解、 Java 配置和基于模版开发的微服务框架。
spring cloud 提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现配置中心、熔断器、远程调用,智能路由、微代理、控制总线、全局锁、分布式会话等。
服务的注册和发现 (eureka,nacos,consul)
服务的负载均衡 (ribbon,dubbo)
服务的相互调用 (openFeign,dubbo)
服务的容错 (hystrix,sentinel)
服务网关 (gateway,zuul)
服务配置的统一管理(config-server,nacos,apollo)
服务消息总线(Bus)
服务安全组件 (security,Oauth2.0)
服务监控 (admin) (jvm)
链路追踪 (sleuth+zipkin)
SpringCloud 就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能目前开发中常用的落地实现有三种:
Dubbo+Zookeeper 半自动化的微服务实现架构
SpringCloud Netflix 一站式微服务架构
SpringCloud Alibaba 新的一站式微服务架构