1-1.系统进化理论概述
在系统架构和设计的实践中,经历了两个阶段,一阶段是早些年常见的集中式系统,一阶段是今年来流行的分布式系统。
- 集中式系统
集中式系统也叫单体应用,就是把所有的程序、功能、模块都集中在一个项目中,部署在同一台服务器上,从而对外提供服务; - 分布式系统
分布式系统就是把所有的程序、功能拆成不同的子系统,部署在不同的服务器上,这些子系统相互协作共同向外提供服务,而对用户而言他并不知道后台是多个子系统和服务器在提供服务,在使用上和集中式系统一样;
集中是系统和分布式系统是两个相反的概念,他们的区别就是“合”与"分"。
1-2.系统进化理论背景
系统进化的背景与中国互联网用户规模庞大有巨大的关系,中国互联网用户规模有7.7亿,庞大的用户访问量对系统的架构设计是巨大的挑战。
产品或者网站初期,通常功能较少,用户量也不多,所以一般按照单体应用进行设计开发,按照经典的MVC三层架构设计。
随着业务的发展,应用功能的增加,访问用户的增多,传统的采用集中式系统进行开发的方式就不再实用了,因为在这种情况下,集中式系统就会逐渐变的非常庞大,很多人维护这么一个系统,开发,测试,上线都会造成很大问题,比如代码冲突,代码重复,逻辑错综混乱,代码逻辑复杂度增加,响应新需求的速度降低,隐藏的风险增大。
所以需要按照业务维度进行应用拆分,采用分布式开发,每个应用专职做某一些方面的事,比如一个集中式系统拆分为用户服务、订单服务、产品服务、交易服务等,各个应用之间通过相互调用完成某一项业务功能。
1-3. 什么是微服务架构
分布式强调系统的拆分,微服务也是强调服务的拆分,微服务架构属于分布式架构的范畴。
到目前为止,微服务并没有一个统一的标准定义,那么微服务究竟是什么呢?
简单的来说,微服务就是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都各自独立的进程中运行,服务之间通过基于HTTP的RESTFUL API进行通信协作;
被拆分后的每一个小型服务都围绕着系统中的某一项业务功能进行构建,并且每一个服务都是独立的项目,可以进行独立测试、开发和部署等。
由于独立的服务之间是基于HTTP的 JSON作为数据通讯协作的基础,所以微服务可以使用不同语言来开发。
1-4.微服务架构的优缺点
- 优点
- 我们都知道微服务架构是将系统中的不同功能模块拆分成不同的服务,这些服务都能进行独立开发和部署,每个服务都运行在自己的进程里,这样每个服务的更新都不会影响其他服务。
- 由于每个服务都是独立部署的,所以我们可以更准确地监控每个服务的资源消耗情况,进行性能的评估,通过压力测试,也很容易发现各个服务之间的性能瓶颈所在。
- 由于每个服务都是独立开发的,项目的开发比较方便,减少代码的冲突,代码的重复,逻辑处理流程更加清晰,让后续的维护和扩展更加容易。
- 微服务可以使用不同的语言开发
- 缺点
- 微服务架构增加了系统维护、部署的难度,导致一些功能模块或代码无法复用;
- 随着系统规模日渐增长,微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度。
- 随着微服务的增多,数据的一致性问题,服务之间的通讯成本等都凸显出来;
所以在系统架构时也要提醒自己:不要为了微服务而服务。
1-5.为什么要选择Spring Cloud 构建微服务
微服务一词是Martin Fowler(马丁·福勒)于2014年提出来的,近几年微服务架构的讨论非常火热,无数的架构师和开发者在实际项目中实践着微服务架构的设计理念, 他们在微服务架构中针对不同应用场景出现的各种问题,也推出了很多解决方案和开源框架,其中在我们国内的互联网企业也有一些著名的框架和方案;
服务基础开发 | Spring MVC、Spring 、SprinBoot |
---|---|
服务注册与发现 | Netflix的Eureka、Apache的Zookeeper等 |
服务调用 | PRC调用有阿里巴巴的Dubbo,Rest方式调用有当当网Dubbo基础扩展的Dubbox、还有其它方式实现的Rest、比如Ribbon 、Feign |
分布式配置管理 | 百度的Disconf、360的QConf、淘宝的Diamond、Netflix的Archaius等 |
负载均衡 | Ribbon |
服务熔断 | Hystrix |
API网关 | Zuul |
批量任务 | 当当网的Elastic-Job、Linkedln的Azkaban |
服务跟踪 | 京东的Hydra、Twitter的ZipKin等 |
但是在微服务架构上,几乎大部分的开源组件都只能解决某一场景下的问题,所以这些实施微服务架构的公司也是整合来自不同公司或组织的诸多开源框架,并加入针对自身的一些改进,没有一个统一的架构方案。
所以我们准备实施微服务框架时,我们要整合各个公司或组织的开源软件,而某些开源框架又有多种选择,这导致在做技术选型的初期,需要花费大量的时间进行预调研、分析和实验,这些方案的整合没有得到充分的测试,可能在实践中遇到各种各样的问题。
Spring Cloud的出现,可以说是为微服务框架迎来了一缕曙光,有Spring Cloud社区的巨大支持和技术保障,让我们在实施微服务框架变得异常简单起来,它不像我们之前所列举的那些框架一样,只是解决微服务中的某一个问题,而是一个解决微服务框架实施的综合性解决框架,它整合了诸多被广泛实践和证明有效的框架作为实施的基础组件,又在该体系基础上创建了一些非常优秀的边缘组件将它们很好的整合起来。
加之Spring Cloud 有其 Spring 的强大技术背景,极高的社区活跃度,也许未来Spring Cloud 会成为微服务的标准技术解决方案。