Spring Cloud
微服务简介
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
从两方面去理解微服务:
- 微: 小型、单一应用程序。
- 服务:一定要区别于系统,服务一个或者一组相对较小且独立的功能单元。
微服务与传统单体架构的区别
传统单体架构缺点:
-
复杂性逐渐变高
比如有的项目有几十万行代码,各个模块之间区别比较模糊,逻辑比较混乱,代码越多复杂性越高,越难解决遇到的问题。
-
技术债务逐渐上升
公司的人员流动是再正常不过的事情,有的员工在离职之前,疏于代码质量的自我管束,导致留下来很多坑,由于单体项目代码量庞大的惊人,留下的坑很难被发觉,这就给新来的员工带来很大的烦恼,人员流动越大所留下的坑越多,也就是所谓的技术债务越来越多。
-
部署速度逐渐变慢
这个就很好理解了,单体架构模块非常多,代码量非常庞大,导致部署项目所花费的时间越来越多,曾经有的项目启动就要一二十分钟,这是多么恐怖的事情啊,启动几次项目一天的时间就过去了,留给开发者开发的时间就非常少了。
-
阻碍技术创新
比如以前的某个项目使用struts2写的,由于各个模块之间有着千丝万缕的联系,代码量大,逻辑不够清楚,如果现在想用spring mvc来重构这个项目将是非常困难的,付出的成本将非常大,所以更多的时候公司不得不硬着头皮继续使用老的struts架构,这就阻碍了技术的创新。
微服务优点:
-
独立部署: 每个微服务都可以独立部署
-
容错:在微服务架构下,故障会被隔离在单个服务中
-
扩展:单块架构应用也可以实现横向扩展,就是将整个应用完整的复制到不同的节点
-
技术多样性: Dubbo, SpringCloud, Helidon, SOFAStack, Thrift……
微服务缺点:
-
运维成本高:微服务部署数量多,监控进程多导致整体运维复杂度提升。
-
接口的多版本开发:面向服务开发就是面向接口开发,一般接口的变更会导致多个客户端跟着改,这就必须做接口的多版本开发。
-
分布式系统的复杂性:本来一个系统,把他分成多份就会导致网络延迟、服务容错性、服务的负载均衡等等。
-
分布式事物:微服务开发带来的难题就是分布式事物的处理。
微服务与SOA的区别
-
目的不同:
SOA 服务化涉及的范围更广一些,强调不同的异构服务之间的协作和契约 ,并强调有效集成、业务流程编排、历史应用集成等,典型代表为 Web Service 和 ESB 。微服务使用 一系列的微小服务来实现整体的业务流程,目的是有效地拆分应用,实现敏 捷开发和部署。
-
部署方式不同:
微服务将完整的应用拆分成多个细小的服务,通常使用敏捷扩容、缩容的 Docker 技术来实现自动化的容器管理 , 每个微服务运行在单一 的进程内,微服务中的部署互相独 立、 互不影响。 SOA 服务化通常将多个业务服务通过组件化模块方式打包在一个 War 包里,然后统一 部署在一个应用服务器上。
-
服务植度不同:
微服务倡导将服务拆分成更细的粒度,通过多个服务组合来实现业务流程的处理,拆分 到职责单一 , 甚至小到不能再进行拆分。SOA 对粒度没有要求 , 在实践中服务通常是粗粒度的,强调接口契约的规范化,内部 实现可以更粗粒度。
常见微服务框架
-
Dubbo
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。简单的说,Dubbo 就是个服务框架,说白了就是个远程服务调用的分布式框架.
Dubbo特点:
- 远程通讯: 提供对多种基于长连接的 NIO 框架抽象封装(非阻塞 I/O 的通信方式,Mina/Netty/Grizzly),包括多种线程模型,序列化(Hessian2/ProtoBuf),以及“请求-响应”模式的信息交换方式。
- 集群容错: 提供基于接口方法的透明远程过程调用(RPC),包括多协议支持(自定义 RPC 协议),以及软负载均衡(Random/RoundRobin),失败容错(Failover/Failback),地址路由,动态配置等集群支持。
- 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
-
Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
核心功能:
- 分布式/版本化配置
- 服务注册和发现
- 路由
- 服务和服务之间的调用
- 负载均衡
- 断路器
-
分布式消息传递
完整技术图如下:
Spring Cloud VS Dubbo
Dubbo 只是实现了服务治理,而 Spring Cloud 子项目分别覆盖了微服务架构下的众多部件, 服务治理只是其中的一个方面。
下面,将从以下几个方面介绍 Spring Cloud 系列
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/71432.html