什么是微服务?
1、什么是微服务?
微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。
2、单体架构
2.1 什么是单体架构
在软件设计的时候经常使用经典的3层模型,即表现层,业务逻辑层,数据访问层。虽然在软件设计中划分了3层模型,但是对业务场景没有划分,一个典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。此时服务架构如图:
2.2 单体架构存在的不足
在小型应用的初期,访问量小的时候这种架构的性价比还是比较高的,开发速度快,成本低,但是随着业务的发展,逻辑越来越复杂,代码量越来越大,代码得可读性和可维护性越来越低。用户的增加,访问量越来越多单体架构的应用并发能力十分有限。
单体架构进价——集群:将单体应用进行集群部署,并增加负载均衡服务器,再来个缓存服务器和文件服务器,数据库再搞个读写分离。这种架构如下图所示:
这种架构虽然有一定的并发能力,及应对一定复杂业务,但是依然没有改变系统为单体架构的事实。大量的业务必然会有大量的代码,代码得可读性和可维护性依然很差。如果面对海量的用户,它的并发能力依然不够。基于以上单体架构系统的不足,提出了微服务架构。
3、微服务架构
3.1 什么是微服务架构?
微服务架构就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信,通常是HTTP RESTFUL API。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。
总体而言,微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过HTTP协议进行通信(也可以采用消息队列来通信,如RoocketMQ,Kafaka等),可以采用不同的编程语言,使用不同的存储技术,自动化部署(如Jenkins)减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。例如Eureka,Zookeeper等都是比较常见的服务集中化管理框架。
3.2 微服务的优势
(1)将复杂的业务拆分成多个小的业务,每个业务拆分成一个服务,将复杂的问题简单化。利于分工,降低新人的学习成本。
(2)微服务系统是分布式系统,业务与业务之间完全解耦,随着业务的增加可以根据业务再拆分,具有极强的横向扩展能力。面对搞并发的场景可以将服务集群化部署,加强系统负载能力。
(3)服务间采用HTTP协议通信,服务与服务之间完全独立。每个服务可以根据业务场景选取合适的编程语言和数据库。
(4)微服务每个服务都是独立部署的,每个服务的修改和部署对其他服务没有影响。
另述:
(1)降低单个服务复杂度
将原来偶合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。每个服务开发者只专注服务本身,通过使用缓存、DAL等各种技术手段来提升系统的性能,而对于消费方来说完全透明。
(2)独立部署
由于微服务具备独立的运行进程,所以每个微服务可以独立部署。当业务迭代时只需要发布相关服务的迭代即可,降低了测试的工作量同时也降低了服务发布的风险。
(3)容错性高
在微服务架构下,当某一组件发生故障时,故障会被隔离在单个服务中。 通过限流、熔断等方式降低错误导致的危害,保障核心业务正常运行。
(4)可扩展性
单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
3.3 微服务和SOA的关系
SOA即面向服务的架构,SOA是根据企业服务总线(ESB)模式来整合集成大量单一庞大的系统,微服务可以说是SOA的一种实现,将复杂的业务组件化。但它比ESB实现的SOA更加的轻便敏捷和简单。
4 常用的微服务框架
4.1 dubbo
dubbo是阿里开源的微服务框架,是一款高性能、轻量级的开源Java RPC框架,提供三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现
目前已经正式进入Apache孵化器
核心概念:
(1)Provider 暴露服务的服务提供方;
(2)Consumer 调用远程服务的服务消费方;
(3)Registry 服务注册与发现的注册中心;
(4)Monitor 统计服务的调用次数和调用时间的监控中心。
4.2 SpringCloud
SpringCloud一系列框架的有序集合。利用SpringBoot简化分布式系统的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。它将目前各家公司开发的比较成熟服务框架组合起来,通过SpringBoot风格再封装屏蔽了复杂的配置和实现原理,给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。目前以SpringCloud为主流。
核心组件:
(1)Netflix Eureka 服务注册与发现
(2)Netflix Ribbon 客户端负载均衡
(3)Netflix Hystrix 服务熔断
(4)Netflix Zuul 服务网关
(5)Spring Cloud Config 分布式配置
声明:上述部分内容整理自网络,仅作为本人学习使用,侵删。
本文参考链接:
https://mp.weixin.qq.com/s/3LACyYvbDxl8X5DIN18Y_w
https://blog.csdn.net/zhouping118/article/details/86577557