前言
我们新手以前学习的开发简易的web项目,就是使用SSH、SSM等框架技术创建的一个单体架构。单体架构,也就是一个war包或者jar包里面包含一个应用的所有功能,并部署到tomcat容器上使用。这个架构创建的项目比较简单,能够快速开发并上线,而等我们业务功能比较复杂,比较大型的项目后,会遇到很多问题。
一、SOA
集群和垂直化
如今用户量稍大的系统项目,由着产品被越来越多的用户使用,那么就会面临许多问题:
- 用户量越来越大,网络访问量不断增大,导致后端服务器的负载越来越高。
- 用户量大了,产品需要满足不同用户的需求来留住用户,使得业务场景越来越多并且越来越复杂。
- 当服务器的负载越来越高的时候,如果不进行任何处理,用户在网站上操作的响应会越来越慢,甚至出现无法访问的情况,对用户体验很差。
- 业务的场景越多越复杂,意味着war包、jar包中的代码量会持续上升,并且各个业务代码之间的耦合度也会越来越高,后期的代码维护和版本发布涉及的测试和上线,也会很困难。比如,当你需要在某个模块里面添加一个方法时,带来的影响是需要把整个系统重新测试和部署,而当一个war包有几GB的大小时,部署的过程也是相当麻烦的。
所以我们从两个方面优化:集群和垂直化
- 通过横向增加服务器,把单台机器变成多台机器的集群。
- 按照业务的垂直领域进行拆分,减少业务的耦合度,以及降低单个war包带来的伸缩性困难问题。
SOA
SOA (Service-Oriented Architecture ),也就是面向服务的架构,是一种软件组建及开发的方式。核心目标是把一些通用的、会被多个上层服务调用的共享业务提取成独立的基础服务。这些被提取出来的共享服务相对来说比较独立,并且可以重用。所以在SOA中,服务是最核心的抽象手段,业务被划分为一些粗粒度的业务服务和业务流程。
OA主要解决的问题是:
- 信息孤岛。
- 共享业务的重用。
共享业务的重用:
举个例子,在我们的快递系统中,用户进行快递取件操作时,系统需要先查询是否有该用户的快递。而这个快递查询逻辑功能是需要放在快递库存系统中,还是取件系统中呢。我们通常的做法是,在各个需要此逻辑功能的地方,都添加这个逻辑功能。
而整个快递系统中会存在许多的快递查询业务,这中大量被需求的业务会在多个场景下被创建,从而产生大量冗余的代码,这些冗余的代码随时间推移与业务功能的增多维护成本也会越来越高,所以我们需要将这类被大量使用的重复业务逻辑抽离出来,进行一个重用业务的共享。
信息孤岛:
在一个集团公司下有很多子公司,每个子公司都有自己的业务模式和信息沉淀,各个子公司之间不进行交互和共享。这个时候每个子公司虽然能够创造一定的价值,但是由于各个子公司之间信息不是互联互通的,彼此之间形成了信息孤岛,使得价值无法最大化。
二、微服务架构
概念
微服务架构是一种解决方案,用于业务系统实施服务化改造之后,原本共享的业务被拆分形成可复用的服务,可以在最大程度上避免共享业务的重复建设、资源连接瓶颈瓶颈等问题。被拆分出来的服务需要以业务功能为维度来进行拆分和独立部署,以降低业务的耦合及提升容错性。
微服务架构与SOA
面向服务(SOA)和微服务本质上都是服务化思想的一种体现。SOA是面向服务开发的思想模型,而微服务架构就是服务化思想的一种体现,相当于SOA是微服务架构的超集。实现微服务的前提是软件交付链路及基础设施的成熟化,它的本质是服务化思想的一个比较好的实现方向。
SOA与微服务主要区别:
- SOA关注的是服务的重用性及解决信息孤岛问题。
- 微服务关注的是解耦,虽然解耦和可重用性从特定的角度来看是一样的,但本质上是有区别的,解耦是降低业务之间的耦合度,而重用性关注的是服务的复用。
- 微服务会更多地关注在DevOps的持续交付上,因为服务粒度细化之后使得开发运维变得更加重要,因此微服务与容器化技术的结合更加紧密。
特点
- 注册中心:服务提供者和消费者,能够从注册中心注册和得到服务信息。
- 配置中心:在微服务架构中设计服务较多需要对于配置文件统一管理。
- 服务链路追踪:对于服务之间的负载调用,要能通过链路追踪,得到具体参与者,调用链路出现问题能够快速定位。
- 负载均衡:服务调用服务会采用一定的负载均衡策略,来保证服务的高可用。
- 服务容错:通过熔断、降级服务容错策略,对系统进行有效的保护,降级是在服务或依赖的服务异常时,返回保底数据,熔断是指依赖服务多次失效,则熔断器打开,不再尝试调用,直接返回降级信息。熔断后,定期探测依赖服务可用性,若恢复则恢复调用。
- 服务网关:用户请求过载时进行限流、排队、过载保护、黑白名单、异常用户过滤拦截等都可以通过服务网关实现。
- 服务发布与回滚:蓝绿部署、灰度、AB Test等发布策略,可快速回滚应用。
- 服务动态伸缩、容器化:根据服务负载情况,可快速手动或自动进行节点增加和减少。
三、Spring Cloud简介
Spring Cloud是Spring提供的微服务框架。它利用Spring Boot的开发特性简化了微服务开发的复杂性,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,这些工作都可以借助Spring Boot的开发风格做到一键启动和部署。
Spring Cloud的目标是通过一系列组件,帮助开发者迅速构件一个分布式系统,Spring Cloud 是通过包装其它公司产品来实现的,比如Spring Cloud整合了开源的Netflix很多产品。Spring Cloud提供了微服务治理的诸多组件,例如服务注册和发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等。
Spring Cloud架构图:
Spring Cloud 产品:
最后就不再进行展示微服务架构项目的搭建具体过程了。